원시 값 포장이란? Int, String 과 같은 원시 타입, 문자열 변수를 변수명을 이용해 의미를 나타내지 않고, 의미있는 객체로 포장한다는 개념을 의미합니다. 원시 값 및 문자열을 포장하는 이유 코드에서 원시 값과 문자열을 포장하면 다음과 같은 이점을 얻을 수 있습니다.타입 안전성명확한 책임 분리 타입 안정성class User(val email: String, val password: String) {}fun main() { val user1 = User("email", "password") // 의도한 대로 객체 생성 val user2 = User("password", "email") // 값이 뒤바뀐 객체 생성} email과 password 모두 String 타입이기 때문에,email이 들어가야 ..
코틀린(Kotlin)이란?코틀린은 젯브레인(JetBrains)에서 개발한 현대적이고 간결한 프로그래밍 언어입이다.JVM(Java Virtual Machine)위에서 실행되기 때문에 자바와 100% 호환되는 특징을 지니고 있습니다. 따라서 자바가 사용되고 있는 모든 환경에서 안전하고 효율적인 대체 언어로 활용될 수 있습니다. 코틀린 주요 특성정적 타입 지정 언어 + 타입 추론 가능타입을 컴파일 시점에 알 수 있으며, 컴파일러가 컴파일 시점에 타입을 검증해줍니다. (자바와 동일) 자바랑 다른 점은 모든 변수의 타입을 직접 명시하지 않아도 됩니다.컴파일러가 문맥을 고려해 변수 타입을 결정하는 타입 추론 기능을 제공합니다. 따라서 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 때문에 타입 ..
들어가며현재 콩콩밥밥이라는 스터디를 통해 초록 스터디의 스프링 기초 과정에 참여하고 있습니다.그리고 아래와 같은 요구사항이 주어졌습니다.어드민 페이지 진입은 admin권한이 있는 사람만 할 수 있도록 제한하세요.HandlerInterceptor를 활용하세요.저는 원래 인증과 인가 처리를 주로 필터를 통해 수행하는 것만 알고 있었습니다.하지만 이번 미션을 계기로 인터셉터를 공부하게 되었고, 필터와 인터셉터가 모두 공통 관심 사항을 처리한다는 점에서 비슷한 목적을 가지고 있다는 것을 알게 되었습니다.따라서 어떤 상황에서 필터 또는 인터셉터를 선택해야 할지 고민하게 되었고, 이에 두 방식의 차이점 및 활용 시점에 대해 정리하여 글로 작성해 봅니다. Filter란?Dispatcher Servlet에 요청이 전달..
들어가며스프링을 사용할 때, ResponseEntity 객체를 통해 클라이언트에게 응답을 보내본 경험이 많으실 겁니다.클라이언트에게 데이터를 전달할 때, 단순히 객체만 반환하지 않고 왜 ResponseEntity를 사용하여 응답을 구성할까요?이에 대한 궁금증을 해결하고자 글을 작성합니다. ResponseEntity란?ResponseEntity는 HttpEntity를 상속받아 구현된 클래스로, 본문(HttpBody),헤더(HttpHeaders),HTTP 응답의 상태 코드(HttpStatus)를 포함합니다. ResponseEntity 클래스를 살펴보면, 사진과 같이 status(HTTP 상태 코드) 만 자체 필드로 가지고 있습니다.나머지 두 필드인 headers(헤더) 와 body(본문) 는 상위 클래스인..
테스트 더블이란?외부 의존성이 있는 코드나 복잡한 비즈니스 로직을 테스트할 때, 실제 객체를 사용할 경우 테스트가 어려워지거나 비효율적일 수 있다. 테스트 더블은 테스트 진행이 어려운 상황에서 이를 대신해 테스트를 수행할 수 있도록 만들어진 객체를 의미한다.쉽게 이해할 수 있는 예로는 스턴트맨이 있다.스턴트맨은 배우를 대신해 특정 상황에서 연기를 수행하는데, 이를 영어로 스턴트 더블이라고 한다.이 개념을 테스트에 적용하면 테스트 더블이 된다. 테스트 더블 종류Dummy: 아무 것도 하지 않는 깡통 객체객체는 존재하지만 내부는 비어있을 수 있어 정상 동작은 보장하지 않는다.Fake: 단순한 형태로 동일한 기능을 수행하나, 프로덕션에서 쓰기에는 부족한 객체(e.g., FakeRepository-메모리 맵)S..
들어가며현재 콩콩밥밥이라는 스터디를 통해 초록 스터디의 스프링 입문과정에 참여하고 있습니다.미션을 구현하는 중 InvalidDefinitionException 에러를 만났습니다.그 이유는 객체 내 필드 접근이 불가하여 직렬화(JSON->객체로 변환)를 할 수 없었기 때문에 발생했습니다. com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class roomescape.entity.Reservation and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EM..
들어가며객체지향 설계 과정은 왜 필요할까?그 이유는 지속적으로 변화하는 요구사항에 유연하게 대응하며 코드를 작성하기 위해서다.예를 들어, 카페 포스기 프로그램을 생각해보자.신메뉴가 추가되거나, 이벤트로 인해 특정 메뉴에 할인을 적용해야 하는 상황 등이 발생할 수 있다.이러한 다양한 요구사항이 발생하더라도 최소한의 코드 수정으로 적은 시간 내에 프로그램이 안정적으로 동작하도록 만드는 것이 중요하다. 나는 객체지향 설계가 이런 변화에 강한 코드를 효율적으로 작성할 수 있게 도와준다고 생각한다.따라서 코드를 객체 지향적으로 작성하는 것은 매우 중요하며, 이를 위해 객체 지향 설계 5가지 원칙에 대해 알아보려 한다. SOLID1️⃣ 단일 책임 원칙(SRP, Single Responsibility Principl..
Presigned URL 이란? Presigned URL은 Amazon S3 객체에 대해 임시로 제한된 시간 동안 액세스 권한을 부여하는 서명된 URL입니다.이를 통해 사용자는 AWS 보안 자격 증명이나 권한 없이도 지정된 시간 동안 객체를 다운로드하거나 업로드할 수 있습니다. 즉, 클라이언트는 서버를 거치지 않고 S3 버킷에 직접 접근하여 파일을 업로드하거나 다운로드할 수 있습니다. Presigned URL 적용 이유 아래와 같이 서버에서 S3 버킷에 직접 파일을 업로드 하는 방식은 간단하게 구현할 수 있지만 몇 가지 단점이 존재합니다.현재 저희 프로젝트는 파일을 빈번히 업로드 해야 하기 때문에(예: 프로필 이미지 업로드, 게시글 업로드 시 여러 개의 파일 업로드 허용) 아래의 단점들을 극복하고자 Pr..