Skip to content

docs(architecture): 코루틴 환경 @Transactional 사용 가이드 추가 (#166) - #271

Open
jskjw157 wants to merge 1 commit into
masterfrom
docs/166-coroutine-transactional
Open

jskjw157 wants to merge 1 commit into
masterfrom
docs/166-coroutine-transactional

Conversation

@jskjw157

Copy link
Copy Markdown
Owner

요약

PR #238에서 MetadataRefreshServiceImpl.refreshEvent suspend 함수의 @Transactional을 제거하고 동기 TransactionalMetadataUpdater로 위임한 패턴을, 팀 차원에서 재발 방지/온보딩용으로 문서화했다.

배경

문서 구성

docs/architecture/coroutine-transactional.md (한국어, 7개 섹션):

  1. 배경 — AOP 프록시 + ThreadLocal 메커니즘과 코루틴 스레드 호핑 다이어그램
  2. 안티패턴 — suspend에 @Transactional을 붙였을 때의 실패 모드
  3. 권장 패턴 — 동기 @Component로 위임 (TransactionalMetadataUpdater 코드 예시)
  4. REQUIRES_NEW 채택 이유 — 배치 부분 성공 격리, REQUIRED와의 비교
  5. 회귀 방지 테스트 — shouldIsolateTransactionsBetweenEvents 본문 인용
  6. 리뷰/구현 체크리스트 (6개 항목)
  7. 참고 자료 — [Bug] MetadataRefreshService suspend 함수 @Transactional 제거 #166, fix(security): runCatching + @Transactional 트랜잭션 격리 실패 #224, Spring/Kotlin 공식 문서 링크

리뷰 포인트

  • 코드 예시가 실제 TransactionalMetadataUpdater.kt 패턴과 일치하는지
  • 한국어 톤/용어가 다른 docs/architecture/ 문서들과 어울리는지
  • 누락된 실패 모드나 추가하면 좋은 체크리스트 항목 제안

영향 범위

문서 단일 파일 추가 (docs/architecture/coroutine-transactional.md, +238). 코드/빌드 변경 없음.

suspend 함수에 @transactional을 직접 적용하면 안 되는 이유와
동기 @component로 위임하는 권장 패턴을 정리했다.

- AOP 프록시 + ThreadLocal 메커니즘 배경 설명
- 안티패턴과 실패 모드 정리
- TransactionalMetadataUpdater 위임 패턴 코드 예시
- REQUIRES_NEW로 배치 부분 성공 격리하는 이유
- 회귀 방지 통합 테스트(shouldIsolateTransactionsBetweenEvents) 인용
- 리뷰/구현 시 사용할 체크리스트

관련 이슈: #166, #224
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant