응용계층

허선준·2024년 9월 26일

본캠프

목록 보기
18/25

응용 계층(Application Layer)은 OSI 7계층 모델의 최상위 계층으로, 사용자와 네트워크 간의 인터페이스를 제공하는 역할을 합니다. 이 계층은 사용자가 네트워크와 직접 상호작용하는 프로토콜을 처리하며, 네트워크 서비스와 응용 프로그램 간의 통신을 담당합니다. 예를 들어, 우리가 웹 브라우저를 통해 웹 페이지에 접속할 때 HTTP 같은 프로토콜을 사용하여 데이터를 주고받는 과정이 응용 계층에서 이루어집니다.

HTTP 프로토콜이란?

HTTP (HyperText Transfer Profocol)는 인터넷상에서 데이터를 전송하기 위한 프로토콜로, TCP/IP 4계층에서 응용 계층에 속한다. 주로 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. 주로 TCP를 사용하고, HTTP/3부터는 UDP를 사용하며 80번 포트를 사용합니다.

HTTP의 역할

리소스와 독립적인 인터페이스(uri, url)를 제공함으로써 서비스의 직접적인 구현 방식을 클라이언트로부터 숨깁니다. 이를 바탕으로 상호작용의 복잡성을 줄이고 서버와 클라이언트의 독립성을 높입니다.

중간 계층 프로토콜로서 proxy나 gateway가 non-HTTP 정보 시스템을 보다 보편적인 인터페이스로 변환할 수 있게 해줍니다.

HTTP의 요청과 응답이란?

클라이언트와 서버는 데이터 스트림과는 대조적으로, 개별적인 메세지 교환에 의해 통신합니다. 보통 브라우저인 클라이언트에 의해 전송되는 메세지를 요청(requests)라 부르며, 그에 대해 서버에서 응답으로 전송되는 메세지를 응답(responses)이라고 부릅니다.

HTTP request와 response의 구조는 서로 닮아있습니다.

HTTP 상태코드란?

HTTP의 상태코드는 request가 성공적으로 완료되었는지를 알려줍니다. console의 network탭에서 request를 클릭해 확인할 수 있으며 총 5가지의 그룹으로 나뉩니다.

1.정보 응답

  • 101번대의 에러 코드는 정보 응답 코드에 대한 코드입니다.
    100 Continue : reqeust가 이미 요청 되었거나 중첩되는 경우 무시함을 나타내는 코드
    101 Switching Protocol : request 헤더에 대한 응답을 처리하며 protocol이 변경됨을 알려주는 코드
    102 Processing : 서버 요청 수신 후 처리중
    103 Early Hints : 서버 응답 준비 동안 preloading을 지원합니다. 단, 현재는 Firefox와 Safari에서 지원하지 않습니다.

2.성공 응답

  • 200 OK : 200번 코드는 request가 성공했다는 의미입니다. 각 메소드에 따라 성공의 의미가 달라집니다.
    GET의 경우 '리소스를 불러와 메세지 바디로 전송되었습니다', HEAD의 경우 '헤더가 메세지 바디에 있습니다', PUT 또는 POST의 경우 '수행 결과에 대한 리소스가 메세지 바디로 전송되었습니다' 등을 의미합니다.
    201 Created : 요청이 성공하여 리소스를 생성했다는 의미.
    202 Accepted
    203 Non-Authoritative Information
    204 No Content : request는 성공했으나 응답할 콘텐츠가 없을 수 있습니다.

3.리다이렉션 메세지

  • 3xx : 리다이렉션 메세지
    300번대의 상태 코드는 URI 변경에 대한 메세지를 나타냅니다. 클라이언트가 request를 마치기 위해서는 추가적인동작을 취해야 합니다.
    웹 브라우저의 경우, response로 3xx의 상태 코드가 오고 Location header가 존재하면 그 위치로 자동 이동하게 됩니다.

4.클라이언트 에러

  • 4xx : 클라이언트 에러
    클라이언트의 오류에 의해 발생하는 상태 코드입니다.
    400 Bad Request : 잘못된 문법으로 인하여 서버가 클라이언트 요청을 이해할 수 없음
    401 Unauthorized : 인증되지 않은 사용자의 요청
    403 Forbidden : 클라이언트 사용자 식별은 가능하지만, 접근 권한이 없는 사용자임을 나타내는 코드
    404 Not Found: requested resource를 서버에서 찾을 수 없다는 의미로 URL이 존재하지 않거나 리소스가 존재하지 않는 경우

5.서버 에러

  • 5xx : 서버 에러
    서버 오류에 의해 발생하는 상태 코드입니다.
    500 Internal Server Error : 서버가 처리 방법을 알 수 없는 경우
    501 Not Implemented : 서버가 request method를 이해하지 못하거나 리소스를 지원하지 않는 경우
    502 Bad Gateway : 서버가 request에 필요한 response를 위해 게이트웨이에서 작업하는 동안 잘못된 경우
    503 Service Unavailable : 서버가 request를 받을 준비가 되지 않은 경우로, 작동이 중단되거나 과부화된 경우.
    504 Gateway Timeout : 서버가 게이트웨이 역할을 하고 있지만 response를 받을 수 없을 때 주어집니다.

DNS

DNS의 주요 역할

  1. 도메인 이름을 IP 주소로 변환
    인터넷 상에서 모든 장치는 고유한 IP 주소를 가지고 있습니다. 하지만 IP 주소는 숫자로 이루어져 있어 사용자가 기억하거나 사용하기 어렵습니다. 예를 들어, 우리가 자주 방문하는 웹사이트에 들어가기 위해 IP 주소인 "216.58.221.174" 대신 "www.google.com" 같은 도메인 이름을 입력하는 것이 훨씬 간편합니다. DNS는 도메인 이름을 그에 해당하는 IP 주소로 변환해주는 시스템입니다.

