서론 마이크로서비스 아키텍처(MSA)는 독립적인 서비스로 분할하여 개발과 관리의 복잡성을 줄여주는 동시에 더 나은 확장성과 장애 격리를 가능하는 장점이 있습니다. 그러나 이러한 장점에도 불구하고, MSA는 분산 시스템에서 발생하는 복잡한 트랜잭션과 데이터 일관성 문제를 해결해야 합니다. 그래서, MSA 환경에서 분산 트랜잭션을 해결하기 위한 패턴을 알아보겠습니다. MSA 에서 분산트랜잭션 문제들을 해결하기 위해 사용되는 패턴들 마이크로서비스 아키텍처에서 사용되는 이러한 패턴들은 각각 다른 문제를 해결하기 위해 설계되었습니다. 각 패턴의 간단한 개념들을 소개하겠습니다. 1. Saga 패턴 여러 마이크로서비스에 걸쳐 있는 긴 비즈니스 프로세스를 일련의 로컬 트랜잭션으로 나눕니다. 각 단계는 독립적으로 실행되..

JPA를 사용하다 보면 LAZY로딩에 의해서 더 많은 쿼리가 나가는 경우가 발생한다. 쿼리를 보낼 때 연관된 내용을 바로 찾지 않고 필요할때 다시 쿼리를 보내서 찾는 LAZY 방식을 사용하여 N+1 쿼리 문제가 발생하게 된다. ToOne에 관계는 fetch join을 사용하여 한번에 값들을 모두 조회할 수 있지만 ToMany 같은 컬렉션 조회는 한개는 상관없지만 여러개를 fetch join을 걸게되면 MultipleBagFetchException 에러가 나게된다. properties설정에 하이버네이트의 default_batch_fetch_size 글로벌 옵션을 걸거나 필요한 엔티티에 어노테이션 @BatchSize를 붙이면 된다. 이 옵션은 설정한 size만큼 in절로 묶어서 한번에 가져오기 때문에 쿼리를..

자바 ORM 표준 JPA 프로그래밍 - 기본편 김영한님 강의듣고 정리하기 1. 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 (int, double, Integer, Long 등) 임베디드 타입 컬렉션 값 타입 임베디드 타입 새로운 값 타입을 직접 정의할 수 있다. 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 한다. @..

자바 ORM 표준 JPA 프로그래밍 - 기본편 김영한님 강의듣고 정리하기 1. 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 : 외래키 하나로 양쪽 조인 가능, 사실 방향이라는 개념이 없음 객체 : 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 연관관계의 주인 연관관계의 주인 : 외래키를 관리하는 참조 주인의 반대편 : 외래키에 영향을 주지않음, 단순조회만 가능 다대일 [N:1] 다대일 단방향 - 가장 많이 사용하는 연관관계 다대일 양방향 - 외래키가 있는 쪽이 연관관계의 주인, 양쪽을 서로 참조하도록 개발 일대다 [1:N] 일대다 단방향 ..