들어가기 전얼마 전, HTTP/HTTPS Proxy 서버를 만드는 방법 중에는 HTTP의 'CONNECT 메서드'를 이용한 TCP 터널링 방식이 있다는 이야기를 들었다. 그러나 나는 이런 쪽에 지식이 전혀 없어서 알아 들을 수 없었다. 백문이 불여일견이라고 만들어보면서 TCP 터널링이 어떤 개념인지 알아보려고 한다. 이 글에서는 파이썬을 이용해 간단하게나마 구현해보고 개념을 이해해본다. HTTP / HTTPS Proxy 서버란?Proxy는 '대리인'이라는 뜻을 가지고 있다. 이 뜻과 비슷하게 HTTP / HTTPS Proxy 서버는 클라이언트에게 요청을 Upstream 서버 대신 받는다. 그리고 받은 요청을 Upstream 서버로 보내주고, Upstream 서버가 내려준 응답을 클라이언트에게 내려주는 ..
1. Establish TCP Connection클라이언트가 서버에게 SSH 요청을 보내면 가장 먼저 서버 - 클라이언트 간의 TCP 연결이 이루어진다. 서버는 주로 Port 22를 listen하고 있고, 클라이언트는 임의의 Port에 바인딩 되어서 TCP Connection이 생성된다. TCP Connection이 생성되면, SSH 세션이 생성된다. 이 SSH 세션 내에서 다음 작업들을 진행하게 될 것이다세션 초기화클라이언트 - 서버 키 교환세션 키 생성신원 인증 등등2. Supported Version NegotiationTCP 연결이 설정되면 클라이언트 - 서버는 SSH 프로토콜 버전을 서로 교환한다. 메세지 형식은 'SSH-2.0-'으로 시작하는 문자열을 교환하는데, 예를 들면 'SSH-2.0-O..
FixtureFixture는 테스트가 시작하기 전 필요한 인자를 제공하거나, 상태를 정의하는데 사용한다. 예를 들어 다음과 같은 역할에 사용할 수 있다. SUT를 생성과 협력 관계의 인스턴스를 미리 설정된 조건으로 생성하고 제공한다. SUT, 혹은 통제할 수 없는 외부 인스턴스의 행동을 미리 지정한다. (Mocking 형태) Basic Fixture 생성해보기class Fruit: def __init__(self, name): self.name = name def __eq__(self, other): return self.name == other.name@pytest.fixturedef fruit_apple(): return Fruit('apple')@pytest..
들어가기 전이 글은 HTTP/2 in action 4장을 읽으며 공부한 글입니다. 4.1 HTTP/1.2가 아니라 HTTP/2인 이유바이너리 프로토콜 (프레임 기반으로 메세지를 주고 받음)동기적이 아니라 다중화 (한 커넥션에서 여러 스트림을 보낼 수 있음) 흐름 제어 (TCP 수준이 아니라 HTTP/2 수준)스트림 우선순위화헤더 압축 (HTTP/1.1까지는 헤더압축 없음) 서버 푸시HTTP/2는 HTTP/1.x 프로토콜의 성능을 개선하기 위해 만들어진 프로토콜이고, 위 개선점이 존재한다. 일반 개발자들은 개발함에 있어서 HTTP/2, HTTP/1.x를 구분할 필요는 없다. HTTP/2 역시 GET, POST 같은 메서드를 사용해 요청하고 200, 300 같은 응답 코드를 받는 방식으로 동작하기 때문이다...
https://armeria.dev/docs/server-annotated-service/#parameter-injection Annotated services — Armeria documentationAnnotated services Visit armeria-examples to find a fully working example. Armeria provides a way to write an HTTP service using annotations. It helps a user make his or her code simple and easy to understand. A user is able to run an HTTP service by fe…armeria.dev https://github.com/..