Java 애플리케이션 개발을 편하게 할 수 있는 오픈소스 경량급 애플리케이션 프레임워크
어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법
객체를 주입받아 사용하면 외부에서 생성된 객체를 인터페이스를 통해 넘겨받는 것으로 결합도를 낮출 수 있고, 런타임시에 의존관계가 결정되기 때문에 유연한 구조를 가진다.
스프링 컨테이너는 각 객체 간 의존관계를 개발자가 정의한 Bean 등록 정보를 바탕으로 자동으로 주입해준다.
예시로, Controller에서 Service나 Repository 객체를 사용 시, new 키워드를 통해 컨트롤러에서 객체를 직접 생성하여 사용하지 않고 의존성을 주입을 통해 스프링 컨테이너에 생성된 객체를 받아 사용한다.
@Component, @Service, @Repository, @Controller
등의 어노테이션이 붙은 클래스들은 스프링 실행 시 스캔을 통해 개발자가 정의한 의존성 정보를 자동으로 bean 설정 정보에 등록을 하게 되어 의존성 주입이 동작한다.
장점
스프링 컨테이너가 피료에 따라 개발자 대신 Bean들을 관리해주는 행위
스프링은 xml 또는 어노테이션 방식으로 컨테이너에 bean을 등록하기만 하면, 스프링 컨테이너에서 bean의 생명주기를 전부 관리해준다.
객체에 대한 제어권이 컨테이너로 역전 되었기 때문에 제어의 역전이라 한다.
* 제어의 역전은 의존성 주입의 상위 개념이다.
장점
관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다.
* 모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지
PSA : 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조
Spring에서 동작할 수 있는 라이브러리들은 POJO원칙을 지키게끔 PSA형태의 추상화가 되어있음을 의미한다.
Spring은 Spring Web MVC, Spring Tracsaction, Spring Cache 등의 다양한 PSA를 제공한다.
* POJO (Plain Old Java Object) : 특정 기술에 종속되지 않는 순수한 자바 객체
특정 기술에 종속되어 있지 않기 때문에 유지보수가 쉽고, 의존성이 낮은 객체지향의 원리에 충실할 수 있다.
Srping 프레임워크는 POJO원칙을 따른 프레임워크이다.
스프링 프레임워크를 사용하기 위한 설정들을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 만든 프레임워크
구분 | 스프링 | 스프링부트 |
---|---|---|
사용 | 자바 기반 어플리케이션 개발 | 주로 Rest API 개발을 위해 사용 |
주요 기능 | 의존성 주입 | AutoConfiguration |
개발 유형 | 느슨하게 결합된 어플리케이션을 만드는데 도움이 된다. | 독립 실행형 어플리케이션을 만드는 데 도움이 된다. |
서버 종속성 | 서버를 명시적으로 설정해야한다. | Tomcat이나 Jetty와 같은 임베디드 서버를 제공 |
구성 | 수동 빌드 | 부트스트랩 가능한 기본 구성이 있음 |