개발 지식 기록/북스터디

[스프링 부트 핵심 가이드] 01. 스프링 부트란?

엉망진창좌충우돌 2023. 8. 27. 18:18

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다.

저자 : 장정우

출판사 : 위키북스


1.1 스프링 프레임워크

 

 

스프링 프레임워크란?

 

자바 언어를 이용해 엔터프라이즈급 개발(기업 환경을 대상으로 하는 개발)을 편리하게 만들어주는 오픈소스 경량급 애플리케이션 프레임워크.

스프링이 애플리케이션 개발에 필요한 기반을 제공해 주기 때문에 개발자는 비즈니스 로직 구현에만 집중할 수 있다.

 

 

스프링의 특징

 

1.1.1 제어역전(IoC ; Inversion of Control)

사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부(스프링 컨테이너 혹은 IoC컨테이너)에 위임한다.

즉 객체의 관리를 컨테이너에게 맡겨 제어권이 넘어간 것을 제어역전이라 한다.

이를 통해 의존성 주입, 관점 지향 프로그래밍 등이 가능해진다.

 

1.1.2 의존성 주입(DI; Dependency Injection)

사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미한다.

 

스프링에서 의존성을 주입받는 방법

생성자를 통한 의존성 주입

필드 객체 선언을 통한 의존성 주입

setter 메서드를 통한 의존성 주입

 

@Autowired 이노테이션을 통해 의존성을 주입할 수 있다. (스프링 4.3 이후부터는 @Autowired 이노테이션 생략 가능)

 

 생성자를 통한 의존성 주입

@RestController
public class DIController {

    MyService myService;

    @Autowired
    public DIController(MyService myService) {
        this.myService = myService;
    }
}

 

 필드 객체 선언을 통한 의존성 주입

@RestController
public class FieldInjectionController {

    @Autowired
    private MyService myService;

}

 

 setter 메서드를 통한 의존성 주입

@RestController
public class SetterInjectionController {

    MyService myService;

    @Autowired
    public void setMyService(MyService myService) {
        this.myService = myService;
    }

}

 

스프링 공식문서에서는 생성자를 통한 의존성 주입을 권장한다. 레퍼런스 객체 없이는 객체를 초기화 할 수 없게 설계할 수 있기 때문

 

1.1.3 관점 지향 프로그래밍(AOP; Aspect-Oriented-Programming)

관점을 기준으로 묶어 개발하는 방식.

※ 관점 : 기능을 '핵심 기능'(비즈니스 로직이 처리하려는 목적 기능)과 '부가 기능'으로 구분해 각각을 하나의 관점으로 보는 것.

출처 : https://itwiki.kr/w/%EA%B4%80%EC%A0%90_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식이 AOP이다.

스프링에서는 Proxy 패턴을 이용해 AOP 기능을 제공한다.

 

1.1.4 스프링 프레임워크의 다양한 모듈

스프링 프레임워크는 20여개의 모듈로 구성되어 있다.

출처 : https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/overview.html

개발에 필요한 모듈만 선택해서 사용하게 되어있으며, 이를 경량 컨테이너 설계라고 한다.

 

 

1.2  스프링 프레임워크 vs 스프링 부트

 

모듈을 추가하면서 설정이 복잡해지는 문제를 해결하기 위해 등장한 것이 스프링 부트(Spring Boot)

 

 

스프링 부트의 특징

 

1.2.1 의존성 관리

모듈의 의존성을 직접 설정해야 했던 스프링 프레임워크는 버전의 호환성 등을 고려해야 하는 등 불편함이 있었고, 이를 해결하기 위해 스프링 부트는 'spring-boot-starter'라는 의존성을 제공한다. 

 'spring-boot-starter'는 각 라이브러리 기능과 관련해서 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공하고, 이를 통해 라이브러리 호환 문제를 해결할 수 있다.

 

1.2.2 자동 설정

스프링 프레임워크 기능을 사용하기 위한 자동 설정(Auto Configuration)을 지원한다.

애플리케이션을 개발하는 데 필요한 의존성을 추가하면 자동으로 관리해준다.

 

1.2.3 내장 WAS

스프링 부트의 각 웹 애플리케이션에는 내장 WAS가 존재한다. 'spring-boot-starter-web'의 경우 톰캣을 내장한다.

자동 설정 기능은 톰캣에도 적용되므로 특별한 설정 없이도 톰캣을 실행할 수 있다.

필요에 따라 다른 웹서버로 대체도 가능하다.

 

1.2.4 모니터링

스프링 부트에는 'Spring Boot Acuator'라는 자체 모니터링 도구가 존재한다.