Backend

[Spring Boot] 01. Spring Boot란?

jini_11 2022. 8. 27. 17:21
728x90

1. 스프링 프레임워크(Spring Framework) = 스프링(Spring)

자바 기반의 애플리케이션 프레임워크이다.

엔터프라이즈급 개발을 편리하게 만들어주는 '오픈소스 경량급 애플리케이션 프레임워크'이다.

 

자바로 애플리케이션을 개발하는 데 필요한 기능을 제공하고 쉽게 사용하도록 돕는 도구

 

스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그 중 하나가 스프링 부트(Spring Boot)이다.

 

+ 엔터프라이즈급 개발: 기업 환경을 대상으로 하는 개발을 의미하며, 대규모 데이터를 처리하는 환경을 의미한다.

 

 

1.1 제어 역전(IoC: Inversion of Control)

사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부(Spring Container, IoC Container)에 위임한다.

=> 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 의미한다. 개발자는 비즈니스 로직을 작성하는 데 더 집중할 수 있다.

 

제어 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능해진다.

 

 

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

제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미한다.

 

-의존성을 주입받는 방법

(1) 생성자를 통한 의존성 주입 => 권장!

다른 방식과는 다르게 래퍼런스 객체 없이는 객체를 초기화할 수 없게 설계할 수 있기 때문에 권장된다.

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

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

 

스프링에서는 @Autowired 어노테이션을 통해 의존성을 주입할 수 있다.

 

 

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

스프링의 아주 중요한 특징으로, 관점을 기준으로 묶어 개발하는 방식을 의미한다.

"관점": 핵심 기능(목적 기능), 부가 기능을 구분해 각각을 하나의 관점으로 보는 것을 의미한다.

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

 

-AOP 구현 방식

(1) 컴파일 과정에 삽입하는 방식

(2) 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식

(3) 프락시 패턴을 이용한 방식 => 스프링 제공

 

AOP의 목적은 OOP와 마찬가지로 모듈화해서 재사용 가능한 구성을 만드는 것이다. 모듈화된 객체를 편하게 적용할 수 있게 함으로써 개발자가 비즈니스 로직을 구현하는 데만 집중할 수 있도록 돕는다.

하지만 AOP는 OOP의 대체 개념이 아니다. OOP는 각 기능을 재사용 가능한 개별 객체로 구성해 프로그래밍하는 것을 의미하며, AOP는 OOP를 더욱 잘 사용하도록 돕는 개념으로 보는 것이 좋다.

 

 

2. 스프링 프레임워크 VS 스프링 부트

스프링 프레임워크는 기존 개발 방식의 문제와 한계를 극복하기 위해 다양한 기능을 제공한다. 하지만 기능이 많은 만큼 필요한 모듈을 추가하다 보면 설정이 복잡하다는 단점이 있다. 이것을 해결하기 위해 등장한 것이 스프링 부트이다.

 

 

2.1 의존성 관리

(1) 스프링 프레임워크

각 모듈의 의존성 직접 설정하고, 버전을 명시해야 정상 동작한다.

 

(2) 스프링 부트

'spring-boot-starter'라는 의존성을 제공한다. 

- spring-boot-starter 라이브러리: spring-boot-starter-web, spring-boot-starter-test, spring-boot-starter-jdbc, spring-boot-starter-security 등등

 

 

2.2 자동 설정(Auto Configuration)

스프링 부트는 자동 설정을 지원한다. 자동 설정은 애플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 알아서 찾아줍니다. 즉, 애플리케이션을 개발하는 데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리해준다.

 

ex) @SpringBootApplication = @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan

 

 

2.3 내장 WAS(Web Application Server)

스프링 부트의 각 웹 애플리케이션에는 내장 WAS가 존재한다. 스프링 부트의 자동 설정 기능은 톰캣에도 적용되기 때문에 특별한 설정 없이 실행할 수 있다.

 

 

2.4 모니터링

스프링 부트에는 스프링 부트 액추에이터(Spring Boot Actuator)라는 자체 모니터링 도구가 있어 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링할 수 있다.

 

 

 

출처: 스프링 부트 핵심가이드

728x90