Skip to content

Latest commit

 

History

History
134 lines (111 loc) · 6.23 KB

File metadata and controls

134 lines (111 loc) · 6.23 KB

Work Log

프로젝트 작업 기록

2025-08-25

19:30~23:30 / 프로젝트 초기 설정

  • lessonReservation 프로젝트 기본 구조 설계
  • DDD 패키지 구조 설계 및 생성
    • applicationInfra (공통 인프라)
    • lesson (수업 도메인)
    • reservation (예약 도메인)
      • checkin (체크인 서브도메인)
    • member (회원 도메인)
      • systemNotice (시스템알림메세지 서브도메인) // 향후 추가 - checkin (체크인 도메인) // 0826 예약 도메인의 서브도메인으로 이동
  • Docker 환경 설정 (MySQL + Redis)
  • 기본 설정 파일들 생성 (application.yml, build.gradle 등)
  • BaseEntity 추상 클래스 생성 (JPA Auditing)
  • Redis, Swagger 설정 클래스 구현

2025-08-26

19:00~23:00 / 도메인 설계 및 구현

  • lessonReservation 프로젝트 도메인 설계
  • Exception Infra 구현
  • 도메인 설계
  • DDL, 샘플데이터DML 작성
  • 엔티티들 구현

2025-08-27

19:00~11:00 / 모델 개선 및 단위 테스트 구현

  • security with jwt
  • 도메인 Exception 클래스 구현 및 엔티티에 적용(AuthException 미구현)
  • 수업 정원 수정에 대한 고민:
    • 정원 수정시 예약회원들의 확정 <-> 대기 상태 변경이 이뤄져야 함.
    • 정원 감소시 확정상태의 예약자의 상태변경+대기큐 변경 필요.
    • 지금은 정원 증원수를 인풋으로 받아 그만큼 대기 큐에서 확정으로 승격만 처리하는 룰 설정
  • DDD 규칙 준수를 위한 구조 개선:
    • ReservationDomainService 및 CheckinDomainService 도메인 서비스 생성
    • Aggregate 경계 위반 문제 해결 (예: Reservation에서 lesson.isReservable() 직접 호출 제거)
    • 엔티티 책임 명확화: 각 엔티티는 자신의 상태와 불변식만 관리
    • 도메인 서비스를 통한 여러 Aggregate 간 협력 로직 처리
  • JUnit5 + AssertJ + Mockito 기반 단위 테스트 작성
    • Member 엔티티 단위 테스트 작성 (MemberTest.java)
      • 회원 생성, 검증, 도메인 메서드 테스트
    • Password 단위 테스트 작성 (PasswordTest.java)
      • 비밀번호 생성, 암호화, 일치 확인, 변경, 불변성 테스트
    • Lesson 엔티티 단위 테스트 작성 (LessonTest.java)
      • 수업 생성, 검증, 상태 변경, 도메인 메서드 테스트
    • Reservation 엔티티 단위 테스트 작성 (ReservationTest.java)
      • 예약 생성, 취소, 확정, 체크인 가능 여부 테스트
    • Checkin 엔티티 단위 테스트 작성 (CheckinTest.java)
      • 체크인 생성, 검증, 도메인 메서드, 비즈니스 시나리오 테스트
    • 도메인 서비스 테스트 코드 작성:
      • ReservationDomainServiceTest: 예약 생성/취소/확정 검증 로직 테스트
      • CheckinDomainServiceTest: 체크인 시간/자격 검증 로직 테스트

2025-08-28

16:30~20:00 / 레포지토리, DTO, 서비스 구현

  • security with jwt
  • Lesson Repository, DTO, Application Service 구현
  • Member Repository, DTO, Application Service 구현

2025-08-29

20:00~:24:00 / 레포지토리, DTO, 서비스 구현 및 단위 테스트

  • Lesson Repository, DTO, Application Service 단위테스트
  • Member Repository, DTO, Application Service 단위테스트
  • Reservation Repository, DTO, Application Service (Query) 구현
  • Application Service(Command) 구현 중 - redis 분산락, 캐싱

2025-08-30

13:00~:18:30 / 레포지토리, DTO, 서비스 구현 및 단위/통합 테스트

  • Reservation Repository, DTO, Application Service (Query) 단위테스트
  • Application Service (Command) 구현 - redis 분산락, 캐싱
  • Application Service (Command) 단위테스트 & 통합테스트(Testcontainers-MySQL, Redis)

22:00~24:00 / 수업 캔슬/정원증가, 회원 비활성화 시 예약 상태 변화

  • Event Driven Architecture 적용
  • 수업 캔슬 시 해당 수업의 모든 예약 취소 처리
  • 수업 정원 증가 시 대기열에서 확정으로 승격 처리
  • 회원 비활성화 시 해당 회원의 모든 예약 취소 처리

2025-08-31

08:00~12:00 / 레포지토리, DTO, 서비스 구현 및 단위 테스트

  • Checkin Repository, DTO, Application Service 구현
  • service 메서드 DTO 반환으로 수정 및 테스트코드 수정

13:00~17:00 / Auth 구현, 도메인 컨트롤러들 구현

  • 로그인/로그아웃 DTO~컨트롤러까지 구현
  • 관리자(admin) 관련 세팅
    1. 로그인: Admin 이메일로 로그인 → JWT 토큰에는 이메일만 저장
    2. API 요청: JWT 토큰을 헤더에 포함하여 요청
    3. 토큰 검증: 토큰 디코딩하여 회원 이메일 추출 -> MemberRepository에서 회원 객체 조회
    4. Admin 판별: 조회한 객체의 ID가 -1L과 일치하는지 확인
    5. 권한 부여: Admin이면 런타임에 ADMIN 권한 부여
  • 단위 테스트 구현
  • redis 캐시 TTL 설정 - 수업 시작시간으로 설정해 수업 시작 후에는 자동 삭제
  • 도메인 컨트롤러 구현
    • adminController, (일반회원 또는 퍼블릭)Controller 따로

19:00~22:00 / 도메인 컨트롤러들 단위테스트

  • 도메인 컨트롤러 단위 테스트 구현

2025-09-01

13:30~17:00 / 캐시 셀프힐링 로직 추가, role-based 시큐리티

  • 캐시 셀프 힐링
    • 캐시 셀프 힐링 로직 추가 위해 파람으로 수업id 대신 수업 객체 받는 것으로 수정
    • 연관된 모든 코드 수정
    • 없는 수업이거나, 예약불가인 수업(즉 캔슬되거나 수업이 시작하여 캐시가 삭제/만료된 수업)은 셀프힐링 제외
  • role-based 시큐리티 적용
    • ADMIN역할 구분
    • ADMIN controller 접근 권한 제어
    • 시큐리티 설정 클래스 수정
  • 전체 플로우 통합테스트
    • SystemIntegrationTest.java 작성 및 설정 세팅

18:30~21:00 / 멱등성 보장 필터 추가 및 테스트, 문서 정리

  • 멱등성보장 필터 추가
    • 30초 이내 동일 요청(요청 헤더에 포함된 멱등성 키가 같은)에 같은 리스폰스 주기 위해 레디스에 응답 캐싱
  • 문서 정리
    • README.md 업데이트
    • 설계 결정 사항 문서화
    • 성능 고려사항 정리
    • 미완 항목 및 개선 방안 정리

TODO: 도메인별 통합테스트 대신 전체 플로우 통합테스트