토비의 스프링 3.1 [들어가며] 파트 요약

들어가며

스프링이란 무엇인가?

애플리케이션의 기본 틀 - 스프링 컨테이너

스프링은 스프링 컨테이너 또는 애플리케이션 컨텍스트라고 불리는 스프링 런타임 엔진을 제공
스프링 컨테이너는 설정정보를 참고로 해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리
스프링 컨테이너는 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용한다.
스프링을 사용하려면 먼저 스프링 컨테이너를 다루는 방법과 스프링 컨테이너가 애플리케이션 오브젝트를 이용할 수 있도록 설정정보를 작성하는 방법을 알아야 한다.

공통 프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP

프레임워크는 애플리케이션을 구성하는 오브젝트가 생성되고 동작되는 방식에 대한 틀을 제공해 줄 뿐 아니라, 애플리케이션 코드가 어떻게 작성돼야 하는지에 대한 기준도 제시해준다. 이런 틀을 보통 프로그래밍 모델이라고 한다.

  • 3가지 핵심 프로그래밍 모델
    1. IoC/DI: 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델
      • 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고있음.
    2. 서비스 추상화: 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나고 유연한 애플리케이션을 개발 가능
    3. AOP: 코드에 산재해서 나타나는 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델 - 깔끔한 코드 유지 가능.

기술 API

다양한 역역에 바로 활용될 수 있는 기술 API를 제공.
(UI, 웹 프레젠테이션 계층, 비즈니스 서비스 계층, 기반 서비스 계층, 도메인 계층, 데이터 액세스 계층 등에 필요한 주요 기술을 일관된 방식으로 사용할 수 있게 지원해주는 기능과 전략 클래스등을 제공)
스프링의 모든 기술은 표준 자바 엔터프라이즈 플랫폼(JavaEE)에 기반을 두고 있음.

스프링을 사용한다는 것은 위의 3가지 요소를 적극적으로 활용해서 애플리케이션을 개발한다는 뜻임
클래스는 스프링 컨테이너 위에서 오브젝트로 만들어져 동작하게 만들고, 코드는 스프링의 프로그래밍 모델을 따라서 작성하고, 엔터프라이즈 기술을 사용할 때는 스프링이 제공하는 기술 API와 서비스를 활용하도록 해주면 된다.

스프링의 성공요인

스프링을 통해 얻게 되는 두 가지 중요한 가치

단순함

스프링은 EJB라는 강한 권위를 가졌던 표준 기술을 비판하면서 등장(EJB는 불필요하게 복잡한 기술)
스프링이 지향하는 것은 목적을 이룰 수 있는 가장 단순하고 명쾌한 접근 방법.
스프링은 자바라는 언어의 근본에서 기존 엔터프라이즈 기술의 문제에 대한 해법을 찾음

자바는 이상적인 객체지향 언어라는 캐치프레이즈를 내세우며 등장했지만, 시간이 지나고 자바의 기술이 복잡해져 가면서 자바의 본질인 객체지향 언어라는 특징을 점점 잃어버렸다.
스프링은 이 잃어버린 객체지향 언어의 장점을 다시 개발자들이 살릴 수 있도록 도와주는 도구 스프링이 강력하게 주장하는 것은 가장 단순한 객체지향적인 개발 모델인 POJO 프로그래밍

유연성

스프링의 유연성으로 인해 다른 많은 프레임워크와 편리하게 접목돼서 사용 가능
스프링은 프레임워크를 위한 프레임워크 또는 여러 프레임워크를 함께 사용하게 해주는 접착glue 프레임워크라고도 불림.
스프링 개발 철학 중 하나는 “항상 프레임워크 기반의 접근 방법을 사용하라”이다.
스프링을 제대로 사용하려면 스프링을 필요에 맞게 확장해서 자신만의 프레임워크를 만들어서 사용할 줄 알아야 한다.

스프링 학습과 활용의 어려움

스프링을 효과적으로 익히는 방법

  1. 스프링의 핵심 가치를 이해하고, 스프링 스스로가 그 가치를 어떻게 적용해서 만들어져 있는지를 이해하는 것.
    • 가장 중요한 핵심 가치와 그것이 가능하도록 도와주는 세 가지 핵심 기술이 있음.
    • 스프링이 강조하는 중요한 프로그래밍 모델이 있음
  2. 스프링의 기술에 대한 지식과 선택 기준 정립
    • 다양한 선택의 문제를 각 기술영역별로 효과적으로 다루는 법을 배우는 것
  3. 스프링의 적용과 확장
    • 스프링의 다양한 기술이 어떻게 실제 애플리케이션 개발에 어떤 식으로 ㅅ적용해야 하는지를 공부해야 한다.
    • 스프링이 제공하는 기능을 확장하거나 추상화해서 사용하는 방법을 알아야 한다.