The foundation for entering Spring [ 스프링 입문의 기초 지식 ][2]
BackEnd/Spring

The foundation for entering Spring [ 스프링 입문의 기초 지식 ][2]

목차

- 스프링 프로젝트 생성

- content-type에 관하여

- postman을 사용하여 get, post, put, delete 등 Request Method 사용


 New Spring Starter Project

 아래와 같이 Spring 프로젝트를 생성합니다

 

File-> New-> Spring Starter Project

 

초기 설정 값 설정

Package 이름은 도메인을 거꾸로 생각해서 작성합니다.

 

Spring Boot DevTools, Spring Web 추가

 

 

DependenciesSpring Boot DevToolsSpring Web을 추가합니다

 

 

 

 첫 프로젝트는 생성하는데 오래 걸리는데 이 상태에서 잘못 건드리면 필요한 라이브러리를 다 받아 올 수 없거나 오류가 생길 수도 있습니다. 천천히 기다려주세요.

 

 

새로 생성한 프로젝트에 있는 라이브러리

 

우리가 추가한 라이브러리

 

 프로젝트 안에 pom.xml이라는 파일이 있습니다. 이 파일에 우리가 추가한 dependencies 목록을 볼 수 있는데요 프로젝트를 나중에 배포할 때 이 파일을 같이 배포하면 안에 있는 라이브러리가 자동으로 추가하게 됩니다. 우리가 일일이 무겁게 라이브러리를 묶어서 배포하기보다는 가볍게 라이브러리를 추가할 수 있는 Maven이라는 도구를 사용하면 편하게 사용할 수 있게 됩니다. gradle이라는 도구도 많이 사용하는데요, 여기서는 Maven을 써봤습니다.

 

dependency 태그 안에 추가된 모습, 글을 지우면 라이브러리에서 그 툴이 지워지게 된다

 

Maven 사이트 : https://mvnrepository.com/

 

 


 

 

 기존 포트 8080을 다른 곳에서 사용하고 있다면 포트를 바꿔줍시다. 저의 경우는 8080 포트를 사용하고 있어서 포트를 변경했습니다.

 

 

기존의 8080포트에서 8000포트로 바꿔줍니다

 

 TestController라는 Class를 만들고 아래와 같이 작성합니다.

 

/test1, /test2 String 값으로 반환하는 함수를 만듭니다

 그리고 Run As를 합니다. Run As를 할 때 Spring Boot App으로 하게 되면 console 창이 더 쾌적하게 됩니다. :)

프로젝트 우클릭 -> Run As -> Spring Boot App

 

 오류가 뜨지 않는다면 정상적으로 서버가 작동할 겁니다. 그리고 주소창에 아래와 같이 작성하게 되면 아까 만든 함수가 값을 반환합니다.test 1() 이 실행이 되었죠?

 

 주소 : http://localhost:8000/test1

 

test1() 이 실행되는 모습

 


Content-Type

 f12를 누르고 Network를 선택하고 Ctrl+R 을 누르면 아래와 같은 화면이 보이게 됩니다.

 

F12를 누르면 볼 수 있는 크롬 개발자 도구

 

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 MethodGet 방식이네요, 주소창으로 요청을 주면 Get 방식으로 밖에 못 뱉어냅니다. 그래서 아래에서는 Postman을 사용해서 여러 가지 Request Method를 요청하게 됩니다. Status Code는 200번을 보여주게 됩니다. 요청 성공이라는 뜻입니다. Remote Address는 요청을 주는 곳의 ip를 의미하네요. 저는 동일한데 다른 분들이 저 URL로 접속하면 분명 다른 값이 보이게 될 겁니다. Referrer Policy는 웹의 안전을 위한 것입니다.

 

 

 

Response Headers

 

 Response Headers를 보면 Response header에서는 Get 요청은 body data 가 없습니다. 마치 컨테이너 물건을 다 확인하지 않고 문서만 보는 것이라고 보면 됩니다. web에서 데이터를 주는 것은 db에서 select 하는 것인데 클라이언트가 주소창에서 Get 요청을 하면 db에서 select 해서 정보를 보여주게 됩니다.

 

