- READ.ME 작성
- 프로젝트 빌드, 자세한 실행 방법 명시
- 구현 방법과 이유에 대한 간략한 설명
- 서버 구조 및 디자인 패턴에 대한 개략적인 설명
- 완료된 시스템이 배포된 서버의 주소
- 해당 과제를 진행하면서 회고 내용 블로그 포스팅
- Swagger나 Postman을 이용하여 API 테스트 가능하도록 구현
- 데이터베이스 환경은 별도로 제공하지 않습니다. RDB중 원하는 방식을 선택하면 되며, sqlite3 같은 별도의 설치없이 이용 가능한 in-memory DB도 좋으며, 가능하다면 Docker로 준비하셔도 됩니다.
- 단, 결과 제출 시 README.md 파일에 실행 방법을 완벽히 서술하여 DB를 포함하여 전체적인 서버를 구동하는데 문제없도록 해야합니다.
- 데이터베이스 관련처리는 raw query가 아닌 ORM을 이용하여 구현합니다.
- Response Codes API를 성공적으로 호출할 경우 200번 코드를 반환하고, 그 외의 경우에는 아래의 코드로 반환합니다.
🎁 요구사항
- ID/Password로 사용자를 생성하는 API.
- 인증 토큰을 발급하고 이후의 API는 인증된 사용자만 호출할 수 있다.
/* Request Body 예제 */
{ "id": "candycandy", "password": "ASdfdsf3232@" }
🎁 요구사항
- 자동차 차종 ID(trimID)를 이용하여 사용자가 소유한 자동차 정보를 저장한다.
- 한 번에 최대 5명까지의 사용자에 대한 요청을 받을 수 있도록 해야한다. 즉 사용자 정보와 trimId 5쌍을 요청데이터로 하여금 API를 호출할 수 있다는 의미이다.
/* Request Body 예제 */
[
{
"id": "candycandy",
"trimId": 5000
},
{
"id": "mylovewolkswagen",
"trimId": 9000
},
{
"id": "bmwwow",
"trimId": 11000
},
{
"id": "dreamcar",
"trimId": 15000
}
]
🔍 상세구현 가이드
-
자동차 정보 조회 API의 사용은 아래와 같이 5000, 9000부분에 trimId를 넘겨서 조회할 수 있다. **자동차 정보 조회 API 사용 예제 →
https://dev.mycar.cardoc.co.kr/v1/trim/5000
https://dev.mycar.cardoc.co.kr/v1/trim/9000
https://dev.mycar.cardoc.co.kr/v1/trim/11000
https://dev.mycar.cardoc.co.kr/v1/trim/15000 -
조회된 정보에서 타이어 정보는 spec → driving → frontTire/rearTire 에서 찾을 수 있다.
-
타이어 정보는 205/75R18의 포맷이 정상이다. 205는 타이어 폭을 의미하고 75R은 편평비, 그리고 마지막 18은 휠사이즈로써 {폭}/{편평비}R{18}과 같은 구조이다. 위와 같은 형식의 데이터일 경우만 DB에 항목별로 나누어 서로다른 Column에 저장하도록 한다.
🎁 요구사항
- 사용자 ID를 통해서 2번 API에서 저장한 타이어 정보를 조회할 수 있어야 한다.
API 테스트 : https://www.postman.com/cloudy-robot-203980/workspace/cardoc/collection/17666851-398473aa-1fe3-49c2-8a44-d18421cabfd8
login_id
와password
를 request의 body에서 받아옵니다.login_id
에 해당하는 사용자가 있다면 중복된 아이디를 알리는 에러를 반환합니다.- 없다면 bcrypt를 통해 비밀번호를 암호화하고 이 암호화된 비밀번호를 이용하여 유저를 생성합니다.
- 로그인 하기 위해
login_id
와password
를 request의 body에서 받아옵니다. login_id
에 해당하는 사용자가 없다면 해당 에러를 반환합니다- 또한 암호화된 비밀번호가 다를 경우 해당 에러를 반환합니다.
- 로그인이 성공되었다면 토큰을 반환합니다.
- request의 body에 데이터가 5개가 넘을 경우 에러 메세지와 code 400을 반환합니다.
- body에서 입력받은
trimId
값을 cardoc에서 제공해준 URL주소로 get 요청을 보내고 해당하는 trim 정보를 받아옵니다. - 정규식을 사용하여 데이터가
{width}/{aspect_ratio}R{wheel_size}
형식일 경우에만 DB에 항목별로 나누어 서로다른 Column에 저장합니다. - User와 Trim 테이블을 연결시켜주는 UserTrim의 데이터를 만들어준 후 user가 소유한 trim의 tire 정보들을 조회할 수 있도록 합니다.
- 로그인한 유저의 토큰을 header에 담아 조회합니다
- 로그인한 유저가 소유한 trim의 tire 정보들을 조회합니다
이 프로젝트는 원티드x위코드 백엔드 프리온보딩 과제 일환으로 카닥에서 출제한 과제를 기반으로 만들었습니다. 감사합니다.