본문 바로가기
스프링부트

[스프링부트] HTTP, REST API, STATELESS STATEFUL, MIME TYPE

by CodeMango 2023. 3. 25.

참조 유튜브 : 생활코딩, 메타코딩Resource

https://www.youtube.com/watch?v=vHhWcTyJoS0 

https://getinthere.tistory.com/19

 

스프링부트 with JPA 블로그 5강 - HTTP1.1 체험하기

1. POSTMAN 설치 https://www.postman.com/downloads/ Postman | The Collaboration Platform for API Development Simplify workflows and create better APIs – faster – with Postman, a collaboration platform for API development. www.postman.com 2. HTTP1.1 ge

getinthere.tistory.com

 

1. HTTP (hypertext transfer protocol)

web brower와 web server가 통신을 이용할 때 사용하는 규칙

 

HTTP는 크게 request(요청)와 response(응답)를 위한 메세지로 구분되어있다.

 

2. REST API

기계와 기계가 웹을 이용해서 통신할 때 정해진 규칙

웹 통신규약인 HTTP를 이용합니다. 

api : 컴퓨터의 기능 실행시키는 방법

-> 통신방법 4가지 Resource

 

 

 

Create : post

Read :get

Update : put / patch

Delete : delete

 

GET : 데이터를 줘!                  -> SELECT

POST : 데이터를 추가해줘!     -> INSERT

PUT : 데이터를 수정해줘         -> UPDATE

DELETE : 데이터를 삭제해줘  -> DELETE

 

GET: 요청?사과     -> 사과 데이터를 줘

POST:요청   -> 어떤 데이터를 추가해줘!      ->  ID=ssar, Pwd:1234 인 데이터

 

 

3. STATELESS 방식

클라이언트와 서버가 통신하기 위해서는 STREAM을 연결합니다.

이렇게 요청시마다 STREAM을 연결해서 데이터를 주고받는 방식이 STATELESS방식입니다.

이것을 HTTP에서 사용합니다.

 

HTTP에서는 요청과 응답이 이루어지면(요청을 하고 사과를 받으면) 바로 선을 끊어버립니다.

요청시마다 STREAM을 연결해서 데이터를 연결하는 방식인데요

다시 연결하기 위해 선이 다시 연결했을 때, 새로운 요청이 들어왔을 때, 클아이언트가 전의 클라이언트가 맞는지 인증하기 어려워집니다.

그러면 세션을 유지할 수 있는 방법이 없습니다.

따라서 요청-응답 방식이 지속적으로 이루어져야 하는 채팅같은 기능 구현을 위해서는 STATEFUL 방식을 사용합니다.

 

앞으로, STATELESS 방식으로 클라이언트를 인증해서 서버에 세션을 만들 수 있는지 배우게 됩니다. 

스프링부트에서 시큐리티를 사용해서 SESSION을 유지하는 방법을 배울 수 있습니다.

 

4. STATEFUL 방식

클라이언트가 인증되면 서버에 세션이 생깁니다.

세션이 만들어졌다는 것은 데이터를 응답해줄 준비가 된 것입니다. 

이때는 인증이 되어있는 상태이므로 통신할 때 데이터를 막 주고받을 수 있습니다.

 

 

클라이언트가 서버에게 POST요청을 합니다.

 POST요청은 어떤 데이터를 추가해달라는 겁니다.

 

5.  MIME타입

MIME타입 이해하기 전에 HTTP헤더와 HTTP 바디에 대해 알아야합니다.

 

클라이언트가 서버에게 POST요청을 합니다. 이것은 어떤 데이터를 추가해달라는 뜻입니다.

어떤 데이터를 클라이언트가 요청시에 담아서 보내야하는데, 그걸  보낼때 헤더와 바디라는 것을 달고 갑니다

만약 어떤 데이터를 추가해달라고 할 때, 사진파일명이 my.jpeg라는 데이터를 전송하고싶다면

HEADER에는 Image/JPEG라고 명시 해두고, BODY에는 실제 그 파일 my.jpeg 이 들어갑니다.

다시 말해서, 헤더에는 데이터를 설명해주는 내용, 바디에는 실제 데이터가 들어갑니다.

일반적으로 HTTP통신은 패킷 스위칭 방식입니다. 

 

서킷스위칭

A와 B가 데이터를 교환할 때 가나다라 라는 데이터가 있으면 데이터를 한방에 B에게 전송합니다.

그러나, C가 B에 보내고 싶으면 또 선을 하나 연결해서 선에 마바사를 연결해서 보내야하고

이때, 물리적으로 선이 계속 연결되어야 하니까 비용이 많이 든다는 단점이 있습니다.

 

패킷스위칭

A와 B가 통신할 때 보내야할 데이터가 가나다라 라는 데이터면 가/나/다/라로 쪼갭니다.

쪼갠 하나의 데이터를 패킷이라고 하고 그 패킷을 하나 하나씩 순서대로 올려서 보냅니다.

C에서 B에 데이터를 보내고 싶다면 새로운 선이 연결되지 않고, A-B선에 달라붙여서 마바사를 보냅니다.

그러면 데이터가 아래와 같이 섞일 수도 있습니다.

 

이럴 때는 조립을 해야하는데 문제는 가와 라가 서로 다른 선으로 연결되어 있을 수도 있습니다.

출발은 가가 먼저 했지만, 라가 더 빨리 도착했을 수도 있습니다. 

따라서 모든 패키지는 HEADER가 붙어서 데이터의 순서와 클라이언트를 표시해줍니다. (그 외 DATA 설명)

https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types

 

MIME 타입 - HTTP | MDN

MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘입니다: 웹에서 파일의 확장자는 별 의미가 없습니다. 그러므로, 각 문서와 함께 올바른 MIME 타입을 전송하도록,

developer.mozilla.org

개별 타입

특정 서브타입이 없는 텍스트 문서들에 대해서는 text/plain가 사용되어야 합니다. 특정 혹은 알려진 서브타입이 없는 이진 문서에 대해서는 유사하게, application/octet-stream이 사용되어야 합니다.

 

멀티파트 타입

multipart/form-data
multipart/byteranges

멀티파트 타입은 일반적으로 다른 MIME 타입들을 지닌 개별적인 파트들로 나누어지는 문서의 카테고리를 가리킵니다.

즉 이 타입은 합성된 문서를 나타내는 방법입니다. HTML Forms (en-US) POST 메서드의 관계 속에서 사용되는 multipart/form-data 그리고 전체 문서의 하위 집합만 전송하기 위한 206 Partial Content 상태 메시지와 함께 사용되는 multipart/byteranges를 제외하고는, HTTP가 멀티파트 문서를 다룰 수 있는 특정한 방법은 존재하지 않습니다: 메시지는 브라우저에 간단히 전달됩니다 (문서를 인라인에 어떻게 디스플레이할지 모르기에, '다른 이름으로 저장' 윈도우를 제시할 겁니다)

 

모든 mime type 목록을 확인하려면 아래의 사이트를 참조하세요.

https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

 

MIME 타입의 전체 목록 - HTTP | MDN

다음은 일반적인 확장자로 정렬된, 문서 타입과 관련된 MIME 타입의 포괄적인 목록입니다.

developer.mozilla.org

 

댓글