본문 바로가기

My Cookbook104

[항해] 2주차, 동시성 제어하기 (with DB 레벨) 항해 2주차에는 특강 신청 서비스를 개발하면서 신청 시에 발생할 수 있는 동시성 이슈를 잡는게 목표였다.정확하게 30명의 사용자에게만 특강을 제공할 방법을 고민해보자.같은 사용자에게 여러 번의 특강 슬롯이 제공되지 않도록 제한할 방법을 고민해보자. 위 2가지가 이번 주차의 KEY POINT 이므로 이를 지키도록 하는 리팩토링을 하면서 새롭게 알게된 기술과 고민했던 부분을 적어보려고 한다.목차- 동시성 제어 후보- 낙관적 락과 비관적 락 중 선택- 비관적 락 구현 방법 및 종류- 락 적용 전과 후- 비관적락 사용 시 고려 해야할 점- 회고 동시성 제어 후보낙관적 락(Optimistic Lock)데이터를 업데이트하기 전 다른 사용자가 데이터를 변경했는지 확인하는 방식이다.버전 번호나 타임 스탬프를 사용한다... 2025. 1. 5.
[항해] 2주차, 클린 아키텍처 항해 2주차에는 다양한 아키텍처 중에 클린 & 레이어드 아키텍처 패턴으로 특강 예약 서비스 서버를 구축하는게 발제였다.레이어드 아키텍처의 한계점과 클린 아키텍처로 상호 보완해서 패키지를 구성한 내용에 대해 정리해보려고 한다.목차- 레이어드 아키텍처- 레이어드 아키텍처의 한계와 개선 방향- 클린 아키텍처 개념 적용- 파사드 패턴을 사용한 설계- 클린 & 레이어드를 적용한 패키지 구조- 결론레이어드 아키텍처아키텍처 설계에서 레이어 중심(interfaces, applicaiont, domain, infrastructure)으로 구분을 하였다.레이어를 기준으로 구분을 해서 설계하였을 때의 구조적 이점으로는 명확한 책임 분리가 가능해지고, 도메인 재사용성이 증가하고 테스트가 용이해진다.명확한 책임 분리레이어 각각.. 2025. 1. 5.
[항해] 1주차, 동시성 제어하기(순서 보장 포함) 항해 1주차에서 TDD 개발을 진행하고, 심화 과제로 포인트 충전 / 사용을 동시에 요청했을때 발생할 수 있는 동시성 이슈를 제어하는게 목표이다.목차- 요구 사항 분석- 동시성 제어할 레벨 선택- 애플리케이션(자바)에서 동시성 제어하는 방식 후보- 동시성 제어 통합테스트 TDD 과정- 최적화된 동시성 고민- 결론요구 사항 분석동시에 여러 요청이 들어오더라도 순서대로 (혹은 한번에 하나의 요청씩만) 제어될 수 있도록 리팩토링한다.동시성 제어에 대한 통합 테스트를 작성한다.분산 환경은 고려하지 않는다.요구 사항을 분석해봤을때우선, 동시성을 어느 레벨에서 제어할지 결정해야한다.이어서 동시성 제어를 하면서 순서 보장 할 수 있게 작업을 수행해야한다. 동시성 제어할 레벨 선택동시성을 제어하는 방법으로는 크게 3가.. 2024. 12. 22.
[항해] 1주차, TDD 방법론을 사용하여 개발하기 항해 1주차에는 TDD 방법론 사용하여 포인트 REST API를 개발하는게 발제였다.개발하는 과정과 문제에 봉착했을때 어떻게 해결했는지에 대해 정리해보려고 한다.개발 진행 과정1.  테스트가 실패하도록 작성2. 테스트를 성공시키기 위한 최소한의 코드 작성3. 실제 코드 리팩토링요구 사항PATCH /point/{id}/charge : 포인트를 충전한다.PATCH /point/{id}/use : 포인트를 사용한다.GET /point/{id} : 포인트를 조회한다.GET /point/{id}/histories : 포인트 내역을 조회한다.잔고가 부족할 경우, 포인트 사용은 실패하여야 합니다.동시에 여러 건의 포인트 충전, 이용 요청이 들어올 경우 순차적으로 처리되어야 합니다.위와 같이 요청 사항이 주어졌을때 아.. 2024. 12. 21.