인프런 커뮤니티 질문&답변

김재홍님의 프로필 이미지

작성한 질문수

실전! Django 활용

상품 주문(Order)

urls.py 파일에 작성한 코드 분리 여부

작성

·

64

0

안녕하세요. 정말 강의 재밌게 잘 듣고 있습니다.

들으면서 궁금한 부분이 있어 질문드립니다.

/orders API를 예시로 들었을 때, urls.py 파일에 모든 코드가 작성되는데, 쿼리나 비즈니스 로직을 따로 분리하는 방식은 파이썬 프레임워크에서는 잘 사용하지 않는 방법인가요?

 

일반적으로 스프링에서는 service와 respository 클래스로 해당 코드를 분리하는 편이어서 이 차이점이 궁금합니다.

답변 2

1

신동현님의 프로필 이미지
신동현
지식공유자

안녕하세요! 재밌게 들어주셔서 감사합니다 😄 파이썬에도 프로젝트가 커지면 service나 repository를 분리합니다. 다만 예시 프로젝트에서는 비지니스 로직이 복잡하지 않아서 따로 계층을 분리를 하지 않았습니다. 가장 마지막 강의에 매우 간단하게 service layer를 분리하는 강의가 있습니다.

김재홍님의 프로필 이미지
김재홍
질문자

네, 강의 잘 들었습니다.

해당 강의 듣다가 또 궁금한 부분이 생겨서 질문드립니다.

 

서비스 클래스 내 함수를 모두 staticmethod로 선언하셨는데, 해당 클래스를 인스턴스화 해서 함수에 접근하게 하신 다른 이유가 있을까요?

 

강의 초반에 AuthenticationService에서 관련 부분 언급을 좀 해주셨는데, 여기서는 encode_token을 self 메서드로 선언해서 인스턴스화를 해야 함을 알고 있는데, 위의 서비스 클래스는 그런 함수가 없어서요.

신동현님의 프로필 이미지
신동현
지식공유자

도메인 별로 비지니스 로직끼리 하나의 클래스 안에 묶어서 코드 응집력 있게 관리하기 위해서 서비스 클래스의 메소드로 모두 구현하였습니다. 현재 구현에서는 서비스 클래스 내부 의존성이 없어서 전부 staticmethod로 구현되어 있는데요. 이 부분은 프로젝트가 복잡해지고 의존성이 생기면 인스턴스 메소드로 변경될 수도 있습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김재홍님.

Django에서도 마찬가지로 비즈니스 로직과 데이터 접근 로직을 분리하는 것이 좋은 프랙티스입니다. Django 프로젝트에서도 이런 목적으로 views, services, repositories나 models(FOR: File Organization by Responsibility)로 코드를 나누는 방법을 많이 사용합니다. 이에 대해 더욱 자세히 알아볼 수 있는 몇 가지 유사한 질문과 답변을 제공드립니다.

  1. DI 주입
  2. api 데이터 모델링 시, pandantic?

간단한 설명 추가:
- urls.py 파일은 주로 URL 라우팅을 담당하며, 쿼리와 비즈니스 로직은 views.py나 특정 비즈니스 로직을 담는 services.py, 데이터 접근 로직을 담는 repositories.py로 분리하여 관리하는 것이 좋습니다.
- Django에서는 views.py 파일에 비즈니스 로직을 담고, 이러한 로직이 복잡해질 경우 별도의 services.py 파일로 옮겨서 관심사를 분리할 수 있습니다.
- 데이터 접근 로직은 Django의 모델로 구현될 수 있으며, 이를 보다 추상화하기 위해 repositories.py 파일로 분리하여 사용할 수도 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.