[Spring Boot] 스프링 부트를 사용하는 이유

안승섭·2022년 4월 13일
1

Spring Boot

목록 보기
1/3

왜 스프링 부트인가?

우리가 알고있는 웹 프레임워크는 여러가지가 있다. Java의 Spring, Node.js의 Express, Python의 Django... Spring을 선택한 이유는 POJO기반의 구성과 DI 등이 매력적으로 다가왔고 이를 바탕으로 프로젝트를 시작했다.

Spring vs Spring Boot

Spring Boot는 Spring의 복잡한 환경설정을 개발자가 일일이 설정하는데 어려움이 있어 이를 개선하고자 spring-boot-starter 옵션을 사용해 보다 쉽게 사용할 수 있도록 한다.

POJO?

POJO(Plain Old Java Object)란 이름만 들었을 때는 오래되고 간단한 자바 객체?라는 생각이 들었는데 그속에 담긴 의미는 Java언어 외에 어떤 라이브러리나 기술에 의존하지 않아서 개발자가 일반적인 Java코드를 사용하는 방식대로 구현할 수 있다는 장점이 있다.

DI?

DI(의존성 주입)을 알아보기 앞서 IoC(제어의 역전)에 대해 알아야 한다. IoC란 개발자가 객체를 관리하는 것이 아닌 프레임워크가 객체의 생성부터 소멸까지 관리하는 것을 말한다. Spring에서는 DI를 활용해 외부에서 객체의 관계를 결정해 주어서 의존관계가 고정되지 않아 유연성을 확보하고 결합도를 낮출 수 있게 해준다.

예를 들어 생각을 해보자. 필자는 여행을 가려고 가방을 싸려는 상황이다. 옷을 챙기고, 간식도 챙기고, 신발도 챙길 것이다. 근데 필자가 여행광이어서 때에 따라서 더운 남미로 여행갈 수도 있고, 추운 알래스카로도 여행을 갈 수 있다. 어떤 여행지에서는 반팔티, 샌들... 등을 챙기다가 다시 패딩, 부츠... 이런 식으로 여행지를 변경할 때마다 새로운 짐을 싸야한다.

(물론 이렇게 스스로 할 수 있지만...)

그런데 새로 산 여행가방이 매우 스마트해서 옷(타입 또는 인터페이스)이라는 분류만 맞으면 여행지에 따라서 자동으로 짐을 싸주는 것이다. 이 시점에서 짐을 관리하는 일은 필자가 아닌 여행가방이 대신 해주는 것이다.

이렇게 의존성 주입은 의존성을 관리하는 일을 외부에 넘겨 주었기에 일종의 IoC로 볼 수 있는 것이다.

How To

그렇다면 어떻게 의존성 주입을 할 수 있을까? @Autowired라는 어노테이션을 통해 3가지 방법으로 의존성 주입을 할 수 있다.

  1. 생성자 주입

생성자 주입 방식은 권장되는 방식으로 생성자 호출시점에 1회 호출 되는 것이 보장된다. 필수적으로 사용하는 매개변수 없이는 인스턴스를 만들 수 없기에 반드시 객체의 주입이 필요한 경우에 강제하기 위해 사용할 수 있다.

@Controller
class Controller{

	private final Repository repository;
    
    @Autowired
    public Controller(Repository repository){
    	this.repository = repository;
    }
}

위의 코드에서 repository없이는 Controller를 만들 수 없다. 또한 생성자 주입은 순환 참조를 예방해준다. 이는 생성자 주입이 객체를 생성할 때 다른 방식과 다르게 의존 객체의 null 여부를 검사하는데 이때 순환참조가 발생한다면 컴파일 단계에서 예외를 던지며 실행되지 않는다.

  1. 수정자(setter) 주입
@Controller
class Controller{

	private Repository repository;
    
    @Autowired
    public void setRepository(Repository repository){
    	this.repository = repository;
    }
}

수정자 주입 방식은 우선 객체를 생성하고 그 후에 인자에 사용하는 객체를 찾거나 만든다. 그 이후에 주입하려는 빈 객체의 수정자를 호출하여 주입한다. 주입받는 객체가 변경될 가능성이 있는 경우에 사용한다.

  1. 필드 주입
@Controller
class Controller{
	
   @Autowired
	private Repository repository;
   
}

수정자 주입 방법과 동일하게 먼저 빈을 생성한 후에 어노테이션이 붙은 필드에 해당하는 빈을 찾아서 주입하는 방법이다.








참고 - 망나니개발자
예제로 배우는 스프링부트 입문

profile
Just Do It!

0개의 댓글