1장
스프링 프레임워크는 어떻게 등장했는가?
<aside>
💡 태초에 EJB가 있었나니..
</aside>
스프링 프레임워크는 다른 백엔드 프레임워크와 어떤 부분이 다른가?
<aside>
💡 스프링 프레임워크는 좋은 객체 지향 설계(OoP)가 가능하다.
</aside>
스프링은 자바 언어 기반의 프레임워크로, 자바가 객체 지향 언어라는 특징을 살려 좋은 객체 지향 애플리케이션을 개발할 수 있게 해준다.
- 의존성 주입 DI(Dependency Injection) : Spring 프레임워크에 의존성을 주입하면서 객체 간 결합을 느슨하게 하는 것이다.(클라이언트의 코드 변경 없이 기능 확장 가능)
- 스프링에서는 ‘ApplicationContext’가 필요한 객체들을 생성하고, 주입하는 역할을 해주는 구조
- ApplicationContext가 관리하는 객체들을 bean이라 하고, 의존관계를 처리하는 방식으로는 XML, Annotation등이 있다.
- 생성자를 사용한 방법 권장
- 제어 역행 IoC(Inversion of Control) : IoC는 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다는 걸 뜻한다. 객체의 생성, 의존관계 설정 등을(Servlet이나 Bean과 같은 코드를) 개발자가 아닌 프레임워크가 대신해준다.
- 관점지향 프로그래밍 AOP(Aspect Oriented Programming) : 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리한다. 핵심기능을 제외한 부수적인 기능은 Security나 logging등은 기존 비즈니스 로직을 건들지 않고 프레임워크를 통해 AOP를 사용하여 추가할 수 있다.
스프링과 스프링 부트의 차이점은 무엇인가?
<aside>
💡 Spring의 약점, 어려운 설정과 버전 관리, 그리고 배포(jar vs war)
</aside>
- Dependency
- Spring : 의존성을 설정해줄 때, 설정파일이 길고 버전에 대한 관리가 필요하다.
- Spring Boot : 쉽게 설정 가능하고, 버전 관리를 자동으로 해준다. (build.gradle에 의존성을 추가하면, 필요한 모든 의존성을 자동으로 추가하고 관리해줌)
- Configuration
- Spring : configuration 설정이 매우 길고, 모든 어노테이션과 빈 등록 설정을 해줘야 한다.
- Spring Boot : application.properties 혹은 application.yml에 설정해준다.
- Spring Boot에는 AutoConfiguration이 존재한다.
- 실행가능한 애플리케이션을 만들면 @SpringBootApplication(아래 두 어노테이션이 합쳐진 것) 이 붙음.
- 빈 등록 방식은 두단계를 거쳐 진행되는데, ComponentScan으로 bean을 등록하고 두번째로 EnableAutoConfiguration으로 추가적인 bean들을 읽어서 추가한다.
- @ComponentScan : @Configuration, @Component, @Controller, @RestController, @Repository, @Service 어노테이션이 붙어있는 객체들을 스캔해 자동으로 bean에 등록해준다.
- @EnableAutoConfiguration : ComponentScan이후에 사전에 정의한 라이브러리들을 bean에 등록해주는, bean을 등록하는 자바 설정파일이다.
- 배포
- Spring : war 파일을 Web Application Server에 담아 배포했음
- Spring Boot : Tomcat이나 Jetty같은 내장 WAS를 갖고 있어 jar파일로 간편한 배포 가능