inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! FastAPI 입문

(실습) 회원가입 API 구현

Service를 Depends 사용하는 것에 대해 질문이 있습니다.

해결된 질문

453

김동현

작성한 질문수 1

0

python 리팩토링 orm FastAPI pytest

답변 1

1

신동현

안녕하세요! 매우 합리적인 고민입니다.

먼저 이해하고 계신대로 Depends()에 클래스를 전달하면 요청마다 객체를 생성하고 삭제합니다. 객체의 불필요한 생성과 삭제 과정의 메모리 사용을 최적화하고 싶다면, 싱글톤 형태로 구현하시면 됩니다!

대신 싱글톤 패턴을 적용했을 때는 프로젝트에 필요한 모든 객체를 미리 만들어두는 것이 불필요한 메모리 낭비라고 생각할 수도 있을 것 같습니다. 따라서 이 부분은 명확한 정답이 있기 보다는 각 방식의 장단점을 고려해서 결정하시면 될 것 같습니다.

Dependency Injection을 적용하는 것은 꼭 테스트를 용이하기 위해서만 사용하는 것은 아닙니다. DI를 적용하면 큰 프로젝트를 관리할 때 조금 더 유연하게 의존성 관리를 할 수 있습니다.

현재 코드에서는 DI를 적용하는 것의 효과가 크게 와닿지 않으실 수 있는데요. 만약 UserService 객체가 instantiate 되기 위해 여러 개의 인자를 필요로 한다고 가정했을 때, 해당 클래스를 사용하는 router 마다 직접 객체를 생성하면 인자가 변경되었을 때 이를 수정하는 것이 매우 번거로워집니다. 그래서 이런 경우에 객체를 생성하는 부분과 주입하는 부분을 분리해놓게 되면, 훨씬 유연하게 의존성을 관리할 수 있습니다.

대신 앞서 생각하고 계신대로 싱글톤 패턴을 적용하면 인자가 변경되는 것은 크게 필요 없는 고민일 수도 있습니다. 하지만 싱글톤이라 할지라도 객체를 생성하는 부분과 주입하는 부분이 분리되어 있다면 이는 DI를 적용했다고 볼 수 있습니다.

큰 프로젝트에 DI를 적용할 때는 아래의 라이브러리를 함께 사용하고 있으니, 한 번 참고해보시면 좋을 것 같습니다! https://python-dependency-injector.ets-labs.org/index.html

1

김동현

너무 좋은 답변 감사드립니다 ㅠㅠ.

말씀하신 문서 찾아서 공부하겠습니다.

감사합니다.

FasAPI Swagger UI에서 단일조회 todo_id 를 사용했는데, 입력값에 1을 넣으니 오류가 뜹니다 ㅠ

0

87

2

DB 질문

0

81

2

Post API 강의 질문

0

55

2

post 작성 오류

0

107

3

uvicorn 종료 문제

0

436

2

왜 return타입이 ToDo라는 스트링인가요?

0

130

2

ORM 연관관계

0

109

2

Oracle DB 연결과 관련해 질문이 있습니다..

0

153

2

섹션 2, 3의 PATCH API의 차이점

0

132

1

ORM 테이블 생성

0

119

1

테스트 코드 오류

0

177

1

orm relationship 정의 중 해당 에러 발생 시 어떻게 고쳐야 하는걸까요

0

214

3

FastAPI 폴더 구조에 대해 질문이 있습니다.

0

412

2

질문 있습니다.

0

161

2

ORM 개념

0

133

1

mysql root 비밀번호 변경관련

0

296

2

[질문] patch API

0

151

3

디자인 패턴

0

128

1

main.py 리로드문제

0

235

2

인터프리터 오류

0

286

4

로그 저장에 대한 질문입니다.

0

100

1

Internal Server Error

0

240

2

PATCH API - 수정

0

199

2

파이참 임포트 문제

0

263

1