작성
·
603
0
안녕하세요 강사님. 스프링과 장고의 샘플코드 비교해주신 부분에서 질문이 있어서 남겨봅니다.
샘플코드를 보았을 때, 장고 코드에서는 뷰에서만 서비스의 일부 기능을 담당한다고 되어있는데요. 만약 비즈니스 로직이 커질 경우, 서비스와 컨트롤러가 나뉘어져있는 스프링쪽이 좀더 관리가 용이할 수 있을거 같다는 생각이 들었습니다.
비즈니스 로직이 비대해졌을 때 장고에서는 일반적으로 이 코드를 어디서 관리하는지 질문 드리고 싶습니다. 기존의 컨트롤러와 엔티티로서의 기능을 담당하고 있는 View와 Model로 분산해서 로직을 작성하게 될까요?? 아니면 별도로 service.py같은 파일을 생성해서 관리를 하는게 좋을까요? 강사님 의견이 궁금합니다.
답변 2
2
안녕하세요.
"No Silver Bullet" 이라는 말이 있듯이, 컨트롤러/서비스/저장소도 하나의 선택지일 뿐이라고 생각합니다. 정답은 없고, 어떤 선택지에나 장단점이 있고 Trade off가 존재하겠죠.
장고는 Active Record 패턴을 사용하기에 비즈니스 로직을 모델 쪽에 구현합니다. 뷰는 비즈니스 로직이 아닌 요청 처리를 담당합니다. 스프링의 Repository Layer는 저장소의 책임 만을 가지기에 Service Layer에서 비즈니스 로직을 담당할 수 밖에 없다고 생각합니다.
결국 각 언어/프레임워크가 가진 특성으로 인해 약간의 아키텍처 차이는 있지만, 결국 비슷한 모양새라고 느끼고 있습니다.
그리고 DDD를 질문하시는 것이라면 장고에서의 DDD에 대해서는 저도 연구 중에 있습니다. 저는 아직 DDD를 정확히 알지는 못하거든요. 파이썬에서의 DDD에 대해서는 아래 책이 도움이 되실 수 있구요.
http://www.yes24.com/Product/Goods/101818336
FastAPI 사용을 고민해보고 계시다면, django-ninja 라이브러리도 검토해보시면 장고 내에서 FastAPI와 유사한 개발경험을 얻으실 수 있습니다.
화이팅입니다. :-)
0
아래 세션과 자료를 참고해보시면 좋으실 듯 합니다.
(EuroPython 2018) Django structure for scale and longevity
https://github.com/HackSoftware/Django-Styleguide