3. Django Rest API - POST
📌 학습한 것 :
- api를 사용해서, 게시글 생성(POST)하기
📌 잘모르겠는 것들
- 매개변수 self
✍ 해결을 위해 찾아본것
- 파이썬의 클래스에 대한 이해
- 다른 언어와 동일하게 python에서도 클래스를 이용해 보다 편리하게 함수를 다룰 수 있다.
- 클래스를 사용하지 않고 함수를 작성하면 다음과 같다.

- 클래스를 이용한다면 기본적으로 다음과 같이 작성하게 된다.

- 클래스를 이용해 함수를 작성하면
- 전역 변수를 없애고, 모든 변수가 특정 소속을 갖음
- 재사용이 가능
- 코드의 수정을 최소화 할 수 있음
- 함수 실행 중, 함수 자신을 다시 호출하는 처리 등이 가능함
- 클래스와 인스턴스
- python 클래스에 정의된 데이터나 함수를 사용하기 위해서는 ‘인스턴스’(객체)를 생성해야 한다.
- 인스턴스를 생성하는 것으로, 클래스 내에 기재된 함수를 호출할 수 있다. → 인스턴스.함수()
- self의 역할
- init의 이해
- selff와 나란히 클래스 내에 등장하는 init에 대해 간단히 정리하면 다음과 같다.
- 생성자 함수
- 객체를 생성할 때 반드시 처음에 호출되는 함수
- 클래스 내 멤버 데이터의 초기화를 수행함
- __init__()은 반드시 첫 번째 인수로 self를 지정해야 한다.
- self에는 인스턴스 자체가 전달되어 있다.
- __init__은 클래스 구성에서 정보를 유지하기 위한 중요한 구성으로 빼 놓을 수 없다.
- GET과 POST의 비교
- 둘 다 HTTP 프로토콜을 이용해 서버에 무엇인가를 요청하는 METHOD이지만, 엄연히 다른 역할을 가진다.
✍ 해결을 위해 찾아본것
- GET
- 데이터를 요청할 때, 요청하는 데이터가
HTTP Request Message의 Header 부분의 url에 담겨서 전송된다. → url 상에 ? 뒤에 데이터가 붙어 request를 보내는 것이다.
- 예를 들어, 구글에 오늘의 날씨에 대한 데이터를 요청할 때 검색엔진에 이를 검색해 보면 url에는 https://www.google.com/search?q=오늘의날씨 라고 뜨는 것을 확인할 수 있다.
- 이러한 방식은 url 공간에 그대로 데이터가 담기기 때문에, 보낼 수 있는 데이터 크기 자체가 제한적이며 보안의 측면을 고려해야 한다.
- POST
Header 부분에 데이터를 담는 GET 방식과 다르게 Body 부분에 데이터를 담아 전송한다.
- 따라서 GET에 비해, 제한적인 크기 및 보완의 측면에서 더 낫다. (다만, 보안은 암호화를 따로 하지 않는다면 비슷하다고 한다.)
- 또 하나의 GET 메소드와의 차이점은 GET 요청은 브라우저에 Caching이 된다는 점이다.
- 이는 POST 방식으로 요청해야 하는 것을 데이터 크기가 작고 보안의 문제가 없다는 이유로 GET을 통해 요청할 경우, 기존에 캐싱된 데이터가 응답될 가능성이 존재한다는 의미이다.
- POST 요청은 언제 쓰일까? 바로 서버의 값이나 상태 등을 변경하기 위해 사용된다. → 게시글을 쓰는 경우
- 클라이언트가 서버에 자원에 대한 조작을 요청하면, 서버는 이에 대한 적절한 응답을 해줘야만 한다.
- 이러한 응답의 메시지에는 포맷이 있으며, 대표적으로 JSON, XML이 있다. 최근에는 JSON을 많이 쓰는 추세라고 한다.
- HTTP Request
✍ 해결을 위해 찾아본것
브라우저는 웹 서버에 액세스 하는 클라이언트 뿐 아니라 파일을 다운로드 하고 업로드 하는 FTP 클라이언트 기능이나 메일의 SMTP 클라이언트 기능도 가지고 있다.
- 브라우저가 처음에 하는 일은 웹 서버에 보내는 리퀘스트 메시지를 작성하기 위해, URL을 해석한다.
http: + // + 웹 서버명 + / + 디렉토리명 + / + … + 파일명
- URL의 맨 앞에는 데이터 출처에 엑세스 하는 방법이다.
// 뒤에 이어지는 문자열이 서버의 이름을 나타낸다.
- (이후부터는 생략 가능) 데이터 출처(파일)의 경로명을 나타낸다.
- HTTP는 리퀘스트 메시지를 만든다.
- 리퀘스트 메시지의 첫 번째 줄에는 리퀘스트 라인을 쓴다.
- 이 행에는 메소드 즉,
어떻게의 내용이 들어가 있다.
- 그리고 한 칸을 띄운 후,
/<디렉토리명>/…/<파일명>의 uri를 쓴다.
- 마지막으로 첫 번째 줄에 끝에 메시지가 어떤 버전의 HTTP를 사용한 것인지까지 쓰면 첫 번째 행이 완료된다.
- 두 번째 줄에는 메세지 헤더 행이 이어진다.
- 메세지 헤더가 끝나면 공백 행을 넣고 그 다음 줄에 송신할 데이터를 쓰는데, 메소드가 GET인 경우 아무 데이터가 없고, POST인 경우는 당연히 있을 것이다.

- 리퀘스트 메시지를 보내면 응답이 되돌아 온다.
- 응답 메시지의 포맷도 리퀘스트와 비슷하다.
- 다만, 응답의 경우 첫 번째 행에 정상 종료 여부의 실행 결과를 내보낸다.
- 리퀘스트 메시지와 하나의 응답 메시지는 대응한다.
- 즉, 복수의 파일을 읽을 때 웹 서버에 하나의 리퀘스트 메시지가 아닌 각 파일마다 리퀘스트 메시지를 보내고, 각각의 응답 메시지를 받는 것이다.

📖 학습 가이드라인
3. Django Rest API - POST
- GET과 POST의 역할 및 차이점을 설명하라.
- APIView를 상속받는 StudentList 클래스에서 get과 post 함수를 각각의 기능을 인지하면서 정의하라.