본문 바로가기
개발 공부

마지막 기업과제 회고록

by 부지런한 배짱이 2021. 12. 5.

마지막 기업 과제는 개인으로 진행하게 되었습니다. 🔥

 

요구사항 1. 자동차 차종 ID를 이용하여 사용자가 소유한 타이어 정보를 저장한다.

  • 한 번에 최대 5명까지의 사용자에 대한 요청을 받을 수 있도록 해야한다.
/* Request Body 예제 */
[
  {
    "id": "candycandy",
    "trimId": 5000
  },
  {
    "id": "mylovewolkswagen",
    "trimId": 9000
  },
  {
    "id": "bmwwow",
    "trimId": 11000
  },
  {
    "id": "dreamcar",
    "trimId": 15000
  }
]

 

 

1. class-validator의 IsArray 데코레이터를 사용하면 위의 요구사항과 다르게 됩니다.

{ items: [item1, item2] } // X
[ item1, item2, item3 ... ] // O

 

2. NestJS의 parseArrayPipe 클래스는 개수 제한 설정이 없습니다.

 

해당 요구 사항에 맞추기 위해 NestJS Pipe 모듈을 분석하고 커스텀 했습니다.

커스텀 파이프

단순히 컨트롤러에서 길이가 5 이상인 요청은 거부하면 되지만, NestJS에서 권장하는 SRP(단일책임원칙)를 따라 제공되는 Pipe를 커스텀하였습니다.

 

요구사항 2. 타이어 포맷 유효성 검사

조회된 정보에서 타이어 정보는 spec → driving → frontTire/rearTire 에서 찾을 수 있다.

타이어 정보는 205/75R18의 포맷이 정상이다.
205는 타이어 폭을 의미하고 75R은 편평비, 그리고 마지막 18은 휠사이즈로써 {폭}/{편평비}R{18}과 같은 구조이다.
위와 같은 형식의 데이터일 경우만 DB에 항목별로 나누어 서로다른 Column에 저장하도록 한다.

실용적인 테이블 설계를 위해 자동차와 타이어에 대해 조사했습니다.

타이어 앞뒤 위치 변경이 가능한가?

유효성 검사를 위한 규격 용어 파악

자동차 평균 수명 (타이어의 수명을 고려해야 했습니다. 😅)

타이어 생산과정이 더 존재하는지 알아보기

 

여러번의 모델링 끝에 완성한 테이블 구조입니다.

 

 

느낀점

  • DTO, Entity의 정확한 활용 방법을 아직 모르겠다. (정답이 없는걸까?)
  • 프로젝트 도메인(타이어)에 대해 조사하는 과정이 흥미로웠다.

결과물

https://github.com/luckyhyom/car-project

 

GitHub - luckyhyom/car-project

Contribute to luckyhyom/car-project development by creating an account on GitHub.

github.com