토비의 스프링 3.1
1. 스프링이란 무엇인가?
1-1. 스프링이란?
- 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크.
- 애플리케이션 프레임워크는 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 기술 API 등을 제공. 스프링을 사용한다는 것은 이 세가지 요소를 적극적으로 활용하여 애플리케이션을 개발한다는 뜻.
1-2. 스프링 컨테이너
- 스프링은 스프링 컨테이너 또는 애플리케이션 컨텍스트라고 불리는 스프링 런타임 엔진을 제공
- 스프링 컨테이너는 설정 정보를 참고로해 어플리케이션을 구성하는 오브젝트를 생성 및 관리한다.
- 독립적으로 동작할 수 있지만 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용
1-3. 공통 프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP(Aspect Oriented Programming)
- Spring은 3가지 핵심 프로그래밍 모델을 지원
- IoC/DI, 서비스 추상화, AOP(관점 지향 프로그래밍)
- 프로그래밍 모델
- 어플리케이션을 구성하는 오브젝트가 생성되고 동작하는 방식에 대한 틀 제공
- 어플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준
- IoC/DI
- 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델.
- 스프링에서 동작하는 코드는 IoC/DI 방식을 따라 작성되어야 스프링이 제공하는 가치를 제대로 누릴 수 있다.
- 서비스 추상화
- 스프링을 사용하면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나며 유연한 어플리케이션을 만들 수 있는데 이것이 바로 서비스 추상화이다.
- 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법
- AOP(Aspect Oriented Programming)
- 애플리케이션 코드에 산재해서 나타나는 부가적은 기능을 독립적으로 모듈화하는 프로그래밍 모델.
- 스프링은 AOP를 이용해 다양한 엔터프라이즈 서비스를 적용하고 깔끔한 코드를 유지할 수 있게 해준다.
1-4. 기술 API
- 스프링은 애플리케이션 개발의 다양한 영역에 바로 활용할 수 있는 방대한 양의 기술 API를 제공.
- UI 작성, 웹 프리젠테이션 계층, 비즈니스 서비스 계층, 기반 서비스 계층, 도메인 계층, 데이터 엑세스 계층 등에서 필요한 주요 기술을 스프링에서 일관된 방식으로 사용할 수 있도록 지원해주는 기능과 전략 클래스 등을 제공.
- 스프링이 제공하는 API와 지원 기술은 모두 스프링의 프로그래밍 모델에 따라 작성되어 있기 때문에 이를 가져다 쓰는것만으로도 스프링의 프로그래밍 모델을 자연스럽게 적용 가능.
2. 스프링의 성공요인
- 견고하고 건전한 자바와 엔터프라이즈 개발의 핵심 가치에 충실.
- 이를 통해 이상적인 개발 철학과 프로그래밍 모델을 이해하게 되고 좋은 개발 습관을 체득하게 된다.
- 개발자가 스프링을 통해 얻게 되는 두 가지 중요한 가치가 있는데 그것이 단순함과 유연성이다.
2-1. 단순함 (simplicity)
- 스프링이 지향하는것은 목적을 이룰 수 있는 가장 단순하고 명쾌한 접근 방법
- Spring은 Java의 객체 지향언어에서 영향을 많이 받았는데, 시간이 지나고 자바의 기술이 복잡해지면서 자바의 본질인 객체 지향 언어라는 특징을 점점 잃어버림.
- Spring은 잃어버린 객체 지향 언어의 장점을 다시 살릴 수 있도록 POJO 프로그래밍 방식을 강력히 주장하고 이를 사용하고 있음.
2-2. 유연성(flexibility)
- 스프링은 유연성과 확장성이 매우 뛰어남.
- 다른 많은 프레임워크와 편리하게 접목되어 사용할 수 있음.
- 많은 양의 서드파티 프레임워크의 지원을 받는다.