[Spring] GET과 POST의 차이점과 문법 정리
개념
GET과 POST는 HTTP프로토콜을 이용해서 서버에 무언가를 전달할 때 사용하는 방식입니다.
전달하는 방식~ 전달하는 방식이에요 방식!
큰 차이점은 데이터가 어디에 위치하는가에 있습니다. POST 요청시에 URL에 파라미터가 보이지 않는 이유는 데이터가 요청 바디에 포함되기 때문입니다. 그렇기 때문에 GET과 POST에 따라 데이터를 URL에 추가해야할지 요청 바디에 추가해야할지를 알고 있어야만 합니다.
GET 방식과 POST방식의 장단점 및 차이점
1.Select 기능을 원한다면 GET 메서드, Update 기능을 원한다면 POST 메서드
2.검색 결과 등 고정적인 주소 및 링크 주소로 사용될 수 있다면 GET 메서드를 사용
3.정보를 담을 URL길이(최대 2048자)는 한계가 있기 때문에 이를 해결하고 싶다면 POST 메소드를 사용
4.POST 메서드를 쓰면 정보를 숨길 수 있다. 하지만 SSL(Secure Sockets Layer)를 사용안하면 GET과 마찬가지
5.GET은 캐시가 남아있어 전송 속도가 빠르고 POST는 캐시가 남지 않아 보안적인 면에서 유리
6.GET은 브라우저 히스토리에 파라미터가 남고 POST는 저장되지 않는다.
예) http://url/.javatis.com?id=22&pw=11 URL 중요 파라미터 노출
7.GET은 ASCII캐릭터만 허용하나 POST는 한계가 없다. POST는 바이너리 데이터가 허용된다. 따라서 파일 입출력을 위해 POST메소드가 이용된다
정리
윗 사람 : 누구야 get과 post의 차이가 뭐냐?
누구 : 두가지 모두 HTTP 전송 방식의 타입입니다.
GET은 일단 SELECT 기능면에서 우수하여 SELECT 기능으로 많이 쓰고,캐시가 남아있어 보안적인 측면이 좋지 않으나, 전송속도가 우수하고 파라미터가 url에 노출되는 점이 있습니다.
POST는 주로 CREATE,UPDATE,DELETE에 사용되며,캐시가 남지 않아 보안적인 면에서 좋고 요청 시 Request Body에 데이터가 들어가기 때문에 파라미터가 노출 되지 않는점이 큰 차이점입니다.
일단 이론은 대충 알겠고, 그래서 어떻게 어느 상황에 뭘 써야 하는거야?
HTTP가 결국엔
클라이언트 -> 서버 요청 방식인데..
이걸 보낼때 전송방식이 대표로 GET,POST가 있답니다. 이 외에도 PUT, DELETE 나중에
GET(Read) 즉 SELECT 할때쓰는것이적당합니다.
SELECT
서버에 데이터를 가져와 보여주기 위함
POST(Create) 즉 INSERT 할때 쓰는것이 적당합니다.
INSERT,update,delete
서버의 값,상태를 바꾸기 위함
문법
공통
$(document).ready(function() {
signUp();
getUserList();
})
GET 방식
Client
function getUserList(){
$.ajax({
type : "GET",
data : { id : "gildong", pw : 119}),
url : "/jquery/signUp.do",
success:function(data){
console.log(data);
}
})
}
Server (Spring mvc Controller)
@RequestMapping(value="jquery/getUserListEx.do",method=RequestMethod.GET)
@ResponseBody
public List<Object> getUserListEx(SignUp signUp){
System.out.println("getUserListEx.do GET & id / PW : " + signUp.toString());
List<Object> list = null;
//list = service.getmethod();
return list;
}
GET 정보
POST JSON.stringify() 방식
VO Class
public class SignUp {
private String id;
private String pw;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
@Override
public String toString() {
return "SignUp [id=" + id + ", pw=" + pw + "]";
}
}
//pom.xml dependency 추가
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
//이 라이브러리를 추가 안해주면 HTTP 415 에러를 만나게된다.
(Client 형식 JSON === Server 형식 JSON 맞춰줘야한다.)
Client
function signUp(){
$.ajax({
type : "POST",
dataType : 'json',
contentType : "application/json;charset=UTF-8",
data : JSON.stringify({
id : "gildong",
pw : 119,
}),
url : "/jquery/signUp.do",
success:function(data){
console.log(data);
}
})
}
(@ResponseBody @RequestBody 헷갈림 주의 눈 부릅)
Server (Spring mvc Controller)
@RequestMapping(value="jquery/signUp.do",method=RequestMethod.POST,produces = "application/json;charset=UTF-8")
@ResponseBody
public SignUp signUp(@RequestBody SignUp signUp){
//menuservice.signUpMethod(signUp);
System.out.println("signUp.do POST & id : " + signUp.toString());
return signUp;
}
POST 정보
GET & POST 결과
이 외에도 $("#form").serialize() , $.get , $.post , 폼 파라미터 넘기기 방식이 있습니다.
대표로 자주 쓰이는 두 문법을 정리 해봤습니다.
'Spring' 카테고리의 다른 글
[Spring] GET 파라미터(parameter) 데이터 받기 총 정리 (0) | 2019.12.15 |
---|---|
[Spring] MyBatis 데이터 HashMap으로 받기 (0) | 2019.10.31 |
[Spring] @Scheduled (0) | 2019.10.30 |
[Spring] DTO(Data Transfer Object)와 VO(Value Object) (1) | 2019.10.29 |
[Spring] annotations 정리 (0) | 2019.10.16 |