OSI 7계층, HTTP, REST

이승훈·2022년 11월 25일
1

TIL

목록 보기
19/32
post-thumbnail

1. OSI 7계층

데이터는 OSI 7계층을 거쳐 송/수신 된다.

(본 포스팅에선 TCP/IP 4계층이 아닌 OSI 7계층에만 빗대어 진행한다.)

패킷 교환 데이터 네트워크에 대한 글 내에서, PDU(Protocol Data Unit)는 서비스 데이터 단위(SDU)와 관련지어 이해하면 용이하다. 네트워크의 특징이나 서비스는 별개의 “계층” 내에서 주어진다.

예를 들어 전선, 섬유 등을 통해 0과 1로 이루어진 신호를 보내는 것은 물리 계층에 의해,

0과 1의 데이터를 수집하여 와이어의 적절한 곳에 도달하도록 하는 것은 데이터 링크 계층에 의해,

이러한 데이터들을 연결된 네트워크로 전송하는 것은 네트워크 계층에 의해,

그리고 적절한 소프트웨어 애플리케이션의 데이터를 목적지까지 보내는 것은 전송 계층에 의해 행해진다.

세션 계층표현 계층을 거쳐 우리가 아는 형태의 파일들(MPEG, JPG)이 응용 계층으로 전달된다.

그 후 응용계층은 그 파일들을 해석하여 우리의 눈앞에 우리가 아는 이미지 혹은 동영상같은 형태로 보여준다.

1-1. 계층

1-1-1. 1계층-물리 계층

  • 전기적, 기계적 특성을 이용하여 통신 케이블로 전기적 신호를 전송하는 층
  • 데이터 전달의 역할
  • 비트 단위로 전송
  • 장비 : 케이블, 리피터, 허브

1-1-2. 2계층-데이터 링크 계층

  • 물리적인 연결을 통하여 인접한 두 장치의 신뢰성 있는 정보 전송을 담당
  • 프레임단위의 PDU, MAC 주소(컴퓨터 간 데이터를 전송하기위한 컴퓨터의 물리적 주소)와 제어정보를 전송, 헤더를 통한 캡슐화 또는 캡슐화 해제
  • 프레임 단위이기 때문에 동일한 네트워크 상의 정보만을 가지고 있다.(페이로드)
  • 정보의 오류와 흐름을 관리하여 안정된 정보를 전달, L3 스위치로 네트워크 계층으로 전달한다.
  • 장비: 브릿지, 스위치

1-1-3. 3계층-네트워크 계층

  • 각 호스트에 IP(InternetProtocol, 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신하기 위해 사용하는 논리적 주소) 주소 부여, 라우팅(네트워크에서 최상의 경로를 선택하는 프로세스)
  • 2계층으로 부터 받은 데이터를 가지고 캡슐화 해제 후 다른 네트워크로 패킷단위의 PDU를 전송
  • 다른 네트워크의 L2 스위치가 전송된 데이터를 받아서 해당 네트워크의 원하는 목적지 네트워크의 L3 스위치에 전달함으로서 서로 다른 네트워크간 데이터 전송은 완료된다.
  • 장비 : 라우터, L3 스위치(네트워크 단위들을 연결하는 통신장비)

1-1-4. 4계층-전송 계층

  • 종단 간(End-to-End)에 신뢰성 있고 정확한 데이터를 전송
  • 세그먼트 단위의 PDU, 종간 간의 에러복구와 흐름제어 담당, 헤더를 통해 캡슐화 및 캡슐화 해제
  • Data를 나누고, 나눠진 Data 조립, 즉 Segment(조각)로 나눠서 전송 -> 이를 원래 Data로 복원
  • Protocol : → TCP(Transmission Control Protocol) : 속도가 느리다(StateFul 상태확인) → UDP(User Datagram Protocol) : 속도가 빠르다(Stateless 상태 미확인) 등등
  • 장비 : L4 스위치

1-1-5. 5계층-세션 계층

  • 사용자와 서버 간에 커뮤니케이션이 필요하면 세션을 만드는 작업을 처리.(ex. 채팅)
  • 세션이란 일정 시간 동안 같은 노드로부터 들어오는 일련의 데이터를 하나의 상태로 보고 그 상태를 일정하게 유지하는 기술이다.
  • 주로, TCP/IP 세션을 만들고 유지하며, 세션이 종료되거나 전송이 중단될 시 복구하는 기능이 있다. 더불어, 통신하는 사용자들을 동기화한다는 특징이 있다.
  • 통신장치 간 상호작용 및 동기화를 제공
  • 연결 세션에서 데이터 교환과 에러 발생 시의 복구를 관리(논리적 연결을 담당)

