Replies: 3 comments 3 replies
-
전반적인 내용에 동의합니다. |
Beta Was this translation helpful? Give feedback.
-
지금 돌이켜 생각해보면 왜 api 와 app 을 나누었을까 생각이 듭니다. |
Beta Was this translation helpful? Give feedback.
-
DB 쓰기 동작을 수행하는 ORM의 배치에 대한 의견이 있습니다. Manager에 정의된 메서드는 Manager나 QuerySet 메서드 정의는 특정 조합의 ORM에 대한 인터페이스를 제공하고 코드 중복을 방지하는 효과가 있습니다. 더욱 유연한 인터페이스를 제공하여 효과를 극대화하기 위해, QuerySet에 DB 쓰기 연산이 허용되어야 한다고 생각합니다. 허용할 쓰기 연산의 종류로는 |
Beta Was this translation helpful? Give feedback.
-
Abstract
이 논의는 저희들이 어떻게 장고 프로젝트를 개발해 나가면 좋을지에 대한 제안을 담고 있습니다.
처음 프로젝트에 투입되는 개발자는 물론, 숙련된 개발자들도 '이 코드는 장고 프로젝트 어느곳에 두어야 하는가?' 에 대한 고민을 가지게 될텐데요. 이런 고민에 대한 최대한 적절한 답을 찾을수 있도록 안내하는 것이 주요 목표입니다.
이어지는 상세는 장고 프로젝트를 구성하는 여러 구성 요소들을 나열하고, 각 요소에 기대하는 역할과 특징에 대해 설명합니다.
Rationale
장고 프로젝트는 잘 작성된 개발 문서를 통해 원하는 프레임 워크를 활용하는데 필요한 부분을 잘 설명해주고 있습니다.
따라서 대부분의 프로젝트는 개발 문서에서 제공하는 기본적인 스타일 가이드에 따라 어렵지 않게 비즈니스의 요구사항을 관리할 수 있습니다.
하지만 저희들의 비즈니스의 형태와 규모가 지속적으로 변화함에 따라 장고의 기본적인 스타일 가이드로 관리하기에 어려운 지점들이 발생하기 시작되었습니다.
그래서 장고의 기본적인 스타일 가이드 이외에 추가적인 규칙들을 통해서 문제가되는 관리 지점들을 정리해야 할 필요가 있다고 판단했습니다.
이 제안을 통해 다음과 같은 긍정적인 변화를 얻을수 있을것을 기대합니다.
코드를 작성하는 위치에 대한 합의를 통한 개발 생산성 향상
서로 합의된 위치에 코드를 작성하게 되면, 코드 위치에 대한 불필요한 커뮤니케이션이 줄어듭니다.
비즈니스 코드를 찾을 일이 생겼을 때, 어떤 위치에 정의되어 있을지 쉽게 예상할 수 있게 됩니다.
테스트 방식의 구체화
모듈의 역할에 따라 테스트 방식과 범위를 합의하여 맞춰 일관된 방식으로 테스트를 할 수 있게됩니다.
Specification
App
장고 프로젝트 안에서 앱은 일반적으로 웹 서비스를 위한 하나의 독립적인 기능을 수행하곤 합니다.
따라서, 필요에 따라 장고의 앱은 쉽게 패키징 되어 다른 장고 프로젝트에 쉽게 재사용 될 수 있는 구조를 가집니다.
데이터베이스를 활용하면서 기존에 존재하지 않던 새로운 도메인을 설계하는경우 앱을 신규로 작성하는 것을 권장합니다.
현재 작성된 많은 앱은 이미 기능이 충분히 많고 도메인의 경계가 불분명한 경우가 많습니다. 이런 경우 새로운 기능을 위해 명확하게 앱을 분리하는것이 기존의 앱에 얹는것보다 좋은 선택이 될 수 있습니다.
Model
QuerySet
querysets.py
라는 모듈로 관리됩니다.Manager
managers.py
라는 모듈로 관리됩니다.UseCase
업무 규칙
의 의미로 활용하고 있습니다.Operation
operations
라는 모듈 혹은 패키지를 내부에 작성합니다.Service
API
저희 서비스는 Django Rest Framework 라이브러리를 활용하여 REST API 를 구현하고 있습니다.
라이브러리에서 제공하는 여러 기능들을 통해 편의성을 최대한 높이되, 업무 규칙들이 API 영역에 구현되는것은 지양합니다.
Serializer
API View
##Reference
https://docs.djangoproject.com/ko/4.0/misc/design-philosophies/
https://www.b-list.org/weblog/categories/django/
https://github.com/HackSoftware/Django-Styleguide
Beta Was this translation helpful? Give feedback.
All reactions