지원 주차 셋째날. 이력서 1차작성을 마무리하고 CS공부를 했다.
하나의 클래스가 오직 단 하나의 인스턴스만 가지는 패턴.
인스턴스가 필요할 때 새로 만들지 않고 기존의 인스턴스 하나를 계속 재활용하는 패턴.
인스턴스 생성 비용이 줄어드는 장점이 있지만 의존성이 높아진다는 단점이 있다.
객체를 생성할 때마다 메모리 영역을 할당받아야 하는데 싱글톤에서는 메모리 낭비를 방지할 수 있다. 그리고 싱글톤으로 구현한 인스턴스는 전역이므로 다른 클래스의 인스턴스들이 데이터를 공유할 수 있다.
주로 DB 커넥션풀, 쓰레드풀, 캐시, 로그기록객체 등에서 쓴다.
TDD(테스트 주도 개발)시 단위테스트에서 테스트가 서로 독립적이어야 하는데, 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로하는 패턴이므로 각 테스트마다 독립적인 인스턴스를 만들기 어렵다.
싱글톤 인스턴스가 혼자 너무 많은 일을 하거나 많은 데이터가 공유되면 다른 클래스들간의 결합도가 높아져 개방-폐쇄 원칙이 위배된다. 유지보수와 테스트가 힘들어진다.
멀티스레드 환경에서 동기화처리를 하지 않았을 때 인스턴스가 2개 생성되는 문제도 발생할 수 있다.
객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴.
추상 팩토리는 객체 생성을 추상화한 인터페이스나 추상 클래스를 제공하며,
이를 상속받은 구체적인 팩토리 클래스에서 실제로 객체를 생성한다.
클라이언트는 추상 팩토리를 통해 객체를 생성하고 사용하며, 구체적인 팩토리는 객체 생성 로직을 구현하는 역할을 수행한다.
상위 클래스와 하위클래스가 분리되어 느슨한 결합을 가진다. 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없어 더 많은 유연성을 가진다.
어떤 동작을 하는 로직을 정의하고, 이를 하나로 캡슐화해 관리하는 패턴
새로운 로직을 추가 혹은 변경할 때 한번에 효율적으로 할 수 있다.
주체가 어떤 객체의 상태변화를 관찰하다가 변화가 있을 때마다
옵저버들에게 변화를 알려주는 디자인 패턴
주체 : 객체의 상태 변화를 보는 관찰자.
옵저버 : 객체의 상태 변화에 따라 추가 변화 사항이 생기는 객체
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 간다.
트위터 팔로우를 하면 유저가 쓴 글을 주체가 옵저버들에게 알려주는 방식.
대상 객체에 접근하기 전 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 패턴.
서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있도록 해주는 시스템
NGINX가 node.js 서버 앞단의 프록시 서버로 활용된다. 익명 사용자가 직접 서버에 접근하는 것을 차단하고, 간접적으로 한단계 더 거치게 만든다.
실제 포트를 숨겨 보안을 강화하거나 정적 자원을 gzip으로 압축하거나 메인 서버 앞단에서 로깅을 할 수 있다.
CloudFlare는 웹서버 앞단에 프록시 서버로 두어 DDOS 방어나 의심스러운 트래픽을 차단할 수 있고, HTTPS 구축을 간단하게 할 수 있다.
프론트엔드에서 CORS 에러를 피하기 위해 프록시서버를 만들기도 한다.