ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6주차 회고노토
    항해 플러스 백엔드 5기 2024. 7. 27. 16:27


    1. 이번 과제

    주제: e-커머스 서비스 개발

    Step11: 나의 시나리오에서 발생할 수 있는 동시성 이슈에 대해 파악하고 가능한 동시성 제어 방식들을 도입해보고 각각의 장단점을 파악한 내용을 정리 제출

    • 구현의 복잡도, 성능, 효율성 등
    • README 작성 혹은 외부 링크, 프로젝트 내의 다른 문서에 작성하였다면 README에 링크 게재

    Step12: DB Lock 을 활용한 동시성 제어 방식 에서 해당 비즈니스 로직에서 적합하다고 판단하여 차용한 동시성 제어 방식을 구현하여 비즈니스 로직에 적용하고, 통합테스트 등으로 이를 검증하는 코드 작성 및 제출


    2. 회고

    ✏️ 문제

    과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제

    이번 주차를 지나며 겪었던 문제가 무엇이었나요?

    • 특정 사용자의 포인트 충천이 동시에 들어오는 요청에 대해서 하나의 충전만 가능하게 할 것 인지, 순차적으로 충전을 성공시킬지?
    • 각 시나리오 별로 어떤 방식의 동시성 처리를 적용할 것 인가?
    • 통합 테스트시 필요한 사전 데이터를 어떻게 준비하고 테스트가 완료된 경우 데이터 원복 또는 삭제를 어떻게 할 것 인가?
    • 주문 생성에 대한 로직이 하나의 서비스 레이어 메소드 안에 모두 존재하다 보니 보상 트랜잭션 컨트롤 문제...

    ✏️  시도

    문제를 해결하기 위해 어떤 시도를 하셨나요?

    • 특정 사용자의 포인트 충전에 동시에 들어올만한 시나리오가 어떤 것이 있을까? 에 대해서 고민을 해보았다.
    • 각 시나리오 별로 낙관적 락, 비관적 락 두 가지 방식을 모두 적용해보려고 시도했다.
    • 주변 동료나 같은 과정을 수료하고 있는 동기 또는 멘토님께 현업에서 어떤식으로 테스트 데이터를 관리하는지 질문을 시도해보았다.
    • 주문 생성에 대한 보상 트랜잭션을 처리하기 위해 파사드로 패키지 구조를 변경해야할지? 트랜잭션을 처리하고 싶은 단위별로 로직을 나누는 방법은 없을까? 그게 두가지 방식을 시도해 보려고 한다.

     ✏️  해결

    문제를 어떻게 해결하셨나요?

    • 하나의 사용자에 대한 포인트 충전이 동시에 요청이 되는 시나리오는 프론트 또는 앱에서 충전 요청 API를 중복 요청 경우(따닥) 가 발생한 시나리오로 판단하여, 하나의 사용자의 포인트 충전 요청이 동시에 여러번 요청되는 경우 낙관적 락을 적용하여 해결하였다.
    • 사용자 포인트 충전 및 사용에는 낙관적 락을 적용, 주문 재고 차감에 대해선 비관적 락을 적용하여 해결하였다.
    • 테스트 데이터를 제공하는 다양한 방법들이 있었고 실제 테스트시에는 H2를 사용하도록 하고, 테스트 데이터에 대한 생성 로직은 따로 fixture라는 컴포넌트를 작성하고 테스트 데이터를 만드는 메소드들을 모아두는 방식으로 활용해 보려고 한다.
    • 해결은 아니지만 시도중인... 주문 생성에 대한 보상 트랜잭션 처리를 위해서 트랜잭션을 처리하고 싶은 단위별로 로직을 나누는 방법으로 접근해 보려고 한다. 

    ✏️  알게된 것

    문제를 해결하기 위해 시도하며 새롭게 알게된 것은 무엇인가요?

    • 비관적 락과 낙관적 락을 어떤 상황에 사용해야하는지 알게 되었고 이를 기술 블로그에 정리해 두었다.
    • 테스트 데이터 생성을 전담하는 fixture 컴포넌트를 생성하여 해당 컴포넌트에 그 작업을 위임하는 방법도 있구나!
    • 차후 보상 트랙잭션 처리를 위해 트랙잭션 단위별로 로직들을 분리해서 개발해야 한다는 걸 알게 되었다.

    ✏️  Keep : 현재 만족하고 계속 유지할 부분

    이번 주를 마무리 하며 나에게 만족했던 부분은 무엇인가요?

    • 매주 회고를 작성하며 차후에 다시 돌아봤을 때 내가 어떤것 들을 배웠고 어떤 것들이 부족하며 좀 더 공부해야 하는지, 성장에 대해서 불안을 해소해 줄 수 있는 시각적으로 매주 작성한다는 점.
    • 무작정 기능을 구현하는 것이 아닌 발생할 수 있는 시나리오에 대해서 좀 더 분석하고 정리하여 컨셉을 잡고 기능 구현에 들어간 점.

    ✏️ Problem : 개선이 필요하다고 생각하는 문제점

    이번 주를 마무리 하며 개선이 필요하다고 생각했던 문제점은 무엇인가요?

    • 주문 생성에 대한 보상 트랙잭션 처리를 이번 주에 달성하지 못한점.
    • 동시성 테스트에 대한 통합 테스트는 작성했지만 단위 테스트를 작성하지 못한 점.
    • 컨트롤러 통합 테스트를 작성하지 못한 점.

    ✏️  Try : 문제점을 해결하기 위해 시도해야 할 것

    이 문제점을 해결하기 위해 다음 한 주간 시도 할 것은 무엇인가요?

    • 주문 생성에 대한 보상 트랜잭션 처리를 위해 로직을 분리해보자!
    • 동시성 테스트에 대한 단위 테스트, 컨트롤러 통합 테스트를 작성해보자!
Designed by Tistory.