미니프로젝트 주차 + 디자인 패턴 스터디
1. Sentry
1) Sentry
- 코드의 오류를 식별하고 분류하는데 도움이 되는 외부 모니터링 및 에러 로깅 서비스를 제공
- 코드 상에서 errorHandler를 통해 특정 error code(404, 500) 들을 에러로 식별 가능
- Sentry website에서 에러 로그 정보를 조회할 수 있고, DSN주소로 나의 코드와 웹사이트를 연동
2) DSN
- DSN은 "Data Source Name"의 약어, 데이터 소스에 대한 연결 정보를 식별하기 위해 사용되는 문자열
- 주로 데이터베이스나 다른 외부 리소스에 연결하기 위해 사용
- DSN은 다양한 데이터 소스 및 프레임워크에서 사용. ex) PHP의 PDO(PHP Data Objects)에서는 데이터베이스에 연결할 때, Python의 SQLAlchemy에서 데이터베이스 연결할 때
- DSN 정보는 비밀로 취급되어 하기 때문에 .env 등에 넣어준다
3) 회원가입
- 회원가입 - 원하는 플랫폼으로 프로젝트 제작 - default alert
- I'll create my own alerts later : alert를 설정하지 않는다
- Alert me on every new issue : 새로운 issue가 나올때마다 알림 전송
- When there are more than ~ : n분 동안 unique 한 error가 m번보다 더 생기면 알림 전송
4) sentry 설치
- npm i --save @sentry/node
- app.js 세팅
- sentry error event 커스터마이징
403, 404, 500 에러에 대해서만 에러 이벤트를 발생시켜주어 Sentry project에 반영하게 커스텀. shouldHandleError() 안에서 true를 반환하는 조건일 때 이벤트가 성립한다. 자세한 옵션 설정은 공식 문서에서 확인
5) 자세한 세팅은 실전프로젝트 참고
- https://jujiprogram.tistory.com/86
2. 어댑터 패턴
1) 어댑터 패턴
- 서로 호환되지 않는 인터페이스가 있을 때
- 해당 인터페이스들을 건드릴 수 없을때(다른 회사의 코드, 레거시코드, 의존성이 많은 코드 등)
- 위의 경우에 호환성을 맞춰주는 패턴
*인터페이스란?
인터페이스는 객체 또는 시스템이 다른 객체 또는 시스템과 상호 작용하는 방식을 정의하는 추상화된 개념
즉, 인터페이스는 객체 간의 상호 작용을 위한 속성이나 메소드 등을 정의
*참조 문서
https://refactoring.guru/ko/design-patterns/adapter
2) 예시
- 주식 시장 모니터링 앱을 제작 중, 해당 앱은 여러 소스에서 주식 데이터를 XML 형식으로 다운로드한 후 클아이언트에게 전송하는 앱
- 타사의 스마트 분석 라이브러리를 통합하여 앱을 개선하기로 결정, 그런데 이 분석 라이브러리는 JSON 형식의 데이터로만 작동
- 위의 분석 라이브러리를 XML과 작동하도록 변경할 수 있으나, 라이브러리에 의존하는 일부 기존 코드가 손상될 수 있는 상태
- 해당 경우 어댑터 패턴을 사용한 계층을 새로 만들어서 해결
3) 구현방식
- 클라이언트와 서비스가 통신하는 방법을 캐치
- 어댑터 클래스 생성 후 클라이언트 인터페이스로 구성
- 호환시킬 서비스 필드를 어댑터에 추가
- 클라이언트의 인터페이스의 모든 메소드를 어댑터 클래스에서 구성(데이터 형식 변환 위주로 처리)
4) Node.js 어댑퍼 패턴 기본 틀
5) 장점
- 유연함 : 다양한 클래스나 인터페이스를 호환시킬 수 있음
- 단일책임 원칙 : 한가지 모듈이 한가지 기능을 가짐, 비즈니스 로직 모듈화에 좋음
- 개방폐쇄 원칙 : 기존의 클라이언트 코드를 건드리지 않고 새로운 유형의 프로그램을 도입 가능
6) 단점
- 새로운 인터페이스/클래스를 도입해야 하므로 어댑터 계층이 추가되어 코드가 복잡해질 수 있음
- 추가적인 클래스를 구성해줘야해서 메모리사용량/런타임시간 증가
'항해14기 본과정 > 항해14기 개발일지' 카테고리의 다른 글
[항해 14기] 개발일지35 (클론 프로젝트 - 발제, 디자인 패턴 - 플라이트) (0) | 2023.05.13 |
---|---|
[항해 14기] 개발일지34 (미니프로젝트 - 회고, 발표) (0) | 2023.05.11 |
[항해 14기] 개발일지32 (미니 프로젝트 - NodeMailer, Bcrypt) (0) | 2023.05.09 |
[항해 14기] 개발일지31 (미니 프로젝트 - 리팩토링, 배포, FE연결) (0) | 2023.05.08 |
[항해 14기] 개발일지30 (미니 프로젝트 - Auth/User기능 구현) (0) | 2023.05.06 |