-
Notifications
You must be signed in to change notification settings - Fork 1
기술 특장점
ohmink edited this page Dec 21, 2020
·
1 revision
- 에러로그 저장과 실시간 분석을 효율적으로 진행하기 위해 mongoDB를 사용하였습니다.
- sdk로부터 수집되는 에러 이벤트 로그를 저장하고 aggregation을 통한 실시간 로그 분석한 결과를 그래프 데이터로 반환하는 api를 구현하였습니다.
- MongoDB의 queryplanner을 활용하여 쿼리의 성능을 분석한 결과를 바탕으로 인덱싱을 적용하여 MongoDB 쿼리 성능을 향상시켰습니다.
- Mongoose ODM을 통해 model schema를 정의하여 각 collection의 document 데이터 구조의 일관성을 유지하여 schemaless DB로서의 단점을 보완하였습니다.
-
프론트엔드, 백엔드 ,DB, 모두 도커(Docker) 컨테이너화하여 인프라 구성/변경 및 배포를 쉽게 하도록 구성했습니다.
-
docker-compose와 DockerFile를 통해 다음 작업을 자동으로 실행합니다.
- 프론트엔드 : 리액트 빌드 및 Nginx 환경설정 적용후 도커이미지 빌드 및 자동 컨테이너 실행
- 백엔드 : express + pm2 클러스터 모드로 구성된 도커이미지 빌드 및 자동 컨테이너 실행
- DB : mongoDB 이미지 다운로드 후 DB 환경설정 적용하여 컨테이너 실행
-
서버 이중화와 Nginx의 로드밸런서를 활용한 부하 분산
- express + pm2 클러스터 모드로 구성된 api 서버 두대를 사용하여 이중화
- Nginx를 리버스 프록시로 사용하여 모든 요청은 80번 포트로 받도록 설정
- Nginx가 포트 80번으로 오는 모든 요청중 /api에 해당하는 요청은 백엔드 서버 컨테이너 두곳으로 분배하여 부하를 분산
- 로드 밸런싱 알고리즘은 라운드 로빈 방식, 두 서버에 균등하게 트래픽 분배
- 라운드 로빈 : 클라이언트의 요청을 순서대로 분배하는 방식
-
Node.js 프로세스 매니저인 PM2 사용
- Node.js가 하나의 코어만을 활용하여 서버의 CPU를 온전히 활용하지 못하는 것을 방지
- 프로세스 상태를 안정적으로 관리
-
여러 개의 expres.js 서버 프로세스를 클러스터 모드로 생성
- 성능과 안정성을 향상
- 클러스터 모드로 동작시키기 위해 express.js 서버를 stateless하게 구현
- 동작하는 서버의 CPU 코어에 비례하도록 인스턴스 실행
- 웹팩을 모듈 번들러로 사용해 코드를 하나의 파일로 압축시켰습니다.
- 바벨을 사용해 다양한 브라우저 환경에서도 코드가 정상적으로 동작하도록 했습니다.
- gzip 압축을 통해 번들링된 파일 크기를 크게 줄여 초기 로딩시간을 개선했습니다.
- Node, Broswer 환경 모두에서 에러를 수집할 수 있습니다.
- 공통 기능을 담당하는 @acent/core와 각 플랫폼을 담당하는 @acent/node, @acent/browser 등을 분리하여 이용자가 효율적으로 사용할 수 있습니다.
- process 객체를 이용하여 에러를 수집합니다.
- process의 정보와 os 모듈, 요청 등을 이용하여 에러 환경 및 정보를 수집합니다.
- window 객체를 이용하여 에러를 수집합니다.
- window의 정보와 navigator 모듈 등을 이용하여 에러 환경 및 정보를 수집합니다.
- 사용자가 커스텀으로 처리하는 에러를 수집할 수 있도록 기능을 제공합니다.
- 프로미스 에러 또한 수집합니다.
📈 퍼포먼스 모니터링 📉
- HOME
- 프로젝트 개요 및 요구사항
- 프로젝트 설계
- DB 설계
- 프로젝트 구조
- 기술 특장점
- 피드백 & 추후 과제
- docker-compose로 mongodb 설치
- sentry sdk에서 보내는 실제 json구조
- acent sdk 설치 방법
🤞 Rules 🤞
🗒 스프린트 계획 🗒
🙋♂️ 데일리 스크럼 🙋♀️
📚 회고 📚