해결하고자 하는것
a) Dependency Injection(DI) - 의존성 주입
- 객체 간 결합을 느슨하게 만듦
- 코드 재사용성 증가 및 단위테스트가 용이
b) 중복된 코드 제거
- ex) JDBC template
- 비즈니스 로직에만 집중 가능
c) 다른 프레임워크와의 통합
- ex) JUnit & Mockito for Unit Testing
- 여러 훌륭하게 제공되는 프레임워크를 통해 해결하고자 하는 문제를 높은 품질로 해결
해결하고자 하는 것
a) Auto Configuration 자동 실행
b) 쉬운 의존성 관리
c) 내장 서버
Spring Boot Starter 프로젝트 옵션들
- spring-boot-starter-web-services: SOAP Web Services
- spring-boot-starter-web: Web and RESTful applications
- spring-boot-starter-test: Unit testing and Integration Testing
- spring-boot-starter-jdbc: Traditional JDBC
- spring-boot-starter-hateoas: Add HATEOAS features to your services
- spring-boot-starter-security: Authentication and Authorization using Spring Security
- spring-boot-starter-data-jpa: Spring Data JPA with Hibernate
- spring-boot-starter-cache: Enabling Spring Framework's caching support
- spring-boot-starter-data-rest: Expose Simple REST Services using Spring Data REST
Spring Boot의 다른 목표
- spring-boot-starter-actuator: 여러분의 애플리케이션 추적하거나 모니터링하는 등의 기능을 사용할 수 있도록 한다.
- spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat: 내장된 서블릿 컨테이너를 선택할 수 있도록 해준다.
- spring-boot-starter-logging: logback 을 사용해서 로깅할 수 있도록 해준다.
- spring-boot-starter-log4j2: Log4j2를 사용해서 로깅할 수 있도록 해준다.
@SpringBootApplication: 아래와 같은 기능을 동시에 실행
1) @Configuration
- 자바 코드로 작성된 클래스를 스프링 설정으로 사용함을 의미
2) @EnableAutoConfiguration
- Spring Application Context를 만들 때 지정해 둔 설정 값들을 이용하여 자동으로 설정하는 기능을 킴
3) @ComponentScan
- 지정한 위치 이하에 있는 @Component와 @Configuration이 붙은 클래스를 스캔해서 Bean으로 등록
Bean, BeanFactory, ApplicationContext
1) Bean
- Spring이 IoC 방식으로 관리하는 객체 or Spring이 직접 생성과 제어를 담당하는 객체
2) BeanFactory
- Spring의 IoC를 담당하는 핵심 컨테이너를 가리킴
- Bean을 등록, 생성, 조회, 반환하는 기능을 담당
- 이 BeanFactory를 바로 사용하지 않고 이를 확장한 ApplicationContext를 주로 이용
3) ApplicationContext
- BeanFactory를 확장한 IoC 컨테이너
- BeanFactory와 다른 것은 Spring이 제공하는 각종 부가 서비스를 추가로 제공