일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- IOS
- process
- ImageSlider
- CS193p
- 프로젝트회고
- UserDefault
- WidgetTree
- MVVM
- 알고리즘
- flutter
- 스위프트
- UIKit
- 백준
- Swift
- stanford
- xcode
- colorofdays
- 새싹후기
- 오늘의 색상
- GIT
- collectionView
- 프로그래머스
- 스터디
- 조건문
- SwiftUI
- Masil
- 코딩테스트
- 청년취업사관학교후기
- xml
- flutter #state # stateful #stateless
- Today
- Total
개발을 시작하는 이야기
Get과 Post의 차이점 본문
얼마 전 면접을 보는 일이 있었는데 여러 질문 중 몇 가지를 정리해본다.
Get과 Post는 둘 Http 메서드로 클라이언트에서 서버로 무언가를 요청할 때 사용되는 것은 동일하나 서로 조금은 다르다.
Get?
Get은 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드이다. 게시판의 게시물을 조회할 때 사용할 수 있다. Get을 통한 요청은 URL 조수 끝에 파라미터로 포함하여 전송되며, 이 부분을 쿼리 스트링(Query String)이라고 부른다. 방식은 URL 끝에 "?"를 붙이고 그다음 "변수명=값&변수명=값"과 같은 형식이 된다.
예를 들자면 다음과 같은 방식이다.
www.example.com/show?key=valye&name=value
http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20220331
위 메서드는 영화진흥위원회의 일별박스오피스를 불러오는 Get 파라미터이다. URL? key=value 확인할 수 있다.
이렇게 되면 서버에서 key의 파라미터 값을 전달받을 수 있다.
Post?
Post는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드이다. 게시판의 게시물을 작성하는 작업 등을 할 때 사용된다. Post는 전송하는 데이터를 HTTP의 body 부분에 담아서 서버로 보낸다. Get에서 URL의 파라미터로 보냈던 ?Key=value&name=value가 body에 담겨 보내지는 방식이다. Post로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보내거나, Get처럼 데이터가 외부적으로 드러나는 건 아니라서 보안이 필요한 부분에 사용하게 된다. (하지만 데이터를 암호화하지 않는다면 body의 데이터도 결국 볼 수 있는 건 동일하다.)
Get의 특징
- Get 요청은 캐시가 가능하다.
- Get을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
- Get 요청은 브라우저 히스토리에 남는다.
- Get 요청은 북마크 될 수 있다.
- Get 요청은 길이 제한이 있다.
- Get 요청의 길이 제한은 표준이 있는 건 아니지만 브라우저마다 제한이 있다고 한다.
- Get 요청은 중요한 정보를 다루면 안 된다.
- Get 요청은 파라미터에 다 노출이 되기 때문이다.
- Get은 데이터를 요청할 때만 사용된다.
Post의 특징
- Post 요청은 캐시 되지 않는다.
- Post 요청은 브라우저 히스토리에 남지 않는다.
- Post 요청은 북마크 되지 않는다.
- Post 요청은 데이터 길이에 제한이 없다.
Get과 Post의 차이점
Get과 Post의 특징만 보아도 차이가 명확하긴 하지만 추가적인 차이점을 정리해보면 다음과 같다.
사용 목적에 따른 차이
Get은 서버의 리소스에서 데이터를 요청할 때, Post는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
요청에 Body의 유무
Get은 파라미터에 요청하는 데이터를 담아 보내기 때문에 Body가 없고, Post는 Body에 데이터를 담아 보내기 때문에 Body가 존재한다.
응답 값의 일관성
Get은 리소스를 조회하기 때문에 여러 번 요청하더라도 응답 값이 똑같지만, Post는 리소스를 새로 생성하거나 업데이트할때 사용되기 때문에 응답값이 변화할 수 있다.
Get과 Post는 이런 차이점들이 있기 때문에 사용하는 목적에 따라 적절히 사용해야 한다.
참고 자료
SeSAC 수업 자료
'개발 이야기 > Swift' 카테고리의 다른 글
Foundation (0) | 2022.04.04 |
---|---|
[SwiftUI] SwiftUI란? (0) | 2022.04.03 |
[Error] Command Ld failed with a nonzero exit code (0) | 2022.03.28 |
UserDefaults (0) | 2022.03.27 |
Data Binding (Observable) (0) | 2022.03.26 |