본문 바로가기
스프링 공부

@SpringBootApplication 어노테이션이란

by 코딩마스터^^ 2024. 8. 6.

@SpringBootApplication 어노테이션은

Spring Boot 애플리케이션의 진입점 클래스에 사용되는 어노테이션으로, 여러 개의 중요한 Spring 어노테이션을 조합한 것입니다. 이 어노테이션은 Spring Boot 애플리케이션을 설정하고 부트스트랩하는 데 중요한 역할을 합니다.

구성 요소

@SpringBootApplication 어노테이션은 다음 세 가지 어노테이션을 조합한 것입니다:

  1. @SpringBootConfiguration:
    • @Configuration을 확장한 것으로, Spring 애플리케이션 컨텍스트를 정의하는 데 사용됩니다.
    • 이 어노테이션은 해당 클래스가 하나 이상의 @Bean 메서드를 포함하는 설정 클래스임을 나타냅니다.
  2. @EnableAutoConfiguration:
    • Spring Boot의 자동 설정 기능을 활성화합니다.
    • Spring Boot는 클래스패스에 있는 라이브러리와 애플리케이션에서 정의한 빈을 기반으로 적절한 설정을 자동으로 적용합니다.
  3. @ComponentScan:
    • 이 어노테이션은 현재 패키지와 그 하위 패키지에서 @Component, @Service, @Repository, @Controller 등이 붙은 클래스를 찾아서 스프링 빈으로 등록합니다.
    • 기본 패키지부터 하위 패키지까지 스캔하기 때문에 애플리케이션의 구조를 간결하게 유지할 수 있습니다.

 

작동 원리

@SpringBootApplication 어노테이션을 사용하면 다음과 같은 작업이 수행됩니다:

 

  1. 설정 클래스 등록:
    • 애플리케이션 클래스는 @Configuration 역할을 하므로, Spring 애플리케이션 컨텍스트에서 사용할 수 있는 하나 이상의 빈을 정의할 수 있습니다.
  2. 자동 설정 활성화:
    • @EnableAutoConfiguration을 통해 Spring Boot는 클래스패스와 정의된 빈을 기준으로 다양한 설정을 자동으로 구성합니다.
    • 예를 들어, spring-boot-starter-web 라이브러리를 사용하면 자동으로 Spring MVC를 설정합니다.
  3. 컴포넌트 스캔:
    • @ComponentScan은 애플리케이션 클래스의 패키지와 그 하위 패키지를 스캔하여, @Component가 붙은 클래스를 스프링 빈으로 등록합니다.
    • 이를 통해 컨트롤러, 서비스, 리포지토리 등의 빈이 자동으로 등록되고 관리됩니다.

 

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

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

 

 

프로젝트 구조 (예시)

 

src/main/java
└── com
    └── example
        └── demo
            ├── DemoApplication.java
            ├── controller
            │   └── HelloController.java
            ├── service
            │   └── CalculatorService.java
            └── repository
                └── MyRepository.java

 

 

 

프로파일 관리 프로젝트 구조 (내가 실제 한 프로젝트)

src/main/java
└── com
    └── 회사명
        └── profile
            ├── ProfileApplication.java
            ├── domin
            │   └── profile

            │            └── controller

            │            └── dto

            │                └── service

            │  
            ├── global
            │   └── common

             │   └── config

            │   └── util
            └── logging
            │     └── MyRepository.java

            └── mapper

 

 

컨트롤러 

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring!";
    }
}

 

서비스 클래스

package com.example.demo.service;

import org.springframework.stereotype.Service;

@Service
public class CalculatorService {
    public int add(int a, int b) {
        return a + b;
    }
}

 

 

리포지토리 클래스

package com.example.demo.repository;

import org.springframework.stereotype.Repository;

@Repository
public class MyRepository {
    // 데이터 접근 로직
}

 

 

요약

  • @SpringBootApplication은 @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan의 조합입니다.
  • 이 어노테이션은 Spring Boot 애플리케이션을 설정하고 부트스트랩하는 데 중요한 역할을 합니다.
  • 이를 통해 Spring 애플리케이션의 설정이 간소화되고, 자동 설정 및 컴포넌트 스캔 기능이 활성화됩니다.

댓글