Spring을 공부하면서 @GetMapping, @PostMapping을 보았다. 대학교 시절 네트워크수업에서 Get, Post 방식을 배웠지면 누군가 물어봤을때 딱 자신있게 대답을 할 수 없어 두 방식이 어떠한 방법이고 차이점이 무엇인지 정리하기 위해 게시글을 작성하였다.
클라이언트가 서버로 요청을 보내는 방법은 1. Get 2.Post 이렇게 두가지 방법이 있다.
Get 방식
Get방식은 어떠한 정보를 가져와서 조회하기 위해 사용되는 방식이다. Get 방식에는 여러가지의 특징이 있다.
1. URL에 변수를 포함시켜 요청한다.
2. 데이터를 header를 포함하여 전송한다.
3. URL에 데이터가 노출되어 보안에 취약하다.
4. 캐싱이 가능하다. (캐싱: 한번 접근후, 똑같은 요청을 할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시키는것)
처음에 Spring을 공부하였을때 Get방식 즉, @GetMapping을 사용하여 loginRequest, joinRequest를 사용하였더니 URL에 아이디, 비밀번호 혹은 아이디, 비밀번호, 이름이 노출되는것을 확인하였다. 이것에 대한 해결방안으로 Get방식(@GetMapping)이 아닌 Post(@PostMapping)방법을 사용하였다.
Post 방식
Post방식은 데이터를 서버로 제출하여 추가 또는 수정하기 위해서 데이터를 전송하는 방식이다 Post방식 또한 여러 특징이 있다.
1. URL에 변수에 변수를 노출하지 않고 요청을 한다.
2. 데이터를 Body에 포함시킨다.
3. URL에 데이터가 노툴되지 않아서 기본 보안이 설정되어 있다.
4. 전송하는데 길이 제한이 없다.
5. 캐싱을 불가능하다.
아래의 사진은 Controller에서 로그인시 , 회원가입시 보내는 @PostMapping 방식의 코드다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package com.jeongmin.board.User;
import org.springframework.stereotype.Controller;
@Controller
public class UsersController {
private final ListService listService;
// private final UsersRepository userRepository;//final 재할당 안되게
private final JoinService joinService;
private final LonginService longinService;
public UsersController(JoinService joinService,ListService listService, LonginService longinService) {
this.joinService = joinService;
this.listService = listService;
this.longinService=longinService;
}
@PostMapping(value = "/joinRequest")
public String joinRequest(HttpServletRequest request){
joinService.joinUser(request);
return "join";
}
@PostMapping(value="/loginRequest")
public String loginRequest(HttpServletRequest request){
return "index";
}
@GetMapping(value="/find")
public String find(){
return "index";
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'SpringBoot' 카테고리의 다른 글
Spring으로 만드는 간단한 게시판(2) (0) | 2019.07.22 |
---|---|
Spring으로 만드는 간단한 게시판(1) (0) | 2019.07.22 |
해시(Hash) 와 암호화(Encryption) (0) | 2019.07.08 |
쿠키(Cookie)와 세션(Session) (0) | 2019.07.08 |
Docker (0) | 2019.06.27 |