앞 단계 참조 링크:
- 상태 코드: 2024.03.26 - [Web 개발/FAST API (인프런 강의 내용)] - 1 FastAPI 알아보기
- 프로젝트 소개 및 환경 구축: 2024.04.05 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습1 GET API 전체조회
- 1 실습1 GET API ToDo 전체 조회: 2024.04.05 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습1 GET API 전체조회
- 1 실습2 GET API ToDo 단일 조회: 2024.04.09 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습2 GET API 단일조회
- 1 실습3 POST API ToDo 생성: 2024.04.15 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습3 POST API todo 생성
- 1 실습4 PATCH API ToDo 수정: 2024.04.16 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습4 PATCH API todo 수정
- 1 실습5 DELETE API ToDo 삭제: 2024.04.17 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습5 DELETE API todo 삭제
- 1 실습6 ERROR 처리: 2024.04.18 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습6 ERROR 처리
- 2 데이터베이스: 2024.04.24 - [Web 개발/FAST API (인프런 강의 내용)] - 2 데이터베이스
- 2 실습1 MySQL 컨테이너 실행 (docker): 2024.04.24 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습1 MySQL 컨테이너 실행 (docker)
- 2 실습2 MySQL 접속 및 사용: 2024.04.25 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습2 MySQL 접속 및 사용
- 2 실습3 데이터베이스 연결: 2024.04.25 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습3 데이터베이스 연결
- 2 실습4 ORM 모델링: 2024.05.02 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습4 ORM 모델링
- 2 실습5 ORM GET 전체조회 API: 2024.05.03 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습5 ORM 적용 - GET 전체조회 API
- 2 실습6 ORM HTTP Response 처리: 2024.05.10 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습6 ORM 적용 - HTTP Response 처리
- 2 실습7 ORM GET 단일조회 API: 2024.05.14 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습7 ORM 적용 - GET 단일조회 API
- 2 실습8 ORM Refactoring: 2024.06.01 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습8 ORM 적용 - Refactoring
- 2 실습9 ORM POST API: 2024.06.01 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습9 ORM 적용 - POST API
- 2 실습10 ORM PATCH API: 2024.06.01 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습10 ORM 적용 - PATCH API
- 2 실습11 ORM DELETE API: 2024.06.01 - [Web 개발/FAST API (인프런 강의 내용)] - 2 실습11 ORM 적용 - DELETE API
- 3 테스트 코드 PyTest: 2024.06.01 - [Web 개발/FAST API (인프런 강의 내용)] - 3 테스트 코드 PyTest
- 3 실습1 PyTest 세팅: 2024.07.22 - [Web 개발/FAST API (인프런 강의 내용)] - 3 실습1 PyTest 세팅
- 3 실습2 테스트 코드 GET 전체조회 API: 2024.08.01 - [Web 개발/FAST API (인프런 강의 내용)] - 3 실습2 테스트 코드 - GET 전체조회 API
- 3 실습3 테스트 코드 PyTest Mocking: 2024.08.02 - [Web 개발/FAST API (인프런 강의 내용)] - 3 실습3 테스트 코드 - PyTest Mocking
- 3 실습4 테스트 코드 PyTest Fixture: 2024.08.03 - [Web 개발/FAST API (인프런 강의 내용)] - 3 실습4 테스트 코드 - PyTest Fixture
- 3 실습5 테스트 코드 GET 단일조회 API: 2024.08.05 - [Web 개발/FAST API (인프런 강의 내용)] - 3 실습5 테스트 코드 - GET 단조회 APIsf
- 3 실습6 테스트 코드 POST API: 2024.08.05 - [Web 개발/FAST API (인프런 강의 내용)] - 3 실습6 테스트 코드 - POST API
- 3 실습7 테스트 코드 PATCH API: 2024.08.05 - [Web 개발/FAST API (인프런 강의 내용)] - 3 실습7 테스트 코드 - PATCH API
- 3 실습8 테스트 코드 DELETE API: 2024.08.07 - [Web 개발/FAST API (인프런 강의 내용)] - 3 실습8 테스트 코드 - DELETE API
- 4 실습1 Refactoring FastAPI Router: 2024.08.08 - [Web 개발/FAST API (인프런 강의 내용)] - 4 실습1 Refactoring - FastAPI Router
00 개요
01 의존성 주입이란
1. 정의 및 개념
- Dependency Injection
- 다양한 클래스나 함수 간의 강한 결합을 줄이기 위해 사용되는 기술
- 의존성을 사용하는 component가 직접 정하는 것이 아니라 외부에서 전달 (주입)
- Injector라고 불리는 별도의 모듈에서 관리
- 관련 용어
- coupling (결합): 강하게 결합된 component들은 수정과 변경이 어렵기에 컴퓨터 프로그래밍에서는 일반적으로 느슨한 결합 추구
- dependency (의존성): 한 component가 올바르게 동작하기 위해 다른 요소에 의존하는 것
- 예) 자동차가 굴러가기 위해 바퀴 필요 → 자동차는 바퀴에 의존적임
- 의존적이다 → 어떤 것을 사용한
- 즉, 의존성 주입이란, 어떤 component가 사용하는 다른 component를 외부에서 결정해주는 것을 의미
- 일반적으로 framework나 library 단에서 의존성 주입을 처리함
- 보통 injector라고 불리는 별도의 module 또는 component에 의해 의존성 주입이 처리됨
- FastAPI 역시 의존성 주입을 지원함
- 우리가 전에 사용했던 Depends (api/todos.py에서 사용)가 API에서 사용되어야 하는 의존성을 주입해주게 됨
2. 코드 예시
1) Before 의존성 주입
class Body:
def __init__(self, color):
self.color = color
class Car:
def __init__(self):
self.body = Body(color='red')
def drive(self):
pass
red_car = Car()
- Dependenct Injection을 적용하기 전에는 이 body 속성 안에 red 색의 body가 이미 속성 안에 존재하게 됨
- Car()를 red_car에 저장하여 만들 경우 우리는 red 색의 body를 가진 자동차만 생성할 수 있음.
2) After 의존성 주입
class Body:
def __init__(self, color):
self.color = color
class Car:
def __init__(self, body): # 의존성 적용
self.body = body
def drive(self):
pass
red_car = Car(body=Body(color='red'))
blue_car = Car(body=Body(color='blue'))
- 그러나, Dependenct Injection을 적용하면 Car 부분에서 body를 직접 생성하는 것이 아니라 인자로서 전달을 받게 됨
- 이런 경우 Car() 생성 시 body의 색상을 지정해 줌에 따라 red, blue, 및 다른 자유롭게 Car()의 body 색상을 변경할 수 있게 됨
- 그러므로 의존성 주입을 사용한다는 의미는, 객체가 생성되는 시점에 외부에서 어떤 속성들을 지정해준다는 의미
'Web 개발 > FAST API (인프런 강의 내용)' 카테고리의 다른 글
5 기능 고도화 SQL JOIN (0) | 2024.08.11 |
---|---|
4 실습3 Refactoring - Repository Pattern 레포지토리 패 (0) | 2024.08.08 |
4 실습1 Refactoring - FastAPI Router (0) | 2024.08.08 |
3 실습8 테스트 코드 - DELETE API (0) | 2024.08.07 |
3 실습7 테스트 코드 - PATCH API (0) | 2024.08.05 |