백엔드/프레임워크

[토비의 스프링] 8장: 스프링이란 무엇인가?

박지환 2023. 3. 4. 15:40
토비의 스프링: Vol. 1: 스프링의 이해와 원리

스프링의 정의

스프링의 정의: 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

애플리케이션 프레임워크: 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크

스프링의 일차적인 존재 목적: 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해줌으로써 애플리케이션을 편리하게 개발하게 해주는 애플리케이션 프레임워크

경량급: 군더더기 없이 깔끔한 기술을 가진 프레임워크

자바 엔터프라이즈 개발을 편하게: 개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서도 애플리케이션의 핵심인 사용자의 요구사항, 즉 비즈니스 로직을 빠르고 효과적으로 구현하게 해주는 프레임워크

오픈소스: 스프링은 오픈소스의 장점(빠른 피드백)을 충분히 취하면서 동시에 오픈소스 제품의 단점과 한계(프로젝트의 중단)를 잘 극복하고 있는 전문적이고 성공적인 오픈소스 소프트웨어

스프링의 목적

자바의 근본적인 목적: 객체지향 프로그래밍을 통해 유연하고 확장성 좋은 애플리케이션을 빠르게 만드는 것

스프링의 목적: 경량급 프레임워크인 스프링을 활용해서 엔터프라이즈 애플리케이션 개발을 편하게 하는 것

엔터프라이즈 개발의 복잡함

복잡함의 근본적인 이유

  1. 기술적인 제약조건과 요구사항이 늘어나기 때문
  2. 엔터프라이즈 애플리케이션이 구현해야 할 핵심기능인 비즈니스 로직의 복잡함이 증가하기 떄문

기술적인 복잡함 + 비즈니스 로직의 복잡함 → 엔터프라이즈 개발의 복잡함

스프링은 비침투적인(non-invasive) 기술을 적용했음 → 기술적인 복잡함과 비즈니스 로직을 다루는 코드를 깔끔하게 분리할 수 있음

스프링의 기본 전략: 비즈니스 로직을 담은 애플리케이션 코드와 엔터프라이즈 기술을 처리하는 코드를 분리하는 것

기술적인 복잡함을 상대하는 전략

  • 문제 1: 기술에 대한 접근 방식이 일관성이 없고, 특정 환경에 종속적이다
  • 문제 2: 기술적인 처리를 담당하는 코드가 성격이 다른 코드에 섞여서 등장한다
  • 비즈니스와 애플리케이션 로직의 복잡함을 상대하는 전략

스프링의 모든 기술과 전략은 객체지향이라는 자바 언어가 가진 강력한 도구를 극대화해서 사용할 수 있도록 돕는 것

POJO 프로그래밍

스프링의 가장 강력한 특징과 목표: 분리됐지만 반드시 필요한 엔터프라이즈 서비스 기술을 POJO 방식으로 개발된 애플리케이션 핵심 로직을 담은 코드에 제공한다

스프링의 핵심: POJO

 

스프링 애플리케이션: POJO를 이용해서 만든 애플리케이션 코드와, POJO가 어떻게 관계를 맺고 동작하는지를 정의해놓은 설계정보로 이루어져 있음

스프링의 프로그래밍 모델: 유연하게 확장 가능한 오브젝트를 만들어주고 그 관계는 외부에서 다이내믹하게 설정해준다는 DI의 개념을 애플리케이션 전반에 걸쳐 적용하는 것

POJO(Plain Old Java Object): 자바의 단순한 오브젝트를 사용하자

POJO의 조건

  • 특정 규약에 종속되지 않는다: 객체지향 설계의 자유로운 적용이 가능한 오브젝트여야 함
  • 특정 환경에 종속되지 않는다: 환경에 독립적이여야 함

진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트

POJO 프로그래밍: POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법

POJO의 장점

  • 종속되지 않는다 → 깔끔한 코드
  • 자동화된 테스트에 유리함
  • 객체지향적인 설계를 자유롭게 적용할 수 있음

객체지향 프로그래밍은 지금까지 나온 프로그래밍 패러다임 중에서 가장 성공했고, 가장 많은 언어에 적용됐으며, 무엇보다도 엔터프라이즈 시스템에서와 같이 복잡한 문제 도메인을 가진 곳에서 가장 효과적으로 사용될 수 있음

스프링을 이용하면 POJO 프로그래밍의 장점을 그대로 살려서 엔터프라이즈 애플리케이션의 핵심 로직을 객체지향적인 POJO를 기반으로 깔끔하게 구현하고, 동시에 엔터프라이즈 환경의 각종 서비스와 기술적인 필요를 POJO 방식으로 만들어진 코드에 적용할 수 있음

 

