목차
- 스프링 프로젝트 생성
- content-type에 관하여
- postman을 사용하여 get, post, put, delete 등 Request Method 사용
New Spring Starter Project
아래와 같이 Spring 프로젝트를 생성합니다
Package 이름은 도메인을 거꾸로 생각해서 작성합니다.
Dependencies로 Spring Boot DevTools와 Spring Web을 추가합니다
첫 프로젝트는 생성하는데 오래 걸리는데 이 상태에서 잘못 건드리면 필요한 라이브러리를 다 받아 올 수 없거나 오류가 생길 수도 있습니다. 천천히 기다려주세요.
프로젝트 안에 pom.xml이라는 파일이 있습니다. 이 파일에 우리가 추가한 dependencies 목록을 볼 수 있는데요 프로젝트를 나중에 배포할 때 이 파일을 같이 배포하면 안에 있는 라이브러리가 자동으로 추가하게 됩니다. 우리가 일일이 무겁게 라이브러리를 묶어서 배포하기보다는 가볍게 라이브러리를 추가할 수 있는 Maven이라는 도구를 사용하면 편하게 사용할 수 있게 됩니다. gradle이라는 도구도 많이 사용하는데요, 여기서는 Maven을 써봤습니다.
Maven 사이트 : https://mvnrepository.com/
기존 포트 8080을 다른 곳에서 사용하고 있다면 포트를 바꿔줍시다. 저의 경우는 8080 포트를 사용하고 있어서 포트를 변경했습니다.
TestController라는 Class를 만들고 아래와 같이 작성합니다.
그리고 Run As를 합니다. Run As를 할 때 Spring Boot App으로 하게 되면 console 창이 더 쾌적하게 됩니다. :)
오류가 뜨지 않는다면 정상적으로 서버가 작동할 겁니다. 그리고 주소창에 아래와 같이 작성하게 되면 아까 만든 함수가 값을 반환합니다.test 1() 이 실행이 되었죠?
주소 : http://localhost:8000/test1
Content-Type
f12를 누르고 Network를 선택하고 Ctrl+R 을 누르면 아래와 같은 화면이 보이게 됩니다.
General 항목의 값을 보면
- Request URL: http://localhost:8000/test1
- Request Method: Get
- Status Code: 200
- Remote Address: [::1]:8000
- Referrer Policy: strict-origin-when-cross-origin
여기서 Request URL은 제가 주소창으로 입력한 값이 보입니다. Request Method는 Get 방식이네요, 주소창으로 요청을 주면 Get 방식으로 밖에 못 뱉어냅니다. 그래서 아래에서는 Postman을 사용해서 여러 가지 Request Method를 요청하게 됩니다. Status Code는 200번을 보여주게 됩니다. 요청 성공이라는 뜻입니다. Remote Address는 요청을 주는 곳의 ip를 의미하네요. 저는 동일한데 다른 분들이 저 URL로 접속하면 분명 다른 값이 보이게 될 겁니다. Referrer Policy는 웹의 안전을 위한 것입니다.
Response Headers를 보면 Response header에서는 Get 요청은 body data 가 없습니다. 마치 컨테이너 물건을 다 확인하지 않고 문서만 보는 것이라고 보면 됩니다. web에서 데이터를 주는 것은 db에서 select 하는 것인데 클라이언트가 주소창에서 Get 요청을 하면 db에서 select 해서 정보를 보여주게 됩니다.
Content-Type 이 중요합니다. 중요한 이유는 이 Type을 통해서 반응의 상태를 알 수 있기 때문이죠. Content-Type은 컨테이너에서 어떤 물건이 들어있는지 문서로 설명하는 것과 같습니다. 지금 요청을 하고 요청을 주는 Response 상태인데 이 반응해서 주는 Cotent의 Type 이 text/html;charset=UTF-8인 거죠!! text형태의 html 파일로 주겠다. UTF-8의 형태로 인코딩해서 보여 줄 게. 그런 뜻입니다. UTF-8 type으로 보내어야 브라우저에서 3byte씩 끊어서 읽을 수 있습니다.
Request header에서는 content type 이 없습니다. 데이터를 달라고 해서 서버에서 클라이언트에게 준거지 이 Web-page를 받는 사람은 콘텐트 타입이 필요하지 않습니다( Get Type )
그러나 Post 요청은 데이터베이스에 create 할 때 쓰는 것입니다. Post 요청은 데이터를 클라이언트가 들고 가야 되는 것이기 때문에 request header에 content type을 포함해야 합니다.
Put 요청은 데이터를 수정할 때 쓰는 요청 프로토콜입니다.
Content type 포함해서 우리가 스프링에서 리턴해주는 데이터의 타입을 우리가 지정해 줄 수 있는데, 서버에서 응답할 때 응답을 커스터마이징을 하기 위해서는 Content type에 대해서 자세하게 알아야 합니다.
Content-Type에서의 MIME 타입
예를 들면
- 이미지 파일
- 동영상 파일
- 오디오 파일
-.. 등 등
반응을 해서 보여주겠다는 것!
출처 : https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types
더 자세한 문법은 아래 사이트에
출처 : https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types
Using postman for request method: get, post, put, delete
- 포스트맨을 사용해서 여러 가지 request method를 사용해서 요청해봅니다.
- get, post, put, delete.. etc..
1. 포스트맨을 검색합니다.
2. 사용자 환경에 맞게 다운로드를 합니다.
3. 다운로드하고 구글 아이디로 로그인해서 새로운 Workspace를 만듭니다.
URL를 입력을 하고 Get 방식으로 send 해봅시다
Key와 Value에 다음과 같이 추가합니다.
POST 방식
Get 방식과 달리 숨겨진 request headers 값에 Content-Type 이 보입니다.
test1을 지우고 get, post, put, delete 함수를 만들어 줍니다
그리고 post의 body에 x-www-formurlencoded 를 누르고 key 값을 get 방식과 마찬가지로 추가해줍니다.
그리고 요청하면 콘솔 창에 다음과 같이 요청 값을 받아옵니다.
Get 방식의 Response Headers 값의 Content-Type을 보면 text/plain;charset=UTF-8 순수한 text를 보여줍니다.
출처 : https://developers.kakao.com/docs/latest/ko/kakaotalk-social/rest-api
Put 방식으로도 진행해봅니다.
Request headers에 Content-Type 이 있으며, Response headers 에도 보입니다.
put 함수의 모습과 밑에는 null 값을 반환하는 것이 보입니다.
null 값을 반환한 이유는 body에서 raw data로 text를 보냈지만 이 값을 해석하지 못했네요.
해결하기 위해서 @RequestBody를 추가합니다.
@RequestBody와 그 내부 안에 있는 값을 객체화를 시켜서 ( User라는 객체를 만들고 그 안에 기존의 username과 password를 추가시킵니다. ) 그리고 getter로 값을 받아와서 반환합니다. 콘솔 창에 모습이 보입니다.
그렇다면 put 방식으로 raw data로 json을 넣으면? null 값으로 반환하게 됩니다.
post 함수에 User data를 받아와서 response 하는 코드를 작성합니다.
post 방식으로 아래 값을 넣고 요청
아래와 같이 정상적으로 콘솔 창에 Sysout 됩니다. 그 이유는 위에서는 raw data로 json 형태로 보내서 null 값을 반환하였는데, 바로 위에서는 x-www-form-urlencoded의 마임 타입으로 요청했기 때문에 정상적으로 반환하게 됩니다.
그 이유는
예를 들면
Key=value&key=value
Username=ssar&password=1234
Jsp에서는 Request get parmeter를 하면 value 값이 튀어나오는데
Spring에서는 요청하는 함수의 매개변수 값으로 넣어주게 됩니다.
스프링은 기본 마임 타입이 x-www-form-urlencoded 이어서 그대로 반응할 수 있게 됩니다.
그러나 raw 마임 타입으로 요청했기 때문에 null 값이 아닌 값을 반환받으려면 @RequestBody를 추가를 해줘야 합니다.
그렇게 put 타입에 @RequestBody를 추가를 하면
정상적으로 값을 반환합니다. raw data로 json을 넣었지만 값을 제대로 반환하게 됩니다. @RequestBody 덕분이죠.
post 방식에 key-value 값을 넣고 send 하면 신기하게도 Response body에 json 형태로 반환을 합니다.
이것은 post 함수를 User 즉, 반환 값을 객체화를 시켜서 객체를 반환하게 했는데요. 밑에서 정상적으로 반환을 했다는 표시로 getter로 Sysout 되는 모습입니다.
Reference
Maven 사이트 : https://mvnrepository.com/
Mime 타입 사이트 : https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types
카카오 API : https://developers.kakao.com/docs/latest/ko/kakaotalk-social/rest-api
'BackEnd > Spring' 카테고리의 다른 글
[Spring][3]Dependency Injection[의존성 주입] (0) | 2021.06.28 |
---|---|
[Spring][2] The practice of MVC pattern [MVC 패턴 실습] (0) | 2021.06.24 |
[Spring][1] MVC pattern [MVC 패턴] (0) | 2021.06.24 |
The foundation for entering Spring [ 스프링 입문의 기초 지식 ][1] (0) | 2021.06.22 |
Download the Spring Tools [스프링 툴 다운로드하기] (0) | 2021.06.22 |