상위계층. 응용 계층
OSI 7계층 모델 중 가장 상위 계층으로, 사용자가 네트워크 상에서 직접적으로 사용하는 애플리케이션과의 통신(직접적인 상호작용)을 담당한다. 응용 계층은 사용자가 네트워크를 통해 접근하는 서비스의 제공을 주요 목적으로 가지고, 네트워크 서비스를 제공하는 다양한 응용 프로그램과 프로토콜을 포함하고 있다. 이메일, 웹 브라우징, 파일 전송, 원격 로그인 등 다양한 네트워크 서비스가 이에 해당하며 네트워크 상의 애플리케이션 프로세스 간 통신을 규정한다.
최근에는 대개 OSI 7계층 모델의 일부를 계승한 TCP/IP 모델을 사용한다. 또한, TCP/IP 모델에서도 한 번 더 업데이트가 이루어져 사실상 Updated TCP/IP Model이라 불리는 모델을 사용한다.
주요 기능
- 사용자 인터페이스
사용자가 네트워크 자원에 접근할 수 있도록 도와준다. 웹 브라우저나 이메일 클라이언트가 이에 해당한다.
- 데이터 포맷 변환
서로 다른 시스템 간에 데이터 형식을 변환하여 호환성을 제공한다. XML, JSON 등이 이에 해당한다.
- 세션 관리
통신 세션을 설정하고 관리한다. 클라이언트와 서버 간의 연결을 유지하는 역할을 한다.
- 서비스 제공
네트워크 서비스에 대한 API를 제공하여 개발자가 네트워크 기능을 쉽게 사용할 수 있도록 한다.
주요 프로토콜
HTTP(Hypertext Transfer Protocol), DNS (Domain Name System), SMTP(Simple Mail Transfer Protocol), FTP(File Transfer Protocol), Telnet, POP3(Post Office Protocol 3) 등 응용 계층에서는 여러 가지 프로토콜이 동작하는데, 각 프로토콜은 특정한 네트워크 서비스를 지원한다.
HTTP(Hypertext Transfer Protocol) / HTTPS(Hypertext Transfer Protocol Secure)
HTTP는 인터넷에서 웹페이지를 전송하는 데 사용되는 가장 기본적인 프로토콜이다. 웹 브라우저가 웹 서버와 통신할 수 있도록 하며, 주로 클라이언트(웹 브라우저)와 서버 간의 상호작용을 처리한다.
HTTP/1.1 (keepalive)로, HTTP/1.1 이전의 HTTP 통신에서는 매번 HTTP 요청을 보낼 때마다 일일이 TCP 연결을 맺고 끊는 과정이 필요했다. 그러나 HTTP/1.1부터는 keepalive라는 기능이 추가되어, TCP 연결을 한 번 맺었다면 필요한 데이터를 모두 교환한 이후에 연결이 끊어진다.
HTTP/2 (빠른 것부터 응답)으로 HTTP/2 이전에는 각 요청에 대한 응답이 얼마나 걸리든 요청이 들어온 순서대로 응답을 했다. 그러나 HTTP/2 부터는 요청에 대한 응답이 빠른 것부터 응답하는 방식으로 바뀌어 속도가 향상되었다. 멀티플렉싱 기술의 등장으로 한 번의 연결을 재사용하는 것이 가능.
HTTP/3: QUIC(UDP) 위에서 동작. (구글)
특징
- 클라이언트 - 서버 모델
클라이언트와 서버 간의 요청(Request)와 응답(Response)으로 동작한다. 클라이언트는 웹 브라우저가 될 수 있으며, 사용자가 웹사이트에 접근할 때 서버에 특정 자원(이미지, HTML 파일, 동영상 등)을 요청한다. 서버는 이에 대한 응답으로 해당 자원을 클라이언트에 제공한다.
- 비연결성(Connectionless)
기본적으로 비연결형 프로토콜로, 각 요청과 응답이 독립적으로 이루어진다. 클라이언트가 서버에 요청을 보낸 후 클라이언트가 응답을 받으면 연결이 종료된다. 새로운 요청을 위해서는 다시 연결을 설정해야 한다. 이는 성능을 높이는 데 유리하지만, 상태를 유지하지 않는다는 단점이 있다.
- 상태 비저장성(Stateless)
Stateless 프로토콜로, 각 요청은 서로 독립적이다. 즉, 서버는 이전 요청과 다음 요청 간의 상태를 기억하지 않는다. 이를 해결하기 위해 저희는 Cookie나 Session 같은 기술이 추가로 사용된다.
주요 메서드
- GET
서버에서 데이터를 요청하는 메서드. 예를 들어, 사용자가 웹 브라우저에서 URL을 입력하면 브라우저는 해당 URL에 대해 GET 요청을 보낸다.
- POST
서버로 데이터를 전송하는 메서드. 주로 Form 데이터와 같은 데이터를 서버에 보낼 때 사용한다. 즉, 사용자가 웹 페이지에 있는 양식(Form)에 텍스트, 이베일 주소, 비밀번호, 파일 등을 입력하고 해당 데이터를 출력하면 이 데이터가 서버로 전송된다. 이 과정에서 사용되는 데이터가 Form 데이터이다.
- PUT
서버에 자원을 업로드하거나 수정할 때 사용된다.
- DELETE
서버에서 특정 자원을 삭제할 때 사용된다.
동작 과정
- 사용자가 브라우저에 URL을 입력하고, 브라우저는 해당 서버에 GET 요청을 보낸다.
- 서버는 클라이언트의 요청(Request)을 받고, 해당 리소스를 찾아 응답(Response)을 클라이언트에 보낸다.
- 클라이언트는 서버에서 받은 응답(Response)를 처리하고, 이를 사용자가 볼 수 있는 형태(HTML 페이지 등)로 렌더링한다
Request / Response
- Request
웹 브라우저는 웹 서버에 데이터를 요청하는 클라이언트 프로그램이다. 요청은 서버가 인식할 수 있는 약속된 형식(HTTP 형식)을 따라야 한다. 요청 데이터는 HEADER와 BODY로 구성된다.
가장 먼저 전달할 필수 요소 3가지.
- 요청 메서드: GET, PUT, POST, OPTIONS 등 요청 방식.
- 요청 URL: 요청하는 자원의 위치를 명시.
- HTTP 프로토콜 버전: 웹 브라우저가 사용하는 프로토콜 버전.
그 외의 키값
- Host: 요청을 보내는 Host.
- Content-Type: 요청에 바디가 있는 경우, 그 파일 포맷. ex) Content-Type: application/json
- Cookie: 웹 브라우저에 저장된 쿠키들.
- User-Agent: 클라이언트의 정보, 이를 통해 사용하는 브라우저 감지.
- 이외에도 여러 정보를 담을 수 있다.
- Response
- 프로토콜과 응답코드: 웹 브라우저가 사용하는 프로토콜, 서버의 응답 상태 (1xx~5xx), 응답 메시지를 보여준다.
- Set-Cookie: 웹 브라우저에게 쿠키 생성을 요청한다. ex) Set-Cookie: UserID=tester; Max-Age=3600; Version=1
- Content-Type: 응답에 바디가 있는 경우, 현재 request 또는 response의 body에 들어 있는 데이터가 어떤 타입인지를 나타낸다. ex) Content-Type: text/html; charset=utf-8
HTTP / HTTPS 차이
URL과 포트번호
HTTP URL은 "http://" 로 시작한다. 기본 포트번호는 80이다.
HTTPS URL은 "https://" 로 시작하고 기본 포트번호는 '443'이다.
보안성
HTTP는 평문 데이터를 기반으로 하기 때문에, 유저 정보와 같은 민감한 정보가 인터넷 상에 그대로 노출된다. 이 정보는 수집되거나 변조될 수 있다. HTTPS는 이러한 공격을 견딜 수 있도록 설계되어 있다. HTTPS는 인증서를 이용해서, 접속 사이트를 신뢰할 수 있는지 평가할 수 있다.
속도 및 성능
일반적으로 HTTPS는 HTTP에 비해서 매우 많이 느려서, 만약 많은 양의 데이터를 처리할 경우 성능의 차이를 체감할 수 있다. 많은 웹 사이트들이 민감한 정보를 다루는 페이지(로그인 or 유저정보) 페이지를 HTTPS로 전송하고, 기타 페이지는 HTTP로 전송하는 방법을 사용한다.
DNS (Domain Name System)
인터넷 상에서 사람들이 쉽게 기억할 수 있는 도메인 이름을 IP 주소로 변환해 주는 프로토콜. 인터넷에서 컴퓨터 간의 통신은 IP 주소를 기반으로 이루어지지만, 사람들은 숫자로 이루어진 IP 주소를 기억하기 어렵기 때문에 도메인 체계가 도입되었다.
DNS는 사용자가 'www.google.com'과 같은 도메인 이름을 입력하면 이를 해당 IP 주소(ex 8.8.8.8)로 변환하여 웹 서버와의 연결을 도와준다. 즉, DNS 도메인 이름을 IP주소로 변환하여 주는 시스템을 말하므로 DNS는 인터넷에서 사용되는 주소록과 같은 존재다!
DNS 서버의 종류
- 순환 DNS 서버 (DNS Recursive Server / DNS resolver): 요청 받은 도메인에 매치되는 IP 주소를 찾기 위해 계층적으로 DNS 쿼리를 수행. DNS 쿼리의 첫 단계에 해당한다. DNS 캐시를 저장하는 곳이기도 하다.
- 루트 DNS 서버 (Root Name Server): 순환 DNS 서버에서 처음으로 DNS 쿼리 요청을 보내는 서버. 해당 도메인의 확장자(.com, .net, .org 등)에 따른 TLD 네임 서버의 주소를 DNS Resolver에 응답해준다.
- 최상위 도메인 DNS 서버 (TLD Name Server): 최상위 도메인(.com, .net, .org 등)에 대한 DNS 정보를 관리한다. 루트 DNS 서버와 권한 네임 서버의 중간 단계다.
- 권한 네임 서버 (Authoritative Name Server): 도메인의 IP 주소를 응답해주는 최종 단계 DNS 서버. 여기서 얻은 IP 주소가 순환 DNS 서버를 거쳐 브라우저까지 전달된다.
DNS 주요 기능
- 이름 해석 (Name Resolution)
도메인 이름을 IP 주소로 변환한다.
- 도메인 이름 등록
도메인 소유자는 DNS를 통해 자신이 소유한 도메인 이름을 등록하고 관리할 수 있다.
- 부하 분산 (Load Balancing)
DNS는 여러 서버 중에서 부하가 적은 서버로 요청을 분산시키는 역할도 할 수 있다.
DNS 작동 원리
- 사용자가 브라우저 주소창에 URL을 입력.
- 브라우저가 입력된 도메인의 IP 주소를 알아내기 위해 운영체제를 거쳐 DNS Resolver에 요청.
- DNS Resolver는 로컬 DNS 캐시에 이전에 방문한 도메인 정보가 있는지 확인. 만약 캐시에 기록이 있다면, 추가적인 DNS 조회 필요 X. 이 단계에서 바로 IP 주소를 응답할 수 있다.
- 캐시에 정보가 없는 경우, DNS Resolver는 루트 DNS 서버에서 최상위 도메인(TLD) DNS 서버의 IP 주소 정보를 알아낸다.
- DNS Resolver는 최상위 도메인(TLD) DNS 서버에 연결하여 권한 네임 서버(Authoritative Name Server)의 IP 주소를 요청하여 받아낸다.
- 최종적으로 DNS Resolver는 권한 네임 서버에서 도메인의 최종 IP 주소를 알아낸다. 이렇게 받아 온 IP 주소는 로컬 DNS 캐시에 저장된다. 이후 같은 요청이 있다면 DNS Resolver에서 바로 응답 가능.
- 받아온 최종 IP 주소를 다시 거꾸로 운영체제를 거쳐 브라우저로 전달. 결국 사용자는 웹 브라우저를 통해 마침내 해당 IP 서버에 연결할 수 있다.
DNS의 구조
- 루트 DNS 서버
DNS 체계의 최상위에 있으며, TLD 서버로 요청을 전달한다.
- TLD 서버
.com, .org, .net 등 최상위 도메인을 관리하는 서버.
- 권한 DNS 서버 (Authoritative DNS Server)
특정 도메인에 대한 최종 IP 주소 정보를 가지고 있는 서버.
DNS vs IP 주소
DNS와 IP 주소는 웹 서버가 네트워크를 하는 과정에서 계속 같이 나오는 개념이다. 둘은 네트워크에서 사용되는 주소 체계의 컴포넌트 역할을 한다. 두 개념의 쉬운 이해를 위하여 전화번호부를 예시로 설명할 수 있다. 여기서 DNS는 전화번호부, 도메인은 사람의 이름, IP 주소는 전화번호로 생각하면 된다.
만약 홍길동이라는 사람에게 전화를 걸고 싶다고 가정해보자!
전화번호부 이름 목록에서 홍길동을 찾기 → 그에 해당되는 전화 번호로 전화를 걸기.
마찬가지로 사용자가 어떤 웹사이트에 연결을 요청할 경우 네트워크 시스템을 기준으로 생각해보자!
DNS에 있는 웹사이트 도메인을 찾기 → 그에 해당되는 IP 주소로 연결을 도와주기.
요약해서, DNS는 `www.google.com` 과 같은 도메인 이름을 IP 주소로 변환하기 위한 목록 서버다. IP 주소는 네트워크에서 컴퓨터의 위치를 최종 식별하여 접근하는 데 사용된다.
응용 계층의 역할 요약
응용 계층은 네트워크 상의 다양한 서비스와 애플리케이션이 사용자의 요청을 처리할 수 있도록 하는 인터페이스 역할을 담당한다. 이 계층은 프로토콜들을 통해 웹 서비스, 파일 전송, 이메일 등 여러 애플리케이션들이 서로 통신할 수 있도록 규정하고 지원한다. 즉, 응용 계층은 사용자와 네트워크 간의 상호작용을 직접 관리하며, 애플리케이션 간의 데이터 전송, 통신 규칙의 정의, 세션 관리, 에러 처리, 데이터 표현 및 변환 등을 통해 네트워크 상의 다양한 서비스가 원활히 작동하도록 보장한다.
참고)
'CS' 카테고리의 다른 글
OSI - 물리계층 (2) | 2024.09.27 |
---|---|
3-way handshake에 대해 알아보자! (0) | 2024.09.26 |
OSI 7계층에 대하여 (0) | 2024.09.26 |
서버와 클라이언트 (0) | 2024.09.12 |
OSI 계층 - 전송 계층 (0) | 2024.09.12 |