Transactional + DDD

2022. 9. 30. 22:25·devlog/TIL
2019년 12월 16일에 notion에 작성한 글을 옮겨 왔다.

@Transactional + DDD

fun requestRefund(request: RefundRequest): RefundResponse {
    val paymentInfo = 결제클라이언트.get결제정보(request.orderNo)
    return refund(refundDomainService.register(request, paymentInfo))
}

보통 외부의 호출이 일어날떄 transaction을 분리하는 경우는 다음과 같다.

  • transaction이 이미 열렸고, 외부 호출을 하는 경우 timeout 같은 에러 발생 시, 지연된 시간만큼 transaction을 물고 있기 때문에 좋지 않다. → db lock 발생 가능 (그런데 db lock은 정확히 언제 발생하는가? 🤔)

DB transaction의 시작은 refundDomainService.register 를 호출하였을때 시작이 된다. (정확하게 언제 시작되는지에 대해서 잘 모르겠다.)

register() 호출 이전에 transaction을 사용하고 있는 명령이 없기 떄문에, 해당 @Transactional 은 Application layer에 있는 것이 맞다.

이 이유 이외에도 Application layer에 두는 이유는 다음과 같다

  • DomainService layer에 있는 경우, 해당 function을 다른 곳에서 호출 하였을 떄 원하는 동작이 일어나지 않을 수도 있다. (ex. for loop으로 여러 컬렉션을 register 하게 되는 경우)
  • 위에 언급한 것과 같이 register() 이전에 transaction을 여는 다른 명령어가 있는 경우.

해당 domain function을 호출하는 곳에서 (Application layer) Transaction을 관리하는 것이 좀 더 용이하다.

Transaction이 이미 시작되었고 →외부 호출 (feign client) → register 로 만약에 코드가 짜여졌다면, transaction을 분리해서 가져가는 설계가 훨씬 맞다.

저작자표시 비영리 변경금지 (새창열림)

'devlog > TIL' 카테고리의 다른 글

99클럽 코테 스터디 10일차 TIL  (0) 2025.04.09
99클럽 코테 스터디 9일차 TIL  (0) 2025.04.08
[Gradle] gradle 빌드 OOM 발생할땐?  (0) 2022.09.20
[Python] scp, paramiko 패키지 예제  (0) 2021.08.26
[vim] 좀 더 편-안하게 vim editor를 사용하는 설정  (0) 2020.10.07
'devlog/TIL' 카테고리의 다른 글
  • 99클럽 코테 스터디 10일차 TIL
  • 99클럽 코테 스터디 9일차 TIL
  • [Gradle] gradle 빌드 OOM 발생할땐?
  • [Python] scp, paramiko 패키지 예제
bandal-gom
bandal-gom
Devops & Backend Developer | tech blog
  • bandal-gom
    yayz's devlog
    bandal-gom
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • DevOps (22)
        • devops (4)
        • cicd (2)
        • docker (2)
        • monitoring (2)
        • nginx (4)
        • cache (1)
        • aws (1)
        • etc (6)
      • BE (21)
        • BE (3)
        • design pattern (1)
        • data structure (0)
        • spring (1)
        • algorithm (12)
      • devlog (24)
        • TIL (17)
        • programming language (2)
        • conference (2)
        • etc (3)
      • IT Review (1)
  • 블로그 메뉴

    • about.
    • 개발👩‍💻
    • etc.
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    알고리즘문제풀이
    릿코드
    Programmers
    노트북하기좋은카페
    hash
    leetcode 347
    java
    개발자취업
    키보드케이블
    프로그래머스
    99클럽
    문제풀이
    Kotlin
    Python
    젠킨스
    NGINX
    항해99
    jenkins
    티스토리챌린지
    homelab
    코딩테스트준비
    algorithm
    오블완
    알고리즘
    LeetCode
    array
    time complexity
    키캡
    til
    모각코
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
bandal-gom
Transactional + DDD
상단으로

티스토리툴바