분산락 실습을 위한 주제 선정 배경

우테코 오픈미션을 준비하면서 처음 부딪힌 고민은 ‘어떤 주제를 선택할 것인가’였다.

너무 쉬운 주제를 고르면 금방 끝나 버리고, 너무 생소하거나 과도하게 거대한 주제를 선택하면 공부가 산으로 갈 것 같았다.

무엇보다 ‘지금의 내 수준에서, 정말 열정을 쏟을 만한 도전과제’가 무엇인지 스스로 판단하기가 쉽지 않았다.

처음 후보로 올린 주제들은 다양했다.

사실, 지금까지 만들었던 백엔드 프로젝트들을 처음부터 다시 뜯어보고 레거시 리팩토링을 하려는 생각도 있었다.

하지만 그것보다는 우테코와 조금이라도 연결된 도메인, 그리고 내가 모르는 세계를 처음부터 끝까지 직접 파볼 수 있는 기술에 마음이 갔다.

그 과정에서 특히 눈길을 끌었던 것이 다중 서버 환경에서의 동시성, 그리고 분산락이었다.

이 주제는 내가 실제로 경험해본 적이 없는, 지식도 거의 없는 분야였기 때문에 도전해보기로 했다.

분산락에 대해 내가 알고 있던 선지식

이 오픈미션을 시작할 때, 분산락에 대해 알고 있던 내용은 사실상 이것뿐이었다.

‘여러개의 서버가 하나의 DB를 공유할 때, 동시에 같은 데이터를 수정하면 안 되므로, 한 번에 하나의 서버만 DB에 접근하도록 잠금을 거는 것.’

예시로 떠올렸던 것은 배달의 민족 어플의 선착순 쿠폰 발급 도메인이었다.

100개만 발급해야 하는 쿠폰이 있는데, 서버가 3대라면 다음과 같은 문제가 생길 수 있다.