스프링의 MVC중 Controller에서 사용하는 HTTP 메소드를 사용할수있게 해주는 어노테이션인
@GetMapping과 @PostMapping에 대해서 공부해보았다.
HTTP(HyperTextTransferProtocol)
HTTP란 웹상에서 네트워크들끼리 통신을 할때 만들어진 일종의 규약이다.
이러한 통신규약은 프론트앤드 <-> 클라이언트, 백앤드 <-> 프론트앤드간의 통신에서도 사용되고,
클라이언트로부터 받은 요청과, 응답해야할 요청 모두 HTTP 방식으로 통신을 한다.
그렇기때문에, HTTP에 대해 우선 알아야할 필요가 있다.
HTTP 메시지의 구조는 크게 3가지로 나누어져있다.
- StartLine ( GET http://localhost:8080/board HTTP/1.1)
HTTP 메소드 : 해당 요청이 어떠한 동작을 요구하는지 알려주는 부분, HTTP 메소드에는 GET,POST,PUT,PATCH,DLEATE등이 있으나, 가장 많이 사용하는것은 GET과 POST이다.
경로(Url) : 요청하는 리소스가 위치하는 경로를 알려주는 정보.
HTTP 버전 : 요청하는 HTTP의 버전정보를 알려주는 정보. - Header(헤더)
해당 요청에 대한 부가적인 정보를 담고있는 부분.
Request 메시지 body의 길이나, 요청이 전송되는 host의 url, 해당 요청이 받을수있는 응답타입등
그 종류는 굉장히 많다. - Body(바디)
해당 Request의 실제 메시지 내용. GET 방식의 요청메시지 같은경우에는 Body가 필요없기때문에 항상 모든 요청 메시지가 Body를 가지고있는것은 아니다.
이러한 HTTP 요청문을 실제로 확인하고싶다면, 웹 사이트 아무페이지에 들어가서 F12 키를 누르고 개발자모드에서 Network를 누르면 하단에 실제 요청들에 대한 HTTP 요청메시지를 볼수있다.
@GetMapping과 @PostMapping
그래서, @GetMapping은 HTTP 메소드들중, Get 방식으로 요청을 받아 컨트롤러에서 처리를 하겠다는 의미이다.
이러한 Get방식의 특징은, HTTP 요청문 구조중 Body가 아니라, 헤더 url에 데이터를 담아 전송을 하기때문에,
보안에 취약하다. 또한 대규모 데이터 처리의 반복을 막기위해 처리된 요청을 캐시(Cache)에 저장해두기때문에, 빈번하게 사용되는 기능인 조회와 같은 기능에 주로 사용한다.
반대로 보안이 되어야할 데이터, 즉 해당 요청이 신규 회원정보를 생성하거나, 수정되어야할때에는 @PostMapping을 통해 헤더가 아닌 바디에 데이터를 담아 보낸다.
간단한 코드를 통해 정리해보면,
@Controller
@RequestMapping("/board")
public class BoardController {
@GetMapping("/write")
public String boardwrite() {
return "boardwrite";
}
@PostMapping("/writepro")
public String boardwritepro(String title,String content) {
System.out.println(title);
System.out.println(content);
return "";
}
}
@GetMapping() 괄호 안의 Url주소로 요청이 들어오면 boardwrite()라는 메소드를 실행할 것이고, 이 메소드는
viewresolver를 통해 resource/template/ 경로의 file들을 탐색하여 맞는 file을 리턴해줄 것이다.
@PostMapping() 괄호 안의 Url주소로 요청이 들어올때, boardwritepro()메소드가 실행되면서 HTTP 요청문의 Body에 title,content의 데이터를 담아서 POST방식으로 들어온 데이터들을 시스템에 출력해줄것이다.
스프링부트를 공부 하면서 가장 기초적인 내용이고, 굉장히 빈번하게 사용되는 어노테이션들이라 확실하게 배우고 넘어가야 한다는 생각이 들었다. 이러한 어노테이션들을 공부하면서 꼭 알아야하는 HTTP에 대해서도 다시한번 공부하게되고,
역시 모든 내용은 뿌리처럼 연결되어있어있다는것을 느꼈다.
* 해당 내용은 자바 스프링을 공부하면서 배운 내용들 복습하기위해 혼자서 정리한 내용으로,
배움의 깊이가 얕아 틀린 내용에 대한 지적은 언제든지 감사히 받겠습니다.
'Category > JAVA' 카테고리의 다른 글
[JAVA] 객체지향프로그래밍_2.상속과 다형성 (0) | 2023.10.22 |
---|---|
[JAVA] 객체지향 프로그래밍_ 1. 클래스와 인스턴스 (1) | 2023.10.18 |
[자바] 추상클래스와 인터페이스 (1) | 2023.10.11 |
[JAVA] Static 이란? (1) | 2023.10.10 |
[자바] 배열을 활용하여 로또번호 만들기 (0) | 2023.10.09 |