[CS/Network] HTTP 프로토콜(protocol)

1
post-thumbnail

TCP/IP 계층 모델

우선 프로토콜을 이야기하기 전에 먼저 계층 모델을 통해 컴퓨터 네트워크 통신 원리를 간단히 살펴보자. 컴퓨터 네트워크는 여러 통신 계층이 조합된 형태로 구성되어 있으며, 각 통신에 참여하는 장비나 프로그램은 각각 맡은 역할이 있는데 이 역할을 추상화 한 것을 계층 모델이라고 한다. 각 계층은 독립적으로 맡은 역할을 수행한다.

  • 응용 계층(Application Layer) : 웹 서비스, 이메일과 같은 서비스를 사용자에게 제공 > 서비스 내용을 결정
  • 전송 계층(Transport Layer) : 애플리케이션 계층과 인터넷 계층 사이에서 데이터가 올바르게 전달되도록 중계
  • 인터넷 계층(Internet Layer) : 목적지 IP의 어드레스로 데이터를 전달
  • 네트워크 접근 계층(Network Acess Layer) : 네트워크 어댑터와 같은 하드웨어를 통해 데이터를 전달

계층 별 역할 살펴보기(request 예시)

응용 계층에 속하는 웹 브라우저가 웹 서버에에게 웹 페이지의 URL을 요청하면 웹 서버는 요청에 대한 응답 결과에 해당하는 HTML 데이터를 웹 브라우저에게 응답하고 웹 브라우저는 전달 받은 HTML 데이터를 웹 페이지 형태로 보여준다.

얼핏 보면 사용자 PC의 응용 계층과 서버의 응용 계층간의 데이터 요청/응답 프로세스라고 보여지지만 이는 각 계층이 모두 맡을 일을 처리해야 이루어 지는 체계적이 프로세스이다.

계층의 최상단인응용 계층에서 사용자 PC에서 보고싶어하는 페이지의 URL을 요청하면, 하위 계층인 전송 계층응용 계층의 데이터를 목적지에 전달하기 위해 데이터 헤더에 현재 웹 브라우저의 몇 번 포트에서 웹 서버의 몇 번 포트로 요청을 하는지에 대한 내용을 적어서 인터넷 계층에 전달 한다. 이때 데이터가 제대로 전달되지 않으면 재전송한다.

인터넷 계층전송 계층에게 전달받은 데이터에 컴퓨터를 식별할 수 있는 address 정보를 덧붙여서 멀리 떨어져 있는 목적지까지 데이터를 잘 전달할 수 있도록 한다.

네트워크 접근 계층은 물리적으로 인접하고 있는 네트워크 어댑터(스위치)가 처리할 수 있는 형태로 데이터를 변환하고 주변 장치까지 데이터를 전달하는 데 필요한 정보를 이더넷 헤더에 적어서 인접해있는 장비나, 컴퓨터에게 변환된 데이터를 전달한다.

프로토콜(Protocol)이란?

컴퓨터와 컴퓨터가 통신할 때 어떤 절차에 따라 무엇을 보낼 것인지, 또 전송이 되지 않았을 때 어떻게 할 것인지 등에 대한 내용을 주고 받아야 한다. 원활한 통신을 위해 통신 시 지켜야할 절차나 규칙을 미리 정해놓았는데 이를 프로토콜(protocol)이라고 한다. 각기 다른 역할을 수행하는 계층마다 동작 방식에 맞는 프로토콜을 사용한다.

HTTP

클라이언트 PC의 웹 브라우저와 웹 서버는 HTTP(Hypertext Transfer Protocol)라는 응용 계층의 프로토콜을 사용한다. 통신은 요청(request)응답(response)로 이뤄지는 데 이 과정에서 주고받는 정보들을 HTTP 메세지라고 한다.

HTTP 메세지(request)

HTTP 응답 메세지은 4개 영역으로 구성되어 있으며 각 영역별 내용은 다음과 같다.

  • 요청 정보 행/응답 정보 행: 메세지의 종류나 상태
  • 헤더: 메시지에 대한 정보
  • 빈 줄: 말 그대로 헤더와 바디 구분을 위해 있는 빈 영역
  • 메시지 바디: 서버가 응답시 전송한 HTML 데이터

HTTP의 특징 : Stateless(상태 정보 유지x), Connectionless(비 연결 지향)

HTTP는 요청과 응답을 한 번씩 주고받은 후에 통신을 끊어(Connectionless) 통신 상태 정보를 저장하지 않는 Stateless 프로토콜이다. 그럼 이러한 특징으로 발생할 수 있는 문제들을 (e.g. 동일 사용자가 보낸 요청을 인식하지 못하는 문제) 어떻게 해결할 수 있을까?

  • Connectionless: 클라이언트에서 서버에 요청을 보내면 서버는 응답 후 접속을 끊는다. 이를 방지하기위해 HTTP1.1에서 Connection 헤더에 keep-alive를 입력하면 연결이 끊기지 않는다.
  • Stateless: 서버가 응답 헤더에 쿠키(Cookie)값을 추가하여 응답하여 클라이언트 PC에 쿠키를 저장하게끔 한다.

URL

앞서 언급했던 바와 같이 웹 페이지를 받아보기 위해서 HTTP 요청을 보낼 때는 URL(Uniform Resource Locator)을 사용하는데 URL의 각 요소가 의미하는 바는 다음과 같다.

  • protocol: 사용하는 프로토콜
  • host: 서버의 이름 혹은 역살
  • port: 서버를 운영하는 조직
  • resource path: 서버 내의 디렉터리

상태 코드

  • 100번대: 정보
  • 200번대: 성공
  • 300번대: 경로 전환
  • 400번대: 에러
상태 코드상태의미
100Continue서버는 헤더가 받았고 바디를 기다리는 중
101Switching Protocols클라이언트가 서버에게 프로토콜을 바꾸자고 제안했고 서버가 수락함
200OK요청이 성공했고 요청한 결과 데이터를 응답으로 보냈음
201Created요청이 성공했고 새로 만들어진 URL을 응답으로 보냄. 웹 서비스나 웹 애플리케이션에서 사용됨
301Moved Permanently요청한 내용이 다른 경로로 옮겨졌음. 이후 옮겨진 경로로 요청해야 함
302Found요청한 내용이 다른경로로 옮겨졌음. 임시로 옮겨진 것이라 이후에도 동일한 경로로 요청해야 함
304Not Modified요청한 내용은 갱신되지 않았음
400Bad Request요청에 문제가 있음
403Forbidden요청한 내용은 접근 금지됨
404Not Found요청한 내용을 찾을 수 없음

참고

0개의 댓글