메타 애노테이션과 합성 애노테이션
지금까지는 스프링 부트가 컨테이너리스 개발을 어떻게 가능하게 해줬는지, 서블릿 컨테이너와 스프링 컨테이너가 동작을 하긴 하지만 그걸 직접 관리하거나 코드를 만들 필요 없이 상당히 많은 부분을 한 줄로 자동으로 처리하는 방법을 보았음.
이번 시간부터는 스프링 부트가 어떻게 애플리케이션 개발을 빠르고 편리하게 해주는가에 중요한 축이 되는 자동 구성에 대해 살펴본다.
@Controller 애노테이션이 붙어 있으면 디스펙처 서블릿이, 이거는 웹 컨트롤러로 사용되어 지는구나, 여기에 애노테이션을 이용한 맵핑 정보가 들어 있겠구나 판단하고 request 매핑이나 get 매핑을 찾아본다.
또 애노테이션을 새롭게 만들면 여기다가 메타 애노테이션에는 없었던 새로운 엘리먼트를 추가할 수 있다.
이 애노테이션의 기능을 좀 더 확장해서 활용되도록 만들 수 있다.
Meta-Annotation 자체를 상속이라는 개념하고 혼동하면 안 된다.
Annotation 자체에는 상속이라는 개념은 없다.
Annotation을 만들 때 아래 이미지에서 처럼 @Target({ElementType.ANNOTATION_TYPE}) 을 붙이면 다른 Annotation에 Meta Annotation으로 붙여서 사용할 수 있는 것으로 보인다.
이렇게 Meta Annotation을 사용하면 새로 만든 Annotation에서 해당 어노테이션의 기능이 적용 되어 사용할 수 있는 것으로 보인다.
메타 애노테이션 말고 스프링에서 이야기하는 애노테이션 활용 방법이 있는데, 합성 애노테이션 / composed annotation 이라고 한다.
메타 애노테이션을 하나 이상 적용해서 만드는 경우에 이걸 composed annotation 이라고 부른다.
합성 애노테이션 적용
스프링 프로젝트 초기 어노테이션과 비슷한 어노테이션을 @MySpringBootAnnotation 으로 만들어서 사용해 보았다.
그리고 ServletWebServerFactory, DispatcherServlet Bean 만드는 클래스를 별도로 분리하여 3번째 이미지처럼 만들 수 있다.
빈 오브젝트와 역할과 구분
크게 스프링 컨테이너가 생성하고 관리하는 빈들은 컨테이너 인프라 스트럭처 빈과 애플리케이션 빈으로 구분한다.
인프라 빈 구성 정보의 분리
스프링 부트는 주로 이 기술 기반이 되는 인프라 빈을 자동 구성이라는 원리에 의해서 뭔가 자동으로 처리해 준다.
우리가 크게 신경을 쓰지 않아도, 따로 뭔가 수고를 하지 않아도 등록을 해준다.
동적인 자동 구성 등록
EnableMyAutoConfiguration 어노테이션의 Import에 기존에 DispatcherServletConfig, TomcatWebServerConfig를 모두 등록했냐, 아니면 MyAutoConfigImportSelect를 넣고 여기 selectImports(..) 메서드 리턴값에 패키지와 클래스를 모두 입력하냐.. 이 차이인데..현재 6분 강의 내용에는 MyAutoConfigImportSelect 이 클래스를 만들어서 사용하는 이점을 알 수는 없긴 함. 일단 넘어갈 예정
자동 구성 정보 파일 분리
자동 구성 애노테이션 적용
@Configuration과 proxyBeanMethods
'스프링 관련 > 토비의 스프링 부트 - 이해와 원리' 카테고리의 다른 글
섹션 9. Spring JDBC 자동 구성 개발 (0) | 2024.06.09 |
---|---|
섹션 8. 외부 설정을 이용한 자동 구성 (0) | 2024.06.06 |
섹션 7 조건부 자동 구성 (0) | 2024.06.03 |
섹션4 독립 실행형 스프링 애플리케이션 (0) | 2024.05.21 |
섹션3 독립 실행형 서블릿 애플리케이션 (0) | 2024.05.19 |
댓글