스프링 프레임워크
스프링 프레임워크는 자바 웹 애플리케이션 개발을 위한 오픈 소스 프레임워크로, 기존 프레임워크보다 가벼운 경량 프레임워크(lightWeight Framework)이다.
스프링은 경량 컨테이너라고도 불리는데 '컨테이너'라고 하면 대표적으로 톰캣을 예로 들 수 있다. 톰캣은 서블릿 컨테이너라고 불리는데 그 이유는 톰캣은 서블릿의 생성, 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지고 서블릿을 관리하기 때문이다.
스프링도 마찬가지로 애플리케이션에서 사요되는 여러 가지 빈(클래스 객체)을 개발자가 아닌 스프링이 권한을 가지고 직접 관리한다. 스프링 이전에 사용되던 EJB(Enterprise JavaBeans)의 단점을 개선하고 좋은 점을 발전시킨 프레임워크이다.
스프링의 장점
- 생산성 우수
- 품질 보증
- 유지보수 용이
생산성 우수
- 엔터프라이즈 애플리케이션 구축을 위한 솔루션이지만 가볍고 모듈화 되어 있어서 필요한 부분 사용 가능
- POJO 클래스와 약간의 설정만으로도 개발이 가능하므로 개발 생산성을 높일 수 있다.
- 실제 스프링을 적용하면 적용하지 않은 코드의 1/3 정도의 코드만으로도 개발 가능
품질 보증
- 스프링 프레임워크는 이미 검증된 많은 아키텍처 및 디자인 패턴을 적용하여 만들어졌기 때문에 코드에 아키텍처를 구현하기 위한 코드나 디자인 패턴을 사용하기 위한 코드를 개발자가 만들 필요 없음
- 이는 개발에 일관성을 제공해주고 소프트웨어의 품질을 보증
유지보수 용이
- 스프링 프레임워크를 사용하여 작성된 애플리케이션들을 유지보수하는 데 소요되는 인력과 시간을 줄일 수 있음
- 그렇기 때문에 스프링 프레임워크는 여러 프레임워크 중 업계 표준으로 자리 잡을 수 있었음
스프링 특징
- EJB보다 가볍고 배우기 쉬우며 경량 컨테이너의 기능 수행
- 제어의 역행(IoC) 기술을 이용해 애플리케이션 간의 느슨한 결합 제어
- 의존성 주입(DI) 기능 지원
- 관점 지향(AOP) 기능 이용해서 자원 관리
- 영속성 관련 다양한 서비스 지원
- 많은 라이브러리와의 연동 기능 지원
의존성 주입(DI) : 클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법
제어의 역행(IoC) : 서블릿이나 빈 등을 개발자가 코드에서 생성하지 않고 프레임워크가 직접 수행하는 방법
관점 지향 프로그래밍(AOP) : 핵심 기능 외 부수 기능들을 분리 구현함으로써 모듈성을 증가시키는 방법
EJB(Enterprise JavaBean)
- 규모가 커지고 복잡한 애플리케이션 제작 위해 만들어진 기술
- extends, implements를 많이 사용해서 클래스 의존도가 높고, 복잡하고 제한이 많은 문제가 발생
- 별도로 종속되지 않고 간단한 자바 객체를 사용하자는 의도로 나온 것이 POJO
- Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 '무거운' 객체를 만들게 된 것에 반발하여 사용하게 된 용어가 POJO이다.
POJO (Plain Old Java Object)
- 자바 언어 사양 외에 어떠한 제한에도 묶이지 않은 자바 객체
- 특정 환경과 규약에 종속되지 않아 필요에 따라 재사용될 수 있는 방식으로 설계된 객체
- 즉, 다른 클래스를 상속받거나 인터페이스를 구현해야 하는 규칙이 없는 자바 클래스
- 미리 정의된 클래스 확장의 예
public class XXXX extends javax.servlet.http.HttpServlet {...}
JavaBean
- POJO의 대표적인 예
- 생성자와 Getter / Setter만 지닌 단순 자바 객체
IoC (Inversion of Control : 제어의 역전)
- 객체에 대한 제어권 문제
- 기존에는 개발자에게 제어권이 있었음
- new 연산자를 사용해서 원하는 곳에서 객체 생성
- 스프링 프레임워크에서는 객체의 제어권이 스프링에게 있고 인스턴스의 라이프 사이클(생성에서 소멸까지)을 개발자가 아닌 스프링 프레임워크에서 담당
DI (Dependency Injection) 지원
의존성을 주입하는 것. 의존 관계에 있는 객체를 생성, 조립해주는 기능을 의미한다.
각 계층이나 서비스들 사이 또는 객체들 사이의 의존성이 존재할 경우 스프링 프레임워크가 서로 연결시켜 준다. 또한 클래스 간의 약한 결합이 가능하다는 특징이 있다.
AOP (Aspect Oriented Programming) 지원
관점 지향 프로그래밍. 트랜잭션 로깅, 보안 등 여러 모듈에서 공통적으로 지원하는 기능을 분리하여 사용할 수 있다. 반복적인 코드를 줄이고 개발자가 비즈니스 로직에만 집중할 수 있도록 지원한다.
뛰어난 확장성
스프링 프레임워크의 소스는 모두 라이브러리로 분리되어 있어서 필요한 라이브러리만 가져다 사용하면 된다.
'Back > Spring' 카테고리의 다른 글
Spring - AOP(Aspect Oriented Programming) (0) | 2022.01.05 |
---|---|
Spring - Annotation(어노테이션) (0) | 2022.01.05 |
Spring - Singleton(싱글톤) (0) | 2022.01.05 |
의존성(Dependency) (0) | 2022.01.05 |
스프링 프레임워크 종류 및 특징 (0) | 2022.01.05 |