DI란 개발자가 Spring 프레임워크에 의존성을 주입하면서 객체 간 결합을 느슨하게 하는 것
객체 간 결합이 느슨하면 코드의 재사용성이 증가하고, 단위 테스트가 용이해짐
IoC(Invesion of Control)
IoC는 컨트롤의 제어권이 개발자에게 있는 것이 아닌 프레임워크가 대신해서 해주는 것
Servlet이나 Bean 같은 코드를 개발자가 직접 작성하지 않고, 프레임워크가 대신 수행
제어의 역전이라는 말이 어려울 수 있는데, 기존에는 자바 코드를 작성할 때 객체의 생성, 의존관계 설정 등을 개발자가 해줘야 했지만, 프레임워크가 대신해준다는 의미
AOP(Aspect Oriented Programming)
AOP는 핵심기능을 제외한 부수적인 기능을 프레임워크가 제공하는 특징
예를 들어, Spring 프로젝트에 security를 적용하거나, logging 등을 추가하고 싶을 때 기존 비즈니스 로직을 건들지 않고 AOP로 추가할 수 있음
Spring Boot Framework와 Spring Framework의 차이점
1. Dependency
Spring Framework의 경우 dependency를 설정해줄 때 설정 파일이 매우 길고, 모든 dependency에 대해 버전 관리도 하나하나 해줘야 함
Spring Boot Framework의 경우 dependency를 Spring Framework보다 쉽게 설정해 줄 수 있고 버전 관리도 자동으로 해줌.
2. Configuration
Spring Framework의 경우 configuration설정을 할 때도 매우 길고, 모든 어노테이션 및 빈 등록 등을 설정해 줘야 함
Spring Boot Framework는 application.properties파일이나 application.yml파일에 설정하면 됨
3. AutoConfiguration
@SpringBootApplication
이 어노테이션을 제거하고 프로그램을 실행하면, 일반적인 자바 프로그램과 동일하게 실행된다. 해당 어노테이션 덕분에 많은 외부 라이브러리, 내장 톰캣 서버 등이 실행될 수 있다.
@ComponentScan
@Component, @Controller, @Repository, @Service라는 어노테이션이 붙어있는 객체들을 스캔해 자동으로 Bean에 등록해 준다.
@EnableAutoConfiguration
@ComponentScan 이후 사전에 정의한 라이브러리들을 Bean에 등록해준다. 사전에 정의한 라이브러리들은 다음 경로에서 확인할 수 있다.
하지만 사전에 정의한 라이브러리라고 전부 Bean에 등록되진 않는다.
4. 편리한 배포
Spring Framework로 개발한 애플리케이션의 경우, war파일을 Web Application Server에 담아 배포
Spring Boot Framework의 경우, Tomcat 이나 Jetty 같은 내장 WAS를 가지고 있기 때문에 jar 파일로 간편하게 배포할 수 있다.
결론
Spring Framework는 기존에 EJB(Enterprise Java Beans)를 대신해 자바 애플리케이션을 더 쉽게 만들 수 있게 해 주고,
Spring Boot Framework는 Spring Framework보다 개발자가 더더욱 개발에만 집중할 수 있도록 도와주는 프레임워크이다.