초심 잡자... 채용 시즌을 핑계로 블로그를 너무 안씀...
Framework 란
추상적으로 말하면 뼈대
라고 할 수 있다.
우리는 건물의 뼈대를 보고 그 건물이 아파트인지, 빌딩인지 알 수 있을까? 더 자세하게 무슨 아파트인지 백화점인지 오피스텔인지 알 수 있을까? 아무래도 어려울 것이다.
하지만, 모든 건물에는 동일하게 뼈대가 필요하고 그 기반으로 다양한 건물의 형태가 나온다.
즉, 프레임워크는 동일한 작업이나 재사용할 수 있는 작업을 통합하는 역할을 한다. 그래서 표준 구조를 구현하는 클래스
와 라이브러리
의 모임이라고 할 수 있다.
그리고 다들 많이 사용하는 Spring이 프레임워크다.
Spring Framework
엔터파라이즈 급 애플리케이션을 만들기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션.
자바로 Enterprise Appliction을 만들 때 포괄적으로 사용하는 프로그래밍 및 Configuration Model을 제공해주는 Framework.
즉, 개발자가 복잡하고 실수하기 쉬운 Low Level에 신경 쓰지 않고 Business Logic개발에 전념할 수 있도록 함.
Enterprise System,
서버에서 동작하며 기업의 업무를 처리해주는 System
구조 - Spring 삼각형

Spring의 핵심이라고 할 수 있다.
POJO (Plain Old Java Object)
- 특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바 객체.
- 테스트하기에 용이하고 객체지향 설계를 자유롭게 적용할 수 있음.
PSA (Portable Service Abstraction)
- 환경과 세부 기술의 변경과 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 설계 원칙.
- 트랜잭션 추상화, OXM 추상화, 데이터 액세스의 Exception 변환 기능 등 기술적인 복잡함은 추상화를 통해 Low Level의 기술 구현 구분과 기술을 사용하는 인터페이스로 분리.
- 예를 들어, 데이터베이스 관계없이 동일하게 적용 할 수 있는 트랜잭션 처리 방식.
IoC/DI (Dependency Injection)
- 객체 간의 의존관계를 외부에서 설정하여 유연한 확장을 제공
- 객체는 의전하고 있는 개체를 직접 생성하거나 검색할 필요가 없음
AOP (Aspect Oriented Programming)
- 관심사의 분리를통해서 소프트웨어의 모듈성을 향상
- 공통 모듈을 여러 코드에 쉽게 적용 가능
특징
- 가볍다!
- Spring은 자바 객체를 담고 있는 컨테이너
- 그래서 Spring Container는 자바 객체의 생성과 소멸 등 이러한 라이프사이클을 관리
- 언제든지 Spring Container로부터 필요한 객체를 가져와 사용 가능
- 오픈 마인드! (for Transaction)
- JDBC나 JTA, 컨테이너가 제공하는 트랜잭션 등 어느 것을 사용하든 설정 파일을 통해 트랜잭션 관련 정보를 입력하기 때문에 트랜잭션 구현에 상관 없이 동일한 코드를 여러 환경에서 사용 가능.
- '뭘 좋아하는 지 몰라서 다 준비했어_1' (for 영속성)
- JDBC를 비롯하여 MyBatis, Hibernate, JPA 등 DB처리를 위해 널리 사용되는 라이브러리와의 연동을 지원.
- '뭘 좋아하는 지 몰라서 다 준비했어_2'
- JMS, 메일, 스케쥴링 등 엔터프라이즈 어플리케이션 개발에 필요한 여러 API를 설정 파일과 어노테이션을 통해서 쉽게 사용할 수 있도록 지원.
Spring Framework의 Runtime
