Java Spring - 공부 여정

2024. 3. 16. 00:16자바/자바스프링

728x90
반응형

 

#1. 스프링 / 스프링 부트란

  • 스프링
    • 자바 기반 웹 앱 프레임워크
  • 스프링 구조
    • spring은 자바 객체와 라이브러리들을 관리해주며, 톰켓과 같은 WAS 가 내장되어 있어 자바 웹 앱을 구동할 수 있음
    • 경량 컨테이너 (bean) 로 자바 객체를 spring 안에서 관리. 객체의 생성 및 소멸과 같은 생명 주기를 관리하며, spring 컨테이너에서 필요한 객체를 가져와 사용.
    • spring의 특징 IOC / DI
      • IOC - 제어의 역전
      • DI - 의존성 주입
        • 어떤 객체를 사용하는 주체가 객체를 직접 생성하는 게 아니라 객체를 spring에서 생성해서 사용하려는 주체 객체에 주입시켜주는 방식.
        • 직접 생성하는 것보다 외부에서 생성 관리하는 이 방식이 주체 객체와 대상 객체의 의존성이 더 적음

  • 스프링 부트
    • 스프링을 더 쉽게 이용하는 도구.
    • 스프링의 복잡한 세팅 요소를 스프링 부트가 대신하여 간단하게 프로젝트를 설정할 수 있게 한다. 스프링 개발을 조금 더 쉽게 만들어주는 역할

#2. Spring의 특징

1. bean 객체

  • spring ioc 컨테이너가 관리하는 자바 객체를 빈이라고 부름.
💡 IoC (제어의 역전, Inversion Of Control)
-일반적으로 자바에선 각 객체들이 프로그램의 흐름을 결정하고, 각 객체를 직접 생성하여 메소드를 호출한다. 즉 사용자 제어 구조.
-IoC 적용된 경우, 객체 생성은 특별 관리 위임 주체에게 맡겨 사용자가 객체를 직접 생성하지 않음. 객체의 생명주기를 컨트롤하는 주체가 다른 주체가 됨. 즉 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC라고 한다.
-스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 → 의존성 객체의 메서드 호출
  • 즉 spring 에서는 new를 이용해 생성한 객체가 아닌, spring에 의해 관리당하는 bean을 이용한다. 이때 bean을 얻기 위해서는 getBean()과 같은 메소드를 이용함.

2. Annotation

  • 주석의 기능 이외의 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다.
    • 상속 명시 등을 할 수 있음
    • @override

@Component Annotation

개발자가 생성한 class를 bean으로 등록할 때 사용하는 annotation.

  • controller 일 경우 controller annotation 사용하면 됨
    • @Controller
  • bean 을 등록하기 위해서는 해당 annotation을 사용해야 함.
    • @Bean
  • 해당 annotation이 등록되어 있는 경우, spring이 annotation을 확인하고 자체적으로 bean으로 등록함.
// -- 일부 생략 --
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

	/**
	 * The value may indicate a suggestion for a logical component name,
	 * to be turned into a Spring bean in case of an autodetected component.
	 * @return the suggested component name, if any (or empty String otherwise)
	 */
	@AliasFor(annotation = Component.class)
	String value() default "";

}
  • bean configuration file 에 직접 bean 등록하는 방법
    • @configuration 과 @bean 을 이용하여 bean을 등록할 수 있다.

@ComponentScan

  • @Component @Service @Repository @Controller @Configuration 중 1개라도 등록된 클래스를 찾으면, context에 bean으로 등록함.
  • 해당 어노테이션이 있는 클래스의 하위 bean을 등록될 클래스들을 스캔하여 bean으로 등록해준다.

 

728x90
반응형