개발 공부 기록/07. TIL

스프링 부트 3로 백엔드 입문하기 TIL - 1~2장 : 스프링 부트 3 시작하기

박세류 2023. 10. 23. 20:26

✍학습 키워드

스프링부트 3.0

IoC?

  • Inversion of Control, 제어의 역전으로, 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와서 사용하는 것을 말한다.
  • 실제로 스프링은 스프링 컨테이너가 객체를 관리, 제공한다

DI?

  • 제어의 역전을 구현하기 위해 사용하는 방법이 DI이며, 의존성 주입(Dependency Injection)
    • @Autowired 어노테이션은 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할을 한다.

그럼 빈이 몬데?

  • 스프링 컨테이너는 스프링이 제공하는것, 빈을 생성하고 관리하는것, 빈의 생명주기를 관리하는것 대표적인게 @Autowired 같은 어노테이션

⇒ 빈은 스프링 컨테이너가 생성하고 관리하는 객체, 빈을 등록하는 방법은 @Component, XML 파일 설정 등 자유롭게 할 수 있다.

어렵게 생각할 필요 없이 스프링에서 제공해주는 객체이며, 이 객체를 통해 IoC DI 하는것이다.`

@SpringBootApplication 이해하기

⇒ 해당 애너테이션을 추가하면 스프링 부트 사용에 필요한 기본 설정을 해준다.

SpringApplication.run() 메서드는 애플리케이션을 실행한다. 첫 번째 인수는 부트에서 메인 클래스로 사용할 클래스, 두번째 인수는 커맨드 라인의 인수들을 전달한다.

@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 {

	/**
	 * Exclude specific auto-configuration classes such that they will never be applied.
	 * @return the classes to exclude
	 */
	@AliasFor(annotation = EnableAutoConfiguration.class)

@SpringBootConfiguration

  • 스프링 부트 관련 설정을 나타내는 애너테이션이다.

@ComponentScan

  • 사용자가 등록한 빈을 읽고 등록하는 애너테이션이다. @Component라는 어노테이션을 가진 클래스들을 찾아 빈으로 등록하는 역할을 한다.
    • @Configuration, @Repository, @Service 또한 모두 @Component 어노테이션 가지고 있다, 다른이름으로 덮어두었을 뿐

@EnableAutoConfiguration

  • 스프링 부트에서 자동 구성을 활성화하는 어노테이션이다. 스프링 부트 서버가 실행될 때 스프링 부트의 메타 파일을 읽고 정의된 설정들을 자동으로 구성하는 역할을 수행한다.

📝새로 배운 개념

자바 17의 새로운 기능

스프링부트 3.0부터는 자바 17 이상을 사용해야 하므로 이러한 새로운 기능을 알고 넘어가두면 좋다.

String query = "SELECT * FROM \\"items\\"\\n +
               "WHERE \\"ITEM_NO = \\"12\\"

에서

String query = """
             SELECT * FROM "items"
             WHERE "ITEM_NO" = "12"
             """;

으로 가독성이 좋아졌다.

ES6 같은거니 문법공부 할때 한번쯤 알아두면 좋을거같당.

728x90