-
6주차 회고노토항해 플러스 백엔드 5기 2024. 7. 27. 16:27
1. 이번 과제
주제: e-커머스 서비스 개발
Step11: 나의 시나리오에서 발생할 수 있는 동시성 이슈에 대해 파악하고 가능한 동시성 제어 방식들을 도입해보고 각각의 장단점을 파악한 내용을 정리 제출
- 구현의 복잡도, 성능, 효율성 등
- README 작성 혹은 외부 링크, 프로젝트 내의 다른 문서에 작성하였다면 README에 링크 게재
Step12: DB Lock 을 활용한 동시성 제어 방식 에서 해당 비즈니스 로직에서 적합하다고 판단하여 차용한 동시성 제어 방식을 구현하여 비즈니스 로직에 적용하고, 통합테스트 등으로 이를 검증하는 코드 작성 및 제출
2. 회고
✏️ 문제
과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제
이번 주차를 지나며 겪었던 문제가 무엇이었나요?
- 특정 사용자의 포인트 충천이 동시에 들어오는 요청에 대해서 하나의 충전만 가능하게 할 것 인지, 순차적으로 충전을 성공시킬지?
- 각 시나리오 별로 어떤 방식의 동시성 처리를 적용할 것 인가?
- 통합 테스트시 필요한 사전 데이터를 어떻게 준비하고 테스트가 완료된 경우 데이터 원복 또는 삭제를 어떻게 할 것 인가?
- 주문 생성에 대한 로직이 하나의 서비스 레이어 메소드 안에 모두 존재하다 보니 보상 트랜잭션 컨트롤 문제...
✏️ 시도
문제를 해결하기 위해 어떤 시도를 하셨나요?
- 특정 사용자의 포인트 충전에 동시에 들어올만한 시나리오가 어떤 것이 있을까? 에 대해서 고민을 해보았다.
- 각 시나리오 별로 낙관적 락, 비관적 락 두 가지 방식을 모두 적용해보려고 시도했다.
- 주변 동료나 같은 과정을 수료하고 있는 동기 또는 멘토님께 현업에서 어떤식으로 테스트 데이터를 관리하는지 질문을 시도해보았다.
- 주문 생성에 대한 보상 트랜잭션을 처리하기 위해 파사드로 패키지 구조를 변경해야할지? 트랜잭션을 처리하고 싶은 단위별로 로직을 나누는 방법은 없을까? 그게 두가지 방식을 시도해 보려고 한다.
✏️ 해결
문제를 어떻게 해결하셨나요?
- 하나의 사용자에 대한 포인트 충전이 동시에 요청이 되는 시나리오는 프론트 또는 앱에서 충전 요청 API를 중복 요청 경우(따닥) 가 발생한 시나리오로 판단하여, 하나의 사용자의 포인트 충전 요청이 동시에 여러번 요청되는 경우 낙관적 락을 적용하여 해결하였다.
- 사용자 포인트 충전 및 사용에는 낙관적 락을 적용, 주문 재고 차감에 대해선 비관적 락을 적용하여 해결하였다.
- 테스트 데이터를 제공하는 다양한 방법들이 있었고 실제 테스트시에는 H2를 사용하도록 하고, 테스트 데이터에 대한 생성 로직은 따로 fixture라는 컴포넌트를 작성하고 테스트 데이터를 만드는 메소드들을 모아두는 방식으로 활용해 보려고 한다.
- 해결은 아니지만 시도중인... 주문 생성에 대한 보상 트랜잭션 처리를 위해서 트랜잭션을 처리하고 싶은 단위별로 로직을 나누는 방법으로 접근해 보려고 한다.
✏️ 알게된 것
문제를 해결하기 위해 시도하며 새롭게 알게된 것은 무엇인가요?
- 비관적 락과 낙관적 락을 어떤 상황에 사용해야하는지 알게 되었고 이를 기술 블로그에 정리해 두었다.
- 테스트 데이터 생성을 전담하는 fixture 컴포넌트를 생성하여 해당 컴포넌트에 그 작업을 위임하는 방법도 있구나!
- 차후 보상 트랙잭션 처리를 위해 트랙잭션 단위별로 로직들을 분리해서 개발해야 한다는 걸 알게 되었다.
✏️ Keep : 현재 만족하고 계속 유지할 부분
이번 주를 마무리 하며 나에게 만족했던 부분은 무엇인가요?
- 매주 회고를 작성하며 차후에 다시 돌아봤을 때 내가 어떤것 들을 배웠고 어떤 것들이 부족하며 좀 더 공부해야 하는지, 성장에 대해서 불안을 해소해 줄 수 있는 시각적으로 매주 작성한다는 점.
- 무작정 기능을 구현하는 것이 아닌 발생할 수 있는 시나리오에 대해서 좀 더 분석하고 정리하여 컨셉을 잡고 기능 구현에 들어간 점.
✏️ Problem : 개선이 필요하다고 생각하는 문제점
이번 주를 마무리 하며 개선이 필요하다고 생각했던 문제점은 무엇인가요?
- 주문 생성에 대한 보상 트랙잭션 처리를 이번 주에 달성하지 못한점.
- 동시성 테스트에 대한 통합 테스트는 작성했지만 단위 테스트를 작성하지 못한 점.
- 컨트롤러 통합 테스트를 작성하지 못한 점.
✏️ Try : 문제점을 해결하기 위해 시도해야 할 것
이 문제점을 해결하기 위해 다음 한 주간 시도 할 것은 무엇인가요?
- 주문 생성에 대한 보상 트랜잭션 처리를 위해 로직을 분리해보자!
- 동시성 테스트에 대한 단위 테스트, 컨트롤러 통합 테스트를 작성해보자!
'항해 플러스 백엔드 5기' 카테고리의 다른 글
7주차 회고노트 (0) 2024.08.03 적은 부하로 트래픽 처리하기 (0) 2024.07.29 e-커머스 서비스 동시성 문제와 극복 (0) 2024.07.22 5주차 회고노트 (0) 2024.07.21 1 ~ 5주차 서버구축 챕터 회고록 (0) 2024.07.19