🌱 SPRING

    [Spring Data JPA] Auditing에 ZonedDateTime 사용하기

    [Spring Data JPA] Auditing에 ZonedDateTime 사용하기

    들어가며 JPA에는 엔티티의 생성 일자와 최종 수정일자, 생성자와 최종 수정자를 entityManager에서 persist하기 전에 자동으로 현재 일시로 세팅해주는 기능이 존재합니다. JPA Auditing이라고 하는데요, 대부분의 경우 이 Auditing 기능을 @MappedSuperclass로 만들고 엔티티 클래스에서 상속받도록 구현합니다. 이번 포스팅은 이 JPA Auditing 중 생성 일자와 최종 수정일자 필드의 타입에 관한 포스팅입니다. 문제가 뭐였냐면 프로젝트의 날짜 타입을 ZonedDateTime으로 통일함에 따라, Auditing의 @CreatedDate와 @LastModifiedDate 필드 또한 ZonedDateTime으로 변경하게 되었습니다. 단순히 필드의 자료형만 변경하면 될 줄 ..

    [SpringCloud] Resilience4j와 Spring Cloud Circuit Breaker

    [SpringCloud] Resilience4j와 Spring Cloud Circuit Breaker

    들어가기 전에 어떤 애플리케이션에서 다른 서비스의 API를 호출해 응답 데이터를 사용하는 로직이 있다고 가정해봅시다. 그럼 해당 로직은 아래 프로세스로 동작할 것입니다. 이 두 서비스 간의 통신이 항상 문제없이 정상적으로 동작하면 좋겠지만, 실제로 그렇지 않다는 것을 모두가 알고 있습니다. 다른 서비스가 가용 리소스가 적어 이 요청을 처리하는데 과도하게 오랜 시간이 걸린다면? 다른 서비스가 현재 장애가 발생해 이 요청을 처리할 수 없는 상태라면? 어떤 모종의 이유로 인해 다른 서비스가 내려가 있다면? 이 비즈니스 로직, 나아가 우리의 애플리케이션은 다른 서비스의 상태나 장애에 의존적인 상황이 펼쳐지게 됩니다. 다른 서비스가 장애가 발생하면 우리 서비스도 장애가 발생하는 그런 상황이요. 😡 담당자 : 개발..

    [JPA] 즉시 로딩/지연 로딩

    [JPA] 즉시 로딩/지연 로딩

    앞선 포스팅에서 프록시에 대해 알아보았습니다. 이번 포스팅에서는 JPA에서 프록시를 어떻게 활용하는지, 즉시 로딩과 지연 로딩을 통해 알아봅니다. 지연 로딩 (Lazy Loading) 1 2 3 4 5 6 7 8 9 @Entity public class Member { @Id @GeneratedValue private Long id; @ManyToOne(fetch=FetchType.LAZY) private Team team; } Colored by Color Scripter cs 지연 로딩은 엔티티 조회 시점이 아닌 엔티티 내 연관관계를 참조할 때 해당 연관관계에 대한 SQL이 질의되는 기능이며, fetch=FetchType.LAZY 옵션으로 지정할 수 있습니다. 엔티티 조회 시, 연관관계 필드는 프록시..

    [JPA] 프록시

    [JPA] 프록시

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @Entity public class Member { @Id @GeneratedValue private Long id; private Team team; } @Entity public class Team { @Id private Long id; } cs 이런 연관관계의 엔티티가 존재할 때, 아래 상황을 가정해보겠습니다. Case 1. Member와 Team을 함께 출력하는 비즈니스 로직이 추가되었다. 이 때는 아래와 같이 로직을 구현할 수 있겠습니다. JPA에서 Member 조회 시, 자동으로 Team까지 함께 조회해오므로, EntityManager.find 호출 시에 Member와 Team을 조인해서 가져오는 SELECT 쿼리를 수행..

    [JPA] 상속관계 매핑

    [JPA] 상속관계 매핑

    상속관계 매핑 RDBMS에는 상속관계가 없지만, 객체에서는 상속관계가 존재합니다. 그리고 RDBMS에서는 슈퍼타입-서브타입 관계 모델링이 객체의 상속관계와 유사합니다. 이번 포스팅에서는 이 슈퍼타입-서브타입 관계를 JPA로 모델링하는 방법을 알아봅니다. 이 슈퍼타입-서브타입 논리 모델을 실제 물리 모델로 구현하려면 아래와 같은 방법이 있습니다. 조인 전략 : 각각 테이블로 변환 단일 테이블 전략 : 통합 테이블로 변환 구현 클래스마다 테이블 전략 : 서브타입 테이블로 변환 그리고 이 상속관계 매핑시에는 Entity를 대상으로 어노테이션을 입력해주는데, 슈퍼 타입(슈퍼 클래스)에는 @Inhritance와 @DiscriminatorColumn을, 서브 타입(서브 클래스)에는 @DiscriminatorValu..

    [JPA] 다양한 연관관계 매핑

    [JPA] 다양한 연관관계 매핑

    연관관계 매핑 시 고려사항 다중성 단방향 or 양방향 연관관계의 주인 다중성 N:1 → @ManyToOne 1:N → @OneToMany 1:1 → @OneToOne N:M → @ManyToMany 단방향 or 양방향 테이블 외래 키 하나로 양쪽 JOIN 가능 사실 방향이라는 개념은 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체의 양방향 관계는 참조가 각각 존재하므로, 둘 중 테이블의 외래 키를 관리할 객체를 지정해야한다. 연관관계의 주인 → 외래 키를 관리하는 참조 주인의 반대편 → 외래 키에 영향을 주지 않고, 단순 조회만 가능함. 다대일 N:1 가장 많이 사용하는 ..

반응형