전체 글

전체 글

    JPA 영속성 컨텍스트(Persistence Context)의 5가지 특징

    JPA 영속성 컨텍스트(Persistence Context)의 5가지 특징

    예제 및 테스트 코드는 github 에서 확인 가능합니다.영속성 컨텍스트 특징1차 캐시변경 감지 (Dirty Checking)동일성 보장지연 로딩(Lazy Loading)쓰기 지연1차 캐시영속성 컨텍스트 내부에서 엔티티를 캐시로 저장하는 것일반적으로 @Transactional 어노테이션과 라이프사이클이 동일함OSIV(Open Session In View) 가 true 라면 ServiceLayer 에서@Transactional 이 종료되어도 PresentationLayer 까지도 1차 캐시는 유지됨Jpa 는 데이터 조회시 캐시를 우선적으로 조회하고 캐시에 데이터가 없으면 DB를 조회함@Transactionalpublic Team findTeam(Long id) { return teamRepositor..

    JPA 영속성 컨텍스트(Persist Context)에 대해 알아보자

    JPA 영속성 컨텍스트(Persist Context)에 대해 알아보자

    영속성 컨텍스트란 ?엔티티를 관리하고 저장하는 환경Jpa 어플리케이션과 Database 사이에서 객체를 관리하는 논리적 개념엔티티의 생명주기비영속 (new/tansient)영속(managed)준영속(detached)삭제(removed) Team.java@NoArgsConstructor@Entity@Getterpublic class Team { public Team(String name) { this.name = name; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name;}비영속 (new/transient)영속화 되기 전의 상태순수한 Enti..

    OCP(Open-Close-Principle) 개방 폐쇄 원칙이란?

    OCP(Open-Close-Principle) 개방 폐쇄 원칙이란?

    예제 및 테스트 코드는 github 에서 확인 가능합니다.OCP (Open Closed Principle) 정의개방 폐쇄 원칙소프트웨어 개체는 확장에 열려있어야 하고 수정에는 닫혀있어야 한다는 원칙.OCP (개방 폐쇄 원칙)의 의미어떤 기능에 대해 추가 요구사항이 나타나도 그 기능을 사용하는 기존 코드는 수정되지 않아야 한다는 의미입니다.확장되는 기능이 기존 코드와 의존을 하게되면 추가되는 요구사항에 유연하지 못하고개발자가 유지보수하는데 어려움이 있습니다.예제 코드OCP (개방 폐쇄 원칙) 을 준수하지 않은 예시와 준수한 예시 두가지를 들어 비교해보겠습니다스카이스캐너 , 마이리얼트립에서 제공하는 항공편 예약 서비스를 만든다고 가정해보겠습니다.그렇다면 예약을 하기 위해서는 각 항공사와 예약에 관련된 api..

    Spring @Valid Annotation을 이용한 유효성 검증과 예외처리

    Spring @Valid Annotation을 이용한 유효성 검증과 예외처리

    예제 및 테스트 코드는 github 에서 확인 가능합니다.Valid 사용하기Spring 에서는 유효성 체크를 위하여 @Valid annotation 을 지원합니다.Valid는 JSR-303(Bean Validation) 표준 스펙으로서 제약조건이 있는 객체에게 Bean Validation 을 이용해 조건을 검증하는 어노테이션입니다.사용 예제환경Spring boot 2.6.2java11build.gradle// gradleimplementation('org.springframework.boot:spring-boot-starter-validation')valid 를 사용하기 위해 위 의존성을 추가합니다. spring boot 2.3 이상부터는 spring-boot-starter-web 의존성 내부에 있던 v..

    MapStruct를 이용해 객체를 변환하는 방법

    MapStruct를 이용해 객체를 변환하는 방법

    예제 및 테스트 코드는 github 에서 확인 가능합니다.개요코드를 작성하다보면 Layer를 전환하며 객체를 전환하며 매핑하거나 여러 객체를 합치거나 하는 다양한 경우를 만나게 됩니다.흔히 겪는 예시로는 presentation layer 에서는 DTO , service layer , repository layer 에서는 Entity 를 사용하는 예시를 들 수 있습니다.이를 매핑하기 위해서는 model mapper , 정적 팩토리 , object mapping 등의 방법을 다양한 이용해 모델을 매핑하고 있습니다.저는 제가 사용하는 mapstruct 에 대해 간략하게 소개하려고 합니다.mapstructmapstruct github page에서는 mapstrut를 다음과 같이 소개하고 있습니다.간략하게 요약하..