DevSprout / Hands-On-Microservices-with-Spring-Boot-and-Spring-Cloud

:rocket: 스프링으로 하는 마이크로서비스 구축 스터디
6 stars 2 forks source link

Chapter 02 스프링 부트 소개 #2

Open minkukjo opened 2 years ago

minkukjo commented 2 years ago

느낀 점

질문

  1. @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, @EnableAutoConfiguration, @ComponentScan을 포함합니다.

@SpringBootConfiguration은 @Configuration을 매타 애노테이션으로 갖는 애노테이션이라고 합니다.

둘의 차이가 뭔지 찾아봤더니 아래와 같은 글이 있었습니다.

Can be used as an alternative to the Spring's standard 
@Configuration annotation so that configuration can be found automatically

즉 @SpringBootConfiguration은 @Configuration을 자동으로 찾는 용도로 쓰인다고 하는데, 테스트 코드에서 이렇게 사용한다고 합니다.

그러므로 애플리케이션에서는 @SpringBootConfiguration을 하나만 사용할 것을 권고하고 있고, 이는 @SpringBootApplication에 포함되어있으므로 따로 건드릴 필요 없는 설정이라고 합니다.

@EnableAutoConfiguration는 이름 그대로 스프링 부트의 자동 설정을 사용하기 위한 애노테이션이고, 이 애노테이션이 있으면 spring.factories에 위치한 빈들을 자동으로 등록하게 됩니다.

@ComponentScan은 다들 아시다시피 해당 애노테이션이 붙어있는 패키지 내에서 빈을 찾게 됩니다.

실제로 이 애노테이션이 붙어있는 위치로부터 빈을 찾는 친구는 ConfigurationClassPostProcessor 이녀석이구요.

그래서 요약하자면 SpringBootApplication은 빈 찾아서 등록하고, Configuration 빈들을 찾을 수 있게 해주고, 스프링 부트와 관련된 여러가지 자동 설정들을 등록시켜주기 위한 애노테이션인데 프로젝트 당 하나만 써라 정도가 될 것 같네요.

  1. REST 서비스 개발을 위한 MVC와 웹플럭스의 차이

쓰레드풀을 사용한 멀티쓰레딩 / 서블릿 기반의 Blocking I/O MVC

Event Loop 기반의 비동기 논블락킹 I/O 기반의 웹플럭스

  1. 스프링 폭스를 사용해 REST API를 문서화 했을 때의 장점

API가 변경되더라도 스펙 문서를 일일이 작성할 필요가 없음.

스프링 폭스 자체에서 API 테스트 기능을 제공함. (단점일 수도 있음)

  1. 스프링 데이터 레포지토리가 제공하는 기능, 가장 단순한 레포지토리는?

레포지토리가 제공하는 기능 : 여러 유형의 DB에 접근할 때 Spring Data XX의 레포지토리를 사용하면 일관된 인터페이스 사용 쌉가능

가장 단순한 레포지토리 : CrudRepository

  1. 스프링 클라우드의 스트림의 바인더가 제공하는 기능?

특정 메시지 시스템과의 통합 기능 ( JDBC 드라이버가 특정 DB를 지원하는 것과 동일 )

  1. 도커 컴포즈가 제공하는 기능

여러 컨테이너를 한 방에 뿅 띄우고 뿅 내리는게 가능

MinJunKweon commented 2 years ago

느낀점

의문점

  1. 논블락킹 I/O 기반 async가 좋은 점은 컨텍스트 스위칭 타임이 현저하게 줄어들기 때문인가?
  2. Event Loop 기반의 논블락킹 I/O라면, event가 발생했을 때만 스레드에 CPU 타임이 점유되기 때문에 빠른 것인가? 다르게 말하면, 블락킹 I/O async라면 suspend 되어있는 동안에도 CPU 타임이 주어지기 때문에 손해인가?
LOG-INFO commented 2 years ago

느낀점


저도 딱히 질문은 없어서 그냥 찾아본 것 적어둡니다!


아 생각해보니 궁금한거 하나 있어요!

2rohyun commented 2 years ago

느낀점


끄적끄적