HTTP 프로토콜을 이용해서 서버에 무언가를 요청 할때 사용하는 것으로는 어려가지가 있지만,
그중 자주 사용되는 GET, POST에 대한 내용이며,
어떤 점이 다를지 보겠습니다
프로토콜이란
컴퓨터나 원거리 통신장비사이에서 메시지를 주고받는 양식, 규칙
GET 방식은 요청하는 데이터가 HTTP Request Message의
Header부분이 url에 담겨서 전송된다
모두에게 보이는 장소이므로 보안이 필요한 데이터에는 좋지 않다
url에 담겨 보내지므로 데이터의 크기가 제한적이다
데이터는 key값과 value값에 각각 담아 전송해야 하는데
-> 쿼리 스트링으로 전송한다
여기서 키값은 id
와 password
가 되는것이고
value값은 kimchi
와 1234
가 되는것이다
url에 붙이므로, Header에 포함되어서 서버에 요청하는 것이다
POST는 리소스를 생성/변경 하지 위해서 사용된다
GET의 경우 headers에 담아서 보내는 반면, POST의 경우 body에 담아서 보내기 때문에
눈에 보이지 않는다
이러한 이유로 GET보다는 보안적인 면에서 안전하다
하지만 POST요청도 개발자 도구나 Fiddler같은 툴로 요청내용을 확인 할 수 있기 때문에
보안이 필요한 데이터는 암호화를 해서 전송해야 한다
GET의 경우는 서버에 동일한 요청을 보내더라도 항상 같은 응답을 보내야한다
따라서 GET은 목록을 가지고오거나 글을 보여주는 등....
데이터를 보여주는데 사용한다
POST는 서버에 동일한 요청을 전달하여도 응답은 항상 다를 수 있다
POST의 이런 성질 때문에 생성, 수정, 삭제등 데이터를 변경 하는 목적으로 사용한다
하지만 GET, POST, PUT, DELETE가 있으므로 각각 목적에 맞는 메서드를 사용해야 한다
POST도 찾아보려면 body에 담긴 내용을 확인 할 수 있지만,
GET처럼 눈에 보이지는 않기 때문에, 보안상 더 유리하다고 할 수 있다
그래도 정보는 보안이 중요하기 때문에, 중요한 내용을 전달 하는 경우에는
항상 암호화를 보내야 한다
GET은 데이터를 캐싱할 수 있고,
POST는 데이터를 캐싱하지 못한다
POST도 캐싱을 할 수 있나???
생각을 해봣는데,
이 두가지 생각이 들었습니다
어떤 사람이 사진이 많을 게시글을 올린다고 가정을 하면
게시글을 생성하는 과정은 POST 메서드를 이용하는 것이고,
그 글을 읽는 사람들은 GET메서드를 이용해서 게시글을 읽습니다
POST메서드에서 만약에 캐싱이 된다고 가정을 하면
그 글을 쓴사람의 DB에 캐싱이 되는건데, 그건 의미가 없는 행위이지 않을까 생각합니다
브라우저의 작은 DB이다
캐싱을 한다는 건 나중에 유용하게 사용하기 위해 저장하는 것이고,
브라우저에서 정적인 영역을 캐싱 한다
캐싱을 한 데이터는 서버에 의해서 결정 되고, 보관기간은 항상 다르다
이미지와 텍스트가 있는 경우, 텍스트의 경우는 크기가 작기 때문에 금방 다운로드 되지만,
이미지의 경우는 용량이 크기 때문에 다운로드가 텍스트에 비해 오래걸립니다
이런경우 캐싱을 해놓으면 다음번에 다시 방문 했을 때,
더 빠른 속도로 이용이 가능합니다
캐싱을 이용해서 웹사이트를 이용하는 것은 장점도 있지만,
저장을 하는 대에 있어 단점도 있습니다
웹사이트를 방문해서 캐싱을 했는데
서버에서 변경사항이 있는경우
내 DB에는 업데이트가 되기전에 캐싱되었던 데이터가 남아있어
웹사이트가 깨지는 경우가 있습니다
이런경우 캐시데이터를 삭제해서 이용하면 되지만,
작은 문제가 발생할 수도 있는 거죠
캐싱이 무엇인지, GET과 POST의 차이점을 알아봤는데
GET, POST이외에도 수정하는 경우에는 PUT, 삭제는 DELETE를 이용해서
웹사이트를 수정하게 됩니다
각각의 용도에 맞게 사용하면 됩니다