[CS 스터디] RESTful API / 3-way handshake

·2022년 9월 24일

CS 스터디

목록 보기
1/3

RESTful API

RESTful API란?

REST의 기본 원칙을 성실히 지킨 서비스 디자인을 'RESTful 하다'라고 표현하며 RESTful하게 개발된 API를 의미한다.

그럼 REST란?

REpresentational State Transfer 의 약자로 어떤 자원에 대해 CRUD연산을 수행하기 위해 URI로 메소드를 사용해 요청을 보내며, 요청을 위한 자원은 특정한 형태로 표현하는것

REST의 구성

  • 자원(Resource): URI
    • 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
    • 자원을 구별하는 ID는 HTTP URI다.
    • 클라이언트는 URL를 이용해 자원을 지정하고 해당 자원의 상태에 대한 조작을 서버에 요청한다.
  • 행위(Verb): HTTP Method
    • HTTP 프로토콜의 Method(GET, POST, PUT, DELETE)를 사용한다.
  • 표현(Representations)
    • 클라이언트가 자원의 상태에 대한 조작을 요청하면 서버는 이에 적절한 응답을 보낸다.
    • REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 응답으로 나타내어진다.

REST의 원칙

  • Server-Client(서버-클라이언트 구조)
    • 자원을 가지고 있는건 Server, 자원을 요청하는건 Client가 된다.
    • 서로간 의존성이 줄어든다.
  • Stateless(무상태)
    • HTTP 프로토콜이 Stateless Protocol이기 때문에 REST역시 무상태성을 가진다.
    • Client의 context를 Server에 저장하지 않는다.
      즉, 세션이나 쿠키같은 context 정보를 신경쓰지 않아도 되기 때문에 구현이 단순해진다.
    • Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리한다.
      • 이전 요청이 다음 요청의 처리에 연관되어서는 안된다.
      • Server의 처리 방식에 일관성을 부여하고 부담이 줄어들며, 서비스의 자유도가 높아진다.
  • Cacheable(캐시 처리 기능)
    • 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있다.
    • 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않아 응답시간, 성능, 서버의 자원 이용률을 향상시킬 수 있다.
  • Layered System(계층화)
    • Client는 REST API Server만 호출한다.
    • REST Server는 다중 계층으로 구성될 수 있다.
  • Code-On-Demand(optional)
    • Server로 부터 스크립트를 받아 Client에서 실행한다.
    • 반드시 충족할 필요는 없다.
  • Uniform Interface(인터페이스 일관성)
    • URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
    • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.

REST의 가장 중요한 기본 규칙

  • URI는 정보의 자원을 표현해야한다.
  • 자원에 대한 행위는 HTTP Method로 표현한다.

✔️Restful API란?

자원과 행위, 표현이 각각의 역할에 맞춰 URI는 정보의 자원만 표현하고, 자원의 행위는 HTTP Method가 명시하며 자원과 행위의 결과를 표현해주는 응용 프로그램을 의미한다.


3-way handshake

TCP 3-way handshake

TCP/IP 프로토콜을 이용해 통신을 하는 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대 컴퓨터와 사전에 연결을 수립하는 과정이다.
TCP에서는 연결을 위해 3-way handshake를 사용하고, 연결 해제를 위해 4-way handshake를 사용한다.

1. 클라이언트에서 서버에게 접속을 요청하는 SYN 패킷을 보낸다.

  • SYN에는 연결확인을 위해 보내는 무작위의 숫자값이 들어있다.
  • 클라이언트는 SYN을 보내고 서버로부터 SYN+ACK 응답을 기다리는 SYN_SENT 상태가 된다.

2. 서버에서 클라이언트에게 요청을 수락한다는 SYN+ACK 패킷을 보낸다.

  • SYN에는 받은 숫자가 그대로 들어있고, ACK에는 해당 SYN을 잘 받았다는 의미로 SYN+1의 값이 들어있다.
  • 서버는 SYN_RECEIVED 상태가 되며 클라이언트로부터 ACK요청을 기다린다.

3. 클라이언트가 서버에게 ACK를 보낸다.

  • 서버가 ACK를 받게 되면 그때부터 클라이언트와 서버간의 통신이 연결되며 데이터가 오가게된다.

SYN에 무작위 수를 사용하는 이유?

connection으로부터 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용하게 된다. 이때 난수가 아닌 수가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있어 이러한 문제 발생 가능성을 줄이기 위해 무작위 수를 사용한다.

✔️TCP의 3-way handshake?

클라이언트에서 서버로 데이터를 전송하기 전에 서로 데이터를 주고받을 준비가 되었는지를 3단계로 확인하는 과정을 의미한다.

첫번째 단계에서 클라이언트는 서버에게 난수가 담긴 SYN을 전송한다.
두번째 단계에서는 서버가 클라이언트로부터 SYN을 전송받고, 전송받은 SYN과 연결이 가능하다는 의미로 SYN의 난수에 1을 더한 값을 ACK에 넣어 SYN과 함께 클라이언트에게 전송한다.
세번째 단계에서 클라이언트가 서버에게 SYN과 ACK를 전송받고 다시 서버에게 ACK를 전송하면서 클라이언트와 서버가 연결되고, 데이터 전송이 이루어지게 된다.

profile
으쌰으쌰🐜🐜

0개의 댓글