From cd9fbcbda6ce3635c138e8b53fa417ac4a8e59c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B8=8C=EB=A6=AC?= Date: Mon, 29 Apr 2024 17:17:25 +0900 Subject: [PATCH] docs: add guide for mission 2 (#27) --- reviewer/be-lv2/README.md | 2 +- reviewer/be-lv2/roomescape-member.md | 49 ++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 reviewer/be-lv2/roomescape-member.md diff --git a/reviewer/be-lv2/README.md b/reviewer/be-lv2/README.md index 187f810..197d90f 100644 --- a/reviewer/be-lv2/README.md +++ b/reviewer/be-lv2/README.md @@ -11,7 +11,7 @@ ## 미션별 리뷰어 가이드 * [방탈출 예약 관리](./roomescape-admin.md) -* [방탈출 사용자 예약](./roomescape-user-reservation.md) +* [방탈출 사용자 예약](./roomescape-member.md) * [방탈출 예약 대기](./roomescape-wating.md) * [방탈출 결제/배포](./roomescape-payment.md) diff --git a/reviewer/be-lv2/roomescape-member.md b/reviewer/be-lv2/roomescape-member.md new file mode 100644 index 0000000..680b996 --- /dev/null +++ b/reviewer/be-lv2/roomescape-member.md @@ -0,0 +1,49 @@ +# 방탈출 사용자 예약 + +--- + +## 리뷰어 가이드 + +이번 미션은 방탈출 테마를 예약하는 사용자의 요청을 처리하면서 크루들이 좀 더 현실과 가까운 고민을 할 수 있도록 설계되었습니다. + +- 요청에 대한 해피 케이스만 생각했던 이전 미션과 달리, 사용자가 잘못된 요청을 보낼 수 있는 상황을 고려해보고 이에 대한 검증과 예외 처리를 어떻게 할지 고민하게 됩니다. +- HTTP 프로토콜에 대해 학습하고 이를 API 설계에 적용해 봅니다. 이런 경험을 위해 구현해야 하는 요구사항도 다양해 집니다. +- 단순 조회보다는 조금 더 복잡한 SQL 쿼리를 작성합니다. + +요구사항에 대한 일반적인/보편적인 구현 방식이 있을수는 있지만 (잘 아시다시피) 정답은 없습니다. +크루들이 하나의 정답을 찾는 것처럼 느껴진다면, 반례가 될 수 있는 다른 상황을 제시하고 이에 대한 크루의 생각을 물어봐 주세요. +그리고 이런 과정을 통해 크루들이 본인만의 기준을 세울 수 있도록 도와주세요. + +--- + +## 경험해야할 학습 목표 + +- HTTP 프로토콜에 대한 이해와 구현 +- 요청에 대한 API를 설계하고 구현 +- 사용자 인증 방식이 무엇인지 알고, 이를 코드에 적용 +- 필요한 데이터 조회를 위한 쿼리 작성 +- 테스트 도구를 사용해서 웹 요청/응답에 대해 자동으로 검증 + +--- + +## 리뷰 포인트 + +### 1~3단계 + +- 요구사항에서 발생할 수 있는 예외에 대한 처리가 잘 되어있는가? + - 예를 들어, 시간 관리에서 시간이 중복되는 경우에 대한 처리가 잘 되어있는가? + - @ExceptionHandler 나 @ControllerAdvice를 사용하여 예외 처리를 하였는가? +- API를 보편적으로 이해 가능하게 설계 하였는가? (테마 관리, 예약 추가, 인기 테마 조회) + - 요청에서의 HTTP Method와 URL이 의미에 맞게 사용되었는가? + - 응답에서의 HTTP Status Code가 적절하게 사용되었는가? +- 구현한 기능을 검증할 수 있는 API 레벨의 통합 테스트를 작성하였는가? + - 이전 미션에서는 제공된 테스트 코드를 사용했다면, 이번에는 스스로 작성하는 것이 목표 + - 특정 계층에 대한 단위 테스트는 필수 요구사항이 아님 + +### 4~6단계 + +- 인증/인가의 개념에 대해 정확히 이해하고 구현하였는가? + - 인증 요청과 응답, 이후의 요청에 대한 flow를 잘 설명할 수 있는가? +- 인증/인가 처리 시 HandlerInterceptor, HandlerMethodArgumentResolver 등 스프링이 제공하는 적절한 기능을 사용하였는가? +- SQL 작성 시 JOIN, GROUP BY, ORDER BY, 집계 함수 등을 사용하여 원하는 데이터를 추출할 수 있는가? + - 성능에 대한 고려는 레벨2 과정에서 필수가 아니지만 이미 미션의 학습 목표를 충분히 달성한 경우 추가 키워드로 제시할 수 있음