[기업명] 카닥
- READ.ME 작성
- 프로젝트 빌드, 자세한 실행 방법 명시
- 구현 방법과 이유에 대한 간략한 설명
- 서버 구조 및 디자인 패턴에 대한 개략적인 설명
- 완료된 시스템이 배포된 서버의 주소
- 해당 과제를 진행하면서 회고 내용 블로그 포스팅
- Swagger나 Postman을 이용하여 API 테스트 가능하도록 구현
- ORM 사용 필수
- 데이터베이스는 SQLite로 구현
- secret key, api key 등을 레포지토리에 올리지 않도록 유의
- README.md 에 관련 설명 명시 필요
다음 사항들을 충족하는 서비스를 구현해주세요.
- 데이터베이스 환경은 별도로 제공하지 않습니다.
RDB중 원하는 방식을 선택하면 되며, sqlite3 같은 별도의 설치없이 이용 가능한 in-memory DB도 좋으며, 가능하다면 Docker로 준비하셔도 됩니다.
- 단, 결과 제출 시 README.md 파일에 실행 방법을 완벽히 서술하여 DB를 포함하여 전체적인 서버를 구동하는데 문제없도록 해야합니다.
- 데이터베이스 관련처리는 raw query가 아닌 ORM을 이용하여 구현합니다.
- Response Codes API를 성공적으로 호출할 경우 200번 코드를 반환하고, 그 외의 경우에는 아래의 코드로 반환합니다....
- 배포하여 웹에서 사용 할 수 있도록 제공
- 임상정보 검색 API 제공
테이블을 User, Trim, Tire로 구분해서 만들었습니다. 각 유저는 하나 이상의 Trim을 보유할 수 있고 각 Trim도 하나 이상의 Tire를 보유합니다. Trim과 Tire의 관계설정을 OneToMany로 했는데 생각해보니 Tire의 규격은 제한적이라서 ManyToMany의 관계가 확장성에 있어 더 의미 있었을 것 같습니다 (Trim도 User의 관계에 있어서 차가 아니라 차종 이라면 비슷하게 ManyToMany가 나았을 것 같습니다). 또 3 테이블로 구분했던 이유는 차 종을 타이어가 많이 변결될 수 있기 때문에 Tire 내용을 Trim에 넣지 않고 구분했습니다.
사용자 생성 API를 만들었습니다. 안전성을 위해 비밀번호는 외부 라이브러리 bcrypt를 사용해 해시를 한 후에 저장을 했습니다.
아래 DB 다지안으로 볼 수 있듯이 하나의 user는 하나 이상의 Trim (자동차)를 보유할 수 있도록 했습니다.
저장하는 방식을 아래와 같습니다:
- User가 존재하는지 확인합니다. 존재하지 않다면 error가 뜹니다.
- Response에 있는 타이어 정보를 DB에 저장합니다.
- Response에 있는 Trim(자동차)가 있다면 있는 것을 사용하고 아니라면 새로 생성해서 저장합니다.
- 관계 정리해줍니다 (User에는 trim을 넣어주고, trim에는 tire를 넣어줍니다).
UserId로 자동차 종 및 타이어 검색 기능을 만들었습니다.
방법은 아래와 같습니다:
- User가 존재하는지 확인합니다. 존재하지 않다면 error가 뜹니다.
- User가 보유하는 보든 trim을 갖고 온 다음에 각 trim에 해당하는 타이어를 loop을 통해 검색합니다.
*로그인이 되어 있지 않으면 검색이 불가능합니다.
JWT를 사용해 로그인 기능을 만들었습니다. 자동차 및 타이어를 검색할 때 로그인이 되어 있지 않으면 검색이 불가능합니다.
데이터를 저장할 때 5개 이상 가능해야해서 data라는 key 값에 5개의 정보를 배열안에 넣었습니다. 해당 프로젝트 test.http 파일을 보면 더 구체적으로 볼 수 있습니다.
Trim를 test할 때는 Body가 아래와 같습니다: { data: [ { "userId": "test1", "trimId": 5000, "tire": { "type": "front", "wheelWidth": 10, "wheelFlatness": 10, "wheelSize": 10 } } ] }
- 레포지토리를 clone 받습니다
$ git clone
- clone한 경로에 들어간 후 의존성을 설치하고 환경 셋팅을 진행합니다.
$ cd cardoc
$ npm install
3.서버를 구동합니다.
$ npm start