alt
Home 스프링 인 액션 - 1. 스프링 기초 - 1. 스프링 시작하기
Post
Cancel

스프링 인 액션 - 1. 스프링 기초 - 1. 스프링 시작하기

: 애플리케이션의 모든 기반을 자동으로 구성해주고, 이 것을 통해 개발자는 애플리케이션의 비즈니스 로직에만 집중할 수 있다.


용어

  • 컨테이너 (스프링 애플리케이션 컨텍스트) : 빈 객체를 관리한다. 빈 생성, 관리를 하고, 필요한 곳에 (생성자와 같은 방법을 통해) 주입(연결)시켜준다.
  • 컴포넌트: 빈 객체. 다른 애플리케이션 구성요소와 협력해 작업을 처리한다. 각 빈 객체는 의존성 주입 패턴을 기반으로 수행된다.


스프링

  • 기존에는 XML 파일을 통해 bean을 관리하고 상호 연결하도록 스프링 애플리케이션 컨텍스트에 알려주었다.

    1
    2
    
    <bean id="userService"
          class="com.example.UserService" />
    
  • 최신 버전에서는 자바기반의 구성을 통해 빈 객체를 컨텍스트에 제공한다.

    ```java @Configuration public class ServiceConfiguration { @Bean public UserService userService() { return new UserService(); } }


스프링 부트

: 스프링을 한번 더 추상화한 프레임워크.


큰 차이점

  • 위의 빈 객체 구성, XML 등을 자동 구성하도록 도와준다.
  • starter를 통해 쉽게 시작 환경을 구성 할 수 있다.


자동 구성: Auto configure

: 자동 연결(autowiring)과 컴포넌트 검색(component scanning)이라는 스프링 기법을 기반으로 한다.

  • @SpringBootApplication 을 통해 위의 과정 가능. 빈(컴포넌트)들이 컨테이너에 등록되고 관리된다. @SpringBootConfiguration, @ComponentScan, @EnableAutoConfiguration 세가지 어노테이션을 합친 것이라고 보면 된다. JAR 실행 실 호출되어 실행되는 main 메서드에 달아놓는다.

    • main 메서드는 SpringApplicationrun() 메서드를 호출한다.

    ```java // @SpringBootApplication 내부

    @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { // … }

  • @SpringBootConfiguration: 현재 클래스(UserApplication)를 구성 클래스로 지정한다. @Configuration 의 특화된 형태이다. Configuration으로 등록한 것을 찾아 bean으로 등록해준다.

  • @ComponentScan: 컴포넌트(빈) 검색을 활성화한다. @Repositoriy, @Service, @Controller, @Bean 등의 객체를 메모리에 올린다.

    • 스테레오타입 어노테이션: 역할을 구분하기 위한 목적의 @Repository, @Controller 등 어노테이션
  • @EnableAutoConfiguration : 스프링 부트 자동-구성을 활성화한다.

  • 나머지 어노테이션 내부를 살펴보기


특징

  • 스프링부트 표준 상 WAR(Web Application ARchive)가 아닌 JAR(Java ARchive)로 패키징하는 것을 권장한다.
    • 기존의 자바 웹 어플리케이션은 WAR 파일로 패키징한다. 웹 관련 자원을 포함한다. 기존의 자바 애플리케이션 서버에 애플리케이션을 배포할 때 적합하다.
    • 스프링부트에서는 기본적으로 클라우드를 염두해 JAR로 패키징한다. 클래스, 라이브러리 파일만을 포함한다.
  • Tomcat이 스프링부트 애플리케이션의 일부이다.
  • 장점: 일단 initializer로 초기 설정을 하면 모든 필요한 틀(의존성, 기본 어노테이션 등)이 작성된다. 개발자는 애플리케이션 로직 작성에만 집중하면 된다.


핵심 스프링 프레임워크

  • 스프링 부트
    • 자동 구성: 자동적으로 컨테이너에 빈을 등록해준다. 꼭 필요하지 않다면 별도 config를 작성하지 않아도 된다.
    • Actuator: 모니터링 시스템. runtime에 스레드 덤프, 애플리케이션 상태, metric을 살펴 볼 수 있다.
  • 스프링 데이터: 간단한 자바 interface로 데이터 레포지토리 정의 가능(JPA 인터페이스)
  • 스프링 시큐리티: 인증, 허가, API 보안 등. 애플리케이션 보안을 위한 필수요소
  • 스프링 통합과 배치: 애플리케이션 통합과 Batch.
  • 스프링 클라우드: 모놀리식 -> MSA



Reference) 스프링 인 액션 5판

This post is licensed under CC BY 4.0 by the author.