38일차 TIL 스프링 모듈과 IoC , DI

김성훈·2021년 11월 10일
2

SPRING

목록 보기
5/12
post-thumbnail

👓스프링 모듈👓

스프링 프레임워크는 약 20개의 모듈로 구조화된 특징으로 이루어져 있다. 이러한 모듈들은 다음 다이어그램에 보이듯 코어 컨테이너(코어 스프링), 데이터 접근/통합, 웹, AOP(관점지향 프로그래밍), 인스트루멘테이션(Instrumentation), 테스트로 그룹을 나눌 수 있다.

이를 좀 간단한 구조로 만들면


이렇게 총 6개의 주요 모듈로 나눌 수 있다. JEE를 제외한 각각의 모듈에 대한 대략적인 설명은 아래와 같다.

모듈설명
CoreIoC와 DI 기능을 제공한다.
JEE(Java Enterprise Edition)플랫폼으로 웹 프로그래밍에 필요한 기능을 다수 포함한다
DAO이름에서 알 수 있듯, JDBC 추상계층을 제공한다.
ORMJPA와 같은 ORM API를 적용할 수 있는 기능을 제공한다.
AOP관점지향프로그래밍을 말하며, 어떤 로직을 핵심 관점과 부가적 관점을 나눈 다음 이를 기준으로 모듈화하는 것이라고 한다
WebSpring Web MVC와 같이 웹 어플리케이션의 구현에 도움되는 기능을 제공한다. 대표적으로 서블릿, JSP 관련 기능이 여기에 속한다.

🕶 핵심이라 불리는 Core 모듈에서 제공되는 IoC & DI🕶

🌫IoC: 제어의 역전 (Inversion of Control)🌫

제어권이 뒤 바뀌었다는 뜻이다. 이말은 기존의 제어방식을 뒤집었다는 말이 된다.
스프링을 쓰기 이전까지 자바 기반의 개발은 개발자가 프로그램의 흐름을 직접 제어하는 과정의 연속이었다. 좀 더 쉽게 얘기하면 코드를 직접 개발자가 작성하고, 이를 통해 클래스의 인스턴스(ex. new를 통한 선언)를 선언하는 등의 과정이 모두 직접 수행된 것이다. 이를 객체의 생성주기를 개발자가 관리한다고 표현할 수 있다. 하지만 스프링을 사용하게 되면 프로그램의 흐름을 스프링 프레임워크가 주도하게 된다. 따라서 객체의 생성주기를 프레임워크가 관리하기 떄문에 이를 두고 '제어의 역전'(Inversion of Control)이라고 표현한다.

이렇게 넘어온 객체의 생명주기는 컨테이너(Container)라고 불리는 곳에서 관리된다. 위의 그림에서 알 수 있는 서블릿 컨테이너(ex. 톰캣)가 서블릿의 생명주기를 관리해주는 것이 바로 대표적인 컨테이너에 의한 관리의 예이다.

IoC 실행과정

1. 최초의 객체 생성
2. 의존성 객체의 주입 -> 제어권이 프레임워크에 위임되어 프레임워크에서 생성된 객체가 주입되는 것
3. 의존성 객체 메소드의 호출

장점

  • 프로그램의 수행과 구체적인 구현을 분리시킬 수 있다.
  • 여러가지 구현체들 사이의 변경이 용이하다.
  • 프로그램의 모듈성이 높아진다(모듈 간의 의존성이 낮아진다).

🌫DI: 의존성 주입(Dependency Injection)🌫

의존 관계 주입을 의미한며 객체 간의 의존 관계를 만드는 것이다.
SPring IoC 컨테이너의 구체적인 구현 방식, 스프링 프레임워크는 런타임시 사용할 객체들의 의존 관계를 부여해주고 객체 간의 결합도를 낮춰준다.

일반적인 애플리케이션 에서는 new 연산자를 사용해 의존 관리를 함

일반적인 애플리케이션과 달리 스프링 에서는 DI를 개발자가 직접 (new 연산자 활용) 하지 않고 DI 컨테이너가 대신 해줌. 이러한 개념은 스프링에서 “인스턴스를 제어하는 주도권이 역전 되었다” 라는 의미의 IOC(Inversion of Control) 라고도 함.

new 연산자를 사용하지 않고 Main이 이용하는 Service와 Service가 이용하는 DAO 인스턴스를 DI 컨테이너가 대신 생성 해주고 있음을 볼 수 있음, 또한 DAO 인스턴스를 Service에 의존관계 주입을 하고 있다라고 할 수 있다.

DI 주입 방법방법

장점

  • 클래스들 간 의존 관계를 최소화 할 수 있다.
  • 프로젝트 유지보수가 용이하다.
  • 클라이언트 코드의 변경 없이 기능 확장 가능.
  • 쉽게 부품을 교체하듯이 개발.

🌟프링 IoC 컨테이너와 Bean🌟
요것도 같이 보기

<출처>

파이의꿈 IoC,DI,Bean
[Spring 레퍼런스] 1장 스프링 프레임워크 소개 #1
[스프링] 스프링 모듈 구조
의존관계 주입(DI, Dependency Injection) 방법
[Spring] 3 - DI(Dependency Injection)
[Random Access Memories]

profile
"한 명이 걷는 천 걸음 보다 천 명이 함께 걷는 한 걸음이 성공의 시작이고 완성이다"

2개의 댓글

comment-user-thumbnail
2021년 11월 11일

DI & IoC를 위해 스프링에서 내부적으로 어떻게 동작하는지 궁금했는데, 덕분에 정리됐습니다! 감사합니다 👍

1개의 답글