개요
Django는 하나의 Project
와 많은 App
의 형태로 구현된다.
하지만 RESTful API로 사용된다면 어떨까? 굳이 그렇게 만들 필요가 있을까?
특정 모델은 하나의 앱에서만 쓰이지는 않는다.
예를 들어 태그와 같은 정보는 글에 대한 태그, 댓글에 대한 태그, 이미지에 대한 태그 등 여러 부분에서 겹쳐 사용된다.
기존의 Django 구조라면 개발이 진행됨에 있어 문제가 하나 둘 씩 나타날 것이다.
Django 앱 리팩토링
Django의 앱 구조는 크게 두 가지로 나뉜다.
모델
과 모델이 아닌 요소들
DRF를 사용하는 것을 고려하면 각 기능들을 api 폴더와 model 폴더로 묶을 수 있다.
기존 구조
1
2
3
4
5
6
7
8
9
├── project
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── post
├── comment
...
기존 구조
1
2
3
4
5
6
7
8
9
10
11
12
13
├── project
│ ├── ...
│ └── wsgi.py
├── api
│ ├── comment
│ ├── post
│ ├── __init__.py
│ └── urls.py
├── model
│ ├── comment
│ ├── post
│ └── __init__.py
...
url 설정
위 구조를 기반으로, project
에서 api 폴더로 url을 넘길 수 있다.
예시에서는 모든 API 호출 앞에 api
가 붙도록 하였다.
api 폴더의 urls.py에서는 API의 디렉토리 이름으로 해당 API들을 호출할 수 있도록 하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# project/urls.py
...
urlpatterns = [
path('api/', include('api.urls'))
]
...
# api/urls.py
from django.urls import include, path
urlpatterns = [
path('post/', include('api.post.urls')),
path('comment/', include('api.comment.urls')),
]