구 원트노/멋사 - 1학기 정규

[before model 3] get or post?? Http 메소드란?


모델 배우기 전에

[before model 1] rails & form에 대하여

[before model 2] rails & route 1

[before model 4] rails & params



HTTP 메소드란? (GET or POST)


form에 대해서 이야기할 때, 또 route에 대한 글에도 공통적으로 나왔던 부분이죠. get, post

도대체 get 이랑 post가 뭐길래 우리를 괴롭히는지..! 

이 둘의 정체를 파헤쳐 보겠습니다.



get이랑 post는 'HTTP 메소드' 의 종류 중 하나 입니다.


그렇다면 HTTP 메소드는 무엇일까요? 정의적 해석으로는 이렇습니다.


클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식


쉽게 설명하자면 서버에 요청을 보내는 방법!


서버에 임무를 부여하고 주어진 메소드에 해당하는 방식대로 일을 한다! 라고 생각하면 됩니다.


HTTP 메소드 종류는 8가지가 되는데 이번에는 get과 post에 대해서만 이야기해보겠습니다.(자세히 알고싶다면 여기로)



무엇이 다른지 실제로 해보겠습니다.


일단 저희는 post를 사용해봤죠? (rails & form에 대하여)


바로 전 글에서 form의 내용을 post 방식으로 서버(컨트롤러)로 보냈습니다.


그렇다면 get 으로 보내면 무엇이 다른지 볼까요?


1
2
3
4
5
6
7
8
9
10
11
12
13
<h1>get or post 뭐가 다를까?</h1>
<p>이번에는 get이다</p>
<form action="home/write" method="GET">
    <div class="form-group">
        <input type="text" name="title" />
    </div>
    <div class="form-group">
        <textarea name="content"></textarea>
    </div>
    <div class="submit">
        <input type="submit" value="제출" />
    </div>
</form>
cs


이렇게 코드를 작성했습니다. method 부분을 GET으로 변경했습니다.



물론 route.rb에서의 코드도 get으로 변경했습니다. 



컨트롤러 코드이구요.


그 다음 넘어갈 write.erb 코드입니다.



이제 결과를 볼까요?



'안녕', 'get이야' 라고 입력하고 제출을 눌러보겠습니다.



post랑 차이점이 없어보이나요?


주소창 빨간 부분을 보면 URL이 신기하게 입력되어 있습니다. 


형태를 보면 '현재 주소?name=입력값&name=입력값' 입니다.




그렇다면 get과 post의 차이점은 뭘까요?


 입력값이 주소 창에 보이는가? 안 보이는가? 이네요.


더 자세히 차이점을 알아보겠습니다. 기능적 & 의미적 두가지 접근법이 있습니다. 


기능적

  • GET은 주소창에 ?뒤에 name=값 형태로 이어져 나옵니다. ex) write?title=안녕&content=반가워요
  • POST는 주소창에 보이지 않고 숨겨져서 보내집니다. 

  • GET은 주소창에 이어붙이기 때문에 길이 제한이 있습니다.
  • POST는 GET보다 많은 양을 보낼 수 있습니다.

  • GET은 그 URL의 페이지가 존재한다.
  • POST URL은 메소드 그 자체이며 페이지가 존재하지 않는다.

의미적

  • GET은 가져오는 것(read) 정보 조회
  • POST는 수행하는 것(create) 새로운 정보 등록

그렇다면 언제 무엇을 사용하는게 좋을까요? 

항상 가장 중요한 건 기능이 작동하는겁니다...만 목적에 맞게 의미에 맞게 사용하는 것도 중요합니다.


만약 내가 하고자 하는게 입력 값으로 데이터를 바꾸지 않고 보여주기만 하는 용도라면 get을 사용하면 됩니다.


예를 들자면 게시판의 리스트를 본다거나, 글을 본다거나, 검색을 한다거나 등이 있습니다.


반면에 입력 값으로 데이터를 저장을 하려하면 post를 사용합니다.


예로는 게시판 작성이나 회원 가입 등이 있습니다.




이번 포스팅에서 get과 post에 대해 이야기해봤습니다.


굉장히 기본적이면서 중요한 개념 이니깐 더 자세히 알고 싶은 분들은 참고 링크를 통해 공부하면 됩니다.



궁금하신 점 있으시면 댓글 남겨주세요!!