POJO 프로그래밍을 지원하는 3가지 가능기술

IoC/DI, AOP, PSA(Portable Service Abstraction)

스프링의 기술들: 스프링 프레임워크가 만들어진 진정한 목표인 POJO 기반의 엔터프라이즈 개발을 편리하게 해주는 도구

제어의 역전(IoC) / 의존관계 주입(DI)

IoC/DI는 스프링의 가장 기본이 되는 기술이자 스프링의 핵심 개발 원칙

나머지 두 기술인 AOP와 PSA도 IoC/DI에 바탕을 두고 있음

DI를 사용하는 이유: 유연한 확장이 가능하게 하기 위해서

DI는 개방 폐쇄 원칙 (OCP)이라는 객체지향 설계 원칙으로 잘 설명될 수 있음

  • 확장에는 열려있고, 변경에는 닫혀 있음

DI의 활용 방법

  • 핵심기능의 변경 (전략 패턴)
  • 핵심기능의 동적인 변경 (런타임 시 유연하게 구현을 바꿀 수 있는 DI)
  • 부가기능의 추가 (데코레이터 패턴)
  • 인터페이스의 변경 (어댑터 패턴)
  • 프록시 (프록시 패턴)
  • 템플릿과 콜백
  • 싱글톤과 오브젝트 스코프
  • 테스트

애스펙트 지향 프로그래밍(AOP)

AOP는 객체지향 기술의 한계와 단점을 극복하도록 도와주는 보조적인 프로그래밍 기술

AOP의 적용 기법

  1. 스프링과 같이 다이내믹 프록시를 사용하는 방법 (데코레이터 패턴의 응용)
  2. 자바 언어의 한계를 넘어서는 언어의 확장을 이용하는 방법 (AspectJ 사용)

AOP의 적용 단계

  1. 미리 준비된 AOP 이용 (@Transactional, @Configurable 등의 스프링 AOP 이용)
  2. 전담팀을 통한 정책 AOP 이용 (개발 가이드라인이나 표준 정책을 따르는지 검사하는 작업에 AOP 활용)
  3. AOP의 자유로운 이용 (세부적인, 특정 기능 안에서 작동하는 AOP 기능 만들기)

포터블 서비스 추상화(PSA)

PSA(Portable Service Abstraction): 환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 기술

스프링은 일관성 있는 서비스 추상화 기술을 제공함 (트랜잭션 서비스 추상화 등)

정리

스프링의 정의: 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

스프링의 목적: 엔터프라이즈 시스템 개발의 복잡함을 줄여주는 POJO를 이용하여 엔터프라이즈 애플리케이션을 쉽고 효과적으로 개발할 수 있도록 지원해 주는 것

스프링의 가능기술: IoC/DI, AOP, PSA

주요 내용

  • 스프링은 그 개발철학과 목표를 분명히 이해하고 사용해야 한다
  • 스프링은 오픈소스 소프트웨어이며, 애플리케이션 개발의 모든 기술과 영역을 종합적으로 다루는 애플리케이션 프레임워크다
  • 엔터프라이즈 애플리케이션 개발의 복잡함은 비즈니스 로직과 엔터프라이즈 시스템의 기술적인 요구에 의해 발생한다. 기존의 접근 방법은 이 복잡도를 낮추지 못하여 자바의 객체지향적인 장점을 포기해야 한다는 문제점이 있다
  • 자바의 근본인 객체지향적인 원리에 충실하게 개발할 수 있으며, 환경과 규약에 의존적이지 않은 POJO를 이용한 애플리케이션 개발은 엔터프라이즈 시스템 개발의 복잡함이 주는 많은 문제를 해결할 수 있다
  • 스프링의 목적은 이런 POJO를 이용해 엔터프라이즈 애플리케이션을 쉽고 효과적으로 개발할 수 있도록 지원해주는 데 있다
  • POJO 방식의 개발을 돕기 위해 스프링은 IoC/DI, AOP, PSA와 같은 가능기술을 프레임워크와 컨테이너라는 방식을 통해 제공한다

 

Reference: http://www.yes24.com/Product/Goods/7516721

 

토비의 스프링 3.1 Vol. 1 스프링의 이해와 원리 - YES24

대한민국 전자정부 표준 프레임워크 스프링을 설명하는 책!단순한 예제를 스프링 3.0과 스프링 3.1의 기술을 적용하며 발전시켜 나가는 과정을 통해 스프링의 핵심 프로그래밍 모델인 IoC/DI, PSA, A

www.yes24.com