지난 글에서는 모델에 대해 알아봤습니다. 요번 글에서는 앞서 만든 모델을 서브하는 rest api를 만들어보겠습니다.
restful api에 대한 사전적인 정의나 더 자세하게 다룬 글은 찾아보시면 많고, 잘 모르신다면 한번 찾아보고 돌아오시는게 좋습니다. 이 글을 위해서 알아야 할 것은 django rest framework는 철저하게 rest api의 best practice대로 구현하기 위한 framework이며, 이를 따른다면 적은 코드로 많은 기능을 구현할 수 있다는 점입니다. 물론 요소마다 고도의 customization을 지원하지만, 기본적으로 best practice와 rest api에 대한 이해 없이는 좋은 결과물을 만들기도 어렵고 생산성도 낮아질 수밖에 없습니다.
서버는 요청을 받고 이에 대해 응답합니다. 이 과정에 관여하는 요소들의 정의나 단계 구분, 명명 등은 언어/프레임워크마다 꽤 다른 편이라 하나 이하의 framework만 다루어 보셨다면 헷갈리는 부분이 있을 수 있습니다.
요청은 네트워크를 거쳐 python web server (uwsgi, gunicorn, daphne, uvicorn 등) 로 들어옵니다. 이 웹 서버들은 WSGI (또는 ASGI)를 구현하고 있으며, 요청을 받아 python application으로 넘겨주는 역할을 합니다.
django는 넘겨받은 요청에 대해 일단 settings.middleware에 정의된 미들웨어로 처리하고, 그 다음 urls에 정의된 router를 통해 해당 request를 처리할 APIView 또는 APIViewSet으로 넘겨줍니다. APIView/APIViewSet에는 인증, 권한, 쿼리셋, 필터, 페이지네이션 등의 다양한 부가기능을 정의할 수 있습니다. 그렇게 요청을 처리한 후 response를 웹서버로 넘겨주면 다시 웹서버에서 client로 전달합니다.
APIView는 django의 View class에 대응되는 DRF의 class입니다. (DRF APIView)
APIViewSet은 관련있는 View들을 묶어 편하고 일관성 있게 관리할 수 있도록 해줍니다. (DRF APIViewSet)