인터넷 통신
지금부터 인터넷이 동작하는 가장 기본적인 원리를 알아보려 한다. 우선 인터넷이란 무엇일까?
인터넷(Internet)은 인터넷 프로토콜(TCP/IP)을 기반으로 하여 전 세계적으로 연결되어있는 컴퓨터 네트워크 통신망을 일컫는 말이다.
그렇다면 인터넷에서 컴퓨터는 어떻게 통신할 수 있을까? 우선 인터넷이 동작하기 위해서는 최소 두대의 컴퓨터가 필요하다. 그리고 각각을 클라이언트와 서버라고 하겠다.
카카오톡 PC버전을 설치하는 상황을 떠올려보자. 우선 우리는 크롬이나 익스플로러와 같은 웹브라우저를 실행시키고 카카오톡 설치 사이트에서 파일을 다운로드 받을 것이다.
이때 우리는 웹브라우저를 통해서 카카오톡 파일을 요청하게된다. 그렇다면 설치파일은 누구에게서 받는 것일까? 이때 우리에게 응답을 해주는 것이 서버이다.
여기서 중요한 단어는 요청과 응답이다. 우리는 인터넷을 통해서 그림이나, 문서, 파일등을 요청한다. 그리고 이러한 요청에 대한 응답을 받는다.
그리고 이렇게 클라이언트와 서버 간에 요청/응답 프로세스를 가능하게 해주는 것이 HTTP 프로토콜이다.
HTTP 란?
HTTP(HyperText Transfer Protocol)
는 WWW(World Wide Web)
상에서 정보를 주고받을 수 있는 프로토콜을 말하고 주로 HTML 문서를 주고받는데 쓰인다.
위에서 살펴본 클라이언트와 서버 구조를 다시 생각해보면 클라이언트는 웹 브라우저를 가지고 서버로 URL을 요청한다. 정확하게는 HTTP request
를 요청한다. 서버는 이 요청을 받아 HTTP response
로 응답하게 된다. 이것이 HTTP의 기본적인 흐름이다.
HTTP의 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(StateLess)
- 비 연결성(Connectionless)
클라이언트 서버 구조
HTTP는 클라이언트가 서버에 요청을 보내고 응답을 대기한다. 그리고 서버가 요청에 대한 결과를 만들어서 응답한다는 단순한 구조로 되어있다.
- Request(요청) / Response(응답) 구조
- 클라이언트는 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답
무상태 프로토콜 (Stateless)
무상태 프로토콜은 서버가 클라이언트의 상태를 보존하지 않는다는 것이다.
예시
1
2
3
4
5
6
7
8
9
10
Stateful(상태유지)
고객: 이 노트북 얼마인가요?
점원: 100만원 입니다.
고객: 2개 구매하겠습니다.
점원: 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
고객: 신용카드로 구매하겠습니다.
점원: 200만원 결제 완료되었습니다.
1
2
3
4
5
6
7
8
9
10
11
Stateless(무상태)
고객: 이 노트북 얼마인가요?
점원: 100만원 입니다. (노트북 상태 유지)
고객: 노트북 2개 구매하겠습니다.
점원: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
(노트북, 2개 상태 유지)
고객: 노트북 2개를 신용카드로 구매하겠습니다.
점원: 200만원 결제 완료되었습니다. (노트북, 2개, 신용카드 상태 유지)
위의 예시를 조금 더 쉽게 이해하기 위해서는 점원이 바뀌는 경우를 생각해보면 된다. 점원 A에게 음료를 주문하고 점원 B를 통해 결제를 하려한다면 점원 B에게 어떤 음료를 주문 했는지를 다시 알려주어야 한다.
이처럼 무상태 프로토콜은 클라이언트가 추가 데이터를 전송해야 하는 단점이 존재한다. 반면에 추가 데이터만 전송한다면 점원이 변해도 주문을 완료할 수 있듯 서버의 확정성을 높이 수 있다.(스케일 아웃)
비 연결성(Connectionless)
비 연결성은 서버와 클라이언트가 통신이 끝난 뒤 연결을 해제하여 연결 상태를 유지하지 않는다는 것이다. 이는 통신할때 마다 다시 연결하여 데이터를 전달 받은 후 연결을 해제하는 것을 말한다.
비효율적인 방식으로 보이지만 웹 서비스의 경우를 생각해보면 효율적인 방법이라는 것을 알수 있다. 보통 웹 서비스는 1시간 동안 수천명에서 수만명이 서비스를 사용한다. 이때 이들의 연결을 유지한다고 생각한다면 서버는 엄청난 리소스를 부담하고 있어야한다.
그리고 클라이언트는 계속해서 서버에 데이터를 요청하지 않는다. 예를 들어 우리가 구글에서 원하는 정보를 검색한 후 검색결과 페이지에 머무르는 시간이 존재한다는 것이다. 이 경우에는 연결을 유지하는 것이 비효율적이다. 반대로 비 연결성은 서버 자원을 매우 효율적으로 사용할 수 있다.
Comments powered by Disqus.