springboot6 [Spring/Postgres] SKIP Lock 사용하여 동시성 이슈 해결하기 서버를 운영하다 보면, 여러 클라이언트에서 동시에 들어온 DB 자원 점유 요청을 순서대로 처리해야 할 때가 있다 예를 들면 놀이공원 입장권 예매 서비스가 그렇다 (필자는 실제 예매 서비스가 어떻게 구성되어 있는지 모른다. 이후 등장하는 내용은 모두 픽션..) 입장권 데이터를 관리하는 롯데월드 서비스와 입장권 예매를 담당하는 YES24, 인터파크, 지마켓 등이 있고 각 회사는 서로 독립된 회사와 환경에서 운영되고 있다고 가정한다 예를 들어 롯데월드 입장권 예매가 12시에 오픈한다 가정하면 12시가 땡 치면 여러 티켓 발급서비스로부터 티켓 발급 요청이 동시다발적으로 발생할 것이고, 티켓 관리 서비스에서 제대로 된 설정이 이루어지지 않았다면 위 흐름과 같은 위험한 상황이 발생할 수 있다 먼저 위 상황이 왜 .. 2025. 3. 1. [Spring/Postgres] Exclusive Lock 제대로 사용하기 (동시성 문제) 데이터베이스에 데이터를 적재하는 애플리케이션을 운영하다 보면 데이터베이스에 Lock을 거는 행위는 매우 빈번하게 일어난다 이번 글에서는 필자가 Springboot Web Application + Postgres 환경에서 비관적 락의 잘못된 사용으로 발생했던 이슈와, 해결하는 과정을 담아보았다 먼저 필자가 비관적 락을 사용했던 이유는 동시성 이슈 해소를 위함이었다 예를 들어 A 테이블의 1번 Low에 동시에 접근하는 두 트랜잭션이 있을 경우 1번 트랜잭션 실행 이후 2번 트랜잭션이 실행되는 것이 보장되어야 했고, Postgres의 기본 Isolation Level인 READ COMMITED 와 Hibernate에서 제공하는@Lock(LockModeType.PESSIMISTIC_WRITE) 어노테.. 2025. 2. 22. [2023.01.05] 400% 테스트 성능 개선기 - 사내 세미나 발표 후기 최근 약 400%가량의 테스트 성능 향상 시킨 사례로 사내 세미나를 진행하게 되었습니다 이번 포스팅에서는 Springboot 기반 WAS 에서 작성된 테스트 코드가 어떠한 과정을 거쳐 약 400%의 성능 개선을 이뤄냈는지에 대해서 다뤄볼 예정입니다 개선 수행 환경 Springboot 2.3 Gradle 7.1 JUnit 4 먼저 개선을 수행한 `Workbench` 라는 프로젝트는 `No Code` 로 회사 모든 시스템을 유저가 쉽게 사용할 수 있도록 제공하는 서비스입니다 저희 부서에선 저를 포함한 2명의 개발자가 투입되어 현재 2년 정도 서비스를 고도화 및 유지보수 중이며 2년이라는 시간이 흐르는 동안 약 330개가 넘는 테스트 케이스가 작성되었습니다 서비스 개발 초기 전체 Full Test 수행에 1분.. 2023. 1. 6. [SpringBoot/Gradle] ClassNotFound Exception (Feat. implementation & api) 개발을 즐기는 우리의 곁에는 운명의 짝꿍과도 같은 존재가 있습니다. 바로 예외(Exception) 입니다 우리에게는 너무 친숙하지만 되도록 마주치고 싶지 않은 NPE(NullPointerException)부터 친절한 IDE 선생님 덕분에 요즘은 마주치기 조차 힘든 ClassNotFoundException까지 다양한 에외 상황들을 인식하고, 대비하며 개발을 이어나갑니다 이번 글에서는 그중에서도 마주치기 힘들었던 ClassNotFoundException를 만난 경험을 공유하고자 합니다 먼저 필자는 다음과 같은 서비스 구조의 프로젝트를 진행 중이었습니다. A 프로젝트 -> B 프로젝트 -> C 라이브러리 A 프로젝트.gradle ... implementation(B) ... B 프로젝트.gradle ... i.. 2022. 8. 7. 이전 1 2 다음 반응형