정의
“내가 흐름을 직접 호출하는 구조에서, 프레임워크가 내 코드를 호출하는 구조로 바뀌는 것”입니다.
그래서 프레임워크가 제공하는 규칙(라이프사이클, 확장 지점)에 코드를 “끼워 넣는” 방식이 됩니다.
“IoC는 ‘코드를 맡기는 것’이 아니라,
흐름을 표준화하고 변경을 확장 지점에 가두는 방식이다.”
핵심 개념
IoC는 “DI만의 이야기”가 아니라 더 넓은 개념입니다. 예를 들어 프레임워크가 제공하는 요청 처리 흐름(라우팅 → 필터/인터셉터 → 핸들러 → 예외 처리) 속에서, 개발자는 정해진 위치에 콜백/핸들러를 등록하는 방식으로 확장합니다.
DI와 관계
IoC는 “제어권이 누구에게 있나”라는 원칙이고, DI는 그 원칙을 코드에서 구현하기 위한 기술(패턴)입니다. 그래서 “IoC = DI”는 아니지만, 실무에서는 DI를 통해 IoC를 체감하는 경우가 가장 많습니다.
동작 흐름
장점
- ✔️ 인증/로깅/예외 처리 같은 공통 기능을 “흐름에 끼워 넣는” 표준 방식 제공
- ✔️ 확장 지점 중심으로 변경을 격리(핵심 로직의 파급 감소)
- ✔️ 테스트/대체가 쉬워짐(의존성 역전 + DI가 결합될 때 효과 극대화)
주의점
IoC 환경에서는 호출이 “내 코드 밖에서” 들어오므로, 처음에는 흐름 추적이 어렵습니다. 따라서 프레임워크의 라이프사이클, 확장 지점, 예외 흐름(에러 핸들링)을 이해하지 못하면 문제 해결 시간이 길어질 수 있습니다.
💡 TIP / 접근 방법
IoC를 공부할 때는 “DI부터”가 아니라, 요청 흐름(어디서 들어와서 어디로 가는지)를 먼저 그리면 훨씬 빠르게 이해됩니다.
실무 체크
- ✔️ 요청/이벤트 흐름에서 “내 코드가 언제 호출되는지” 설명할 수 있는가?
- ✔️ 확장 지점(필터/인터셉터/리스너/빈 후처리)을 구분할 수 있는가?
- ✔️ 공통 관심사(보안/로깅/트랜잭션)를 흐름에 “일관되게” 붙이고 있는가?
핵심 요약
✅ 핵심 요약
- ✔️ IoC는 실행 흐름의 제어권이 개발자 코드에서 프레임워크/컨테이너로 이동하는 원칙이다.
- ✔️ DI는 IoC를 구현하는 대표 방법이며, IoC 자체는 더 넓은 개념(콜백/템플릿/이벤트 포함)이다.
- ✔️ 장점은 표준 흐름/공통 관심사 적용, 단점은 흐름 추적 난이도 → 라이프사이클/확장 지점 이해가 핵심이다.