반응형

📕 오늘 학습 키워드

📔 미니 배민 과제로 숙련주차 복습하기

📑 요구사항 분석, 엔티티 설계, 인증과 권한, 주문과 결제

  • 엔티티 설계: 서비스에서 필요한 데이터와 그 데이터 사이의 관계를 정하는 것.
  • JWT 인증: 로그인할 때 받은 토큰으로 이후 요청에서 사용자를 확인하는 방식.
  • 역할과 소유권: 사장인지 확인하는 것과, 해당 가게의 사장인지 확인하는 것은 별도의 검사다.
  • 주문과 결제: 주문을 생성하면 내역이 저장되고, 결제는 이미 생성된 주문을 대상으로 진행된다.

📕 오늘 학습한 내용

📔 무엇을 배웠는지

  • 회원가입과 JWT 로그인 부터 사장의 가게, 메뉴 등록, 고객의 주문과 결제(PG없음), 사장의 주문 수락과 배달 완료까지 구현하고 service별로 테스트를 추가했다. 기능을 한꺼번에 구현하기보다는 단계마다 내가 이해한 흐름이 맞는지 확인하며 진행했다.
  • 고객 한 명은 여러 주문을 만들 수 있고, 주문 하나에는 여러 메뉴와 수량을 담을 수 있다. 이를 표현하기 위해 주문 전체 정보를 담는 Order와 각 메뉴의 주문 정보를 담는 OrderItem을 분리했다. 주문은 생성 시점부터 DB에 저장되고, 결제는 이미 생성된 주문을 대상으로 별도로 진행된다.

📔 직접 해본 것

  • 회원가입, 비밀번호 암호화, JWT 로그인 구현.
  • 가게 등록과 메뉴 등록·조회·수정·Soft Delete 구현.
  • 여러 메뉴를 담는 주문 생성, 역할별 주문 목록과 주문 상세 조회 구현.
  • 결제, 미결제 주문 취소, 사장의 주문 수락과 배달 완료, 본인 결제 내역 조회 구현.
  • Postman 요청과 DB 조회로 응답 및 저장 결과 확인.
  • 중복 결제, 다른 사용자의 데이터 접근, 잘못된 주문 상태에서의 요청 등을 포함해 필수 기능의 39개 API 시나리오 검증.

📕 학습하며 겪었던 문제점 & 에러

📔 문제 또는 헷갈렸던 점

  • 메뉴 선택과 주문 생성을 같은 단계로 생각했다. 메뉴를 골라둔 것과 주문 요청을 보내 DB에 저장한 것은 달랐다. 주문이 생성돼야 주문 당시 금액이 저장되며, 메뉴 가격 변경만으로 새 주문이 생기지는 않는다는 점을 정리했다.
  • 사장 역할과 소유권을 혼동했다. OWNER 역할이어도 다른 사장의 메뉴나 주문을 처리할 수 없다. Security의 역할 검사와 Service의 본인 가게 여부 검사가 각각 필요하다는 것을 확인했다.
  • Hibernate Dialect 오류가 발생했다. 확인해 보니 Docker가 꺼져 PostgreSQL에 연결하지 못한 것이 원인이었다. 기존 DB 컨테이너를 실행하고 연결을 확인한 뒤 해결했다.
  • 201 응답과 DB 저장 과정을 혼동했다. 테이블 구조는 앱 시작 시 Hibernate 설정에 따라 반영되고, 데이터 저장은 Repository와 트랜잭션을 통해 진행된다. 201 Created는 그 결과를 알리는 HTTP 응답이라는 점을 정리했다.

📕 내일 학습할 내용

📔 다음 학습

  • Service의 성공·실패 단위 테스트를 작성하고 점검하며 기능별 조건 다시 확인하기.
  • 메뉴 페이징·정렬, 취소 시간 제한, 결제 후 취소와 주문 거절 등 도전 기능 이어서 점검하기.
  • JWT 인증부터 소유권 검사, 주문 생성과 결제까지의 흐름을 코드를 보며 다시 설명해 보기.

더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.