- 미션은 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항 세 가지로 구성되어 있다.
- 세 개의 요구 사항을 만족하기 위해 노력한다. 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다.
- 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다.
- 미션 구현을 완료한 후 GitHub PR 요청을 통해 제출합니다.
- 터미널에서
npm run test
명령을 실행하여 모든 테스트가 아래와 같이 통과하는지 확인한다.
Ran all test suites.
기본적으로 휴대전화 번호 인증을 위한 API를 구현한다.
예시)
- 010-1234-5678로 인증번호를 전송한다.
- 010-1234-5678로 전송된 인증번호를 입력하면 인증이 완료된다.
총 2개의 API 엔드포인트로 구성한다.
-
휴대전화 번호를 인증번호를 전송하는 API
- 실제 휴대전화 번호로 전송되는 것이 아니라, 휴대전화 번호를 입력하면 인증번호가 전송된다고 가정한다.
- 인증번호은 인증 요청시간으로부터 5분간 유효하다고 가정한다.
- 인증번호 전송시에는 API 응답으로 인증번호를 리턴한다.
-
휴대전화 번호와 인증번호를 입력받아 인증하는 API
- API에 요청받은 Body 값의 타입을 검증하여 올바르지 않은 타입일 경우
400 BadRequest
에러를 리턴해야한다. - API에 요청받은 Body 값의 필수 값이 누락되거나/빈 값인 경우
400 BadRequest
에러를 리턴해야한다.
- 모든 API의 요청/응답은 DTO를 통해 TypeSafe하게 이루어져야한다.
- DTO의 타입은
class-validator
를 이용하여 검증한다. - DTO 내부 요소의 명칭은
camelCase
로 작성한다.
- 휴대전화 번호는 010-1234-5678과 같은 문자열 형식이다.
phoneNumber : 010-1234-5678
- 인증번호는 6자리 랜덤 숫자이다.
code : 612131
- 인증번호 요청시 인증번호를 응답으로 리턴한다.
code : 612131
- 인증 완료시
true
를 응답으로 리턴한다.
result : true
-
Javascript 코드가 아닌 Typescript 코드로만 구현해야 한다.
-
Swagger를 이용하여 API 명세를 작성한다.
-
package.json에 명시된 라이브러리만을 이용하여 구현한다.
-
eslint, prettier 등의 코드 포맷팅 라이브러리를 이용하여 제공된 코드 컨벤션에 맞추어 코드를 작성한다.
-
node
,npm
버전은package.json
에 명시된 버전을 사용한다. Volta를 이용하여 node 버전을 관리한다. -
(선택 사항) API 구현이 완료되고, 유닛 테스트, E2E 테스트등 모든 테스트 코드를 작성하여 테스트를 통과하면 굿!
- 미션은 nest-phone-verify 저장소를 Fork & Clone 하고 시작한다.
- 기능을 구현하기 전
README.md
에 구현할 기능/예외처리를 목록으로 정리해 추가한다.