원래 장고부터 차근차근 포스팅을 해야 하는데 티스토리는 일일 포스팅 제한 수가 15개다.
알고리즘 문제 솔루션만 100문제에 언어 카테고리만 올려도 포스팅이 200~300개는 그냥 넘어갈텐데
컨텐츠 부자라서 참 행복하다. 🤦♂️(하....)
그런 의미에서 Django 기본 세션은 건너뛰고 DRF부터 찢는다.
목차
1. DRF가 뭔데?
2. REST(Representational State Transfer)가 뭔데?
3. 직렬화(Serializer)가 뭔데?
1. DRF가 뭔데?
Django REST Framwork의 약자로써 Django에서 Restful API 서버를쉽게 구축할 수 있게 돕는 오픈소스 라이브러리..
이런 사전적 설명은 언제나 도움을 필요로 해서 구글링해서 유입온 사람을 미치게 만든다.
아니, 우리가 지금 무슨 DRF를 개발할 것도 아니고 우리더러 편하게 쓰라고 만든 걸 왜 벌써부터 자세하게
파고 들어야 하는 거지? 누구도 빨래하라고 세탁기를 줬는데 그게 어떤 원리로 작동하는지 분해해보지는 않습니다.
지금 당장 필요한 건 세탁기를 어떻게 사용하는지 사용법을 익히기 위해 빨래를 해보는 것!
...그래도 이 포스팅의 목적은 내 공부니까 다 적어야겠지
쉽게 말해서 컴퓨터 디바이스에만 대응하는 서비스를 제공하다가 난데없이 휴대폰과 태블릿같은 기기들이
상용화되기 시작하면서 다방면에서 치고 들어오니까 이 이슈를 해결할 방법이 필요했다.
엥? 스마트 폰도 Web Browser 쓰는 거 아니었나요? 아닙니다.
- WEB (world wide web) : 브라우저(MS IE, FIREFOX 등)라는 프로그램이 필요하다. 이때 브라우저는 서버에 필요한 정보들을 요청하고 응답받아오는데 이때 통신 방식이 HTTP 프로토콜이다. 그리고 여기서 HTTP 응용프로그램으로 사용되는 것이 PHP, JSP 등이 있다.
- APP (application) : 모바일 기기가 등장하면서 출현한 개념. OS(Android, Apple)에 맞추어 동작한다.
정보를 주고 받게 한다는 목적에서 보면 같지만, 개발자의 시선에서 보았을 때 둘은 엄연히 다르다.
Django는 2005년도에 웹 페이지를 서비스하기 위한 목적으로 만들어졌기 때문에 단독으로는 사용하지 않는다.
좀 더 세부적으로 얘기해보자면 Django는 MVT 패턴(Model - View - Template)으로 이루어져 있다.
문제는 이 Model과 View가 너무 사이가 좋다. 적당히 사이가 좋아야 되는데 너무 좋다보니
좀 떨어져서 다른 애들하고도 어울려 놀게 만들고 싶은데 어지간히 떼어놓기가 쉽지가 않다.
이러다 보니 매번 대응이 늦어지고 일처리가 번거로워진다. 이런 이슈를 해결하기 위한 것이 바로 D.R.F
2. REST(Representational State Transfer)가 뭔데?
분산 하이퍼미디어 시스템을 위한 아키텍쳐 스타일..이라고 한다. 진짜 그들만을 위한 설명이다.
최대한 fun cool sexy하게 정리해보자.
REST는 어떤 아키텍쳐 스타일이자 그 스타일의 집합이라고 한다.
- client-server
- stateless
- cache
- uniform interface
- layered system
- code-on-demand (optional) : 서버에서 코드를 클라이언트에 보내서 실행시킬 수 있는 것..JS같은 놈.
다른 건 뭐 시키는 대로 하다보면 REST를 잘 만족시킨다고 하는데 uniform interface를 그렇게 잘 틀려먹는다.
대체 uniform interface가 뭐길래?
- 리소스가 uri로 식별되면 된다.
- representation 전송을 통해 resource를 조작해야 한다. (클라이언트가 자원(URI)의 상태(정보)에 대한 조작을 요청하면 Server가 이에 알맞게 응답(Representation)해야 한다.)
- 메시지는 스스로를 설명해야한다
- (HATEOAS) application의 state는 Hyperlink를 이용해 전송되어야 한다.
뒤에 두 가지가 그렇게 안 지켜진다고 한다.
대충 메시지를 전달할 때는 명확하게 정보를 다 담고 있으라는 말과 (어디로 보낼 것인지, 어떤 문법인지)
두 번째는 GET / POST로 상태 이동을 하라는 말인데..이걸 지금 알 필요가 있을까?
물론 나는 궁금해서 다 정독했지만, 절반정도 이해한 거 같다.
위에서 정리한 거 다 날리고 REST를 왜 쓰는지와 어떤 기능이 있는지만 알아봐도 충분하다.
여기서부턴 해당 포스팅을 엄청나게 많이 참고하였다.
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
1. 필요성
- 기존에 개발해놓은 웹기술도 살리고 HTTP 프로토콜은 그대로 활용할 수 있음.
- Serializer(직렬화) : 다른 PC에 구조체를 전송할 때, DB 정보를 JSON, XML 등의 타입으로 쉽게 변환
- HTTP Method(CRUD)가 이미 만들어져 있어서 가독성이 높음
- 이유는 모르겠는데 서버와 클라이언트 상호 의존성이 줄어든다. (이후 추가 조사 필요)
- Uniform interface(인터페이스 일관성), 엄청나게 안 지켜진다던 그 아키텍쳐 맞다 ㅋㅋ...
2. 구성
- 자원(Resource): URI
- 모든 자원에는 고유 ID가 존재하며, 이 자원은 Server에 존재한다.
- '/profiles/<profile_id>' 이런 게 HTTP URI다.
- Client는 URI를 이용해 Resource를 지정하고 상태에 대한 조작을 Server에게 요청한다.
- 행위(Verb) : HTTP Method
- CRUD 메서드를 기본 제공함.
- 표현(Representation of Resource)
- Client가 Resource의 상태에 대한 조작을 요청하면 Server는 적절하게 Representation한다.
- REST에서 자원은 JSON, XML, TEXT 등등 여러 형태로 Representation 할 수 있다.
이게 자꾸 보니까 어느정도 이해가 가서 설명을 급발진 해버린 느낌이 적잖이 있다.
어쨌든 중요한 건 REST하지 못하다 라고 하면 보통 CRUD 기능을 POST로만 처리해버린 API나
라우터에 resource, id의 명사가 들어가야 하는데, 그외 정보가 들어가거나 login같은 동사가 들어가는 경우.
그리고 가장 중요한 키워드는 Serializer(직렬화)다.
3. 직렬화(Serializer)가 뭔데?
댕어렵다. 여기서부턴 이해 안 가면 그냥 DRF 실전편으로 넘어가자.
Django가 인기있는 이유는 ORM(Object Relational Mapping) 영속성 때문이라면,
REST의 꽃은 직렬화(Serializer)라고 해도 과언이 아니다.
내 PC에서 다른 PC에 데이터를 넘기는 경우를 생각해보라. 네트워크란 결국 연속된 바이트의 흐름이다.
이는 C든 Java든 언어를 깊게 다루어본 사람이면 어지간히 다 알만한 내용이다.
그럼 이 Object들을 일련의 바이트 배열로 만들어야 하는데 이 과정을 직렬화라고 한다.
반대로 직렬화된 파일을 받아서 다시 Object로 재구성하는 과정이 역직렬화다.
어떤 천재분이 설명 엄청 잘 해놓으셨다.
결론만 언급하자면 내가 해야할 일을 REST가 알아서 직렬화까지 다 처리해준다는 것이다.
아 ㅋㅋ 결국 편해서 쓰겠지 왜 쓰겠냐고. 이게 결론이다.
참고 사이트
1. REST란? https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
3. https://velog.io/@yoonkangho/django-rest-framework-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-1
4. https://www.youtube.com/watch?v=soxd_xdHR0o&ab_channel=VeryAcademy
5. https://www.youtube.com/watch?v=RP_f5dMoHFc
6. https://gmlwjd9405.github.io/2019/02/01/orm.html