어느 날, 김세이라는 열정적인 개발자는 프로젝트를 진행하던 중 갑자기 고민에 빠졌다.
“사용자들이 동시에 여러 개의 요청을 보낼 때, 과연 어떻게 처리될까? 특히 입금이나 출금처럼 중요한 금융 요청들이 겹칠 때 문제가 생기지 않도록 어떻게 처리해야 하지?”
이 생각은 단순한 궁금증을 넘어서 중요한 문제로 다가왔다. 사용자가 동시에 여러 요청을 보냈을 때, 처리 순서나 성공 여부에 따라 결과가 달라질 수 있기 때문이다. 예를 들어, 입금 요청이 두 개 동시에 들어오면 하나는 성공하고 나머지는 실패하게 해야 한다. 또한, 입금과 출금이 동시에 일어날 수 있는데, 이 경우 요청이 차례대로 실행되어야 했다.
김세이는 혼자서 이 문제를 해결하는 것보다 팀과 상의하는 것이 좋겠다고 생각했다. 팀 동료들에게 고민을 털어놓자, 모두가 그의 생각에 공감했다.
“맞아, 이런 금융 트랜잭션에서 동시성 문제가 발생하면 큰 문제가 될 수 있어. 반드시 순차적으로 처리가 이루어져야 해,” 한 동료가 진지하게 말했다.
“그리고 입금 요청이 여러 개 동시에 들어올 경우 하나만 성공하고 나머지는 실패하도록 처리해야겠네,” 또 다른 동료가 덧붙였다.
김세이는 동료들과 의견을 나누며 점점 확신이 생겼다. 이 문제를 해결하기 위해 필요한 기능을 정의하고 구현하는 일은 그들의 프로젝트에서 매우 중요한 과제였다. 그렇게 김세이와 팀원들은 함께 동시성 문제를 해결하고 안전한 금융 서비스 구현을 목표로 나아가기 시작했다.
Author: Chat-GPT
com.seikim.spring.readonly파일은 오로직 읽기만하시고 수정하지 마세요!
com.seikim.spring.solution 패키지 안에 있는 파일만 수정, 추가하여 문제를 해결해보세요!
테스트는 com.seikim.spring.SolutionTest을 실행시켜 모두 성공시키면 성공입니다!
총 4개의 문제로 구성되어 있습니다.
- 동일한 유저에게 요청이 여러개가 들어오면 차례대로 실행됩니다.
- 동일한 유저에게 잔고 입금 요청이 동시에 2개 이상 발생하는 경우 한 요청만 성공하고, 나머지는 실패합니다
- 동일한 유저에게 잔고 입금과 출금 요청이 동시에 발생할 수 있습니다. 이 경우 요청은 차례대로 실행됩니다.
- 동일한 유저에게 잔고 출금 요청이 동시에 2개 이상 발생하는 경우, 요청이 차례대로 실행됩니다.