프록시Proxy는 사전적 의미로 "대리"하는 것을 뜻한다. 컴퓨터 과학적인 의미로는 프로토콜 상에서 무엇인가를 대신하는 것을 뜻한다.프록시 서버프록시 서버(proxy server)는 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.클라이언트에서 프록시 서버로 전달할 요청을 보낸다.프록시 서버는 클라이언트로부터 전달받은 요청을 서버에 요청한다.서버는 요청에 맞게 데이터를 프록시 서버로 전달한다.프록시 서버는 서버로부터 전달받은 데이터를 클라이언트에 전달한다.이와 같이 프록시 서버는 클라이언트와 서버 사이에서 중개인 역할을 한다고 보면 된다. 💡 프록시 서버와 엔드포인트 관계- 클라이언트와 서버 사이..
개요프록시 패턴(proxy pattern)은 대상 객체(subject)에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다. 프록시 서버에서의 캐싱캐시 안에 정보를 담아두고, 캐시 안에 있는 정보를 요구하는 요청에 대해 다시 저 멀리 있는 원격 서버에 요청하지 않고 캐시 안에 있는 데이터를 활용하는 것을 말한다. 이를 통해 불필요하게 외부와 연결하지 않기 때문에 트래픽을 줄일 수 있다는 장점이 있다. 프록시(Proxy)의 사전적인 의미는 대리인이다. 이를 객체 지향 프로그래밍에 접목해보면 클라이언트가 대상 객체를 직접 쓰는 게 아니라 중간에 프록시(대리인)을 거쳐서 쓰는 패턴이라고 보면 된다. 따라서 대상 객체의 메서드를 직접 실행하는 것이 아닌, 대..
개요옵저버 패턴(Observer Pattern)은 주체가 어떤 객체(subject)의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다.여기서 주체란 객체의 상태 변화를 보고 있는 관찰자이며, 옵저버들이란 이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 '추가 변화 사항'이 생기는 객체들을 의미한다. 또한 주체와 객체를 따로 두지 않고 상태가 변경되는 객체를 기반으로 구축되기도 한다. 옵저버 패턴은 여타 다른 디자인 패턴들과 다르게 일대다(one-to-many) 의존성을 가지는데, 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. Pub/Sub(발행/구독) 모델로도 알려져 있기도 하다. 프로그래밍적으로 옵..
개요카운팅 정렬은 다양한 정렬 알고리즘 중 시간 복잡도가 O(n)인 정렬 방식으로, 배열 원소의 값 범위가 작을 때 매우 빠르게 동작한다. 입력 배열에서 각 등장 횟수를 세어 카운팅 배열을 만들고, 이를 누적합 형태로 변환한 뒤 그 정보를 바탕으로 정렬 결과를 구성한다. 정렬 방법요약카운팅 정렬 수행 과정은 다음의 단계로 이루어진다. 입력 배열의 최댓값으로 Counting Array 생성원소의 등장 횟수를 세기 위해서는 입력 배열의 최댓값이 필요하다.최댓값을 `max`라고 할 때, 크기가 `max + 1`인 `Counting Array`를 생성한 뒤, 각 값 `v`에 대해 `count[v]++`하면서 등장 횟수를 기록한다. 만약 입력 값이 자연수로만 이루어져 있다면 `count[v - 1]++`처럼 인덱..
개요전략 패턴(strategy pattern)은 정책 패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 '직접' 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다. 간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만드는 패턴이다. 즉, 어떤 일을 수행하는 알고리즘이 여러가지 일 때, 동작들을 미리 전략으로 정의함으로써 손쉽게 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우에 적합하다. 구조전략 인터페이스: 모든 전략 구현체에 대한 공용 인터페이스전략 알고리즘 객체들: 알고리즘, 행위, 동작을..
개요팩토리 패턴은 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 갖게 된다. 그리고 객체 생성 로직이 따로 떼어져 있기 때문에 코드를 리팩토링하더라도 한 곳만 고칠 수 있게 되니 유지 보수성이 증가된다.Simple Factory Pattern(심플 팩토리 패턴)팩토리 패턴에는 `팩토리 메서드 패턴`, `추상 팩토리 패턴`이 있다. 이 두 가지 패턴을 알기 전에 먼저 `심플 팩토리 패턴`에 ..