Wanna be Brilliant Full-Stack Developer

SpringBoot blog 만들기 MIME 타입은? 본문

Back-End/블로그 만들기 With SpringBoot

SpringBoot blog 만들기 MIME 타입은?

Flashpacker 2023. 2. 11. 02:26


HTTP Header와 HTTP Body가 무엇인지 추상적으로라도 알고있어야한다

클라이언트가 서버에게 무엇을 할것인가? Post요청을 할것이다!

Post요청을 한다는것은 어떤 어떤 데이터를 추가해줘라는 것이다. 

그러면 여기에 대해 어떤어떤 데이터를 클라이언트가 요청시에 담아서 보내야하는데

그걸 어디에 담는가? 요청시에 헤더, 바디라는 것을 달고간다!

그래서 어떤 어떤 데이터를 추가해줘라고 할때 기본적인 내 사진 파일명이 my.jpeg파일을 Post요청을 통해서 서버에
전송하고 싶다면 그러면 헤더에는 이런것들..! 내가 지금 요청하는데 내가 지금 보낼 데이터가 있어

그 데이터가 뭐냐면 Image인데 / JPEG파일이야 라고 명시를 하고 

바디에는 실제 그 파일이 들어간다. My.jpeg이렇게!

이렇게 두개를 같이 보내야한다 이것을 HTTP 헤더, HTTP 바디이다.

바디에는 실제 데이터를 넣어가면 되고, 헤더에는 데이터를 설명해주는 어떤 내용이 있으면 된다. 

헤더에 데이터에 대해서 설명뿐만이 아니라 다른것들도 들어갈 수가 있는데

어떤거냐면!? 일반적으로 HTTP통신은 이런식으로 동작을 한다!

HTTP 통신할때 우리가 쓰는 통신 방식은 패킷스위칭 방식이다.

패킷 스위칭 방식에 대해서 이해하려면 서킷 스위칭 방식에 대해서 알아야한다.

 

서킷스위칭 방식은 데이터를 한방에 얹어서 전송한다.

서킷스위칭은 A와 B가 데이터를 교환할때 내가 보내야할 데이터가 가, 나, 다, 라 라는 데이터가 있으면 

이 데이터를 한방에 실어서 가,나,다,라를 올리고 전송하는것이 서킷스위칭 방식이다.

단점은 C라는애가 B라는 애한테 데이터를 보내고 싶으면 선을 연결해서

내가 보내고 싶은 데이터를 사,아,자를 얹어서 보내면된다. 

그 선을 계속 해서 추가적으로 연결되는 방식이 서킷스위칭 방식인데 속도는 굉장히 빠르지만

물리적으로 선이 연결되어야하니까 비용이 많이 든다. 

 

패킷스위칭 방식은 A와 B가 통신을 할때 내가 보내야할 데이터가 가,나,다,라 라는 데이터라면

이 데이터를 이렇게 나눈다. 

가와 나 하나 , 다 하나, 라 하나로 쪼갠다 그리고 이 쪼갠것을 이 하나의 조각을 패킷이라고 한다.

 

패킷이 4개로 쪼개졌는데 이것을 하나하나 올려서 전송한다.

애는 추가적으로 다른 C라는 애가 B한테 데이터를 보내고 싶으면 선이 연결되는것이 아니라 저 선에 달라 붙는다?

그러면 C가 보내야할 데이터가 사, 아, 자면? 이 데이터가 섞이게 될 수 있다.

A와 C라는애가 B한테 데이터를 보낼때 하나의 선을 공유 하게 되면

A는 가나다라, C는 사아자면 섞이게 되면 어떻게 섞이는가? 

이런식으로 데이터가 실려가게 되면 B가 이 데이터를 받게 되면 이 섞인 데이터들이 B한테 도착이 되고

B입장에서는 조립을 해야한다. 파랑색은 파랑색, 보라색은 보라색끼리 조립을 하게 되면 데이터를 온전하게 받을 수 있다.

조립을 하게 되면 파란색은 파란색끼리, 보라색은 보라색끼리 조립을 하게되면

파란색은 가, 나 , 다 , 라 

보라색은 사 , 아 ,자 로 받게 될것이다

근데 통신이 이렇게 단순한 선이 아니라 굉장히 복잡한선을 통해서 왔다갔다 하면서
A가 B한테 데이터를 보내기 위해서는 경로가 굉장히 다양할 수 있다.  

