이 레포지토리는 원티드 프리온보딩 백엔드 코스 5차 과제를 위해 만들어졌습니다.
- 일정 : 2021년 11월 15일(월) 오후 5시 ~ 11월 17일(수) 오전 10시
팀장 박상수 | 팀원 김성연 | 팀원 최준호 |
---|---|---|
blog: Plus Ultra github: epitone |
blog: sudocorp github: SibaDoge1 |
blog: raejun92.log github: raejun92 |
상세, 리스트, 검색 API, 유닛테스트 | batch task, 유닛테스트 / DevOps | 상세, 리스트, 검색 API |
프로젝트 회고 | 프로젝트 회고 | 프로젝트 회고 |
팀원 어유선 | 팀원 김현길 | 팀원 이동훈 |
---|---|---|
blog: Makkiato github: Makkiato |
blog: gusrlf14 github: hyunghilkim |
blog: dongjay00.log github: dongjay00 |
상세, 리스트, 검색 API | batch task | batch task |
프로젝트 회고 | 프로젝트 회고 | 프로젝트 회고 |
- READ.ME 작성
- 프로젝트 빌드, 자세한 실행 방법 명시
- 구현 방법과 이유에 대한 간략한 설명
- 완료된 시스템이 배포된 서버의 주소
- Swagger나 Postman을 통한 API 테스트할때 필요한 상세 방법
- 해당 과제를 진행하면서 회고 내용 블로그 포스팅
- Swagger나 Postman을 이용하여 API 테스트 가능하도록 구현
[고려 사항 및 상세설명]
- ORM 사용 필수
- 데이터베이스는 SQLite로 구현
- secret key, api key 등을 레포지토리에 올리지 않도록 유의
- README.md 에 관련 설명 명시 필요
- 배포하여 웹에서 사용 할 수 있도록 제공
- 임상정보 검색 API 제공
다음 사항들을 충족하는 서비스를 구현해주세요.
- 임상정보를 수집하는 batch task
- 수집한 임상정보에 대한 API
- 특정 임상정보 읽기(키 값은 자유)
- 수집한 임상정보 리스트 API
- 최근 일주일내에 업데이트(변경사항이 있는) 된 임상정보 리스트
- pagination 기능
- 최근 일주일내에 업데이트(변경사항이 있는) 된 임상정보 리스트
- Test 구현시 가산점이 있습니다.
- Node.js, express, Sequelize, sqlLite를 이용해 임상정보 BatchTask 및 검색, 조회, 상세조회 api 를 구현하였습니다.
- 코드 컨벤션, 커밋 컨벤션, Git Flow를 지켜가며 작업했습니다.
- Github Project, 마일스톤을 활용해서 백로그, 이슈 관리를 진행했습니다.
- 계층 분리를 통해 코드의 가독성을 높였습니다.
- 리팩토링을 통해 가독성을 높이고, 유지보수를 편하게 하기 위해 노력 했습니다.
- node-cron을 이용하여 주기적으로 openApi로부터 데이터를 받아옵니다.
- 기존 데이터에서 업데이트 될 경우를 고려하여, 데이터의 해시값을 설정하고 비교하여 변경사항이 있는지 파악했습니다.
- DB Upsert 기능을 쓰려했으나 updatedAt 애트리뷰트가 무조건 변경되기때문에 사용을 하지 않았습니다.
- Pagination기능을 구현 하였습니다.
- 카테고리별(과제명, 연구종류, 진료과) 검색 기능을 구현 하였습니다.
- 최근 일주일내에 업데이트된 임상정보 리스트를 가져오게 구현 하였습니다.
- 자바스크립트 자체 내장 Error 클래스를 상속 받아서, 커스텀 에러를 생성해서 관리했습니다.
- jest를 이용하여 조회, 검색 및 BatchTask 유닛 테스트를 구현했습니다.
- Postman Test기능을 이용한 통합테스트를 구현했습니다.
- 구성원들이 함께 Notion을 통해 API 명세와 DB모델을 구축 하였습니다.
- 음성대화로 소통하여, 신속하게 문제를 인식하고, 신속하게 해결 하기 위해 노력 하였습니다.
- 전체 작업을 도메인 단위로 분리하여 구성원 간의 병목현상을 줄였습니다.
-
레포지토리를 clone 받거나, 압축을 해제한 후 npm install을 통해 환경 셋팅을 진행합니다.
-
npm start를 통해 서버를 구동합니다.
-
src 폴더에 .env 파일을 설정해서, 환경변수를 설정합니다.
-
npm start로 서버를 구동시키고, npm test를 입력하면 유닛 테스트가 가능합니다.
-
-
링크 접속불가 시 .env 파일 설정 방법
PORT= '서버의 포트' ADMIN_USER="test@naver.com" ADMIN_PASSWORD="1234" HOST="http://localhost:4000" IS_SQLLITE=true OPEN_API_SECRET="OpenApi키"
-
-
Postman을 활용하여 API 작동 테스트를 진행했습니다.
-
배포된 서버 주소 및 자세한 API 명세는 아래에서 확인 가능합니다.
-
을 클릭하여 웹브라우저 혹은 Postman 클라이언트에 콜렉션이 로드되면
- Variables 탭에서 서버 Host와 Port를 지정합니다. (기본값이 지정되어 있습니다.)
- 우측 상단의 Run 버튼을 눌러 RUN ORDER 화면에 진입한 뒤 Run [Collection Name]을 클릭하면, Postman Test 스크립트를 이용한 통합 테스트가 진행됩니다.
- 좌측의 Workspace 화면에서 해당 콜렉션과 그 요청에는 여러 이상적이지 않은 상황의 테스트에 대한 예시가 있습니다.
📦src
┣ 📂bin
┃ ┗ 📜www.js
┃
┣ 📂configs
┃ ┣ 📜db.js
┃ ┣ 📜index.js
┃ ┗ 📜secretKey.js
┃
┣ 📂controllers
┃ ┗ 📜trialController.js
┃
┣ 📂globals
┃ ┣ 📜index.js
┃ ┣ 📜responseMessage.js
┃ ┣ 📜routes.js
┃ ┗ 📜statusCode.js
┃
┣ 📂jobs
┃ ┗ 📜openApiJobs.js
┃
┣ 📂models
┃ ┣ 📜index.js
┃ ┗ 📜trial.js
┃
┣ 📂routes
┃ ┣ 📜globalRouter.js
┃ ┣ 📜index.js
┃ ┗ 📜trialRouter.js
┃
┣ 📂services
┃ ┗ 📜trialService.js
┃
┣ 📂test
┃ ┣ 📂data
┃ ┃ ┗ 📜openApiTestConfig.json
┃ ┗ 📂unit
┃ ┗ 📂jobs
┃ ┗ 📜openApiJobs.test.js
┃
┣ 📂utils
┃ ┣ 📂errors
┃ ┃ ┣ 📜commonError.js
┃ ┃ ┣ 📜errors.js
┃ ┣ 📜index.js
┃ ┣ 📜logger.js
┃ ┗ 📜resFormatter.js
┣ 📜.env
┣ 📜.eslintrc.json
┣ 📜.gitignore
┣ 📜.prettierrc.json
┣ 📜app.js
┣ 📜database.db
┣ 📜package-lock.json
┗ 📜package.json