목차배경동시성 이슈를 해결하는 방법에는 비관적 락을 비롯해 낙관적 락, 분산 락 등이 있다. 이번 사례에서는 JPA에서 제공하는 @Version 애너테이션을 활용해 낙관적 락으로 동시성 이슈를 방지하는 방법과 그 과정에서 느낀 비즈니스 로직 이해의 중요성을 정리한다. 낙관적 락을 선정한 이유는 그동안 비관적 락과 분산 락으로 동시성 문제를 해결해보았으며, 사이드 프로젝트를 통해 JPA 사용 역량을 높이고자 하기 때문이다.주문/결제 API예를 들어 다음과 같은 주문 결제 API가 호출하는 비즈니스 로직이 있다고 가정하자. 주문 결제 요청을 받으면 주문 상태를 진행 중으로 변경하고, PG사의 결제 API를 호출하여 고객의 카드 또는 계좌에서 주문 금액만큼 결제를 진행한다. 이후 결제가 성공하면 주문 상태를 ..
목차배경모듈간 직접적인 의존성 제거가 필요한 특정 상황에서 스프링의 EventListener를 사용하면 이벤트 기반으로 Loose Coupling을 구현하여 처리할 수 있다. 또한 비동기 처리가 필요한 경우에도 적절하게 사용할 수 있다.@EventListener예를 들어 회원 가입에 성공하면 사용자에게 환영 메일을 보내는 요구사항을 가정해본다. 가장 간단하게 다음과 같이 작성할 수 있다. 이는 두 모듈간 강한 의존성을 갖고 직접적으로 의존한다.@Serviceclass UserService ( private val userRepository: UserRepository, private val emailService: EmailService,) { fun register(userName: String, em..

목차배경사이드 프로젝트를 진행하면서 테스트를 위해 개발해두었던 Mock API 서버를 실제 API 서버로 전환 작업 중에 API 명세를 작성해두면 추후에 관리하기 편할 것 같아서 전환 작업중에 함께 명세 작성 또한 진행하였다.API 명세는 잘 알려진 Swagger를 적용했는데, 생각보다 이 설정이 잘 안되었고 자잘한 이슈가 생겼다.2022년 말에 릴리즈된 스프링부트 3버전 이상에서 Swagger를 사용할 경우 생길 수 있는 이슈라 챗 지피티한테 물어봐도 적절한 대답을 얻지 못하였고, 구글링을 해봐도 해결책을 쉽게 얻지 못해서 누군가가 이글을 보고 도움을 얻었으면 하는 마음으로 기록해둔다. 먼저 현재 내가 작업중인 프로젝트의 스프링 부트 버전은 3.1.0(3.X.X 버전 이상)이다.(글 후반에 나오겠지만..

목차배경스프링부트(Sping Boot)를 이용하여 구현한 서버를 AWS Ec2 머신을 활용하여 public ip주소를 할당받아 배포하는 방법이다. git과 aws만 다뤄본 경험이 있다면 어렵지 않게 따라 할 수있다. 빌드도구로는 Maven을 사용하였다. 각자 로컬 머신에서 구현한 프로젝트를 사용하는 깃허브 계정에 올려두는 것까지는 완료가 되었다고 가정하고 진행하겠다. 1. EC2 머신 사용하기 예전에 올렸던 아래 글을 참고하면 된다.AWS - EC2 할당받아 가상컴퓨터 사용하기 (tistory.com) AWS - EC2 할당받아 가상컴퓨터 사용하기여러 조그만 프로젝트를 진행할수록 aws와 구글이 최고란걸 느낀다. 지금 포스팅하는 가상 컴퓨팅은 피지컬적 한계를 해결해주기도하고. google cloud pl..