반응형

동시성 2

[JPA] unique 동시성 이슈 해결 및 CountDownLatch 테스트 작성 (Feat. Unique Index)

사이드 프로젝트를 하면서 동시성 이슈를 만났다. 모바일 프론트 측에서 api 테스트를 하다가, 즐겨찾기 엔티티가 연달아 두 번 등록되는 이슈가 있었던 것이다. 그리고 즐겨찾기 엔티티는 repository에서 Optional과 같은 꼴로 반환되게 했기 때문에, 두 개 이상의 결과가 반환되면 NonUniqueResultException 가 발생한다. 이러한 동시성 이슈가 발생하는 데에는, 두 스레드가 거의 동시에 진행됐기 때문이다. 사실 트래픽이 조금이라도 많으면 이러한 동시성 이슈는 흔히 만날 수 있다. nGrinder로 save 관련 메서드에 수십개의 스레드로 테스트를 돌려보자. 아래 사진은 nGrinder로 회원가입 메서드를 수십개의 스레드로 5초동안 실행시킨 결과이다. 원래대로라면 같은 이메일, 같은..

[220913] 우아한테크코스 레벨4 - 톰캣 구현하기 미션 후기

레벨4에 들어서면서 그동안 우리가 흔히 사용했던 스프링에 대해 좀 더 딥하게 알아보고 구현해보는 시간을 가지게 됐다. 아래는 우테코 레벨4 일정이다. 그 중에서 첫 번째 미션은 [톰캣 구현하기]이다. 그 동안 우리는 스프링을 이용한 덕분에 HTTP 요청을 받으면 그에 맞는 응답을 편리하게 만들어줄 수 있었다. 이는 Dispatcher Servlet이 있었기에 가능한 것. 이번 미션을 통해서 WAS, tomcat, Dispatcher Servlet이 각각 무엇인지, 어떠한 역할을 하는지 배울 수 있었다. 특히 4단계의 '동시성 확장하기' 미션 덕분에 스레드, 스레드풀에 대한 개념을 공부할 수 있었다. 내 최종 코드 및 각 단계별 PR은 아래 레포에서 확인할 수 있다. https://github.com/wo..

반응형