Wanna be Brilliant Full-Stack Developer
2/24 SPRING HTTP 4가지 요청방식 본문
일단 요청이란 무엇이란 무엇인가? 클라이언트가 웹서버에 요청을 한다는것이다
클라이언트는 머가 될수있냐면 보통은 웹브라우저가 될수 있다.
이 웹서버는 어떤 요청에 따라서 DB에 SELECT, INSERT, UPDATE, DELETE요청을 해서 응답한다.
클라이언트가 그냥 get요청을 할수는 없고 웹서버가 어디에있는지 주소를 알아야하기 떄문에
Http:// 프로토콜을 사용할것이고 웹서버의 아이피주소를 넣으면 그러면 웹서버한테 요청이 된다.
웹서버는 요청은 왔는데 어떤 요청이 왔는지 구체적요청에대해 모른다.
그래서 구체적으로 어떤 요청에 대한 END POINT라는것이 필요하다.
근데 이 주소만 보면 수정, 삭제, 데이터를준다는건지 정확히 모르니 요청방식 GET이 필요한것이다.
GET이니까 달라는것이고 user의 ssar이라는 아이디의 유저정보를 웹서버한테 요청을 하는것이고 이 요청을 받고 DB에 셀렉트를한다! 왜냐하면 웹서버가 데이터를 가지고 있는것은 아니기때문에
그러면 DB가 거기에대해 응답을 하게 될것이고 웹서버는 이 응답된 결과를 받고 다시 클라이언트에게 응답을 하게된다.
이 클라이언트가 웹브라우저면 .html로 응답해주면 고맙다 왜냐하면 브라우저는 .html을 이해할수 있기 때문에!
왜냐하면 웹브라우저가 .html 파일을 읽는 해석기이다. .
근데 .Html 파일이 아니라 문자열을 응답할수도있다. 그러면 이건 파일이 아니라 데이터이다.
DB는 응답할때 데이터베이스에 있는 어떤 쿼리에대한 결과를 레코드라고하는데 테이블에 있는 데이터를 응답해주는데
웹서버는 그거를 클라이언트한테는 .html파일로 응답을 해주거나 혹은 데이터로 응답해줄수도 있다.
만약에 클라이언트가 핸드폰의 앱이라고하면 .html파일로 응답하면 망한다. 왜냐하면 핸드폰은 html파일을 이해하지 못한다. 그런애들한테는 데이터로 응답을 해줘야한다. 이러한 구조가 있는데 이 구조해서 배워야할것이 4가지이다.
1) GET(동사) - 데이터 요청
2) POST(동사) - 데이터 전송
3) PUT(동사) - 데이터 갱신
4) DELETE(동사) - 데이터 삭제
여기서 주의해야할게 머냐면 get은 어떤 데이터를 줘 하는거라서 HTTP body가 필요없다. put과 post는 꼭 기억해야할것이 HTTP의 BODY가 필요하다.
BODY에는 어떤 데이터를 담고 있다. POST니까 데이터를 전송하는거니까 어떤 데이터를 전송할건지? 어떤 데이터를 전송해야하니까 그 데이터가 바디에 담긴다
PUT도 마찬가지다. PUT도 데이터를 수정해줘이다 갱신이니까
어떤 데이터, 만약에 어떤 SSAR이라는 유저가 있을떄 그 유저의 비밀번호를 변경해줘라고 할거면 그 비밀번호 데이터를 들고 요청을 해야하니까 그것을 바디에 담고한다.
그래서 이 4가지를 실습을 해보려고한다!
package com.cos.controllerdemo.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;
//@Controller //File을 응답하는 컨트롤러(클라이언트가 브라우저면 .html파일을)
@RestController //Data를 응답하는 컨트롤러 (클라이언트가 핸드폰이면 data)
public class HttpController {
//http://localhost:8080/get
@GetMapping("/get")
public String get() {
return "<h1>get요청됨</h1>";
}
//http://localhost:8080/post
@PostMapping("/post")
public String post() {
return "post요청됨";
}
//http://localhost:8080/put
@PutMapping("/put")
public String put() {
return "put요청됨";
}
//http://localhost:8080/delte
@DeleteMapping("/delete")
public String delete() {
return "delete요청됨";
}
}
@RestController 이 어노테이션을 보고 스프링이 이 전부를 컨트롤러로 만들어준다!
애가 컨트롤러가 되니까 이 컨트롤러를 진입해서 각각 클래스를 호출할수 있는데 어떻게 지정하냐면
위에다가 @GetMapping이라고 하고 /get이라고 하면 -> http://localhost:8080/get이라고 적히면 저 get부분이 엔드포인트다.
각각 다른 요청을 하는데 여기서 return을 할건데
이서버는 @RestController가 붙어있어서 컨트롤러가 되는데 DATA를 응답하는 컨트롤러이고
어떤 경우에는 파일을 응답하는 컨트롤러를 하고싶으면 @Controller로 하면된다.
근데 둘중에 하나만 써야한다. 파일을 응답할건지 Data를 응답할건지?
만약에 클라이언트가 핸드폰이면 data를 응답하는것이 좋고 만약에 클라이언트가 브라우저면 .html파일을 응답해줘야한다.
만약에 @RestController를 선택하면 return하는 값들이 Data가 되고
근데 @Controller를 선택하면 return 값들이 파일명으로 인식한다. 그래서 그 파일이 프로젝트 내부에 파일을 찾아서 응답을 해줘야하는데 그 파일이 어디있는지 그런것들을 설정을 해줘야한다.
근데 저장할떄마다 Reload가 되는데 이거는 이게 SpringBoot DevTool 라이브러리이다.
그리고 이 어노테이션들을 어떻게 사용할수 있냐면 왜냐하면 Spring Boot Starter Web이라고 라이브러리를 체크하면
이런 스프링으로 웹을 할수있게 라이브러리를 제공해준다!
근데 웹브라우저는 Post요청, Delete요청, put 요청을 주소에서 못한다
POSTMAN을 통해서는 가능하다!
'Some Memos > Spring 개념' 카테고리의 다른 글
2/28 SPRING DispatcherServlet은 무엇인가? (0) | 2022.02.28 |
---|---|
2/24 SPRING HTTP 쿼리 스트링, 주소 변수매핑! 에대해 알아보자 ! (0) | 2022.02.24 |
2/24 SPRING Controller 기본 동작 이해하기! (0) | 2022.02.24 |
2/24 SRPING YML 파일 이해하기! (0) | 2022.02.24 |
2/22 Spring Web.xml은 무엇인가?? (0) | 2022.02.24 |