Content-Type 이 중요하다

 

 

 Content-Type 이 중요합니다. 중요한 이유는 이 Type을 통해서 반응의 상태를 알 수 있기 때문이죠. Content-Type은 컨테이너에서 어떤 물건이 들어있는지 문서로 설명하는 것과 같습니다. 지금 요청을 하고 요청을 주는 Response 상태인데 이 반응해서 주는 CotentTypetext/html;charset=UTF-8인 거죠!! text형태의 html 파일로 주겠다. UTF-8의 형태로 인코딩해서 보여 줄 게. 그런 뜻입니다. UTF-8 type으로 보내어야 브라우저에서 3byte씩 끊어서 읽을 수 있습니다.

 

 

 

Request Headers 의 전체 View

 

 

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

 

MIME 타입 - HTTP | MDN

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

developer.mozilla.org

 

더 자세한 문법은 아래 사이트에

출처 : 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. 포스트맨을 검색합니다.

Google it postman

 

2. 사용자 환경에 맞게 다운로드를 합니다.

 

Download the App

 

3. 다운로드하고 구글 아이디로 로그인해서 새로운 Workspace를 만듭니다.

 

+ New Workspace

 

 

 URL를 입력을 하고 Get 방식으로 send 해봅시다

 

hidden을 누르면

 

숨겨진 Headers 값이 보입니다.

 

Key와 Value에 다음과 같이 추가합니다.

 

username == ssar, password == 1234

 

 

 


POST 방식

Get 방식과 달리 숨겨진 request headers 값에 Content-Type 이 보입니다.

post는 content-type을 포함

test1을 지우고 get, post, put, delete 함수를 만들어 줍니다

 

 

그리고 postbodyx-www-formurlencoded 를 누르고 key 값을 get 방식과 마찬가지로 추가해줍니다.

 

그리고 요청하면 콘솔 창에 다음과 같이 요청 값을 받아옵니다.

 

 

Get 방식의 Response Headers 값의 Content-Type을 보면 text/plain;charset=UTF-8 순수한 text를 보여줍니다.

 

 

Response Content-Type 의 예시, 카카오 API 의 Content-Type

출처 : https://developers.kakao.com/docs/latest/ko/kakaotalk-social/rest-api

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

Put 방식으로도 진행해봅니다.

Request headers에 Content-Type 이 있으며, Response headers 에도 보입니다.

text/plain, text/plain;charset=UTF-8

 

put 함수의 모습과 밑에는 null 값을 반환하는 것이 보입니다.

null 값을 반환한 이유는 body에서 raw data text를 보냈지만 이 값을 해석하지 못했네요.

 

null 값을 반환합니다

해결하기 위해서 @RequestBody를 추가합니다.

 

@RequestBody 를 추가합니다

 

@RequestBody와 그 내부 안에 있는 값을 객체화를 시켜서 ( User라는 객체를 만들고 그 안에 기존의 username과 password를 추가시킵니다. ) 그리고 getter로 값을 받아와서 반환합니다. 콘솔 창에 모습이 보입니다.

Sysout 되는 모습

 

 

그렇다면 put 방식으로 raw data로 json을 넣으면? null 값으로 반환하게 됩니다.

json 의 형태로 raw data로 넣어 봅니다

 

 

 

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 datajson을 넣었지만 값을 제대로 반환하게 됩니다. @RequestBody 덕분이죠.

 

 


post 방식에 key-value 값을 넣고 send 하면 신기하게도 Response bodyjson 형태로 반환을 합니다.

 

이것은 post 함수를 User 즉, 반환 값을 객체화를 시켜서 객체를 반환하게 했는데요. 밑에서 정상적으로 반환을 했다는 표시로 getterSysout 되는 모습입니다.

 

 

 

 

 


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