[WIL] 동시성 이슈 제어

2025. 8. 8. 14:22·WIL

🧠 이번 주에 새로 배운 것

  • 동시성을 제어하고, 이를 테스트할 수 있는 방법에 대해서 알게 되었다.
    • ForkJoinPool, CompletableFuture, Executor, CountDownLatch
  • `@Transactional`의 필요성에 대해 생각해보게 되었다.
    • JPA Transactional 잘 알고 쓰고 계신가요? | 카카오페이 기술 블로그
  • 상품 재고 차감에서 데드락이 발생할 수 있음을 알게 되었다.

💭 이런 고민이 있었어요

  • SELECT FOR UPDATE 가 거는 락의 범위가 예상과 달라서 어려웠다.
  • 한 트랜잭션에서 여러 상품의 재고 차감이 이루어지는 경우, 데드락이 발생한다.
  • 비관적/낙관적 락의 결정이 특정한 근거로 정해져야할 것 같다고 느꼈다.

💡 앞으로 실무에 써먹을 수 있을 것 같은 포인트

  • 비관적 락이 필요한 경우, 락의 범위가 예상치 못하게 넓진 않은지 확인하기
  • Executor와 CountDownLatch를 통한 동시성 제어 테스트
  • 한 트랜잭션에서 여러 레코드에 락을 거는 경우, 트랜잭션을 분리하거나 순서를 지정하는 방식으로 데드락을 방지할 수 있다.
  • 동시성 문제를 락을 통해 제어할 수 있지만, 가장 좋은 것은 “동시에 접근하지 않는 설계”를 하는 것이다.
  • 비관적/낙관적 락은 비즈니스나 상황에 따라 유동적이다.
    • 설계 관점에서 접근하기

🤔 아쉬웠던 점 & 다음 주에 해보고 싶은 것

  • 동시성 테스트 도구에 대해서 더 학습하기
    • ForkJoinPool, CompletableFuture, Executor 각 병렬 처리가 어떻게 이루어지는지 이해해보기
  • 트랜잭션 필요성에 대해 나만의 언어로 정리해보자.
  • 주문과 결제 분리하기
  • MVCC 관련 개념에 대해서 스스로 정리하기

'WIL' 카테고리의 다른 글

[WIL] Decoupling with event  (1) 2025.08.31
[WIL] Failure-Ready System  (2) 2025.08.24
[WIL] 인덱스와 캐시  (0) 2025.08.17
[WIL] 설계 - Software Design  (2) 2025.07.27
[WIL] TDD & 지속 테스트 가능한 구조  (3) 2025.07.18
'WIL' 카테고리의 다른 글
  • [WIL] Failure-Ready System
  • [WIL] 인덱스와 캐시
  • [WIL] 설계 - Software Design
  • [WIL] TDD & 지속 테스트 가능한 구조
g-hwang
g-hwang
g-hwang 님의 블로그 입니다.
  • g-hwang
    g-hwang 님의 블로그
    g-hwang
  • 전체
    오늘
    어제
    • 분류 전체보기 (57)
      • 데브코스 (7)
      • 스프링 (8)
      • 자바 (3)
      • 아키텍처 (3)
      • 트러블 슈팅 (4)
      • 알고리즘 (0)
      • 개발서적 (7)
      • 인프런 워밍업 스터디 (7)
      • 오픈소스 기여 (2)
      • WIL (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    래퍼 클래스
    jpa 순환참조
    이벤트 스토밍
    카프카
    virtual thread
    워밍업 스터디
    레이어 아키텍처
    트랜잭션
    real mysql 8.0
    자바
    다중 컬럼 인덱스
    인프런 워밍업 스터디
    ZSet
    코드래빗
    스프링
    도메인 모델링
    도메인
    인덱스
    스터디3기
    JPA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
g-hwang
[WIL] 동시성 이슈 제어
상단으로

티스토리툴바