[Assignment]7 카닥

raejun·2021년 11월 27일
0
post-thumbnail
  • READ.ME 작성
    • 프로젝트 빌드, 자세한 실행 방법 명시
    • 구현 방법과 이유에 대한 간략한 설명
    • 서버 구조 및 디자인 패턴에 대한 개략적인 설명
    • 완료된 시스템이 배포된 서버의 주소
    • 해당 과제를 진행하면서 회고 내용 블로그 포스팅
  • Swagger나 Postman을 이용하여 API 테스트 가능하도록 구현

목차

  1. 배경 및 요구사항
  2. 사용자 생성 API
  3. 사용자가 소유한 타이어 정보를 저장하는 API
  4. 사용자가 소유한 타이어 정보 조회 API
  5. 결과 제출 방법

1. 배경 및 공통 요구사항

😁 **카닥에서 실제로 사용하는 프레임워크를 토대로 타이어 API를 설계 및 구현합니다.**
  • 데이터베이스 환경은 별도로 제공하지 않습니다.
    RDB중 원하는 방식을 선택하면 되며, sqlite3 같은 별도의 설치없이 이용 가능한 in-memory DB도 좋으며, 가능하다면 Docker로 준비하셔도 됩니다.
  • 단, 결과 제출 시 README.md 파일에 실행 방법을 완벽히 서술하여 DB를 포함하여 전체적인 서버를 구동하는데 문제없도록 해야합니다.
  • 데이터베이스 관련처리는 raw query가 아닌 ORM을 이용하여 구현합니다.
  • Response Codes API를 성공적으로 호출할 경우 200번 코드를 반환하고, 그 외의 경우에는 아래의 코드로 반환합니다.

Copy of Code


2. 사용자 생성 API

🎁 요구사항

  • ID/Password로 사용자를 생성하는 API.
  • 인증 토큰을 발급하고 이후의 API는 인증된 사용자만 호출할 수 있다.
/* Request Body 예제 */

 { "id": "candycandy", "password": "ASdfdsf3232@" }

3. 사용자가 소유한 타이어 정보를 저장하는 API

🎁 요구사항

  • 자동차 차종 ID(trimID)를 이용하여 사용자가 소유한 자동차 정보를 저장한다.
  • 한 번에 최대 5명까지의 사용자에 대한 요청을 받을 수 있도록 해야한다. 즉 사용자 정보와 trimId 5쌍을 요청데이터로 하여금 API를 호출할 수 있다는 의미이다.
/* Request Body 예제 */
[
  {
    "id": "candycandy",
    "trimId": 5000
  },
  {
    "id": "mylovewolkswagen",
    "trimId": 9000
  },
  {
    "id": "bmwwow",
    "trimId": 11000
  },
  {
    "id": "dreamcar",
    "trimId": 15000
  }
]

🔍 상세구현 가이드


4. 사용자가 소유한 타이어 정보 조회 API

🎁 요구사항

  • 사용자 ID를 통해서 2번 API에서 저장한 타이어 정보를 조회할 수 있어야 한다.

프로젝트 자세히

회고

  • 개인 과제로 일주일이라는 긴 시간이 주어졌다. 기존 과제들은 시간에 쫓겨 이전에 구조를 그대로 사용하는 형태로 진행했지만, 이번 과제는 시간적 여유가 있어 구조를 만들어보는 연습을 했다. 기존 구조와 비슷하게 만들어가던 도중 유저 model의 table이 생성이 안 되는 문제가 발생했다. 모델 폴더의 구조가 인덱스 -> 유저모델 형식으로 돼 있어서 오류가 발생했다. 서비스 부분에 유저모델을 연결하여 유저모델 -> 인덱스 형식으로 바꿔 해결했다. 인증 토큰은 JWT를 사용하여 토큰을 발급했다. postman에서 발급한 토큰을 수동으로 넣어주는 것이 불편했다. 이전 과제에서 처럼 쿠키를 이용하여 응답으로 보내주려 했으나, 인증과정에서 보안 기능을 높이기 위해 header에 Authorization: Bearer를 확인하는 절차를 추가하여 쿠키를 사용하기 어려웠다. postman에 Pre-request Script와 tests에서 header에 토큰을 넣어주는 코드를 추가하여 이를 해결했다. 프리 리퀘스트 스크립트테스트 스크립트 이번 과제에서 가장 핵심인 부분은 사용자가 소유한 타이어 정보를 저장하는 API이다. 가장 먼저 고려한 것은 입력정보의 중복이다. 입력 정보 중복 위와 같이 동일한 id, tirmId가 있는 경우 예외처리했다. 유저 중복 코트 duplicateUser에 Id, trimId를 담아 다음 저장정보가 duplicateUser에 포함 돼 있는지 확인한다. 다음으로 생각한 것은 {폭}/{편평비}R{휠사이즈} 정보가 제대로 된 것인지 어떻게 확인할지에 대한 것이다. cardoc API를 조회하여 값을 분석했다. 카닥API조회 처음으로 생각한 규칙은 '/'와 'R'은 항상 포함하고 '/'이 'R'보다 먼저 위치하며 '/' 'R'로 나누었을 때 3개의 값이 나와야 하고 3개의 값은 모두 숫자여야 한다는 것이다. 토큰화 첫번째 위와 같은 절차를 걸쳐 폭과 편평비, 휠사이즈에 대한 예외처리후 값을 저장했다. 이 방식은 값이 소수도 가능하고 10000000과 같은 큰 수도 가능하다. 하지만, cardoc API로 받아온 정보에서 제대로 들어온 값은 폭이 3자리, 편평비 2자리, 휠사이즈 2자리 숫자이며 소수점은 갖지 않는다는 규칙을 가지고 있다. 이에 코드를 다음과 같이 수정했다. 토큰화 두번째 훨씬 코드를 간결하게 구성할 수 있었다.

기록

  • aws ubuntu nodejs 버전 업그레이드(module type 사용을 위함)
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - # 14.x는 14버전를 다운
sudo apt install nodejs
# curl이 없는 경우 
# sudo apt-get install curl 
profile
정리노트

0개의 댓글