반응형

#. Spring Framework의 다양한 모듈


Spring Framework는 기능별로 구분된 약 20여 개의 모듈로 구성되어 있습니다. 아래 그림은 스프링 공식문서에서 제공하는 다이어그램을 재구성한 것입니다.

Spring Framework 공식 문서에서는 Spring 버전 별로 다른 다이어그램을 제시하고 있지만 큰 틀은 유사합니다. 그리고 Spring Framework를 사용한다고 해서 모든 모듈을 사용할 필요는 없습니다. 애플리케이션 개발에 필요한 모듈만 선택해서 사용하게끔 설계되어 있으며, 이를 경량 컨테이너 설계라고 부릅니다.

 

#2. Spring Framework VS Spring Boot


앞에서 살펴본 것처럼 Spring Framework는 기존 개발 방식의 문제와 한계를 극복하기 위해서 다양한 기능을 제공합니다. 하지만 기능이 많은 만큼 필요한 모듈들을 추가하다 보면 설정이 복잡해지는 문제가 있습니다. 이러한 문제를 해결하기 위해 등장한 것이 스프링 부트(Spring Boot)입니다. Spring Boot 공식 사이트에는 다음과 같은 문구가 쓰여 있습니다.

Spring Boot make it easy to create stand-alone, production-grade Spring based Application that you can "just run".

 위 문구를 해석하면 "String Boot를 이용하면 단독으로 실행 가능한 상용 수준의 Spring 기반 애플리케이션을 을 쉽게 만들 수 있습니다." 즉, 별도의 복잡한 설정을 하지 않아도 Spring Boot를 사용하면 개발이 쉬워진다는 뜻입니다.

이어서 Spring Framework와 비교하였을 때 Spring Boot가 가진 특징을 알아보겠습니다.

 

의존성 관리

Spring Framework에서는 개발에 필요한 각 모듈의 의존성을 직접 설정해야 했습니다. 또 호환되는 버전을 명시해야 정상 동작합니다. 애플리케이션에서 사용하는 Spring Framework나 Library의 버전을 올리는 상황에서는 연관된 다른 Library의 버전까지도 고려해야 합니다.

하지만 Spring Boot에서는 이 같은 불편함을 해소하기 위해 'spring-boot-starter'라는 의존성을 제공합니다. spring-boot-starter의 의존성은 여러 종류가 있고, 각 Library의 기능과 관련해서 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공합니다. 이를 통해 개발자는 Libary 호환 문제를 해결할 수 있습니다. 

많이 사용하는 spring-boot-starter 라이브러리를 간략하게 소개하자면 다음과 같습니다.

- spring-boot-starter-web : Spring MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성입니다. 기본으로 내장 Tomcat이 포함되어 있어 jar 형식으로 실행 가능합니다.

- spring-boot-starter-test : JUnit, Jupiter, Mochito 등의 테스트용 Library를 포함합니다.

- spring-boot-starter-jdbc : HikariCP Connection Pool를 활용한 JDBC 기능을 제공합니다.

- spring-boot-starter-security : Spring Security(인증, 권한, 인가 등 기능을 제공합니다.

- spring-boot-starter-data-jpa : 하이버네이트를 활용한 JPA 기능을 제공합니다.

- spring-boot-starter-cache : Spring Framework의 캐시 기능을 제공합니다.

▶'spring-boot-starter'의 여러 라이브러리를 함께 사용할 때는 의존성이 겹칠 수 있습니다. 이로 인해 버전 충돌이 발생할 수 있는데, 의존성 조합 충돌 문제가 없도록 '- spring-boot-starter-parent'가 검증된 조합을 제공합니다.

 

자동 설정

Spring Boot는 Spring Framework의 기능을 사용하기 위한 자동 설정(Auto Configuration)을 지원합니다. 자동 설정은 애플리케이션에 추가된 Library를 실행하는 데 필요한 환경 설정을 알아서 찾아줍니다. 즉, 애플리케이션을 개발하는 데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리해줍니다. 예를 들어, Spring Boot 프로젝트를 생성하면 아래와 같은 애플리케이션 코드를 볼 수 있습니다.

@SpringBootApplication
public class SpringBootApplication {

      public static void main(String[] args) {
               SpringApplication.run (SpringBootApplication.class, args);
      }
}

여기서 살펴볼 것은 @StringBootApplication Annotation입니다. 이 Annotation은 여러 Annotation을 합쳐 놓은 인터페이스이지만 기능 위주로 보면 크게 다음 세 개의 Annotation을 합쳐 놓은 구성입니다.

- @SpringBootConfiguration

- @EnableAutoConfiguration

- @ComponentScan

Spring Boot Applicaton이 실행되면 우선 @ComponentScan Annotation이 @Component 시리즈 Annotation이 붙은 클래스를 발견해 빈(Bean)을 등록합니다. 이후 @EnableAutoConfiguration Annotation을 통해 'spring-boot-autoconfiguration' 패키지 안에 spring.factories 파일을 추가해 다양한 자동 설정이 일부 조건을 거쳐 적용이 됩니다. 이 설정은 각 파일에서 설정된 @Conditional의 조건을 충족할 경우 빈(Bean)에 등록되고 애플리케이션에 자동 반영됩니다.

▶@Component 시리즈 Annotation에서 시리즈는 @Component Annotation이 포괄하는 Annotation을 통칭하기 위해 사용한 표현입니다. 이러한 @Component 시리즈 Annotation의 대표적인 예는 다음과 같습니다.

- @Controller, @RestController, @Service, @Repository, @Configuration

 

내장 WAS

Spring Boot의 각 웹 애플리케이션에는 내장 WAS(Web Application Server)가 존재합니다. 웹 애플리케이션을 개발할 때 가장 기본이 되는 의존성인 'spring-boot-starter-web'의 경우 Tomcat을 내장합니다.

Spring Boot의 자동 설정 기능은 Tomcat에도 적용되므로 특별한 설정 없이도 Tomcat을 실행할 수 있습니다. 필요에 따라서는 Tomcat이 아닌 다른 웹 서버(Jetty, Undertow 등)로 대체할 수 도 있습니다.

 

모니터링

개발이 끝나고 서비스를 운영하는 시기에는 해당 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링해야 합니다. Spring Boot에는 스프링 부트 액츄에이터(Spring Boot Actuator)라는 자체 모니터링 도구가 있습니다. 

 

Reference1. 장정우 [스프링부트 핵심 가이드]

반응형

'Development > Web' 카테고리의 다른 글

[Web] Spring의 Dispatcher Servlet의 정의와 기능  (0) 2022.09.24
[Web] Spring Framework의 특징  (0) 2022.09.24
[Web] 크로스 도메인  (0) 2022.09.23
[Web] 뷰 컴포넌트 통신  (0) 2022.09.19
[Web] 뷰 컴포넌트  (0) 2022.09.18

+ Recent posts