[Spring] DI, IoC 컨테이너, 스프링 계층구조

DI, IoC 컨테이너, 스프링 계층구조

스파르타 코딩 클럽의 Spring 심화반 1주 차 내용인 DI, IoC 컨테이너, 스프링 계층구조을 정리한다.

핵심 내용

  • 스프링의 핵심 개념인 DI와 스프링 IoC 컨테이너의 개념

  • 스프링의 Controller, Service, Repository의 필요성

DI, IoC

중복 코드와 강한 결합을 해결하기 위한 두 가지 방법

DI (의존성 주입)

객체가 필요한 상태에서는 보통 객체를 직접 생성한다.
이때, 객체를 직접 생성하지 않고 이미 생성되어 있는 객체를 가져오는 작업을 의존성 주입(DI: Dependency Injection)라고 부른다.

IOC (제어의 역전)

의존성 주입에서는 사용자가 필요한 객체를 직접 생성하지 않고, 이미 생성되어 있는 객체를 가져왔다.
이때 객체를 사용하는 사용자는 자신이 가져온 객체를 어디서, 어떠한 방식으로 만들어졌는지 알 필요 없이 필요한 객체를 가져다 쓸 수 있다.
이처럼 객체에 대한 제어를 하는 흐름이 뒤바뀐다고 하여 이러한 상황을 제어의 역전(IoC: Inversion of Control)이라고 부른다.
스프링에서는 스프링 프레임워크가 스프링이 생성해 주는 객체인 Bean을 스프링 IoC 컨테이너에 모아서 제어의 역전 역할을 해준다.

Controller, Service, Repository

객체지향

  • 절차적 프로그래밍 : 프로그램이 처리할 내용을 쭈욱 나열해 놓은 코딩 방식

  • 객체지향 프로그래밍 : 하나의 사물(객체)에 하나의 의미를 부여하듯 한 번에 하나의 역할을 수행(주제별로 정리) 하는 객체를 만들어 프로그래밍을 함

스프링은 객체지향 설계 원칙을 잘 준수하여 설계되었고, 서버에서의 처리를 Controller, Service, Repository 3개로 분리하여 각각의 역할을 수행하게 설계되었다.

Controller

  • 클라이언트의 요청을 받는다. (요청 Body의 JSON을 자바 객체로 바꿔준다.)

  • 요청에 대한 처리는 서비스에게 전담한다. (3계층의 Service)

  • 클라이언트에게 응답해 준다. (자바 객체를 JSON으로 변환해 준다.)

Service

  • 비즈니스 로직(사용자의 요구 사항을 서버에서 처리하는 것)을 담당한다. (ex. 요청받은 DTO를 통해 DB에 저장할 객체를 만드는 것)

  • DB가 필요한 역할은 3계층 중 Repository에게 전담한다.

Repositroy

  • DB의 연결, 해제, 자원을 관리한다.

  • DB의 CRUD(Create, Read, Update, Delete) 작업을 처리한다.