인프런 커뮤니티 질문&답변
FastAPI 폴더 구조에 대해 질문이 있습니다.
해결된 질문
작성
·
291
0
안녕하세요. FastAPI 프로젝트의 폴더 구조에 대해서 궁금한 점이 생겨서 질문 드립니다.
처음에는 라우터에 모든 로직을 넣어서 라우터와 Repository만 분리해서 개발을 하다가, 3 레이어드 아키텍처로 분리를 좀 해볼까 생각이 들었습니다.
controller, service, repository 이렇게 나누어 보려고 하는데요. 예를들어 user, board와 같은 도메인이 있다고 하면, 각 폴더를 도메인별로 나누어서 구조를 잡는게 좋을까요? 아니면, controller 폴더 안에 user_controller.py, board_controller.py 등의 파일들이 모여있는게 좋을까요?
선생님께서는 실무에서 어떻게 폴더 구조를 가져가시는지도 궁금합니다.
감사합니다.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. 뱅준님.
FastAPI와 같은 백엔드 프레임워크에서는 일반적으로 코드의 유지보수성, 확장성을 고려하여 폴더 구조를 설계합니다. 3 레이어드 아키텍처(controller, service, repository)로 분리하는 것은 좋은 선택입니다. 도메인별로 폴더를 나누는 방법과, controller/service/repository 등 레이어별로 나누는 방법 모두 각각의 장단점이 있으므로 다음과 같이 설명드릴 수 있습니다.
도메인별 분리:
- user, board와 같은 도메인별로 폴더를 나누는 경우, 각 도메인에 관련된 모든 레이어(controller, service, repository 등)가 하나의 폴더에 모여 있어 관련된 코드를 찾기 쉽다는 장점이 있습니다.
- 장점: 각 도메인의 코드가 한 곳에 모여 있어 응집성이 높아지고, 필요한 기능을 추가하거나 수정하기가 용이합니다.
- 단점: 동일한 레이어의 코드가 여러 폴더에 분산되어 있어, 특정 레이어의 구현 방식을 한눈에 파악하기 어려울 수 있습니다.
- user, board와 같은 도메인별로 폴더를 나누는 경우, 각 도메인에 관련된 모든 레이어(controller, service, repository 등)가 하나의 폴더에 모여 있어 관련된 코드를 찾기 쉽다는 장점이 있습니다.
레이어별 분리:
- controller, service, repository 폴더를 각각 분리하여, 내부에 user_controller.py, user_service.py와 같은 형식으로 파일을 두는 방법입니다.
- 장점: 같은 레이어의 로직을 한 곳에 모아둠으로써, 공통적으로 사용되는 로직이나 규칙을 파악하기 용이합니다.
- 단점: 특정 도메인(feature)에 대한 전체 흐름을 파악하기 위해 여러 폴더를 넘나들어야 할 수 있습니다.
- controller, service, repository 폴더를 각각 분리하여, 내부에 user_controller.py, user_service.py와 같은 형식으로 파일을 두는 방법입니다.
실무에서는 프로젝트의 요구사항, 팀의 선호도, 프로젝트 규모에 따라 다르게 접근할 수 있습니다.
- 소규모 프로젝트: 일반적으로 레이어별 구조가 관리하기 쉽습니다.
- 대규모 프로젝트: 복잡도가 높기 때문에 도메인별 구조가 보다 유지보수가 용이할 수 있습니다.
관련된 유사 질문에 대한 답변을 참고하실 수 있도록 몇 가지 링크를 드립니다:
- api 데이터 모델링 시, pandantic? - FastAPI의 데이터 모델링에 대해 논의된 글입니다.
- DI 주입 - FastAPI에서의 의존성 주입(Dependency Injection)에 대해 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






감사합니다. 추가로 질문이 있는데요. 도메인에 대한 정의는 어떻게 하는게 좋을까요? 다루는 모델? 컨트롤 하고자 하는 주체?
이전에는 다루는 모델을 도메인으로 정의했는데, 폴더가 너무 많아져서 복잡해지더라구요.