ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2주차 회고노트
    항해 플러스 백엔드 5기 2024. 6. 30. 23:10


    1. 이번 과제

    주제: 특강 예약 서비스 개발

    Step3 : 특강 신청 서비스 구현

    • ERD 작성
    • 특강 신청 API
    • 특강 신청 완료 여부 조회 API
    • 특강 선택 API

    Step4 : 동시성 제어, 확장 가능한 엔티티 추가

    • 단 한번의 특강이 아닌 특강을 여러번 진행 할 수 있도록 확장 하기
    • (동시성) 각 특강 별로 최대 30명까지만 정상적으로 요청되도록 기능 구현

    2. 회고

    ✏️ 문제

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

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

     - 클린 + 레이어드 아키텍처 구성

     - 동시성에 대한 고민 : 특강에 1자리만 남았을 경우에 여러 사용자가 수강 요청시 먼저 요청이 들어온 사용자만 신청 완료처리

    ✏️  시도

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

      - 클린 + 레이어드 아키텍처 구성

    • 아래와 같은 구성으로 컨트롤러, 서비스, 레포지토리 간의 의존을 해결할 수 있도록 구성을 가져갔다.

     - 동시성에 대한 고민 : 비관적 락을 사용하여 한명의 사용자가 이미 수강 신청 엔티티를 점유하고 있는 경우 다른 사용자들은 접근할 수 없도록 시도

     ✏️  해결

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

     - 클린 + 레이어드 아키텍처 구성

    • Controller, Domain(Service / Repository)가 변경되어도 서로의 영향이 없도록 설계의 방향성을 잡고
    • Controller -> Service -> Interface Repository -> RepositoryImpl -> interface ORM Repository
    • Controller만 DTO를 알고 있고, Domain(Service / Repository)에서만 Entity를 알 수 있도록 설계하여 의존성을 분리하도록 아키텍처를 설계
    • Service에서 리턴되는 엔티티 객체를 DTO로 변환해주는 컨버터를 Controller <- Converter -> Service 와 같이 사이에 배치하여 서로의 Entity 정보가 Controller 외부에 노출되지않도록 설계

     - 동시성 제어, 확장 가능한 엔티티 추가

    • 강의 스케줄 엔티티를 추가하여 최대 수강 신청자수, 현재 수강 신청자수, 수강일자 컬럼을 추가하여 확장 가능한 엔티티 추가
    • 강의 스케줄 정보를 가져오는 findById() 메소드에 @Lock 어노테이션을 선언하여 비관적락을 구현
    • 강의 신청 메소드에 @Transactional 어노테이션을 추가하여 강의 스케줄 엔티티의 현재 수강 신청자수 증가 및 사용자 특강 신청 완료 히스토리 정보 등록을 하나의 트랙잭션으로 묶어 관리하여 동시성 문제를 처리

    ✏️  알게된 것

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

     ✅ 확장 가능한 엔티티를 추가하면서 각 레이어별로 의존성이 높은 설계인 경우 변경사항이 발생하면서 기술 부채를 발생할 수 있다.

     ✅ 동시성 처리를 위해 비슷한 사례들을 찾아보면서 비관적 락을 구현하는 방법에 대해서 새롭게 알게 되었다.

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

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

     ✅ 클린 + 레이어드 아키텍처 설계의 구조를 계속 고민하면서 확장 열려있는 프로젝트를 만들어갈 수 있도록 유지하자.

     ✅ 회사 업무와 과제를 병행하면서 시간적으로 부족하였는데 과제를 완료하기 위해 노력했다는 점에서 나 자신에게 대견스럽다.

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

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

     ❌ 최대한 기능을 빠르게 개발에 해야겠다는 조급한 마음으로 인해 이번 챕터의 가장 중요한 목표였던 아키텍처 설계에 소홀했던 점

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

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

     🔥 챕터가 마감되고 부족했던 부분들을 리펙토링하여 아키텍처 설계에 미흡했던 부분들을 보완하였다.

     🔥 챕터 진행시마다 해당 챕터에서 중요한 목표를 생각해보고 기준을 잡아 단순하게 과제를 제출하고 끝이 아닌 과제를 제출하고 이것이 개인적인 성장으로 이루어질 수 있는 중요한 목표를 생각하며 개발을 진행해야겠다.

    '항해 플러스 백엔드 5기' 카테고리의 다른 글

    5주차 회고노트  (0) 2024.07.21
    1 ~ 5주차 서버구축 챕터 회고록  (0) 2024.07.19
    4주차 회고노트  (0) 2024.07.13
    3주차 회고노트  (0) 2024.07.06
    1주차 회고노트  (0) 2024.06.22
Designed by Tistory.