[Spring & SpringBoot 공통] HTTP Method - GET

[Spring & SpringBoot 공통] HTTP Method - GET

웹에서 자원에 대한 행위를 표현할 때 HTTP Method를 사용하는데 오늘은 GET 메서드에 대해서 알아보자.

HTTP - GET

GET 메서드는 특정 정보 또는 자원을 조회하는 역할을 하는데, 조금 더 직관적으로 표현해보자면 다음과 같다.

예를 들어서 호텔 예약 서비스 를 만들었을 때 GET 메서드를 사용할 수 있는 범위를 제한해보자면 다음과 같다.

예약 가능 호텔 검색

호텔 정보 검색

나의 예약 정보

위에서 말 했듯이 GET 메서드는 정보 및 자원을 조회하려는 목적으로 사용되므로 저 세가지가 쓰일 수 있다.

좀 더 자세히 알아보자

HTTP GET의 형태는 주소창에 파라미터가 노출되는 특징이 있는데 이는 무슨 말이나면

이렇게 ?category=738834 라는 부분에 보면 category에 값에 738834 해당하는 글을 읽겠다는 내용이다.

이 특징을 보고 알 수 있는 HTTP Get 메서드의 특징은 다음과 같다.

HTTP GET 특징

URL에 파라미터가 노출된다.

위에서 나왔던 내용과 같다.

보안에 취약하다.

우리가 단지 URL만 보더라도 어떤 디렉토리에 어떤 정보가 있는지 알 수 있다.

만약 우리가 ID PW를 GET으로 보낸다면 ?id=jang&pw;=wonik 처럼 id pw를 url에 노출하는 과정이 생기기 때문에 보안이 취약하다는 이야기가 있다. 하지만 다음 시간에 배울 내용이 POST 방식이지만 단지 URL에 보이지 않는 다는 점이 보안 Issue를 없애주지는 않는다는 것이 보안에 직접적인 문제의 주체가 아닌 이유가 된다. 다음에 가서 자세히 알아보자.

get은 정보를 조회하기 위해서 사용하기 때문에 서버의 값이나 상태를 바꾸지 못한다.

Spring에서 사용해보자!

Get 메서드를 이용하여 Hello를 출력시켜보자.

서버에서 데이터의 처리를 위해서 controller 클래스를 만들어준다.

@RestController @RequestMapping("/api") // localhost:8080/api public void TestGetController { @GetMapping("/GetMethod") // http://localhost:8080/api/GetMethod public String getRequest(){ return "hello"; } }

라는 클래스를 생성했고 다음은 서버를 구동시켜서 URL에 우리가 원하는 파라미터를 추가해 hello를 출력시켜보자.

라는 경로를 타고 들어가면

가 출력되는 것을 볼 수 있다.

매개변수를 받아서 콘솔에 출력해보자!

주소창에서 파라미터를 입력받아 그 값을 서버에서 사용하고싶을 때, 예를 들어 categeroy의 10번째의 카테고리의 글을 불러온다고 한다면 우리는 서버에서 사용자가 요청한 파라미터를 받아와야 한다.

http://localhost:8080/api/category?id=10 이라는 url을 처리할 controller를 만들어보자.

@RestController @RequestMapping("/api") public class TestController { @GetMapping("/category) public String findCategory(@RequestParam String id){ return "사용자가 찾는 카테고리는: " + id + " 입니다."; } }

결과 페이지

결과 콘솔

객체 타입으로 받아보자!

만약 받아야할 정보가 많다면?? 사용자의 정보를 검색해주는 서비스를 만든다고 했을 때 사용자 정보를 검색하기 위해서는

이름

생년월일

주소

나이

아이디

를 검색해야 한다고 했을 때 너무 많은 정보가 메서드에 정의되어야 한다.

딱 봐도 너무 불-편하지 않나..?

우리는 이런 정보를 쉽게 사용할 수 있게 객체를 사용하여 정보를 받는다.

새로운 UserInfo 클래스를 만들고 이를 model(mvc 패턴에 m에 해당하는)로 정의하며, 필요한 정보를 추가시킨다.

그리고 나서 다시 controller로 돌아와 @RequestParam과 기본 자료형으로 받지 않고 아까 model로 만들었던 객체형으로 만들어준다.

그리고 실행시켜준다면

이러한 형태로 나타날 것이다.

from http://wonit.tistory.com/121 by ccl(S)

댓글

이 블로그의 인기 게시물

2020 LCK 롤챔스 Spring 경기 재개 및 일정

데이터 바인딩 추상화 - propertyEditor

Spring Web Form