스프링(Spring)

* 나의 스프링을 사용하는 이유

  • 나에게 스프링을 왜 사용하냐고 묻는다면 내 대답은 ‘SSAFY를 하면서 자바를 배우며 주력언어로 자연스럽게 잡히게 되었고, 웹 강의 시 스프링을 배우면서, 학부생 때 사용했던 Node.js에서 자연스레 멀어지고, 웹 서비스를 스프링을 이용하여 만들게 되었다.’라고 할 것이다.

* 스프링 등장배경

1) 스프링 이전에는 EJB(Enterprise Java Beans)을 사용하여 어플리케이션을 개발할 수 있었다.
2) 복잡한 스펙으로 인해 개발의 효율성이 떨어졌다.
3) Rod Johnson이 EJB를 사용하지 않고 엔터프라이즈 어플리케이션 개발하는 방법을 소개함(스프링의 시초)
- AOP나 DI같은 새로운 프로그래밍 방법론 소개
- POJO로 전언적인 프로그래밍 모델 가능
4) 경량 프레임워크 등장
- EJB가 제공하는 서비스를 지원
- ex) Hibernate, iBatis, Spring
5) POJO + Framework
- EJB 서버와 같은 무겁고 거창한 컨테이너 더이상 필요 X
- 오픈소스 프레임워크이므로 Free
- 스프링 프레임워크는 모든 플랫폼에서 사용 가능

* Spring Framework란 ?

  • 오픈소스 어플리케이션 프레임워크로, 엔터프라이즈급 어플리케이션을 개발하기 위한 모든 기능을 총합적으로 제공하는 경량화된 솔루션
  • 경량 컨테이너로 자바 객체를 담고 직접 관리한다. (객체의 생성 및 소멸, 라이프 사이클을 관리하며 Spring 컨테이너로부터 필요한 객체를 가져와 사용 가능)

* Enterprise Application 개발 시 복잡함을 해결하는 Spring 의 핵심

  • POJO
  • PSA
  • IoC/DI
  • AOP

1) POJO (Plain Old Java Object)

  • 특정 인터페이스를 구현하거나 또는 클래스를 상속하지 않는 일반 자바 객체 지원
  • 일반적인 자바 객체를 칭하기 위한 별칭 개념

2) IOC/DI (Dependency Injection)

  • 유연하게 확장 가능한 객체를 만들어 두고 객체 간의 의존관계는 외부에서 동적으로 설정 가능

3) AOP (Aspect Oriented Programming)

  • 문제를 바라노는 관점을 기준으로 프로그래밍하는 기법
  • 관심사의 분리를 통해서 소프트웨어의 모듈성을 향상