• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

요청, 트랜잭션, 영속성컨택스트의 관계

22.04.12 18:51 작성 조회수 149

0

고객의 요청당 엔티티매니저(영속성컨텍스트)가 생성된다고 설명해주셨습니다.

 

아래 두가지 중에 어떤 개념이 올바른 것인지 헷깔립니다.

고객의 요청을 한 개의 단일 트랜잭션으로 생각하고 요청한개당 영속성컨텍스트가 1개가 생성되는 것으로 이해하면, 생성과 소멸한번만 하고 이 과정을 요청마다 반복하는 것으로 이해할 수 있을까요?.

반면, 요청하나에 여러개의 트랜잭션을 갖는다면 

요청 하나에 여러번의 영속성컨택스트 생성소멸이 반복되는 것으로 해석할 수 있는 것인지 궁금합니다.

답변 1

답변을 작성해보세요.

0

codesweaver님의 프로필

codesweaver

2022.04.13

안녕하세요, ddoddo 님! 공식 서포터즈 codesweaver 입니다.

영속성 컨텍스트는 트랜잭션과 생명주기를 같이합니다.

만일 한개의 요청이 여러 스레드에서 처리될 경우 스레드마다 트랜잭션이 생성되며 영속성 컨텍스트도 생성됩니다.

감사합니다.

 

답변 감사합니다. 추가로 궁금한 점이 있습니다.

 

한 요청이 Query1, 2, 3, 4, 5  총 5개의 쿼리를 수행해야하는데

Query1,2,3 이 논리적작업단위로 서비스계층에서 @Transactional가 적용된 메소드A 로 묶이고

Query4,5이 또 @Transactional로 묶여 있는 메소드B로 묶인 상황에서 

Controller에서 Service의 메소드 A, B를 연이어서 호출하는 경우를 생각하고 처음 질문을 드렸습니다.

 

위 상황과 달리 답변내용의 상황은 어떨 때 벌어질 수 있는 것인지 궁금합니다. 

codesweaver님의 프로필

codesweaver

2022.04.13

안녕하세요 ddoddo님!

아래는 제가 실무에서 시도했다가 필요없어져서 폐기한 방식이긴 합니다.

- 1번의 요청에 최대 1,000개의 주문에 대해 주소 검증이 필요합니다.

- 주소 검증은 외부의 API에서 해야 하는데 서버의 물리적인 거리가 멀어 왕복에 딜레이가 발생하는 상황입니다. (1회 요청에 200ms 딜레이)

- 왕복을 최소화하기 위해 주문을 100개 단위 그룹으로 만듭니다.

- 그리고 주소 검증은 순서가  중요하지 않은 프로세스 이므로 이를 멀티쓰레드로 전송하여 전체 검증 시간을 단축합니다.

 

실무 코드는 JPA를 사용하고 있지 않아 영속성 컨텍스트와 무관하긴 하나, 

JPA를 사용하고 있었다면 각 트랜잭션 마다 영속성 컨텍스트도 생성되었을 것입니다.

감사합니다.