1-1-6. 6계층-표현 계층

  • 데이터 표현에 차이가 있는 응용처리에서 제어 구조를 제공 → 0과 1로만 이루어진 data를 문자인지 그림인지 동영상인지 구분(파일 뒤에 확장자가 붙는 것과 같음)
  • 송신하는 응용 계층에서 보낸 정보를 수신 하는 응용 계층에서 읽을 수 있게 해준다.
  • 압축/해제 암호화/복호화 인코딩/디코딩을 한다.
  • ASCII, JPEG, MPEG 를 여기서 만든다.

1-1-7. 7계층-응용 계층

  • 사용자와 직접적으로 상호작용하며 눈에 보이는 부분(User Interface를 제공하는 계층) → 크롬, 사파리 등 웹브라우저같은 프로그램이 대표적이다.
  • Protocol : DNS, HTTP, FTP 등

1-2. 결론

일단 계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 알 수 있고, 특정 이상한 곳에 이상이 생기면 그 부분만 확인하여 해결하면 되기 때문.

또한 통신을 함에 있어 결국 물리적으로는 통신하는 양쪽의 모든 계층을 거쳐야 하지만 각 계층마다 동일 계층끼리의 프로토콜을 사용하여 논리적으로는 각계층끼리 통신을 한다고 볼 수 있다.

2. HTTP

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 응용계층의 프로토콜 이다.

HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 하다.

클라이언트-서버 프로토콜이란 수신자 측(보통 웹브라우저)에 의해 요청이 초기화 되는 프로토콜을 의미한다.

즉, HTTP는 클라이언트가 요청을 생성하기 위한 연결을 연 다음 응답을 받을 때 까지 대기하는 전통적인 클라이언트-서버 모델을 따른다.

또한 HTTP는 stateless 프로토콜이며, 이는 클라이언트와 서버가 각각의 요청 간에 어떠한 상태나 데이터를 유지하지 않음을 의미한다.

(상태를 유지하기 위한 노력으로 쿠키 또는 세션을 사용한다.)

2-1. 소개

왼쪽의 물건을 요청하는 사람이 클라이언트

오른쪽의 물건을 건내주는 사람이 서버

라고 해보자.

자 그럼 클라이언트가 서버에게 물건을 달라고 하는데 그 물건의 이름이 HTML 이라면

그것이 서버에게 요청하는것이고 request 라고 한다.

그리고 서버가 여기있습니다 라고 물건(HTML)을 주는 행위가 응답, response 이다.

자 HTTP라는 것은 이 request와 response를 나타낸다.

HTML, CSS, JS, 이미지 이러한 파일들이 서로가 주고받는 컨텐츠라면

그 컨텐츠를 주고받기 위해서는 서버와 클라이언트가 서로가 알아들을 수 있는 공통의 약속인

메시지가 필요한데 바로 그 메시지를 HTTP라고 하고

HTTP는 크게 request와 response를 위한 메시지로 구분되어있다.

또한 그 request와 response 메세지의 기본 구성은 아래와 같다.

HTTP 기본구성(구글 이미지 검색)

2-1. HTTP와 연결

HTTP의 대표적인 특징 2가지는 아래와 같다.

  • 비연결지향(Connectionless) : 클라이언트가 서버에게 Request를 보내고 서버가 클라이언트에게 Response를 보내면 접속을 종료한다.
  • 무상태(Stateless) : 통신이 끝나면 상태정보를 유지하지 않는다.

HTTP는 위의 특성을 통해 연결되어있지 않고 데이터를 보낸다고 생각할 수 있다.

하지만 연결은 전송 계층에서 제어되므로 근본적으로는 HTTP 영역 밖이다.

또한 HTTP는 기본적으로 연결 기반인 TCP표준에 의존한다.

클라이언트와 서버가 HTTP 요청/응답으로 교환하기 전 여러 번 왕복이 필요한 TCP 연결을 설정한다.

2-2. HTTP 메소드

HTTP는 요청 메소드를 정의하며, 주어진 리소스(보내는 메세지)에 수행하길 원하는 행동을 나타낸다.

각각의 메소드는 서로 다른 의미를 나타내지만, 일부 기능은 메소드간에 서로 공유하기도 한다.

