프로그램 설계할 때 발생했던 문제점들을 객체 간 상호 관계 등 이용하여 해결할 수 있도록 만들어낸 하나의 규약
싱글톤 하나의 클래스에 오직 하나의 인스턴스 보통 데이터베이스 연결 모듈에 많이 사용 → 데이터베이스 연결 관련 인스턴스 생성 비용 절약 , mongoose, mysql에서 사용
TDD(테스트) 하기가 어렵다는 단점 존재 ( 독립적인 단위테스트가 불가능하다! 같은 인스턴스 사용하기 때문)
모듈간의 연결을 강하게 만들기도 함 → 의존성 주입을 통해 해결가능 ( 직접 하위 모듈에게 의존성을 주기 보다는 의존성 주입자에게 맡김)
팩토리 패턴
객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴
상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대 결정, 하위 클래스에서 객체 생성 관한 구체적인 내용 결정하는 패턴
느슨한 결합 가지고, 더 많은 유연성을 가짐
코드 리팩터링 시 한 곳만 고치면 돼서 유지보수성 증가함
전략 패턴
객체의 행위
를 바꾸고 싶은 경우 직접 수정하지 않고 전략
이라 부르는 캡슐화한 알고리즘
을 컨택스 안에서 바꿔주면서 상호 교체
가 가능하게 만드는 패턴
옵저버 패턴
주체
가 객체
의 상태 변화
를 관찰하다가 상태 변화가 있으면 메서드를 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 패턴
MVC 패턴에서도 사용된다!
프록시 패턴 프록시 : 대상의 기본적인 동작을 가로챌 수 있는 객체 대상 객체에 접근하기 전에 그 접근 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴
객체의 속성, 변환 등 보완하며 보안, 데이터검증, 캐싱, 로깅에 사용
프록시 서버
: 서버와 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램 가리킴
→ nginx ( 웹 서버, Node.js 서버 앞단의 프록시 서버로 활용)
→ Cloud Flare ( 프록시 서버로 사용하면 DDOS 방어나 HTTPS 구축)
→ CORS ( 서버가 웹 브라우저에서 리소스 로드할 떄 다른 오리진을 통해 로드하지 못하게 하는 메커니즘) ⇒ 프록시 서버를 둬서 서버에서 요청되는 오리진을 바꾼다
이터레이터 패턴
이터레이터
사용하여 컬렉션의 요소들에 접근
하는 디자인 패턴
다른 컬렉션이라도 똑같이 사용이 가능해진다!
MVC 패턴
모델, 뷰, 컨트롤러로 이루어진 디자인 패턴
재사용성
과 확장성
이 용이함
네트워크 : 노드
+ 링크
좋은 네트워크란 :
많은 처리량
을 처리할 수 있으며, 지연 시간이 짧고
장애 빈도가 적으며 좋은 보안
을 갖춘 네트워크를 말함
네트워크 병목현상 주된 원인