Spring Framework 란?
Spring Framework란 자바 플랫폼 개발을 위한 오픈소스 애플리케이션 프레임워크로, 간단히 Spring이라고 불립니다. 동적인 웹사이트 개발을 위한 여러가지 서비스를 제공 하고 있습니다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로 사용되고 있습니다.
Spring 장점
👉 경량컨테이너
Spring은 객체를 담고 있는 컨테이너로 자바 객체의 생성, 소멸과 같은 라이프사이클을 관리하고, 언제든 필요한 객체를 가져다 사용 할 수 있도록 해줍니다.
👉 IoC(Invertion of Control: 제어의 역전)
말 그대로 해석하면 제어하는 주체가 바뀐다는 의미로 객체의 생성, 소멸, 의존관계 설정과 같은 라이프 사이클을 개발자가 아닌 프레임워크에서 대신 해주는 것을 의미합니다. IoC container(스프링컨테이너)를 설정한다는 것은 객체의 생성, 관계 설정, 제거 등의 작업을 프레임워크가 관리해주도록 Bean으로 등록해주는 것을 이야기 합니다.
👉 DI(Dependency Injection: 의존성 주입)
spring DI는 객체 간의 의존성을 개발자가 클래스 내부에서 직접 호출(new연산자)하는 것이 아닌 외부(스프링컨테이너)에서 객체를 생성해서 넣어주는 방식입니다. 이렇게 외부에서 직접 생성하여 관리하는 경우에는 객체간의 의존성을 줄일 수 있습니다.
public class Blog {
private Post post;
public Blog() {
// 기존 자바 프로젝트에서는 직접 객체를 생성하여 의존성을 해결합니다.
this.post = new Post();
}
}
public class Blog {
private Post post;
public Blog(Post post) {
// Spring에서는 외부에서 의존성을 주입받아 사용합니다.
this.post = post;
}
}
👉 AOP(Aspect Oriented Programming: 관점 지향 프로그래밍)
관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 의미입니다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말합니다.
스프링은 자체적으로 프록시 기반의 AOP를 지원하므로 트랜잭션이나 로깅, 보안등과 같이 여러 모듈에서 공통적으로 필요하지만 실제 모듈 핵심은 아닌 기능들을 분리하여 각 모듈에 적용할 수 있도록 합니다.
Spring 프레임워크 구동 순서
Request -> DispatcherServlet(web.xml) -> HandlerMapping(servlet-context.xml) -> Controller(Controller -> Service -> DAO -> DB -> DAO -> Service -> Controller) -> DispatcherServlet -> ViewResolver -> View -> Response
1. 클라이언트가 Request 요청을 하면 DispatcherServlet이 요청을 가로 챕니다.
이때 DispatcherServlet이 모든 요청을 가로채는것은 아니고 web.xml에 <url-pattern>에 등록된 내용만 가로 챕니다.
2. DispatcherServlet이 가로챈 요청을 HandlerMapping에게 보내 해당 요청을 처리 할 수 있는 Controller를 찾습니다.
3. 실제 로직을 처리 합니다. (Controller -> Service -> DAO -> DB -> DAO -> Service -> Controller)
4. 로직 처리 후, DispatcherServlet에 View 이름을 리턴합니다.
5. ViewResolver를 통해 결과를 출력할 View 화면을 검색합니다.
6. 처리 결과를 View에 송신하고, View화면을 최종 클라이언트에게 전송합니다.
👉 web.xml
WAS가 최초 구동 될 때 , WEB-INF 디렉토리에 존재하는 web.xml을 읽고, 그에 해당하는 웹 애플리케이션 설정을 구성
👉 servlet-context.xml
요청과 관련된 객체로, url과 관련된 controller나 @(어노테이션), ViewResolver, Interceptor, MultipartResolver등의 설정을 해줍니다.
👉 root-context.xml
View와 관련되지 않은 객체를 정의합니다. 즉 Service, Repository(DAO), DB 등 비즈니스 로직과 관련된 설정을 해줍니다.
Spring Boot란?
Spring Framework는 기능이 많은 만큼 환경 설정이 복잡한 편입니다. 이에 어려움을 겪는 사용자들을 위해 나온것이 Spring Boot입니다. Spring Boot는 Spring Framework를 사용하기 위한 설정의 만은 부분을 자동화하여 사용자가 보다 편하게 Spring을 사용 할 수 있도록 해줍니다.
즉, Spring Boot란 Spring 프레임워크를 쉽게 사용할 수 있도록 해주는 라이브러리 입니다.
Spring Boot 장점
👉 (Embeded Tomcat(내장톰캣)
Spring Boot는 내장 서버인 Emedded Tomcat을 사용하기 때문에 따로 Tomcat을 설치하거나 매번 버전 관리를 할 필요가 없고, jar 파일을 이용해 자바 옵션만으로 손쉽게 배포가 가능합니다.
👉 dependency 관리
Spring Boot에서 제공하는 spring-boot-stater 를 통해 개발자는 버전 충돌이나 복잡한 의존성 설정에 대해 걱정하지 않고 필요한 의존성을 쉽게 지정할 수 있습니다. 즉, 의존성 관리 및 버전 관리를 간편하게 할 수 있습니다.
👉 간결한 설정
Spring Boot는 번거로운 XML 설정이 필요 없으며, 최소한의 설정으로 Spring을 사용할 수 있습니다.
메인클래스를 실행하면 @Enableautoconfiguration에 의해서 spring.factories안에 있는 수많은 자동 설정들이 조건에 따라 적용 되어 bean들이 생성 되기 때문에 개발자가 많은 설정 작업을 하지 않아도 됩니다. 그렇기 때문에 설정으로 인한 불편사항을 해소하여 개발자는 애플리케이션 개발에 집중할 수 있습니다.
Reference : https://yummy0102.tistory.com/438
https://velog.io/@duckchanahn/Spring-이론정리
https://tadaktadak-it.tistory.com/108