1. CoC(Convention over Configuration)

  • 소프트웨어 프레임워크에서 사용되는 디자인 패러다임
  • 프레임워크에서 관습적으로 사용되는 패턴을 사용자가 정의할 필요가 없도록 하는 것
  • 사용자는 의미없이 관습적인 내용을 정의하느라 고생할 필요가 없음
  • 그러면서도 사용자가 직접 정의할 수 있어야하는 부분에는 제약이 없기에 유연성을 잃지 않음

 

 

2. Spring Boot

  • Spring 프레임워크의 CoC 솔루션

  • Spring에서 관습적으로 사용되는 설정이나 의존성 관리 방식, 개발환경 구축이나 배포 등의 작업들에서
    사용자가 임의로 정의할 수 있어야한다고 판단되는 부분을 제외한 영역을 모두 자동화해주는 도구 

  • Spring Boot가 지원하는 기능들
    • 설정의 자동화(Auto Configuration) - @SpringBootApplication
      • 스프링부트 프로젝트의 Application 클래스에 붙어있는 설정 자동화 어노테이션
      • 내부적으로 아래에 설명할 세 개의 Spring 어노테이션을 사용
         
      • @EnableAutoConfiguration
        • auto configuration 대상으로 등록된 클래스들을 자동으로 Bean으로 등록
        • 해당 클래스들은 사용자가 별도로 등록해주지 않아도 Bean으로 사용 가능
        • 모든 auto configuration 대상을 항상 Bean으로 등록해두는 것은 리소스 낭비
          => AutoConfigurationImportSelector 가 실제로 Bean으로 등록할 클래스를 선별
          => 클래스들이 구현한 Condition 인터페이스를 확인하여 조건에 맞는 클래스만을 선별

        • Condition 어노테이션
          • Conditional : 해당 클래스가 구현한 모든 Condition 인터페이스를 만족해야 등록
          • CondtionalOnClass : 해당 클래스가 classpath에 존재할경우 등록
          • ConditionalOnBean : 해당 Bean이 BeanFactory에 포함되어있을 경우 등록
          • ConditionalOnMissingBean : 해당 Bean이 BeanFactory에 포함되어있지 않을 경우 등록
          • ConditionalOnCloudPlatform : 해당 클라우드 플랫폼이 사용중일 경우 등록
          • ConditionalOnExpress : SpEL 조건문이 참일 경우 등록

      • @SpringBootConfiguration 
        • Spring의 Configuration 어노테이션을 대체하는 어노테이션
        • 애플리케션에 단 하나만 존재할 수 있으며 스프링부트에서 지원하는 테스트 어노테이션인
          @SpringBootTest는 이 어노테이션이 붙은 클래스를 메인으로 하위 설정을 가져온다.

      • @ComponentScan
        • @Component 어노테이션이 붙은 클래스를 자동으로 스캔하여 Bean으로 등록
        • 사용자 Bean를 등록할 수 있게 해주는 어노테이션

    • 내장 웹 서버(Embedded Server) / 서블릿 자동설정
      • Spring Boot로 프로젝트를 생성할 경우 Tomcat과 Dispatcher Servlet을 자동으로 설정하여
        사용자가 별도로 웹 서버를 설치하고 Dispatcher Servlet을 설정해줄 필요가 없음

      • 또한 배포시에도 내장 서버를 탑재한 jar파일만을 배포하면 jar 파일을 실행하는 것만으로
        서버를 구동할 수 있게됨

    • 의존성 관리
      • starter 를 통해 의존성을 관리
      • 기존 Spring에서 버전에 따른 호환성을 고려하여 의존성을 수동으로 관리해야했던 문제 해결

'프레임워크 > Spring' 카테고리의 다른 글

#5 Spring AOP(Aspect Oriented Programming)  (0) 2022.04.30
#4 Spring 의존성 주입 방법  (0) 2022.04.27
#3 Spring에 적용된 디자인 패턴  (0) 2022.04.24
#2 Spring Bean  (0) 2022.04.22
#0 Spring  (0) 2022.04.20

+ Recent posts