GET, POST

dev_space·2021년 8월 29일
1

HTML

목록 보기
1/4

서버에 데이터를 보내는 두 가지 방식이다.
GET 은 가져오는 것이고 POST 는 수행하는 것이다.
단순히 피라미터의 값을 URL에 실어서 보내느냐 HTTP 패킷에 포장하여 보내느냐의 차이가 아니라 애초에 용도가 다르다.
처음 HTTP 가 설계될 때도 GET 은 말그대로 값을 가져오는 것, POST 는 게시하는 것이라는 뜻이 있어서 이런 이름은 붙였다고 한다.

GET

GET 은 영어로 가져오다라는 의미를 가지고 있는데 그 기능을 쉽게 비유하면 도서관에서 책의 내용을 보기위해 그 책을 가져오는 것이다.

특징

  • 어떠한 정보를 가져와서 조회하기 위해서 사용되는 방식이다.
  • URL 에 변수(데이터)를 포함시켜 요청한다.
  • URL 에 데이터가 노출되어 보안에 취약하다.
  • 전송하는 길이의 제한이 있다.
  • URL 형식에 맞지 않는 피라미터 이름이나 값은 인코딩되어 전달되어야 한다.
  • URL에 키와 값을 임의로 입력하여 사용하는것으로 전송속도가 POST 방식보다 빠르다.
  • URL의 주소 뒤에 ? 를 붙이고 변수명과 값을 쌍으로 해서 원하는 정보를 전달하게 한다.
  • 변수가 여러 개일 경우에는 & 으로 구분된다.
  • GET 방식은 POST 방식에 비해 더 빠르다. 이는 GET 방식으로 데이터를 주고 받을 때 캐싱이라는 기술을 사용해서 이미 조회했던 사이트의 데이터를 저장시켜 놓을 수 있기에 그렇다.
  • 캐싱(Caching)을 할 수 있다.

    캐싱(Caching)이란?
    캐시는 컴퓨터의 성능을 향상시기기 위해 사용되는 메모리를 말하는데 주기억장치와 CPU사이에 위치하고, 자주 사용하는 데이터들을 기억한다.
    캐싱은 이 캐시 영역으로 데이터를 가져와서 접근하는 방식을 말한다.
    예를 들면 속도가 느린 디스크의 데이터를 속도가 빠른 메모리로 가져와서 메모리상에서 읽고 쓰는 작업을 수행한다.
    (캐싱의 이점: aws 캐싱 개요)

언제 GET을 사용할까?

GET은 select 개념을 가지고 있다. 서버에서 어떤 데이터를 가지고 올때 사용한다. 즉, 서버의 값을 바꾸거나 추가 하는 개념이 아니다.

  • GET을 사용해 값을 넘긴다면, 모두가 그 값을 URL을 통해서 알 수 있다. 따라서 GET으로 값을 전달할 때에는 비밀번호가 아닌 민감하지 않은 값을 넘길 때 주로 쓰인다.
  • 서버에서 어떤 데이터를 가져와서 보여줄 때 사용
  • 서버의 어떤 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용
    • 예를 들면, 게시판에서 글의 내용에 대한 목록을 보여주는 경우, 글의 내용을 보는 경우
  • GET 방식으로 파라미터를 받아서 게시글을 출력하는 페이지는 URL만 공유하면 게시글의 번호를 쿼리 스트링으로 함께 공유할 수가 있어서 링크를 공유하는 것에 있어 훨씬 효율적일 수 있다.
  • 어떤 특정한 페이지를 조회하고자 할 때는 GET을 사용하는 것이 바람직하다.

정리

GET 의 가장 큰 특징은 URL에 포함시켜 데이터를 전송하는 것이다. 하지만 그로인해 외부에 노출되기에 보안에 취약하고 URL에 나타낼 수 있는 데이터에 한계가 있어 제한이 있다.
그럼 왜 GET을 사용하지? URL에 표기되지도 않고 데이터를 전송하는 POST가 있는데?
크게 두 가지 이유가 있는것 같다.

  • 페이지의 단순요청
    DB에 추가로 자료를 요청하지 않고 저장된 데이터를 단순요청하는 경우 get을 사용한다. 이러한 이유는 링크공유 즐겨찾기 등에 사용하기 위함인데 URL에 포함되어 있기에 단순 문자만 적어주면 해당 페이지의 원하는 자료를 불러올 수 있기 때문이다.
  • 캐싱을 할 수 있다.
    캐싱이란 일반적으로 RAM과 같이 빠르게 엑세스 할 수 있는 하드웨어에 저장되어 느린 기본 스토리지 계층에 액세스해야 하는 필요를 줄임으로써 데이터 검색 성능을 향상시키고 한번 요청했던 자료의 경우(이미 조회했던 사이트의 데이터를 저장) 더욱 빠르게 처리가 가능하여 웹의 성능과 효율성을 높여주기 때문이다.

