Skip to content

프로젝트 개요 및 요구사항

ohmink edited this page Nov 17, 2020 · 1 revision

프로젝트의 개요

오류 및 로그의 모니터링을 제공하여 실시간으로 오류를 발견하고 심사하고 우선 순위를 정할 수 있는 통합 관제 솔루션 제공. Exception 이나 오류 및 로그들을 빈도수 체크 및 이벤트 그룹화 및 시각화해서 볼 수 있도록 제공. 프로젝트는 크게 데이터를 수집 및 제공해주는 Backend 영역과 수집된 정보들을 시각화해서 보여주는 Frontend 영역. 그리고 서비스에서 연동하여 서버로 데이터를 전송하는 SDK 로 나뉘게 됨.

구현 사항

공통

  • Typescript 언어를 사용한 개발.
  • Module bundler 는 webpack 사용을 권하지만 parcel 및 rollup 과 같은 기타 bundler 를 사용해도 무방.
  • eslint 또는 prettier 를 활용.
    • 코딩 컨벤션 통일 및 runtime error 를 줄이기 위함.
  • jest, mocha 와 같은 test framework 를 통한 테스트 활성화.
    • 가능하다면 test coverage 를 나타낼 수 있는 페이지 구성.
  • development, production 두가지 단계의 phase 를 두어 개발과 실제 배포상황에 대한 분기가 필요.
    • 경우에 따라서 여러 단계의 phase 로 나눠서 개발해도 무방.
  • 팀내 코드리뷰는 pull request 를 활용.
    • 코드리뷰가 완료된 pr 에 한해서만 merge.
    • CI 서버를 적극활용하는 것으로 전해들었는데 pull request 시에 테스트 수행. 가능하다면 lint 와 같은 정적분석 도구가 수행되도 됨.
    • branch 전략은 팀내 기호에 맞게 정하면 되지만 develop, master 와 같은 브랜치들은 protection branch 로 정하여 review 및 test 및 정적분석 job 이 정상적으로 끝나야지만 merge 가 가능하게 설정.
  • 개발에 필요하다고 생각되는 오픈소스는 적절하게 사용해도 무방.

Backend 영역

  • 로그 수집을 위한 서버 및 DB 구축.
    • Node JS 기반으로 작업하되 Express, Koa 와 같은 WAS 는 팀내에서 논의 후 선택해서 사용.
    • DB 는 Mongo DB 사용을 권함.
  • 가능하다면 Swagger 를 통해 API 문서를 제공할 수 있게끔 함.
  • 개발 서버와 리얼 서버를 분리해서 관리.
  • 특정 error level 이상의 오류 발생시 메일이나 slack 에 알림을 전달할 수 있도록 제공.
  • (Optional) 예를 들어 Develop 브랜치에 머지가 됐을 때 hook 을 사용하여 자동으로 개발서버에 배포될 수 있도록 작업.
  • (Optional) PM2 를 통한 Node JS 프로세스 관리.
  • (Optional) 서버 이중화를 통해서 고가용성을 보장.

Frontend 영역

  • React, Vue 와 같은 FE Framework 를 활용하여 개발.
  • 가입 및 로그인 페이지 개발
    • Root 계정과 더불어 일반 사용자 계정에 권한(Owner, Member)을 분리해서 관리할 수 있도록 구성.
  • SDK 를 통해서 수집된 오류 및 로그들을 이벤트 그룹화 및 시각화해서 볼 수 있도록 제공.
    • error level, browser 와 같은 SDK 가 수집하는 정보들로 필터링 및 그룹화해서 로그를 확인할 수 있도록 함.
    • 로그 확인시 발생 빈도를 그래프로 확인할 수 있게끔 작업.
  • Webpack 과 같은 module bundler 를 사용하여 module bundling 을 하되 bundle 사이즈 축소 및 사용성 개선을 위한 부분을 고려.
    • module bundler 및 FE framework 에서 제공하는 코드 분할 기능을 적극 활용.
  • transpile 과 polyfill 을 적극 활용하여 대부분의 브라우저에서 동작할 수 있도록 작업.
    • ie 는 9 또는 11 이상의 브라우저에서 동작을 보장하면 됨.
  • 모든 Issue 에는 댓글을 달 수 있게끔 작업.
  • (Optional) Github API 활용
    • Github SSO Login.
    • Blame API 를 활용하여 코드에 해당하는 작업자 표기.
  • (Optional) Issue tracker 로도 활용될 수 있도록 개발.
    • 프로젝트의 멤버들에게 관련한 이슈를 할당할 수 있게끔하고 해결/작업중/미해결 과 같은 상태로 분리될 수 있게 작업.
    • Jira, redmine 형태를 참조.

SDK 영역

  • NPM 으로 배포.
  • SDK 통해서 자동적으로 수집되는 정보뿐만 아니라 서비스 개발자들이 Optional 하게 다양한 정보들을 수집할 수 있게끔 함.
    • 자동적으로 수집되는 정보에 대해서는 FE, BE 에 따라서 다르게 구성 필요.
    • freeform 형태의 정보들을 넘겨줄 수 있도록 구성필요. (ex. 성별, 나이, 국가, ...)
  • (Optional) 가능하다면 SDK 의 기능별로 모듈 분리를 해서 mono repo 형태의 개발
Clone this wiki locally