Springboot

Spring boot/실습 (1)데이터 요청의 기본 개념

25G 2021. 6. 22. 15:56

저번 포스팅에 썼던 코드를 조금 변형해서 브라우저에서 호출을 한 뒤에 F12를 누르면 이런 화면이 나옵니다.

Remote Address는 접속한 클라이언트의 주소입니다.

Referrer Policy 내서버는 크로스 오리진 접근을  막고 있다.라고 말하고 있습니다.
크로스 오리진 = 서버는 자바스크립트 요청을 싫어한다 자바스크립트가 서버를 공격할 수 있기 때문이죠. 그래서 다 막아야 한다.
그래서 크로스 오리진은 외부에서 들어오는 자바스크립트를 막으려고 하는 정책의 일부분.

Requste Method : GET 

 get요청은 무조권 셀랙트용도. 일반적으로 서버 주소창에 자원을 요청할 때는 무적권 get타입으로 요청된다.
데이 터전 송시에 get요청을 한다고 할 때는 해더만 있다(바디가 없다)
하지만 응답해줄때는 바디가 같이 들어있다.
해더는 주제
바디는 내용

ResponseHeader
웹에서는 응답할때 확장자가 없다. 즉 데이터만 주고받는 거임 그래서 해더에 데이터타입을 명시해 줌으로써 웹이 응답받은 데이터를 어떻게 처리할지 맞춰준다. 그래서 브라우저는 아무것도 모르지만 응답 해더에 컨텐트 타입을 보고 어떻게 읽을지 정한다.
컨 탠트 타입은 그래서 굉장히 중요하다.

get요청은 배달음식을 시켜먹는 거랑 똑같은 개념입니다.
그래서 요청해더는 요청할 자원만 찾는 거지 데이터를 들고 가진 않는다. 그래서 데이터를 주는 사람이 컨텐트 타입이 필요합니다.
그래서 get요청시 요청 해더에 컨텐트 타입이 없다,.

POST

 요청시에 데이터베이스에 데이터를 들고 가는 타입. 요청을 할 때 수정할 데이터가 있기 때문에 바디 데이터를 들고 간다. 그렇기 때문에 이 수정할 데이터 타입을 정의할 컨텐트 타입이 함께 바디 데이터와 넘어간다.

PUT요청
수정에 관한내용을 요청을 할 때. 그래서 요청을 할 때 수정할 데이터가 있기 때문에 바디 데이터를 들고 간다. 그렇기 때문에 이 수정할 데이터 타입을 정의할 컨텐트 타입이 함께 바디 데이터와 넘어간다.

 

하지만 위와같은 타입들의 정의를 스프링이 자동으로 알아서 자동으로 처리해줍니다.

 

웹에서는 확장자가 의미가 없다 이때 컨텐트 타입에서 이 데이터가 뭔지에 대한 메커니즘을 명시해 줘야 한다 이때 규정된 약속들이 있는데 그것이 바로 MIME타입이다.

마임 타입에 관한 자세한 자료

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

 

MIME 타입 - HTTP | MDN

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

developer.mozilla.org

그래서 나중에 요청 및 응답을 할 시에 데이터 타입을 규정하고 싶으면 컨텐트 타입과 마임 타입을 잘 참고하면 유연하게 데이터 타입을 웹에서 컨트롤할 수 있게 된다.

 

HTTP 1.1 프로토콜 (http메서드)

GET = > select = request body  X, request content-type X

POST = > insert => request body o , request content -type o

PUT = > update=> request body o , request content -type o

DELETE = > delete => request body  X, request content-type X

 

 

위 메서드 타입들을 요청을 웹브라우저에서 할 수 없다 웹은 get요청만 가능하기 때문

그래서 다양한 타입으로 테스트를 하기 위해 postman을 사용하면 간단하게 해결된다.

 

이렇게 workspace를 만들어주고

위에 +버튼을 누르면 이런 화면이 나옵니다. 그래서 빨간내모안에 어떤 방식으로 요청할지 고르고 있네요

 

값이 잘 나온다

여기서 header를 보면 post인데도 불구하고 contenttype이 없다 그 이유는 데이터를 보내지 않았기 때문에 들고 갈 데이터가 없다

전송할 데이터를 만들어주고 이때 컨 탠트 타입은 form타입으로 전송한다.

그리고 요청을 하게 되면 해더에 contentType이 명시되면서 어떤 타입으로 요청을 했는지 명시된 것을 볼 수 있다

여기서 스프링은 정말 신기하게도 위와 같이 작성해 주면 자동으로 파싱이 되는 마법을 부려준다.

코드를 수정하고 다시 postman으로 전송을 하게 되면 콘솔 창에 데이터가 출력되는 것을 볼 수 있다.

key=value&key = value
username =sia & password =1234

이렇게  위와 같이 던진 데이터를 파싱 하기 위해서 jsp에서는 버퍼로 그대로 받아 파싱 한다 수 있다.
스프링에서는 application/x-www-form-urlencoded데이터로 들어오면 리플랙션이란 기능이 자동으로 작동돼서 파싱 된다

 

json데이터
중간 데이터라고 한다. 각 다양한 프로그래밍 언어 간에 통일을 주기 위함 서로 다른 언어라도 데이터를 변함없이 주고받기 위해서 사용하는 것이다. it에선 전 세계 공통 언어다.

모든 데이터 통신은 json으로 이루어진다. 공용어. it에서는 json이 공용어다. xml보다 경량화에 유리하다.