문홍의 공부장

[Spring] Spring Framework의 정의와 특징 본문

개발/Spring

[Spring] Spring Framework의 정의와 특징

moonong 2020. 2. 7. 12:52
반응형

Spring Framework 란?

자바 엔터프라이즈 개발을 위한 ①오픈소스 ② 경량급 ③애플리케이션 프레임워크.

① 엔터프라이즈 개발 용이 : 개발자가 복잡하고 실수하기 쉬운 Low Level에 많이 신경 쓰지 않으면서 Business Logic 개발에 전념할 수 있도록 해준다.
① 오픈소스 : 소프트웨어(S/w) 혹은 하드웨어의(H/W) 제작자의 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어, 오픈 소스 라이선스에 준하는 모든 통칭을 일컫는다. (소스가 공개되어 여러 개발자가 플랫폼을 함께 개발, 구축, 보완해 나가는 시스템. )
② 경량급 : 단순한 웹컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있다.
③ 애플리케이션 프레임워크 : 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의
전 영역을 포괄하는 범용적인 프레임워크를 말한다.
cf) 프레임워크: 개발할 때 설계 기본이 되는 뼈대나 구조 / 환경 (문제 영역을 해결한 재사용, 확장 가능한 라이브러리.)

 

스프링의 주요 컴포넌트

  • POJO: POJO는 객체지향 원리에 충실하면서, 특정 환경이나 규약에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 객체이다. 스프링은 사용자가 만들 객체들에 대해서도 라이프사이클 관리를 위임해서 수행하며, 이들의 조합으로 어플리케이션을 만들 수 있다.

  • AOP: AOP는 애플리케이션 로직을 담당하는 코드에 남아있는 기술 관련 코드를 분리해서
    별도의 모듈로 관리하게 해주는 기술이다

  • DI : Spring은 객체지향에 충실한 설계가 가능하도록 단순한 객체형태로 개발할 수 있고,
    DI는 유연하게 확장 가능한 객체를 만들어 두고 그 관계는 외부에서 다이내믹하게 설정해준다.

  • PSA: 트랜잭션 추상화, OXM 추상화, 데이터 액세스의 Exception 변환기능 등 기술적인 복잡함은 추상화를 통해 Low Level의 기술구현부분과 기술을 사용하는 인터페이스로 분리한다. 예를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화 하므로 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 사용자는 이 모듈의 의존 없이 프로그램에 집중할 수 있다.

 

Spring Framework 의 특징

1. 경량 컨테이너
: 크기와 부하의 측면에서 경량
: 자바 객체의 생명주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라 할 수 있음

2. 제어 역행(IoC: Inversion of Control) 을 통해 어플리케이션의 느슨한 결합을 도모
: 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어, 필요에 따라 스프링에서 사용자의 코드를 호출한다.

3. 의존성 주입(DI: Dependency Injection)
: 설정파일을 통해 객체 간의 의존관계를 설정할 수 있다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우, 프레임워크가 서로 연결시켜준다.

4. 관점지향 프로그래밍(AOP: Aspect-Oriented Programming, 중복 코드 제거)
: 트랜잭션, 로깅, 보안 등 여러 모듈에서 공통적으로 사용하는 기능의 경우, 해당 기능을 분리하여 관리할 수 있다. => 비즈니스 로직과 기타 공통로직을 분리하여 비즈니스 로직에 집중할 수 있도록 함

5. 트랜잭션 관리 프레임워크
: 추상화된 트랜잭션 관리를 지원하며, 설정파일(xml, java, property 등)을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.

6. 영속성과 관련된 다양한 서비스를 제공
: myBatis, hibernate 등 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.

7. 모델-뷰-컨트롤러 패턴 (MVC)
: DispatcherServlet이 Controller를 담당하여, 각종 요청을 적절한 서비스에 분산시켜주며, 이를 각 서비스들이 처리하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.

8. POJO (Plain Old Java Object; 순수 자바 객체) 기반의 개발
: Spring 컨테이너에 저장되는 자바 객체는 특정 인터페이스를 구현하거나, 특정 클래스를 상속받지 않아도 된다.

 

스프링 모듈 다이어그램

위에서 보는 것 같이 우리가 웹을 만들기 위해 Spring을 사용하는 것으로 알고 있지만, Spring은 웹을 만드는 도구가 아니라 DI를 이용하여 JAVA 어플리케이션을 만들 수 있는 프레임워크 이다. 여기에서 추가적으로 웹 MVC모듈을 제공하여 웹을 효과적으로 만들수 있도록 도와주는 것 뿐이다.

References:

https://opentutorials.org/course/2428/13594
https://shlee0882.tistory.com/200
https://goddaehee.tistory.com/156

반응형