7 계층
7계층인 애플리케이션 계층은 애플리케이션 프로세스를 정의하고 애플리케이션 서비스를 수행한다. 애플리케이션의 UI 부분이나 사용자 입,출력 부분을 정의하는 것이 애플리케이션 계층의 역할이다.
HTTP(Hypertext Transfer Protocol)
-
HTTP 파일 전송은 HTTP 리퀘스트(요청)
과 HTTP 리스폰스(응답)
를 주고받으면서 이루어진다.
-
HTTP 통신 전에 웹브라우저와 웹서버 애플리케이션은 TCP 커넥션을 맺는다. 파일 크기가 크면 TCP에 의해 분할된다.
-
HTTP 리퀘스트
리퀘스트 라인
, 메시지 헤더
, 엔티티 바디
이렇게 세 부분으로 나뉜다.
- 리퀘스트 라인은 HTTP 리퀘스트의 첫 번째 줄로, 웹 서버에 대한 실제 처리 요청을 전달한다. 리퀘스트 라인은 다시 메소드, URI, 버전으로 구성된다. 메소드는 서버에 대한 요청을 나타낸다.
- 메시지 헤더는 요청 라인에 이어지는 여러 줄의 텍스트이다. 여기에 웹브라우저의 종류와 버전, 대응하는 데이터 형식 등의 정보를 기술한다.
- 엔티티 바디는 POST 메소드로 웹 브라우저에서 데이터를 보낼 때 사용된다.
-
HTTP 리스폰스
- HTTP 리스폰스는 HTTP 리퀘스트와 비슷하게
리스폰스 라인
, 메시지 헤더
, 엔티티 바디
로 구성된다.
- 리스폰스 라인은 다시 버전, 상태 코드, 설명문으로 나뉜다. 버전은 HTTP의 버전을 나타내며, 현재 주요 버전은 1.0이나 1.1이다. 상태 코드는 리퀘스트에 대한 웹서버 애플리케이션의 처리 결과를 나타내는 3자리로 된 숫자이다. 설명문이란 상태 코드의 의미를 간단히 보여주는 텍스트이다.
상태 코드 값 | 의미 |
---|
1xx | 정보, 추가 정보가 있음을 전달한다. |
2xx | 성공. 서버가 요청을 처리했음을 전달한다. |
3xx | 리다이렉트. 다른 URI로 다시 리퀘스트 하도록 요청한다. |
4xx | 클라이언트 에러. 요청에 문제가 있어 처리할 수 없음을 전달한다. |
5xx | 서버 에러. 서버 쪽에 문제가 있어 처리할 수 없음을 전달한다. |
- 메시지 헤더는 웹서버 애플리케이션이 더 자세한 정보를 웹브라우저에 전달하기 위해 이용한다.
- 엔티티 바디에는 웹브라우저에 돌려보낼 데이터가 들어간다. 웹브라우저에 돌려 보내는 데이터는 주로 HTML 파일이다.
-
HTTP 쿠키: 웹서서 애플리케이션이 웹브라우저에 특정 정보를 저장해 두는 기술이다.
- 웹서버 애플리케이션은 웹브라우저의 요청에 대한 HTTP 리스폰스에 쿠키를 포함하여 보낸다.(쿠키 정보는 HTTP 헤더에 포함된다.) 웹브라우저가 쿠키를 받을 수 있게 설정되어 있으면, 수신한 쿠키를 저장합니다. 쿠키를 이용함으로써, 웹서버는 사용자의 로그인 정보나 사이트 내 웹페이지 열람 이력을 관리할 수 있다.
-
HTTP 버전
- 1991년 HTTP가 등장한 이래 네 번의 큰 버전 업그레이드가 있었다.
- 어떤 버전에서 연결하는지는 웹브라우저와 웹서버의 설정에 따라 다르다.
- HTTP/0.9
- HTML로 기술된 텍스트 파일을 서버에서 다운로드하기 위한 단순한 것
- HTTP/1.0
- 텍스트 파일 이외에도 다양한 파일을 다룰 수 있게 되어, 다운로드뿐만 아니라 업로드나 삭제도 가능해짐에 따라 프로토콜로서 그 폭이 크게 넓어졌다.
- 리퀘스트마다 TCP 커넥션을 만들고 부수는 순서를 반복했다. 웹브라우저는 하나의 서버에 대해 동시에 오픈할 수 있는 TCP 커넥션 수가 결정되어 있으묘 최근의 기본값은 ‘6’이다.
- HTTP/1.1
- 킵얼라이브, 파이프라인 등 TCP 레벨에서 퍼포먼스 향상을 목표로 하는 기능이 추가되었다.
- 킵얼라이브: 한 번 만들어진 TCP 커넥션을 재사용하는 기능
- 파이프라인: 요청에 대한 응답을 기다리지 않고, 다음 요청을 송신하는 기능
- HTTP/2
- 애플리케이션 레벨에서의 성능 향상을 목표로 기능들이 추가되었다.
- 멀티플렉싱: 1개의 TCP 커넥션 안에 스트림이라는 가상 채널을 만들고, 스트림별로 요청과 응답을 교환하게 함으로써 HoL 블로킹 문제를 해소한다.
- HPACK: HTTP 헤더를 압축하는 기능이다.
- 서버 푸시: 하나의 요청에 대해 여러 응답을 반환하는 기능이다. HTTP/2 서버는 클라이언트가 최초로 요청한 코텐츠를 해석하고, 다음에 올 요청에 대한 응답을 요청이 오기 전에 보낸다.
- HTTP/3
- 애플리케이션 데이터를 보내지 않는 시간을 극단적으로 줄인 것으로, 뛰어난 성능 향사을 목표로 한다.
- UDP를 이용한 지연 감소: TCP가 아니라 UDP를 사용함으로써, 3-way handshake에 걸리는 시간을 줄이고, 더 많은 HTTP 데이터를 보낼 수 있도록 한다.
- TLS 1.3을 이용한 지연 감소
- HTTP/3은 TLS 1.3을 이용해 SSL 핸드셰이크에 걸리는 시간을 줄이고 더 많은 HTTP 데이터를 보낼 수 있게 된다.
HTTP와 HTTPS
- HTTP의 보안 문제를 해결해주는 프로토콜이
HTTPS(HyperText Transfer Protocol Secure)
이다. HTTPS는 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약이다.
- HTTPS는 텍스트를 암호화한다.
쿠키와 세션
- 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
- 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
[참고자료]
그림으로 배우는 네트워크 원리(저자: Gene, 출판사: 영진닷컴)
IT엔지니어를 위한 네트워크 입문(저자: 고재성,이상훈, 출판사: 길벗)
그림으로 공부하는 TCP/IP 구조(저자: 미야타 히로시, 출판사: 제이펍)