프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것
하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만든느 데 쓰이며, 보통 데이터베이스 연결 모듈에 많이 사용.
: 사용하기 쉽고 굉장히 실용적.
테스트주도개발 (TTD(Test Driven Development)) 진행할 때 걸림돌이 됨. 단위 테스트는 서로 독립적이어야 하며 언떤 수서로든 실행할 수 있어야 하나, 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴으로 각 테스트마다 독립적인 인스턴스 생성이 어려움.
모듈 간의 결합을 강하게 만들 수 있음. 이때 의존성 주입을 통해 모듈간의 결합을 느슨하게 만들어 해결 가능.
메인 모듈이 직접 다른 하위 모듈에 대한 의존성을 주기보다는, 중간에서 의존성 주입자(dependency injector)가 이 부분을 가로채, 메인 모듈이 간접적으로 의존성을 주입하는 방식
상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 하며, 둘 다 추상화에 의존해야 함. 이때 추상화는 세부 사항에 의존하지 말아야 함.
객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴.
상속 관계의 두 클래스에서 상위 클래스가 중요한 뼈대를 결정, 하위 클래스는 객체 생성에 관한 구체적인 내용을 결정하는 패턴
new Object()
: 숫자를 전달하거나 문자열을 전달함에 따라 다른 타입의 객체를 생성하는 것. 즉, 전달받은 값에 따라 다른 객체를 생성하며 인스턴스의 타입 등을 정함.
정책 패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 하는 패턴
ex) 웹 결제 시 어떤 아이템을 살때 LUNACard와 KAKAOCard로 사는 것을 구현. 결제 방식의 '전략'만 바꿔서 두 가지 방식으로 결제.
passport란 Node.js에서 인증 모듈을 구현할 때 쓰는 미들웨어 라이브러리. 여러 가지 '전략'을 기반으로 인증 가능. LocalStoragy 전략과 OAuth 전략 등을 지원. '전략'만 바꿔서 이증하는 것.
주체가 어떤 객체(subject)의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴
** 주체와 객체를 따로 두지 않고 상태가 변경되는 객체를 기반으로 구축하기도 함. → 주체와 객체가 같을 수도, 따로일 수 있도 있음 [두 가지 경우]
ex) 트위터
주로, 이벤트 기반 시스템에 사용, MVC(Model-View-Controller) 패턴에도 사용.
어떠한 대상의 기본적인 동작(속성 접근, 할당, 순회, 열거, 함수 호출 등)의 작업을 가로챌 수 있는 객체.
js에서 프록시 객체는 두개의 매개변수를 가짐.
const handler = {
get: function(target, name) {
return name === 'name' ? `${target.a} ${target.b}` : target[name]
}
}
const p = new Proxy({a: 'KUNDOL', b: 'IS AUMUMU ZAGNIN'}, handler)
console.log(p.name) // KUNDOL IS AUMUMU ZANGIN
위와 같이 a, b 속성을 가지고 있는 객체와 handler 함수를 배개변수로 넣고 p라는 변수를 선언. name 속성 등 특정 속성에 접근할 때 그 부분을 가로채서 어떠한 로직을 강제할 수 있는것이 프록시 객체
대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴
서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램
nginx ? 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리가능한 웹서버. 주로 Node.js 서버 앞단의 프록시 서버로 활용.
→ 익명 사용자가 직접적으로 서버에 접근하는 것을 차단, 간접적으로 한 단계 더 거치게 만들어 보안 강화.
장점 ? 실제 포트 숨김 가능, 메인 서버 앞단에서의 로깅 가능.
웹 서버 앞단에 프록시 서버로 두어 디도스 공격 방어나 https 구축에 쓰임. 의심스러운 트래픽이 많아지면 CAPTCHA 등을 기반으로 일정 부분 막아주는 역할 수행.
서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 기반 메커니즘
주로 프론트엔드 서버를 만들어 백엔드 서버와 통신할 때 해당 에러 발생 많음. 이때 프록시 서버로 해결. → 프론트엔드와 백엔드 서버 포트 번호가 다르기 때문인데, 이때 프로시 서버를 둬서 프론트엔드 서버에서 요청되는 오리진을 127.0.0.1:12010 으로 바꿈.
이터레이터를 사용해 컬렉션의 요소들에 접근하는 디자인 패턴.
여러 가지 자료형 구조와 상관없이 이터레이터라는 하나의 인터페이스로 순회 가능.
즉시 실행 함수 통해 private, public 같은 접근 제어자를 만드는 패턴
모델, 뷰, 컨트롤러로 이루어진 디자인 패턴. 세 가지 역할로 구분되어 각 구성 요소에만 집중하여 개발 가능.
: 재사용성 & 확장성 용이
: 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해짐
애플리케이션의 데이터인 데이터베이스, 상수, 변수 의미
ex. 박스 위치 정보, 글자 내용, 글자 위치, 글자 포맷에 관한 정보를 모두 가지고 있어야함.
뷰에서 데이터를 생성하거나 수정 시 컨트롤러를 통해 모델을 생성, 갱신.
inputbox, checkbox, textarea 등 사용자 인터페이스 요소.
모델이 가지고 있는 정보를 딸 ㅗ저장하지 않아 화면에 표시하는 정보만 가지고 있어야 함.
하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할. 이벤트 등 메인 로직 담당.
모델, 뷰의 생명주기 관리 및 이들이 변경 통지를 받으면 해석하여 각 구성 요소에 해당 내용 전달.
MVC의컨트롤러가 뷰모델로 바뀐 패턴
뷰모델은 뷰를 더 추상화한 계층으로, MVC 패턴과 다르게 커맨드와 데이터 바인딩을 가지는 것이 특징. 뷰와 뷰모델 간 양방향 데이터 바인딩 지원. UI 별도 코드 수정 없이 재사용 가능. 단위 테스팅 쉽다는 장점 있음.
프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론.
함수형 프로그램ㅇ은 상태 값을 지니지 않는 함수 값들의 연속으로 생각할 수 있게 해줌.
프로그래밍 패러다임 ? "선언형" vs "명령형"
"무엇을" 풀어내는가에 집중하는 패러다임. "프고르갬은 함수로 이뤄진 것"이라는 명제가 담긴 패러다임.
'순수 함수'들을 블록처럼 쌓아 로직 구현, 고차함수를 통해 재사용성 높인 프로그래밍 패러다임
( "고차함수"란 ? 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것)
객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식
많은 설계 시간이 필요하지만 처리 속도가 느린 편.
객체지향 프로그래밍 설계시 SOLID 원칙을 지켜야함
로직이 수행되야 할 연속적인 계산 과정으로 이루어져, 일이 진행되는 방식으로 코드 구현만 하면 되어 코드 가독성이 좋고 실행 속도가 빠름.
비즈니스 로직이나 서비스의 특징을 고려하여 패러다임을 정해야함. 여러 패러다임을 조합하여 상황과 맥략에 따른 패러다임 장점을 취해 개발하는 것이 최적화 방법!
컴포튜 등의 장치들이 통신 기술을 이용해 구축하는 연결망
네트워크 ? 노드와 링크가 서로 연결돼 리소스를 공유하는 집합을 의미
좋은 네트워크란 ? 많은 처리량을 처리할 수 있으며 지연 시간이 짧고 장애 빈도가 적으며 좋은 보안을 갖춘 네트워크!
성공적으로 전달된 데이터의 양을 의미
단위로는 bps(bits per second) 사용. 초당 전송 혹은 수신되는 비트 수.
처리량은 사용자가 많이 접속할 때마다 커지는 트래픽, 네트워크 장치 간 대역폭, 네트워크 중간에 발생하는 에러, 장치의 하드웨어 스펙에 영향 받음.
요청이 처리되는 시간. 어떤 메세지가 두 장치 사이를 왕복하는 데 걸린 시간.
매체 타임(유선/무선), 패킷 크기, 라우터의 패킷 처리 시간에 영향 받음.
노드와 링크가 어떻게 배치되어 있는지에 대한 방식 혹은 연결 형태 의미
트리 토폴로지 : 계층형 토폴리지로 트리 형태
버스 토폴로지 : 중앙 통신 회선 하나에 여러 갱의 노드가 연결되어 공유하는 구성, 근거리 통신망에 사용
스타 토폴로지 : 중앙에 있는 노드에 모두 연결된 네트워크 구성
링형 토폴리지 : 각각의 노드가 양 옆의 두 노드와 연결하여 전체적으로 고리처럼 하나의 연속된 길을 통해 통신을 하는 망 구성 방식
메시 토폴로지 : 망형 토폴로지, 그물망처럼 연될어 있는 구조
병목 현상 발생시 원인을 빠르게 찾을 수 있음. 관리자는 네트워크 토폴로지의 생김새를 파악하여 병목 현상 해결 가능.
규모를 통해 분류 가능!
LAN (Local Area Network)
사무실과 개인적인 소유 가능한 규모. 근거리 통신망을 의미. 전송 속도가 빠르고 혼잡하지 않음.
MAN (Metropolitan Area Network)
서울시 정도의 대도시 지역 네트워크. 넓은 지역에서 운영되며 속도는 평균, LAN보다는 더 많이 혼잡.
WAN (Wide Area Network)
광역 네트워크이며 국가 혹은 대륙 규모에서 운영. 전송 속도 낮으며, MAN보다 더욱 혼잡.
출처 : 면접을 위한 cs 전공지식 노트 (주홍철 지음, 출판사 길벗)