[스프링 인 액션] #1

코코·2021년 3월 12일
0

스프링이란?

스프링은 애플리케이션 컨텍스트라는 컨테이너를 제공한다. 이것은 애플리케이션 컴포넌트(빈)를 생성하고 관리한다. 컴포넌트 또는 빈은 스프링 애플리케이션 컨텍스트 내부에서 서로 연결되어 완전한 애플리케이션을 만든다. 벽돌, 모르타르, 목재, 못, 배관, 배선이 어우러져 집을 구성하는 것과 비슷하다.

빈의 상호 연결은 의존성 주입(Dependency Injection, DI)이라고 알려진 패턴을 기반으로 수행된다. 애플리케이션 컴포넌트에서 의존(사용)하는 다른 빈의 생성과 관리를 자체적으로 하는 대신 별도의 컨테이너가 한다. 이 컨테이너는 모든 컴포넌트를 생성하고 관리하고 그 컴포넌트를 필요로 하는 컴포넌트에게 주입(연결)한다.

애플리케이션 부트스트랩

Springboot는 JAR파일에서 애플리케이션을 실행할 수 있어야 하므로, 가장 먼저 시작되는 부트스트랩(구동) 클래스가 있어야 한다. 스프링 이니셜라이저로 생성한 프로젝트에는 이미 부트스트랩 클래스가 있다.

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

몇 줄 안 되는 코드여도 강력한 효과가 있다. @SpringBootApplication 애노테이션은 이 클래스가 스프링부트 애플리케이션임을 나타낸다.

@SpringBootApplication 은 세 개의 어노테이션을 결합한 것이다.

  • @SpringBootConfiguration

    현재 클래스(TacoCloudApplication)를 구성 클래스로 지정한다. 따라서 필요하다면 자바 기반 스프링 프레임워크 구성을 이 클래스에 추가할 수 있다. 이 애노테이션은 @Configuration 애노테이션의 특화된 형태다.

  • @EnableAutoConfiguration

    스프링부트 자동 구성을 활성화한다.

  • @ComponentScan

    컴포넌트 검색을 활성화한다. 스프링은 자동으로 컴포넌트들을 찾아서 애플리케이션 컨텍스트에 등록한다.

그리고 또 다른 중요한 부분은 JAR를 호출할 때 실행되는 메서드인 main() 메서드다. main() 메서드는 SpringApplication 클래스의 run() 메서드를 호출한다. run() 메서드로 전달하는 TacoCloudApplication.classargs 두 개의 인자는 구성 클래스와 명령행(command-line) 인자다.

SpringBootTest

스프링 이니셜라이저는 기본적인 테스트 클래스도 제공한다.

@SpringBootTest
class TacoCloudApplicationTests {
    @Test
    void contextLoads() {
    }
}

이 테스트는 실행 코드는 없지만 애플리케이션 컨텍스트가 정상 실행 되는지 확인할 수 있는 테스트다. 애플리케이션 컨텍스트의 생성을 막는 코드가 있다면 이 테스트는 실패한다.

@SpringBootTest 는 스프링부트 기능으로 테스트를 시작하라는 것을 JUnit에 알린다. main() 메서드의 SpringApplication.run() 호출에 부합하는 테스트 클래스를 나타낸다는 정도로 알고 있으면 된다.

0개의 댓글