raejun92 / Assignment5_Team

휴먼스케이프 기업과제

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

원티드 백엔드 프리온보딩 5차 과제 - 휴먼스케이프

👨‍💻 원티드 프리온보딩 어나더글라스 팀입니다.

6명의 안경잡이 개발자들의 시선과 관점이 담긴 과제입니다.

무던히 포기하지 않고 견디고 견뎠던 그 시간들이 변함없는 단 하나의 해답임을 믿습니다.

PRs Welcome Hits issues






🎤 소개

이 레포지토리는 원티드 프리온보딩 백엔드 코스 5차 과제를 위해 만들어졌습니다.

  • 일정 : 2021년 11월 15일(월) 오후 5시 ~ 11월 17일(수) 오전 10시


🧑🏻‍💻 팀원 소개

팀장 박상수 팀원 김성연 팀원 최준호
blog: Plus Ultra
github: epitone
blog: sudocorp
github: SibaDoge1
blog: raejun92.log
github: raejun92
sprint5 sprint5 sprint5
상세, 리스트, 검색 API, 유닛테스트 batch task, 유닛테스트 / DevOps 상세, 리스트, 검색 API
프로젝트 회고 프로젝트 회고 프로젝트 회고


팀원 어유선 팀원 김현길 팀원 이동훈
blog: Makkiato
github: Makkiato
blog: gusrlf14
github: hyunghilkim
blog: dongjay00.log
github: dongjay00
sprint5 sprint5 sprint5
상세, 리스트, 검색 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, 마일스톤을 활용해서 백로그, 이슈 관리를 진행했습니다.
  • 계층 분리를 통해 코드의 가독성을 높였습니다.
  • 리팩토링을 통해 가독성을 높이고, 유지보수를 편하게 하기 위해 노력 했습니다.


💡 구현 기능

[ 임상정보 수집 BatchTask ]

  • node-cron을 이용하여 주기적으로 openApi로부터 데이터를 받아옵니다.
  • 기존 데이터에서 업데이트 될 경우를 고려하여, 데이터의 해시값을 설정하고 비교하여 변경사항이 있는지 파악했습니다.
  • DB Upsert 기능을 쓰려했으나 updatedAt 애트리뷰트가 무조건 변경되기때문에 사용을 하지 않았습니다.

[ 임상정보 조회, 검색 API ]

  • Pagination기능을 구현 하였습니다.
  • 카테고리별(과제명, 연구종류, 진료과) 검색 기능을 구현 하였습니다.
  • 최근 일주일내에 업데이트된 임상정보 리스트를 가져오게 구현 하였습니다.

[ 에러 핸들링 ]

  • 자바스크립트 자체 내장 Error 클래스를 상속 받아서, 커스텀 에러를 생성해서 관리했습니다.

[ 유닛 테스트 및 통합테스트 ]

  • jest를 이용하여 조회, 검색 및 BatchTask 유닛 테스트를 구현했습니다.
  • Postman Test기능을 이용한 통합테스트를 구현했습니다.


➕ 협업을 위한 노력

  • 구성원들이 함께 Notion을 통해 API 명세와 DB모델을 구축 하였습니다.
  • 음성대화로 소통하여, 신속하게 문제를 인식하고, 신속하게 해결 하기 위해 노력 하였습니다.
  • 전체 작업을 도메인 단위로 분리하여 구성원 간의 병목현상을 줄였습니다.


🛠 실행 방법

  • 레포지토리를 clone 받거나, 압축을 해제한 후 npm install을 통해 환경 셋팅을 진행합니다.

  • npm start를 통해 서버를 구동합니다.

  • src 폴더에 .env 파일을 설정해서, 환경변수를 설정합니다.

  • npm start로 서버를 구동시키고, npm test를 입력하면 유닛 테스트가 가능합니다.

  • .env설정 노션 링크

    • 링크 접속불가 시 .env 파일 설정 방법
      PORT= '서버의 포트'
      ADMIN_USER="test@naver.com"
      ADMIN_PASSWORD="1234"
      HOST="http://localhost:4000"
      IS_SQLLITE=true
      OPEN_API_SECRET="OpenApi키"
      


🗂 과제 확인 및 평가 API 명세서

  • Postman을 활용하여 API 작동 테스트를 진행했습니다.

  • 배포된 서버 주소 및 자세한 API 명세는 아래에서 확인 가능합니다.

  • 🗂 API Description Link

  • Run in Postman 을 클릭하여 웹브라우저 혹은 Postman 클라이언트에 콜렉션이 로드되면

    1. Variables 탭에서 서버 Host와 Port를 지정합니다. (기본값이 지정되어 있습니다.)
    2. 우측 상단의 Run 버튼을 눌러 RUN ORDER 화면에 진입한 뒤 Run [Collection Name]을 클릭하면, Postman Test 스크립트를 이용한 통합 테스트가 진행됩니다.
    3. 좌측의 Workspace 화면에서 해당 콜렉션과 그 요청에는 여러 이상적이지 않은 상황의 테스트에 대한 예시가 있습니다.



😎 컨벤션 설정



🛠 Dependencies




🌲 File Tree



📦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

About

휴먼스케이프 기업과제


Languages

Language:JavaScript 100.0%