API, 요청과 응답은 어떻게 흘러갈까?

nGyu·2022년 2월 23일
2

백엔드 CS

목록 보기
3/10
post-thumbnail

API 요청은 어떻게 흘러갈까?
단순히 요청을 보내니까 응답을 받는걸까?

이런 간단한 생각에서 시작되어 다양한 조사를 해 보았다.

API

우선 API란 무엇일까?

API ( Application Programming Interface)

단어 그대로 인터페이스 이다.
그런데 이러 API에 대해서 다들 다르게 해석을 하고있다.

  • 정의된 프로토콜을 기반으로 상호작용을 할 수 있도록 일종의 약속된 시스템
  • 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

등등 다양하게 해석을 하는데 필자는 프로그램간의 상호 작용을 위해 만들어진 인터페이스라고 해석을 하고있다.

WindowsAPI, Java SE API 등 다양한 API가 있는데 잘 생각해보면 이러한 API를 이용해서 개발자가 만든 프로그램은 Windows 혹은 Java SE와 상호작용을 하게되는것을 생각해 볼때 위와같은 해석을 하게 되었다.

이것들은 설치된 프로그램과의 상호작용을 하지만, 서로 다른곳에 설치된 프로그램간에는 어떤 방식으로 상호작용을 할까?

바로, SOAP API 혹은 REST API이다.
필자는 제일 궁금해하던 이 API에 대해서 알아 보았다.

HTTP

뜬금없이 API에대해서 알아본다고 했는데 HTTP가 나왔다.
갑자기 왜 HTTP가 튀어나오게 되었을까?

우선, 필자가 제일 궁금해하던 서로 다른곳에 설치된 프로그램간의 상호작용에 대해서 알아보니 이는 Web Applicatin간의 상호작용이며 REST API와 SOAP API이 두가지 API 를 사용한다고 한다. 이 두개의 API 는 HTTP 프로토콜을 이용해서 상호작용을 하게된다.

그럼 어떤식으로 흘러가는것인가?

HTTP Message

두 개의 API는 HTTP프로토콜을 이용하는데, 더 자세히 알아보면 HTTP Message라는 방식을 이용한다.

이 HTTP Message는 Requset, Response로 나뉘게 되는데
이 둘의 구조는 똑같고 startLine, headers, emptyLine, body로 4등분이 된다.

  • startLine
    • 요청이나 응답 상태를 나타낸다.
    • 요청의 경우 method, Path or Query, http version 으로 나뉜다
    • 응답의 경우 http version, status 로 나뉜다.Version 으로 나뉜다.
  • headers
    • 요청을 지정 or 메세지에 포함된 본문을 설명하는 헤더 집합
    • Request와 Reponse는 조금 다른 형태를 띄고있다.
  • emptyLine
    • Header와 Body를 구분해주는 부분
  • body
    • 요청관련 데이터 혹은 응답 관련 데이터를 포함한다.
    • 모든 요청에 body가 필요한것은 아니다

개발자가 저러한 HTTP Message를 다 작성해야하나?

아니다, 이는

REST, SOAP 흐름

이제 위 내용을 토대로 알아보면 REST와 SOAP는 HTTP 통신 규약을 따라서 보내게 되고, 이 때 HTTP Message라는 방식을 사용한다고 정리를 했다. 자, 그럼 클라이언트와 서버는 HTTP Message를 이용해서 어떻게 서로 데이터를 주고받는것일까?

편지

편지를 보내는것을 예시로 들어보겠다.

인편이라는 개념이 없던 시기, 친구가 군대에 가서 편지를 써주려고 한다. 이 때 보내는사람과 받는사람을 적고 우체통에 넣게되면 우체부를 통하고 간부를 통해서 친구가 편지를 받게된다.

그리고 친구는 보내는사람의 정보를 보고 누가 보냈는지 확인 후 보낸 이에게 답장을 해준다.

  • 편지를 보낸다 ( 답장해줘! - 요청 )
  • 답장을 보낸다 ( 옛다 답장! - 응답 )

이를 보면 요청과 응답을 위해서 송/수신자의 정보가 있어야한다.
자 그럼 HTTP Message중 Request의 headers를 자세히 살펴보겠다.

여기서 보면 필자가 Host를 가려두어 명확히 보기 어렵겠지만, 이 Host가 Target 즉, 수신자 주소 이다.

그런데 자세히 보면 그 어느곳에도 송신자의 주소가 없다. 이는 어디에 있는것일까?

OSI7 계층

갑자기 OSI 7계층이 나타났다.
송신자의 주소는 HTTP Message에 적지 않고, OSI 계층을 타며 자연스럽게 붙는다. 이를 이 글에서 전부 다 알아보기에는 글이 너무 길어지게되니 흐름을 간단하게 알아보자.

아무래도 통신을 하다보니 OSI 계층을 타게되는데, 이 때 우리는 WebApplication에서 요청을 하기 때문에 최 상위 계층인 "응용계층" 에서 HTTP Message를 작성하게 된다.

이 메세지는 표현계층에서 HTTP프로토콜을 타게되고, 점차 하위계층으로 내려가며 네트워크 계층에서 송신자의 주소를 붙히고 인터넷을 타서 서버에 요청을 보내게 된다.

반대로, 서버측에서는 수신받은 HTTP Message 를 분석하여 서버에서 응답을 보내주게 된다.


참고

profile
지금보다 내일을, 모레를 준비하자

0개의 댓글