2-2-1. HTTP 메소드의 종류

  • GET : 리소스 요청
  • HEAD : 응답 메세지 헤더 취득
  • POST : 내용 전송(파일 전송도 가능)
  • PUT : 서버의 리소스를 내가 보낸것으로 대체
  • PATCH : 서버의 리소스 일부를 대체
  • DELETE : 파일 삭제
  • OPTION : 웹서버측에서 제공하는 메소드에 대한 질의 → 이 경우 응답메세지에 [HTTP 헤더 항목](http://www.ktword.co.kr/test/view/view.php?m_temp1=5905&id=1515) 중 Allow: GET,POST,HEAD 처럼 보내게 됨
  • CONNECT : 프록시 서버와 같은 중간 서버 경유

2-3. HTTP API

HTTP API 란 HTTP 통신방식을 사용하여 통신을 할 수 있도로 도와주는 Web API 이다.

즉, HTTP는 응용계층간에 통신을 하는 방식인 통신규약인것이고 HTTP API는 이러한 HTTP 통신규약을 사용하여 통신을 실제 할 수 있게 도와주는 API인 것이다.

3. REST

REST는 Representational State Transfer라는 용어의 약자로 2000년도 로이 필딩의 박사학위 논문에서 최초로 소개된 개념이다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로서 당시 웹(HTTP)설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로서 REST를 발표하였다.

(아키텍처는 구조의 설계라고 이해하면 된다.)

REST의 의미는 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든것을 의미한다.

즉,

URI를 통해 자원(Resource)을 명시하고

HTTP 메소드(POST, GET, PUT, DELETE, PATCH 등)를 통해

해당 자원(URI)에 대한 CRUD Operation을 적용하는것을 의미한다.

3-1. 구성

  • 자원(Resource) - URI
  • 행위(Verb) - HTTP Method
  • 표현(Representations)

3-2. 특징

3-2-1. Uniform Interface

URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.

URI는 통합 자원 식별자(Uniform Resource Interface)로 인터넷에 있는 자원을 나타내는 유일한 주소이다.

URI 구성부분을 나타내는 예시

3-2-2. stateless

REST는 무상태성 성격을 작는다. 즉, 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.

세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순 처리한다.

3-2-3. Cacheable

REST의 가장 큰 특징 중 하나는 HTTP 라는 기존 웹 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다. 따라서 HTTP 가 가진 캐싱 기능이 적용 가능하다.

3-2-4. Self-descriptiveness

REST API 메세지만 보고도 쉽게 이해 할 수 있는 자체 표현 구조로 되어있다는 특징이 있다.

3-2-5. Client-Server 구조

REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어든다.

3-2-6. 계층형 구조

REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있다.

3-3. REST API 설계 시 중요한 항목

3-3-1. URI는 정보의 자원을 표현해야 한다.

URI는 자원을 표현함에 중점을 두어야하며 행위에 대한 표현이 들어가선 안된다.

GET /members/delete/1 ← 잘못된 URI

DELETE /members/1 ← 올바른 URI

3-3-2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.

METHOD역할
POSTPOST를 통해 해당 URI를 요청하면 리소스를 생성합니다.
GETGET를 통해 해당 리소스를 조회합니다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
PUTPUT를 통해 해당 리소스를 수정합니다.
DELETEDELETE를 통해 리소스를 삭제합니다.

3-3-3. ‘ / ’ 는 계층 관계를 나타내는데 사용

    http://restapi.example.com/houses/apartments
    http://restapi.example.com/animals/mammals/whales

3-3-4. ‘ - ‘ 은 URI 가독성을 높이는데 사용

3-3-5. URI 경로는 소문자 사용

3-3-6. 파일 확장자는 URI에 포함 x

3-4. RESTful?

RESTful 이란 REST의 원리를 따르는 시스템을 의미한다.

REST API를 사용한다고 모두 RESTful 한것이 아니다.

예를들면 모든 CRUD 기능을 모두 POST로 처리하는 API 또는 URI 규칙을 올바르게 지키지 않은 API는

REST API를 사용하였지만 RESTful하지 않은것이다.

참고

REST API
REST API 제대로 알고 사용하기 : NHN Cloud Meetup
[Web] HTTP API와 REST API
REST와 RESTful의 차이
[네트워크] REST API란? REST, RESTful이란?
HTTP와 TCP/IP의 이해
HTTP 개요 - HTTP | MDN
http와 tcp/ip의 이해
http://www.ktword.co.kr/test/view/view.php?no=3791
7계층의 설명
https://velog.io/@inyong_pang/OSI-7-%EA%B3%84%EC%B8%B5%EA%B3%BC-TCPIP-%EA%B3%84%EC%B8%B5
https://kkamagistory.tistory.com/205
라우팅
라우팅란 무엇입니까? - 네트워크 라우팅 초보자 설명서- AWS

profile
Beyond the wall

0개의 댓글