본문 바로가기

JPA3

대량 쿠폰 발급 시 Bulk Insert로 처리 시간 70% 단축 대량 쿠폰 발급 시 Bulk Insert로 처리 시간 70% 단축쿠폰 발급과 관련된 프로덕션 코드를 작성하면서,향후 서비스 규모가 커짐에 따라 쿠폰을 발급하는 대상 회원 수가 100명, 1,000명, 혹은 10,000명이 된다면 성능 이슈는 발생하지 않을까? 라는 고민을 하게 되었습니다.결과적으로 쿠폰의 발급 방식을 Single Insert에서 Bulk Insert으로 변경했더니, 아래 그래프와 같이 쿠폰 발급 처리 시간이 약 70% 단축되는 결과를 확인할 수 있었습니다.해당 포스팅에서는 70%라는 시간 단축하기까지의 과정을 소개합니다. 해당 글에서 사용되었던 모든 코드는 gitHub에서 확인하실 수 있습니다.아래 서버 환경은 참고해주시면 좋을 것 같습니다.Spring Boot: 2.7.1Spring .. 2024. 4. 27.
쿠폰 발급 시 동시성 제어를 위해 고려했던 4가지 방법 쿠폰 발급 시 동시성 제어를 위해 고려했던 4가지 방법 쿠폰 Entity에서 잔여 발급 횟수를 관리하고 있었습니다. 쿠폰 발급과 관련된 비즈니스 로직을 구현하면서 문득, 동시 다발적인 쿠폰 발급 요청이 올 경우 어떤 일이 벌어질지 궁금해졌습니다. 실제 운영환경에서 여러 Thread가 동시 다발적으로 쿠폰을 발급하기 위해서 데이터베이스에 접근할텐데, 고려해야할 문제는 없을까? 해당 포스팅에서는 동시성 문제를 해결하려고 고려했던 4가지 방법에 대해서 이야기 해보려고 합니다. 단일 Thread에서 쿠폰을 발급하는 상황 단일 Thread에서 동시성 문제를 고려할 필요가 없지만, 이후에 나올 내용과 연관되어 있기 떄문에 간단하게 쿠폰을 발급하는 상황을 살펴보겠습니다. 1) 트랜잭션 시작 2) 쿠폰을 발급하기 전,.. 2024. 4. 13.
테스트 코드에서 JPA의 dirty checking 모든 코드는 깃허브에 있습니다. 테스트 코드에서의 JPA의 dirty checking Spring Data Jpa를 사용하면서, 테스트 코드 실행 시 update 쿼리가 실행되지 않는 상황이 있었습니다. 결론적으로, dirty checking 기능이 제대로 동작하지 않는 상황에 대해서, 해결했던 내용을 기록했습니다. MemberService와 테스트 코드 JpaRepository 상속받는 MemberRepository 클래스를 선언하고, 이를 협력 객체로 두는 MemberService 클래스를 만들어서 Spring Bean으로 등록했습니다. 이 후 MemberService 레이어에 대한 테스트 코드를 작성하고자 했습니다. 이때, 테스트 환경은 아래와 같이 구성해 주었습니다. @DisplayName("회원.. 2024. 3. 23.