이 과정이 없으면 사용자는 직접 IP 주소를 입력해야 하므로 인터넷을 이용하기 훨씬 불편해질 것입니다. DNS는 이런 문제를 해결해 주는 중요한 역할을 합니다.

  1. 사용자가 기억하기 쉬운 도메인 이름을 제공
    DNS는 복잡한 숫자 대신 쉽게 기억할 수 있는 문자 기반의 도메인 이름을 제공합니다. 사람들은 숫자보다 단어나 이름을 훨씬 더 쉽게 기억할 수 있기 때문에, DNS는 웹사이트에 쉽게 접근할 수 있도록 돕습니다. 예를 들어, 구글의 IP 주소 대신 "www.google.com"을 기억하는 것이 훨씬 쉽습니다.

  2. 네트워크에서 호스트를 찾기 위한 중요한 역할 수행
    DNS는 인터넷 상의 특정 서버나 장치의 위치를 찾는 데 필수적인 역할을 합니다. 도메인 이름이 IP 주소로 변환되면, 이 IP 주소를 통해 네트워크 상의 목적지에 연결할 수 있습니다. 이는 인터넷을 사용할 때마다 매 순간 일어나는 과정입니다. DNS 없이는 우리가 인터넷에서 원하는 서비스를 제대로 이용할 수 없습니다.

DNS의 동작 원리

URL 입력과 로컬 DNS 캐시 확인 사용자가 웹 브라우저에 "www.example.com" 같은 URL을 입력하면, 브라우저는 먼저 사용자의 컴퓨터(혹은 로컬 네트워크) 안에 DNS 캐시라는 저장소를 확인합니다. 캐시는 최근에 방문한 웹사이트의 IP 주소를 임시로 저장해두는 공간입니다. 만약 캐시에 해당 도메인 이름의 IP 주소가 저장되어 있다면, DNS 서버에 질의할 필요 없이 바로 캐시에서 IP 주소를 가져옵니다.

캐시의 역할: 캐시는 웹사이트에 대한 정보를 저장해 두었다가 나중에 빠르게 가져올 수 있게 해주는 저장소입니다. 이를 통해 네트워크 트래픽을 줄이고 접속 속도를 높일 수 있습니다.
DNS 서버에 질의 만약 캐시에 해당 IP 주소가 없다면, DNS 서버에 질의(Query)를 보내게 됩니다. 이 과정에서 여러 종류의 DNS 서버가 차례로 동작하며 도메인 이름을 IP 주소로 변환하는 데 도움을 줍니다. 보통의 질의 흐름은 아래와 같습니다:

로컬 DNS 서버(리졸버): 가장 가까운 DNS 서버로 질의가 전송되며, 이 서버는 사용자가 자주 방문하는 도메인의 IP 주소를 저장하고 있을 수 있습니다.
권한 있는 DNS 서버(Authoritative DNS): 도메인에 대한 정확한 정보를 제공하는 서버입니다. 만약 로컬 DNS 서버가 IP 주소를 알지 못한다면, 권한 있는 DNS 서버에 질의합니다.
최상위 도메인(TLD) DNS 서버: ".com", ".org"와 같은 최상위 도메인에 해당하는 DNS 서버입니다. 이 서버는 해당 도메인의 소유자 정보나 권한 있는 DNS 서버를 알려줍니다.
여러 DNS 서버들이 협력하여 최종적으로 도메인 이름에 대응하는 정확한 IP 주소를 찾게 됩니다.

IP 주소를 받아 브라우저가 서버에 HTTP 요청 DNS 서버에서 IP 주소를 받아오면, 브라우저는 이 IP 주소를 사용하여 서버에 접속합니다. 이 과정은 주로 HTTP 또는 HTTPS 프로토콜을 통해 이루어지며, 클라이언트(브라우저)가 서버에 데이터를 요청하고 서버는 그에 대한 응답을 반환합니다. 예를 들어, 웹 페이지를 요청하면 서버는 HTML 문서, 이미지 파일 등을 브라우저로 전송하여 화면에 보여주게 됩니다.

DNS 질의 과정의 자세한 단계

  1. 브라우저 캐시 확인: 사용자의 컴퓨터에서 먼저 해당 도메인 이름의 IP 주소가 캐시되어 있는지 확인합니다.
  2. OS 캐시 확인: 운영 체제에서 DNS 정보를 캐시하고 있다면, 여기서 IP 주소를 찾을 수 있습니다.
  3. 로컬 DNS 서버 질의: 캐시가 없을 경우, 컴퓨터는 설정된 로컬 DNS 서버(대부분은 ISP에서 제공하는)를 통해 질의합니다.
  4. 권한 있는 DNS 서버로의 전송: 로컬 DNS 서버도 IP 주소를 모를 경우, 권한 있는 DNS 서버로 질의가 전송됩니다.
  5. 최상위 도메인(TLD) 서버 질의: 권한 있는 서버는 최상위 도메인 DNS 서버에게 해당 도메인의 IP 주소를 요청합니다.
  6. IP 주소 반환 및 연결: 최종적으로 IP 주소가 반환되면 브라우저는 이 정보를 바탕으로 웹 서버에 연결을 시도합니다.

결론

응용 계층은 네트워크의 최종 사용자와 가장 밀접하게 연결된 계층으로, HTTP와 같은 프로토콜을 통해 웹 브라우저와 서버가 데이터를 주고받고, DNS를 통해 도메인 이름을 IP 주소로 변환하여 네트워크 상의 위치를 찾는 역할을 합니다. 이로 인해 사용자는 편리하게 인터넷에 접근할 수 있습니다.

profile
코딩 초보

0개의 댓글