이 많은 경로 중에서 트래픽(교통의혼잡이) 가장 적은쪽을 선택해서 데이터가 날라가게 된다.

 

이 라라는 다이터가 날라갈때와 가라는 데이터가 날라갈때 이 선이 다를 수 있다.

길이 다르다. 출발은 가가 먼저헀지만 라가 먼저 B한테 도착할 수 있다.

그렇게 되면 조립시에 문제가 생길 수 있다.

 라라는 데이터가 가장 마지막으로 들어와야 데이터인데 만약에 조립을 하다보니까 라가 먼저 들어오고
끝에 가가 들어오면 조립시에  데이터의 순서가 꼬이게 되고 그래서 모든 패킷에는 HTTP는 패킷스위칭 방식을 쓰는데

모든 패킷에는 헤더가 이렇게 붙는다. 헤더에 데이터의 순서도 있을 수 있고

이 가라는 데이터는 A가 보낸 데이터야, 나도 A가, 가라는 다도 A가 , 사라는 데이터는 C가 보낸 데이터야

이것이 있어야지 조립을 할 수 있따.

번호만 보면 조립 할 수 있다.  그때 우리는 이 헤더가 필요하다!

그리고 데이터가 들어가 있는것이 다 데이터 Body입니다.

그래서 통신할때는 이 헤더와 바디가 필요하다. 내 데이터를 전송하기 위해서는 내 데이터가 어떤 데이터인지에 대한 설명, 순서, 누구로한테왔는지 설명이 있고

바디에는 실제 데이터가 들어가게 되어있다.

헤더에는 데이터에 대한 설명, 바디에는 실제 데이터가들어가 있다.

내가 요청을 할때 헤더와 바디를 만들어서 요청을 하게 되는데 여기서 중요한것은

내가 보낼 데이터의 종류들이 Jpeg파일말고도 일반적인 text가 있을수 있고 어떤 이미지 파일, AVI 동영상 파일일수도 있고 이진데이터 Json 데이터 종류가 굉장히 많은데

바디에 실어 보낼 데이터가 무엇인지에 대해 적을때 내가 마음대로 적을 수 없다.

이것을 적을 수 있는 방식이 있따. 이게 MIME타입인데!

MIME타입에 어떤것들이 있는지 공부를 해야 데이터를 보낼떼 MIME타입을 설정할 수 있다.

 

MIME타입을 보면 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘입니다.

웹에서 내가 보낸 파일의 확장자가 별 의미가 없다. 

문서를 올바르게 전송하기 위해서는 MIME타입을 설정해야한다.

MIME타입이 종류가 굉장히 많은데 수많은 종류의 문서가 있으므로 MIME타입에 대해서

공부해야하는데! type/subtype로 나뉘어진다.

중간에 슬러시가 있는데 엄청 굉장히 간단한 데이터를 표현하는 구조인데!?

내가 보낸 데이터는 텍스트인데 그냥 기본적인게 문자라는것이다.

subtype이라는것은 그냥 문자가 아니라 플레인이라는것은 평문, Strigng 문자열이라는것이다.

내가 보낸 것은 Text인데 일반적인 평문이 아니라 html문서이다?

내가 보낸 데이터는 이미지인데 수많은 이미지중에 jpeg라는 확장자를 가진 사진 파일이다.

png, mpeg 파일은 내가 보내는 데이터는 영상과 오디오 파일인데 영상은 mp4이런것들에 대해서

정리를 해야한다. 

기본적으로 알고 있어야하는것들이 있는데 우리가 미리 다 알고 있을 필요는 없다.

여기 보면 MIME타입에 대해서 형식이 다 정의 되어있다. 우리가 마음대로 적는것이 아니다.

내가 CSS파일을 보내고 싶으면 text/css라고 보내야한다. 내가 마음대로 정의할 수 있는것이 아니다.

내가 JSON데이터를 보내고 싶으면? 

이것들에 대해 내가 다 외워야하는건 아니다. 내가 보내야할 데이터가 정해지면 MIME타입에 들어와서

찾아서 형식을 확인만 하면 된다!

그러기 위해서는 MIME타입이 무엇인지 알고 있어야한다^^

MIME타입을 실습을 해보자!