Application Layer | 응용 계층
네트워크 서비스와 애플리케이션 계층
애플리케이션 계층의 역할
애플리케이션 계층은 웹이나 이메일과 같은 서비스를 제공하는 계층이다.
각 서비스는 자신만읜 독자적인 프로토콜을 가지고 있다.
애플리케이션 계층은 사용자가 직접 사용하며 체감하는 계층
애플리케이션 계층은 사용자가 직접 사용하면서 체감할 수 있는 서비스를 제공한다.
네트워크 계층 모델 중 트랜스포트 이하의 계층들은 데이터 전송을 담당하고 있으므로 이들 데이터 전송 관련 계층을 제외한 모든 영역이 애플리케이션 계층의 범주하고 보면 된다.
사용자가 직접 사용하는 프로토콜
프로토콜 | 동작 방식 |
---|---|
HTTP | 웹 클라이언트와 웹 서버 사이에서 웹 페이지 데이터를 주고 받는다. |
POP, SMTP, IMAP | 메일을 송수신하고 보관한다. |
SMP,AFP | LAN 안에서 파일을 공유한다. |
FTP | 서버를 통해 파일을 주고 받는다. |
Telnet, SSH | 원격에서 서버를 제어한다. |
사용자가 간접적을 사용하는 프로토콜
애플리케이션 계층의 프로토콜 중에는 사용자가 직접 사용하지 않아서 체감할 수 없는 프로토콜들도 있다.
이러한 프로토콜들은 OS나 다른 애플리케이션 계층의 프로토콜들이 간접적으로 사용한다.
프로토콜 | 동작 방식 |
---|---|
DNS | 도메인명과 IP어드레스의 정보를 서로 변환할떄 사용한다 |
DHCP | LAN 내의 컴퓨터에게 IP 어드레스를 할당할 때 사용한다 |
SSL/TLS | 통신 데이터를 암호화하여 주요 정보를 안전하게 주고받을 때 사용한다 |
NTP | 네트워크에 연결된 장비들의 시스템 시간을 동기화할 때 사용한다. |
LDAP | 네트워크에 연결된 자원의 통합관리에 필요한 디렉터리 서비스를 제공할 때 사용한다. |
웹페이지를 전송하는 HTTP
웹 페이지가 표시되기까지의 과정
웹 브라우저가 웹 서버로 특정 웹 페이지를 요청하면 웹 서버가 해당 페이지의 내용을 HTML 형식으로 응답한다.
보고 싶은 웹 페이지의 URL을 요청한다.
웹 페이지의 HTML 파일을 응답한다.
HTML 내용을 확인한 결과, 추가로 CSS나 JPEG가 필요하면 해당 파일들을 받기 위해 새로운 요청을 보낸다.
응답으로 받은 HTML,CSS,JPEG,JS 파일들을 조합해서 웹 페이지를 표시한다.
HTTP 메세지
클라이언트 PC의 웹 브라우저와 웹 서버는 HTTP라는 애플리케이션 계층의 프로토콜을 사용한다.
통신 과정에서 주고받은 정보들은 HTTP 메시지라고 부르고, 요청과 응답의 두 가지 형태로 구분된다.
URL을 입력한다.
요청을 보낸다.
요청에 대한 응답을 보낸다.
웹 페이지를 표시한다.
HTTP 메시지 형태 | 역할 |
---|---|
요청/응답 정보 행 | 메시지의 종류나 상태를 표시한다. |
헤더 | 메시지에 대한 상세한 정보가 포함되어 있다. |
빈줄 | |
메세지 바디 | 응답인 경우 이 부분에 HTML 데이터가 들어간다. |
HTTP는 상태가 없다.
HTTP는 통신시 정보를 한 번씩 주고받은 후 바로 끊는 형태로 처리됩니다.
이러한 상태 정보를 저장하지 않는 통신 형태를 스테이트리스(stateless)라고 합니다.
HTTP 요청과 URL
특정 웹 페이지를 받아 보기 위해서는 HTTP 요청을 보내야 하는데 이떄 URL이라는 문자열을 사용한다.
http://www.sample.co.kr/sample/index.html
위치 | 용어 | 역할 |
---|---|---|
http | 스키마 | 사용하는 프로토콜을 명시한다. |
www | 호스트 | 서버의 이름 혹은 역할을 명시한다. |
sample.co.kr | 도메인 | 서버를 운영하는 조직을 명시한다. |
sample | 디렉터리 | 서버 내의 디렉터리를 명시한다. |
index.html | 파일 | 해당 디렉터리 내의 파일을 명시한다. |
HTTP 요청
위치 | 역할 |
---|---|
GET /sample/index.html HTTP/1.1 | GET 뒤에 디렉터리와 파일명, 프로토콜 버전 정보가 뒤따른다. |
Host: www.sample.co.kr | Host 에 웹 서버 정보가 들어간다. |
나머지 헤더 | 이후 정보는 웹 브라우저에 관한 정보가 들어간다. |
메세지 바디 | GET 요청인 경우 별도의 요청 내용인 메시지 바디가 없다. |
HTTP 응답과 상태 코드
HTTP 응답 데이터의 첫 번쨰 행에는 요청에 대한 응답 상태를 표시하기 위한 상태 코드가 들어간다.
응답이 정상이라면 메시지 바디에 요청한 웹 페이지의 내용이 들어간다.
HTTP 응답
위치 | 예시 | 역할 |
---|---|---|
응답 정보 행 | HTTP/1.1 200 OK | 상태 정보가 들어간다 |
헤더 | Date: ... | 헤더에는 파일 갱신 날짜나 크기와 같은 정보가 들어간다. |
빈줄 | ||
메세지 바디 | <!DOCTYPE> ... | 메시지 바디에 HTML 파일의 내용이 들어간다 |
상태 코드의 의미
100 번대는 정보를,
200 번대는 성공을,
300 번대는 경로 전환을,
400 번대는 에러를 의미합니다.
웹 서비스와 웹 애플리케이션
검색 서비스에서 게시판까지
웹 페이지는 사용자의 입력을 받기 위해 양식 형태의 입력 필드를 제공한다.
웹 서버는 사용자의 입력을 받은 후 그 응답 결과를 다시 사용자에게 되돌려 주는데 이떄 응답 결과를 동적으로 만들어 주는 것이 웹 서비스나 웹 애플리케이션이다.
웹 서비스도 HTTP 메세지로 정보를 교환한다.
웹 브라우저가 웹 서버에 웹 서비스를 요청하고 그 결과를 응답받는 것은 웹 브라우저가 웹 서버에 웹 페이지를 요청하고 응답받는 것과 동작 방식상 큰 차이가 없다.
GET 방식과 POST 방식
HTML 입력 폼을 통해 HTML 요청을 보낼 때 주로 GET 방식과 POST 방식의 두 종류의 요청 방식을 많이 사용한다.
GET 방식
GET /search?q=TCP%2FIP HTTP/1.1 입력 폼의 내용이 요청 행에 포함된다.
URL에 입력 폼의 내용이 포함되어 있어서 웹 브라우저의 이전 페이지 버튼을 누르면 한 단계 앞의 페이지가 표시되어 정적인 웹 페이지처럼 다룰 수 있습니다.
POST 방식
POST /sendform.do HTTP/1.1
GET 방식이 정보를 요청하는 것과 달리 POST 방식은 저장하거나 변경할 때 사용하며 상대적으로 더 많은 데이터를 전송할 수 있습니다.
GET 방식처럼 입력 폼의 내용이 육안으로 쉽게 노툴되지는 않지만 전송한 메세지를 해석하면 내용이 노출되기 때문에 보안상 안전하다고 할 수 없습니다.
웹 서비스의 사용성을 높여주는 AJAX
AJAX는 HTTP 메세지로 통신하는 점에서는 일반적인 요청 방식과 비슷하지만 요청을 보내는 주체가 브라우저가 아닌 자바스크립트라는 것에 차이가 있다.
AJAX는 웹 브라우저가 웹 서버로 요청하는 것이 아니라 자바스크립트로 작성된 프로그램이 웹 서버와 통신한다.
결과적으로 사용자 입장에서는 전체 페이지를 다시 조회하지 않아도 되고, 서버의 응답을 바로 받아 상호작용할 수 있으므로 보다 자연스러운 서비스 이용과 보다 향상된 사용자 경험을 느낄 수 있다.
세션을 유지하기 위한 쿠키
HTTP는 기본적으로 요청과 응답하는 과정에서 상태 정보를 저장하지 않아서 무상태 혹은 스테이트리스 프로토콜이라고 하며 상태를 유지하면서 연속된 응답을 해야 할 때는 쿠키라는 기술을 사용한다.
쿠키로 세션을 유지한다.
HTTP는 무상태 프로토콜이기 떄문에 요청과 응답을 한 번씩 주고받은 후에 통신이 끊어진다.
그래서 온라인 쇼핑몰에서 상품을 선택하고 구입 결정을 한 후에 결제 화면으로 이동하는 것처럼 여러 단계의 흐름 처리를 할 떄는 각 요청이 동일한 사용자가 보낸 것인지 다른 사용자가 보낸 것인지 판단하지 못한다.
이런 경우 여러 건의 요청 처리를 동일한 사용자 접속 세션으로 인식할 수 있도록 쿠키를 사용한다.
처음 접속을 하는 경우 요청에 대한 응답에 쿠키를 함께 보낸다.
쿠키가 클라이언트 PC에 저장된다.
다음 요청부터 메세지를 보낼 때 쿠키를 함께 보낸다.
쿠키를 보고 같은 사용자의 요청인지 판단한다.
쿠키가 하는 일
웹 브라우저는 응답받은 메세지에 "Set-Cookie:"라는 문자열이 있는지 확인하고, 만약 있으면 그 내용을 로컬 디스크에 쿠키 형태로 저장한다.
쿠키 정보가 악용될 경우 보안 문제가 발생할 수 있기 때문에 웹 브라우저가 이에 대한 방어책을 자체적으로 구현하고 있다.
예를 들어 쿠키가 생성된 웹 서버와 동일한 도메인을 사용하는 웹 사이트에만 쿠키가 전송되도록 제한하거나, 이미 저장된 쿠키들이 있으면 유효기간을 확인하고 유효기간이 지난 것은 자동으로 폐기하도록 한다.
쿠키를 사용해서 주고받은 정보
유출되었을 떄 보안 문제가 생길 만한 정보는 클라이언트 PC의 쿠키에 저장하지 말아야 한다.
기본적으로 각종 정보는 서버 쪽에 저장하는 것이 원칙이고 동일한 사용자 인지 확인하기 위한 세션 ID등의 식별 정보만 클라이언트에 쿠키로 저장하도록 제한해야 한다.
사용자 계정명과 패스워드를 입력해서 로그인한다.
세션 ID를 발급한 후에 응답 메세지에 포함해서 보낸다.
세션 ID가 일치하므로 로그인된 사용자와 동일한 사용자로 간주한다.
이메일
송신과 수신에 서로 다른 프로토콜을 사용한다
이메일에서 사용되는 애플리케이션 계층 프로토콜에는 발실할 때 사용하는 SMTP와 수신할 때 사용하는 POP가 있다.
SMTP의 동작 방식
SMTP 프로토콜은 클라이언트 PC가 메일 서버로 메일을 보낼 떄만 사용되는 것이 아니라 발신자의 메일 서버에서 수신자의 메일 서버로 메일을 중계할 때도 사용된다.
HTTP 프로토콜과 달리 상태를 가지는 스테이트풀(stateful) 프로토콜이기 때문에 전송 종료 명령이 보내져야 통신을 종료한다.
접속 요청 ->
<- 접속 OK
MAIL FROM 송신자 주소 ->
<- OK
RCPT TO 수신자 주소 ->
<- OK
메일 데이터 전송 ->
<- OK
종료 ->
<- OK
메일 서버 간의 메일 중계에도 SMTP가 사용된다.
이메일을 수신하는 POP
SMTP 프로토콜을 통해 전송된 메일은 최종적으로 수신자의 메일 서버에 저장된다.
이후 메일 서버에 저장된 메일을 확인할 때는 POP 프로토콜을 사용한다.
메일을 수신하는 것 외에도 수신한 메일 건수나 용량 확인, 메일 삭제와 같은 처리에도 POP 프로토콜을 사용한다.
접속 요청 ->
USER 사용자 이름 ->
<- OK
PASS 패스워드 ->
<- OK
STAT/LIST/UIDL ->
<- 메일 건수나 용량
RETR 메시지 번호 ->
<- 메일 데이터
종료 ->
<- OK
SMTP에도 인증은 필요하다.
SMTP에는 POP와 같은 사용자 인증 체계가 없기 때문에 스팸 메일 발송 등에 종종 악용되기도 한다.
그래서 POP 서버의 인증 기능을 활용하거나 다른 네트워크로부터의 SMTP 접근을 제한한다.
그 외에는 SMTP Auth 프로토콜이라는 것이 만들어졌는데 이는 SMTP에 사용자 인증 기능이 추가된 확장 프로토콜이다.
서버에 메일을 보관하는 IMAP
POP 프로토콜은 기본적으로 클라이언트가 메일을 수신하면 메일 서버에 보관된 메일을 삭제하게 되어 있다.
그래서 메일을 오랫동안 보관하려면 클라이언트 PC에 메일을 보관할 저장 공간을 확보해 두어야 한다.
이에 반해 IMAP프로토콜은 클라이언트 PC가 메일을 수신하더라도 메일 서버에서 수신한 메일을 지우지 않고 보관하게 되어 있다.
PC끼리 파일 공유하기
파일 공유는 개인 컴퓨터에 공유 디렉토리를 만든 후 그 안에 공유할 파일을 저장하여 여러 사람이 함께 활용할 수 있도록 만드는 서비스다.
피어 투 피어 통신
개인 컴퓨터에서 많이 사용되는 파일 공유는 공유에 참여하는 각가의 컴퓨터가 서로 서버가 되기도 하고 클라이언트가 되기도 하는 피어 투 피어 방식을 사용한다.
특별히 공유를 위한 서버를 별도로 준비할 필요가 없고 공유할 컴퓨터끼리 네트워크에 접속하기만 하면 된다.
그 외에도 NAS(Network Attacted Storage)라는 파일 공유 프로토콜을 지원하는 전용 컴퓨터가 있는데 다른 개인 컴퓨터들과 같이 네트워크에 연결하기만 하면 쉽게 공유에 참여할 수 있다.
공유할 상대 컴퓨터를 찾는 방법
파일 공유는 피어 투 피어 방식이기 떄문에 중앙에서 관리하는 서버가 없다.
처음에는 LAN에 연결된 컴퓨터들 중 어떤 컴퓨터가 공유를 하고 있는지 알 방법이 없기 때문에 일단 컴퓨터가 네트워크에 연결되면 다른 모든 컴퓨터에게 자신이 연결되었다는 것을 통보하게 된다.
이때 정보를 받은 다른 컴퓨터는 자신의 정보를 응답으로 알려주게 되고 결과적으로 네트워크 전체에서 공유 가능한 컴퓨터들을 서로 식별할 수 있게 된다.
파일 공유 프로토콜은 OS마다 서로 다르다
파일 공유 기능은 OS에 기본적으로 탑재되어 있는데 윈도우는 SMB가 사용되고 맥 OS X에서는 AFP가 사용되는 등 OS마다 독자적인 파일 공유 프로토콜을 제공하였다.
최근에는 다른 OS의 프로토콜도 지원할 수 있게 되어 간단한 설정만으로 파일을 서로 공유할 수 있게 되었다.
파일을 전송하는 FTP
서버로 파일을 전송한다.
FTP는 파일 전송 프로토콜이다. LAN에서는 파일 공유와 같은 더 간단한 파일 전송 방법이 있기 떄문에 주로 인터넷에 연결된 서버에 파일을 전송할 때 사용된다.
명령어를 사용해서 파일을 업로드하거나 다운로드하고, 디렉터리를 만들거나 파일을 삭제하기도 한다.
웹 페이지 파일을 업로드하는 경우
FTP는 웹 서버로 웹 페이지를 전송할 때 자주 사용된다. 한 대의 서버에서 FTP 서버 프로그램과 웹 서버 프로그램을 함께 구동하고 있다면 FTP로 HTML 파일을 전송하고 이 파일을 웹 서버가 HTTP를 통해 서비스하는 것이 가능하다.
데이터 커넥션과 컨트롤 커넥션
FTP에서는 크게 파일을 주고받기 위한 데이터 커넥션과 명령어를 보내기 위한 컨트롤 커넥션의 두 가지 접속 형태를 사용한다.
이렇게 접속 형태가 분리되어 있으면 파일 전송 중에도 명령을 줄 수 있어서 전송 중인 파일을 중단시키는 것이 가능하다.
액티브 모드와 패시브 모드
방화벽이나 가정용 초고속 인터넷 라우터를 사용하는경우 외부와의 통신을 차단하는 경우가 많다.
특히 FTP 서비스에서는 서버 내부에서 외부로 나가는 통신을 방화벽이 차단하여 파일 전송이 안되는 경우가 발생하기도 하는데 이떄는 패시브 모드를 사용해서 클라이언트 쪽에서 서버 쪽으로 역방향으로 데이터 커넥션을 만들어 주면 파일을 전송할 수 있게 된다.
원격지의 컴퓨터 제어하기
원격지 컴퓨터를 명령어로 제어하기
Telnet이나 SSH는 원격지의 컴퓨터를 명령어로 제어하기 위한 프로토콜이다. 서버들은 데이터 센터와 같이 먼 곳에 설치되어 있는 경우가 많기 때문에 서버를 관리할 때는 Telnet이나 SSH를 사용하는 것이 일반적이다.
Telnet이나 SSH는 윈도우의 명령 프롬프트에서 명령을 내리면 그 내용을 그대로 서버에 전달하는데, 명령에 대한 결과가 다시 텍스트로 표시되어 마치 서버 앞에 앉아 있는 것처럼 작업할 수 있다.
원격지 컴퓨터의 데스크톱 제어하기
원격 제어를 할 때 텍스트 형태의 명령어 방식 외에도 GUI 인터페이스를 사용한 도구나 원격 제어 관련 프로토콜을 활용하는 방식이 있다.
윈도우에 내장된 원격 테스크톱은 RDP프로토콜을 사용하고 OS에 독립되어 범용으로 사용 가능한 VNC는 RFP 프로토콜을 사용한다.
씬 클라이언트
원격 데스트톱이나 VNC를 응용한 예로 가상 OS와 씬 클라이언트를 조합한 서비스가 있었다.
이 방식은 한 대의 서버 컴퓨터에 여러 대의 가상 OS를 운영하고, 저사양 PC에서 서버의 가상 OS로 원격 데스크톱이나 VNC로 접속하는 방식으로 서버 자원을 원격 제어를 통해 사용하는 것이 가능했다.
Voice over IP와 영상 스트리밍
실시간으로 음성과 동영상을 보내기 위한 기술
음성이나 동영상 데이터는 메일과 같은 텍스트 형태의 정보에 비해 상대적으로 데이터 용량이 크기 떄문에 통신의 신뢰성보다는 전송 속도를 우선하는 UDP를 사용하고 전송 시에는 데이터를 압축하되 수신된 정보를 바로 재생할 수 있는 스트리밍 기술을 사용한다.
전송 중에 일부 데이터가 누락되더라도 신경쓰지 않는다
클라이언트 서버 방식과 조합하기
음성이나 동영상을 주고받는 서비스는 중간에 서버를 경우하지 않고 컴퓨터나 스마트폰끼리 직접 통신하는 피어 투 피어 방식을 사용하는 것이 일반적이다.
다만 피어 투 피어 방식은 서로 통신할 상대를 찾는 것이 어렵기 때문에 우선 클라이언트 서버 방식으로 디렉터리 서버로 접속하여 상대를 찾은 다음, 상대방과 통화할 떄 피어 투 피어 방식으로 직접 통신하는 하이브리드 방식도 많이 활용된다.
동영상 공유 서비스가 사용되는 프로토콜
음성이나 동영상을 처리하는 프로토콜은 아직 널리 보편화된 것이 아니기 때문에 일부 네트워크 환경에서는 통신이 거부되는 경우가 종종 발생할 수 있다.
그래서 유튜브와 같은 동영상 공유 서비스에서는 동영상 프로토콜에서 사용할 데이터를 HTTP 메세지 안에 채워 넣는 기술을 사용하고 있다.