앞서 스프링부트3 프로젝트를 만들었었다.
https://to-mypage.tistory.com/53
gradle 및 스프링 부트3 프로젝트 생성
인텔리제이 설치 먼저 인텔리제이를 설치했다. 설치 방법은 여기를 참고바란다.https://to-mypage.tistory.com/51 gradle 프로젝트 생성 1. New Project 클릭 ➡️ Build system을 Gradle로 설정 ➡️ 'download JDK...
to-mypage.tistory.com
이제 여기의 코드를 찬찬히 살펴보려고 한다.
@SpringBootApplication 어노테이션의 의미
package me.jinsoyeong.springbootdeveloper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// 스프링 부트를 실행할 용도의 클래스
// 메인 클래스
/*
*
* 이 클래스는 자바의 main()메서드와 같은 역할을 한다. 즉, 여기서 스프링 부트가 시작된다.
* 아래 어노테이션을 추가해주면, 스프링 부트 사용에 필요한 기본 설정을 해준다.*/
@SpringBootApplication
public class SpringBootDeveloperApplication {
public static void main(String[] args){
/*
* run() 메소드는 애플리케이션을 실행한다.
* 첫번째 인수는 스프링부트3 애플리케이션의 메인클래스로 사용할 클래스를 적고, 두번째 인수는 커맨드 라인의 인수들을 전달한다. */
SpringApplication.run(SpringBootDeveloperApplication.class, args);
}
}
- @SpringBootApplication 어노테이션을 command와 함께 클릭해보면 해당 어노테이션의 구성이 나타난다.
갑자기 Jetbrains Decompiler Accept에 대한 경고문이 떠서 뭐지? 싶었는데..
클래스파일(.class)을 보려고 하는 것에 대해서 유의해야할 사항에 대해 알려주는 안내(경고)창이라 실질적으로 사용하시는 데에 큰 문제는 없다고 한다. 지정된 약관에 대한 동의를 하는 것이다. accept를 눌렀다.
- 그러면 이렇게 구성을 볼 수 있다.
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
- 스프링 부트 관련 설정을 나타내는 어노테이션
- @Configuration 어노테이션을 상속해서 만든 어노테이션
@ComponentScan
- 사용자가 등록한 빈을 읽고 등록하는 어노테이션
- @Component라는 어노테이션을 가진 클래스들을 찾아 빈으로 등록해주는 역할을 한다.
- 그렇다고 모든 빈에 @Component 어노테이션을 사용하는 것이 아니다.
- @Component를 감싸는 어노테이션이 있는데, 실제 개발 시에는 @Component 어노테이션 보다, 용도에 따라 다른 어노테이션을 사용한다.
어노테이션 | 설명 |
@Configuration | 설정 파일 등록 |
@Repository | ORM 매핑(데이터베이스) |
@Controller, @RestController | 라우터(url 경로를 매개변수로 받아서 매핑) |
@Service | 비즈니스 로직 |
@EnableAutoConfiguration
- 자동 구성을 활성화 하는 어노테이션
- 스프링 부트 서버가 실행 될 때 스프링 부트의 메타 파일을 읽고 정의된 설정들을 자동으로 구성하는 역할을 수행한다. 'spring.factories'에서 보았던 그 클래스들이 모두 이 어노테이션을 사용할 때 자동 설정 되는 것
TestController.class
이전에 테스트를 위해 만들어뒀던 클래스이다.
package me.jinsoyeong.springbootdeveloper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/*
*
* 라우터 역할을 하는 어노테이션, 라우터란? HTTP 요청과 메서드를 연결하는 장치를 의미한다.
* 이 어노테이션이 있어야 클라이언트 요청에 맞는 메서드를 매핑하여 실행할 수 있다.
*/
@RestController
public class TestController {
// /test GET 요청이 오면 test()메서드와 매핑되어, test 메서드가 실행된다.
@GetMapping("/test")
public String test(){
return "Hello, world!";
}
}
@RestController는 @Component 어노테이션(클래스를 빈으로 등록함)도 아닌데 어떻게 같게 취급되는 걸까?
- 마찬가지로 @RestController를 command키를 누른 상태로 클릭하면, 아래 화면이 나온다.
- @RestController는 @ResponseBody + @Controller가 합쳐진 결과물임을 알 수 있다.
- 여기서 한번 더, @Controller 어노테이션을 눌러서 이동해보면,
- 여기에 바로 Component가 존재한다.
- @Controller 어노테이션에서 @Component 어노테이션을 가지고 있기 때문이다. (@ComponentScan을 통해 빈으로 등록되는 이유이기도 함)
- 다른 @Repository, @Service, @Configuration 어노테이션도 모두 @Component을 가지고 있다. 다만, 빈이 무슨 역할을 하는지 명확하게 구분하기 위해 다른 이름으로 덮어둔 것이다.
'FrameWork > Spring Boot' 카테고리의 다른 글
스프링부트 3 테스트 코드 알아보기 (feat. JUnit, AssertJ) (0) | 2025.02.27 |
---|---|
스프링부트3 구조 이해하기 (feat. 디렉토리 구성, 의존성 추가, 계층별 구현, 요청-응답 과정) (0) | 2025.02.27 |
스프링부트3 기능 살펴보기 (feat. 어노테이션, 스프링부트 스타터) (0) | 2025.02.26 |
스프링 콘셉트 (feat. IoC, DI, AOP, PSA) (0) | 2025.02.26 |
스프링을 배우기 전, 알아두면 좋은 지식 (feat. 서버, 클라이언트, ip, port, 라이브러리, 프레임워크, 데이터베이스) (0) | 2025.02.26 |