전체 글11 JPA 더티체킹 사용시 주의할점 : REPEATABLE READ 격리 수준에서 발생한 동시성문제 해결하기 JPA는 자바 개발자들에게 매우 강력한 ORM 도구다. 특히 더티 체킹이라는 기능은 개발자가 명시적으로 업데이트 쿼리를 작성하지 않아도 엔티티의 변경사항을 감지하여 자동으로 DB에 반영해주는 아주 편리한 기능이다. (하지만 이런 편리함 뒤에는 생각지 못한 위험이 숨겨져 있을수도 있다…….) 실제 배송 시스템에서 발생한 동시성 문제를 통해 JPA의 더티체킹과 데이터베이스의 트랜잭션 격리 수준이 어떻게 작동하는지와 이로 인해 발생할 수 있는 문제와 해결에 대해 알아보도록 하자. ⚠️ 문제상황 문제가 발생한 배송 프로세스는 다음과 같다사용자가 상품을 주문하면 시스템은 배송 요청을 생성하고 외부 배송사에 주문 정보를 전달합니다.외부 배송사로부터 배송 접수 완료 콜백이 오면, 시스템은 해당 요청의 배송 접수 상.. 2025. 3. 22. Spring Cloud Stream으로 Kafka 메시지 처리하기 - 1 Spring Cloud Stream?- 마이크로 서비스 아키텍처에서 이벤트 기반 메시징을 쉽게 처리할 수 있도록 도와주는 프레임워크- Kafka, RabbitMQ, AWS SQS 와 같은 메세지 브로커와의 통합을 단순화하고, 프로듀서와 컨슈머를 쉽게 구현할 수 있도록 지원한다. Spring Cloud Stream 구성 요소1. Binder : 특정 메세지 브로커와 연결을 담당한다. Spring cloud stream 의 바인더를 사용하면 메세지를 발행하고 소비하기 위해 플랫폼마다 별도의 라이브러리와 API를 제공하지 않고도 메세징을 사용할 수 있다. - Kafka, Kafka Stream, AWS SQS, RabbitMQ 등 다양한 바인더가 구현되어 있다. - 메세지 브로커가 변경돼도 코드 수정을 최.. 2025. 3. 17. API 성능 최적화하기 - 1 Pinpoint 확인 결과 특정 조회 API의 응답시간이 평균 1초 이상, 최대 3초인 것으로 API 성능이 좋지 않다는 것을 확인할 수 있었다.내부 서버간 호출 API의 경우 적절한 API 응답 시간은 200ms ~ 300ms수준으로 평균 600ms ~ 1000ms 이상 걸리는 API를 최적화할 필요가 있었다.더욱이 해당 API는 회원가입시 호출하는 API이므로 회원가입 속도가 느리면, 유저 경험이 좋지 않을 뿐더러 이탈 가능성도 있기 때문에 해당 API 성능 개선을 해보기로 했다.Pinpoint의 트레이스를 분석한 결과, DB 조회 단계에서 응답 속도가 느려지고 있음을 확인했다.쿼리 실행 과정을 분석해보면1. 특정 문자열로 DB조회 → 인덱스 있음 2. 1번의 조회 결과가 없는 경우, 다른 조건으로.. 2025. 3. 16. Semantic Versioning : SemVer 에 대해 알아보자 Semantic versioning? 거의 매일 새로운 플러그인, 애드온, 라이브러리, 확장 프로그램이 만들어지고 있는 상황에서 범용적인 버전 관리 방법을 갖추는 것이 소프트웨어의 변경을 추적하는 가장 좋은 방법이다. 이를 위해 시멘틱 버저닝(Semantic Versioning, SemVer)이 사용된다. 시멘틱 버저닝은 소프트웨어 릴리즈 버전의 네이밍 규칙이다. Spring boot 의 버전을 보면 다음 형식처럼 구성되어 있는걸 익숙하게 봤을 것이다. org.springframework.boot:spring-boot:3.4.3 Semantic Verisioning은 X.Y.Z 형식으로 이뤄져 있는데, 왼쪽부터 Major version : 메이저 버전으로 1씩 증가하고, 이 버전을 올리면 Minor .. 2025. 3. 8. MSA 환경에서 UUID 선택 - UUIDv4 vs UUIDv7 MSA 환경에서 글로벌 고유 식별자(global ID)가 필요한 이유와 global ID로 사용할 수 있는 방식 중 UUID version 4와 version 7을 비교해보자 분산 환경에서 고유 식별자가 왜 필요할까? 분산환경에서는 여러 서버, 데이터베이스, 서비스가 독립적으로 운영되는데 이러한 환경에서 식별자를 관리할때 ID 충돌 방지하고, 각 서비스에서 동일한 데이터를 정확히 참조하기 위해 고유한 식별자가 필요하다.ID 충돌이 문제가 되는 이유는 예를 들어, 유저 A가 있을 때, 인증 시스템의 유저 (auth_user_id=1)주문 시스템의 유저 (user_id=1)위처럼 RDB에서 흔히 쓰는 AUTO_INCREMENT (PK)를 사용하면 각 데이터 베이스가 독립적으로 ID를 할당하기 때문에 같은 유.. 2025. 3. 8. 이전 1 2 다음