Open minkukjo opened 2 years ago
@SpringBootApplication
어노테이션을 까보게 되었네요저도 딱히 질문은 없어서 그냥 찾아본 것 적어둡니다!
@SpringBootApplication
@SpringBootConfiguration
@Configuration
@EnableAutoConfiguration
classpath
상에 있는 auto-configuration 클래스들이 자동으로 적용됨 (ex. tomcat-embedded)AutoConfigurationPackage
@ComponentScan
(ExcludeFilter적용)아 생각해보니 궁금한거 하나 있어요!
Spring WebFlux
Spring Data
implements Serializable
을 사용하는 객체와 사용하지 않는 객체가 있음. 붙이지 않아도 ser/deser 되는데 왜 붙이는거지? 아니면 어디서 은근슬쩍 해주는 곳이 있나?Spring Cloud Stream
느낀 점
질문
@SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan을 포함합니다.
@SpringBootConfiguration은 @Configuration을 매타 애노테이션으로 갖는 애노테이션이라고 합니다.
둘의 차이가 뭔지 찾아봤더니 아래와 같은 글이 있었습니다.
즉 @SpringBootConfiguration은 @Configuration을 자동으로 찾는 용도로 쓰인다고 하는데, 테스트 코드에서 이렇게 사용한다고 합니다.
그러므로 애플리케이션에서는 @SpringBootConfiguration을 하나만 사용할 것을 권고하고 있고, 이는 @SpringBootApplication에 포함되어있으므로 따로 건드릴 필요 없는 설정이라고 합니다.
@EnableAutoConfiguration는 이름 그대로 스프링 부트의 자동 설정을 사용하기 위한 애노테이션이고, 이 애노테이션이 있으면
spring.factories
에 위치한 빈들을 자동으로 등록하게 됩니다.@ComponentScan은 다들 아시다시피 해당 애노테이션이 붙어있는 패키지 내에서 빈을 찾게 됩니다.
실제로 이 애노테이션이 붙어있는 위치로부터 빈을 찾는 친구는 ConfigurationClassPostProcessor 이녀석이구요.
그래서 요약하자면 SpringBootApplication은 빈 찾아서 등록하고, Configuration 빈들을 찾을 수 있게 해주고, 스프링 부트와 관련된 여러가지 자동 설정들을 등록시켜주기 위한 애노테이션인데 프로젝트 당 하나만 써라 정도가 될 것 같네요.
쓰레드풀을 사용한 멀티쓰레딩 / 서블릿 기반의 Blocking I/O MVC
Event Loop 기반의 비동기 논블락킹 I/O 기반의 웹플럭스
API가 변경되더라도 스펙 문서를 일일이 작성할 필요가 없음.
스프링 폭스 자체에서 API 테스트 기능을 제공함. (단점일 수도 있음)
레포지토리가 제공하는 기능 : 여러 유형의 DB에 접근할 때 Spring Data XX의 레포지토리를 사용하면 일관된 인터페이스 사용 쌉가능
가장 단순한 레포지토리 : CrudRepository
특정 메시지 시스템과의 통합 기능 ( JDBC 드라이버가 특정 DB를 지원하는 것과 동일 )
여러 컨테이너를 한 방에 뿅 띄우고 뿅 내리는게 가능