POST

영어로 post는 부치다, 제출하다 라는 의미를 가지고 있다. 예를 들어 서류를 제출하는 것은 우리에 대한 정보를 제출하여(post) 추가하기 위함이다.

특징

  • 데이터를 서버로 제출하여 값이나 상태를 바꾸기 위해서 사용하는 방식이다.
  • URL에 변수(데이터)를 노출하지 않고 요청한다.
  • 데이터를 Body에 포함시킨다.
  • URL에 데이터가 노출되지 않아서 기본 보안은 되어있다.
  • 전송하는 길이에 제한이 없다.
  • 캐싱할 수 없다.
  • get방식은 URL에 데이터를 붙여서 전송하는 반면 post방식은 body에 데이터를 넣어서 전송한다. 따라서 헤더필드 중 body의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떠한 데이터 타입인지를 명시해주어야 한다.
  • 데이터를 body에 포함시키는 이점 때문에 메세지 길이의 제한은 없지만 최대 요청을 받는 시간인 Time Out이 존재하므로 클라이언트에서 페이지를 요청하고 기다리는 시간이 존재한다.
  • 실제 상황에서 post방식은 URL에 데이터가 노출되지 않으므로 즐겨찾기나 캐싱이 불가능하지만 쿼리스트링(문자열)데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스와 같은 객체들의 값도 전송 가능하다.
  • 클라이언트와 서버 간에 인코딩하여 서버로 전송
  • 헤더를 통해 요청이 전송되는 방식
  • 클라이언트에서 데이터를 인코딩 → 서버측에서 디코딩 하여 사용
  • GET에 비해서 보안상 약간의 우위에 있다. (사실상 동일하다)

언제 POST를 사용할까?

  • 서버 쪽에 어떤 작업을 명령할 때 사용한다.(데이터의 기록, 삭제, 수정 등)
  • 전송할 데이터의 길이가 매우 긴 경우에 사용
    • 글쓰기를 하면 글의 내용이 DB에 저장 또는 수정시에 DB의 값이 변경되게 하는 경우에 POST를 사용

정리

post는 언어 그대로 제출하는 기능을 가지고 있다. get과는 비슷한 기능이면서 다른 특징을 가지고 있는데 get은 URL에 노출이 되는 데이터지만 post는 body에 포함된 데이터이다. 그래서 get보다는 보안에 있어 약간의 우위에 있다. (하지만 URL에 표시가 안될 뿐이지 클라이언트에서 크롬 개발자 도구, Fiddler와 같은 툴로 요청내용을 다 확인이 가능하다. 그래서 보안을 신경쓴다면 다른 조취를 취해야한다.) 그리고 데이터 길이의 제한이 없고 캐싱를 사용할 수 없다.
그럼 post를 사용하는 경우는 뭘까? 요즘의 브라우저들은 URL의 길이 제한을 없애는 추세고 캐싱을 사용할 수 없어 get보다 효율적이지 못할텐데? 단순히 보안의 문제?
우선 post가 쓰이는 경우는 서버에서 값이나 상태를 바꿔주기 위해 사용한다. 직접적으로 URL에 노출되지 않기에 보안에 중요한 데이터 및 작성한 데이터를 제출하여 추가 또는 수정을 하는 것이다.

GET, POST 정리

get과 post의 차이는 get은 변하지 않는 고정된 값으로 데이터를 나타내기 위해 사용하는 것이고 post는 변하는 값으로 데이터를 추가, 수정하기 위해 사용한다.

Reference

https://letitkang.tistory.com/165#:~:text=%EC%BA%90%EC%8B%9C%EB%8A%94%20%EC%BB%B4%ED%93%A8%ED%84%B0%EC%9D%98%20%EC%84%B1%EB%8A%A5,%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC%20%EB%A7%90%ED%95%A9%EB%8B%88%EB%8B%A4.&text=%EC%BA%90%EC%8B%B1%EC%9D%80%20%EC%9D%B4%20%EC%BA%90%EC%8B%9C%20%EC%98%81%EC%97%AD,%EC%93%B0%EB%8A%94%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4.
https://codezip.tistory.com/741
https://aws.amazon.com/ko/caching
https://mangkyu.tistory.com/17

profile
개발자 되기

0개의 댓글