[프로젝트] 클린더 프로젝트 - 백엔드 02
클린더 Clendar 프로젝트는 클라이밍장의 세팅데이, 휴무 등을 확인할 수 있고 사용자의 클라이밍 일정을 관리할 수 있는 간단한 앱 서비스입니다.
앱 프론트엔드는 Flutter, 백엔드는 Django를 활용하여 개발하고 있으며 이를 진행하면서 공부한 내용을 까먹지 않게 기록해보려 합니다.
30분만에 끝내는 기능 구현
Django REST Framework를 쓰다보면 이렇게 쉽게 개발해도 되나라는 생각이 들곤 합니다.
대부분의 기능이 구현된 클래스들이 상당히 친절히 되어 있어서, 실제로 코드를 작성하는건 몇줄되지 않습니다.
특히 단순한 CRUD는 고민할 필요가 없습니다.
물론 처음 공부를 시작할 때는 Serializer, FBV부터 CBV, mixins, ViewSet 순서대로 천천히 구현해보면서 구조를 몸소 느끼는 것이 더 좋습니다.
HyperlinkedModelSerializer
시리얼라이저 개념은 예전에 정리해놓은 포스트가 있어서 생략합니다.
기존에 사용했던 시리얼라이저는 ModelSerializer였는데, 이는 model과 fields만 정의하면 구현이 끝났기 때문에 편했습니다.
그러던 중 간만에 공식 문서를 보며 구현을 하려는데 HyperlinkedModelSerializer를 사용하고 있는 것을 확인했습니다.
1 | # user/serializers.py |
ModelSerializer와 HyperlinkedModelSerializer의 가장 큰 차이점은 pk를 url로 표현한다는 것입니다.ModelSerializer로 직렬화된 결과를 확인하면 대부분 다음과 같은 형태입니다.
1 | // GET /myusers/ |
이렇게 pk로 표현된 spots를 각각 다시 조회하려면, 요청 url을 다시 만들어서 조회해야 합니다.
이를 HyperlinkedModelSerializer로 바꾸면 다음과 같은 결과가 나옵니다.
1 | [ |
이제 spot을 조회하기 위해 spots에 나타난 url을 따라가기만 하면 됩니다.
관계된 다른 모델 객체를 조회하기 좀 더 직관적이고 편한 방법입니다.
ViewSet
ViewSet은 Django REST Framework에서 가장 강력한 도구 중 하나 입니다.
특별히 기록할만한 부분은 없어서 예시 하나만 남기고 넘어가겠습니다.
1 | # user/views.py |
Router
Router는 ViewSet에서 작성한 view의 endpoint url 작성을 도와주는 도구입니다.
각 앱마다 urls.py를 작성하지 않고 최상위 프로젝트의 urls.py에서 한번에 작성할 수 있습니다.
1 | # clendar/urls.py |
마치며
백엔드에서 구현할 코드 작성은 이게 끝입니다. 정말 간단하게 구현이 완료됐습니다.
이제 부가적으로 DB 연결, 배포 등의 과정만 남았습니다.
[프로젝트] 클린더 프로젝트 - 백엔드 02