728x90

1. 문제 (과제, 프로젝트를 진행하면서 부딪혔던 기술적인문제)

  • 동시성 이슈를 해결하기 위해 DB Lock을 공부가 필요했습니다.
  • 동시성 이슈 테스트과정에서, Thread와 DB connection pool의 관계로 인하여 문제가 발생하였습니다.

2. 시도

  • DB Lock에 대한 학습을 진행하였습니다.
    • 구글링, Chat GPT를 통해 낙관적 락, 비관적 락 에 대해 차이점을 공부 하여 어떤 Lock을 적용해야할지 고민하였습니다.
  • Spring Boot 설정값을 변경하였습니다.

3. 해결

  • 데이터 충돌이 많이 발생할 것으로 예상되어 데이터를 읽는 시점부터 Lock이 되는 비관적 락을 선택하였으며, 코드로 적용하는것은 생각보다 간단했습니다.
    • 비관적락 - @Lock(LockModeType.PERSSIMISTIC_WRITE)
  • Spring Boot 설정시 hikair 설정을 변경하여 connection pool의 크기를 늘렸으며, 해당 크기에 맞게 Thread의 개수 제한도 설정하였습니다.
  • 동시성 테스트 코드에서 Semaphore 를 사용하여 전체 Thread가 50개를 실행할 예정이어도 10개씩 나누어서 동작할 수 있도록 처리하였습니다.
    • ex) 50개 실행 → 10개만 우선 동작 → 1개 완료 → 남은 40개의 스레드 중 1개 동작 → …. → 50개 완료

4. 알게된 것

  • DB Lock을 어떤 기준으로 선택해야하는지 알게되었습니다.
  • 웹서버의 Thread수와 DB connection pool에 대한 설정을 서비스에 맞게 설정해주어야 사이드이펙트를 피할 수 있다는것을 깨달았습니다.

5. 지난 목표 회고

  • TDD를 작성하며 개발하는것이 목표였으며, 잘 이루어지고 있어 뿌듯합니다.

6. 다음 목표 설정

  • 이전 목표들은 유지하면서 다음 목표는 내가 학습한 내용들에 대한 문서화를 열심히 진행하고 싶습니다.
반응형

+ Recent posts