스프링이란?



스프링이란?

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


정의)


프레임워크 = 소프트웨어를 만드는 데 기본이 되는 골격 코드, 완전한 애플리케이션이 아니며 확장 또는 구현하여 완전한 애플리케이션으로 완성이 된다.  예시 ) EJB , Spring


스프링의 주요 전략


1. POJO를 이용한 가볍고 비침투적 개발

2. DI와 인터페이스 지향을 통한 느슨한 결합도

3. Aspect와 공통 규약을 통한 프로그래밍

4. Aspect와 템플릿을 통한 반복적이고 상투적인 코드 제거


핵심은 응집도를 높이고 결합도를 낮추는 것.


스프링 배우기 전 개념들


1. EJB (Enterprise Java Bean)


자바빈 ?

=  컴포넌트 기반의 소프트웨어 모델 스펙, 자바 객체를 재사용 가능하게 컴포넌트화 시킬 수 있는 코딩 방침을 정의. 


엔터프라이즈 자바 빈 ?

=  보안 , 트랜잭션 지원, 분산 컴퓨팅 등의 엔터프라이즈 어플리케이션 개발 시 필요한 다양한 서비스를 컨테이너에서 제공하며 개발자는  비즈니스 로직에 전념하도록 지원. 하지만 스펙 자체가 복잡하여 사용하기 힘들고, EJB 컨테이너가 없을 경우 사용이 불가능하며, 컨테이너가 변경될 경우 호환이 어렵다는 단점이 있음.



2. POJO

어떠한 제한에도 묶이지 않은 단순 자바 오브젝트





Spring Container




Container = EJB의 비즈니스 서비스 컨테이너의 기능은 유지하되 복잡성을 제거하고 객체들의 라이프사이클을 관리


1. Spring Container


- Spring Framework에서 Container 기능을 제공

- Spring Framework를 초기화 하는 역할

- XML에 등록된 Bean들의 라이프 사이클/ 의존 관리 담당



2. Inversion of Control/Dependency Injection (제어 역전/ 의존 주입)

 

IoC = 프로그램 코드에서 직접 객체를 생성하지 않고, 외부(컨테이너)에서 빈(Bean)을 생성하고 제공한다는 개념.


IoC의 구현 방법 2가지

  1. Dependency Lookup (DL)
    DL는 클라이언트가 컨테이너에서 생성한 객체를 검색하여 사용하는 방식

  2. Dependency Injection (DI)
    DI는 컨테이너가 자동으로 처리 수행

DL의 경우 Lookup을 하기 위한 코드를 구현해야 되지만, DI의 경우 컨테이너가 직접 Lookup을 수행하므로 DL만큼의 코드를 필요로 하지 않는다.



AOP(Aspect Oriented Programming) - 관점 지향 프로그래밍


코드에서 핵심 로직(비즈니스 로직)과 그 외의 로직(공통 관심 사항)을 분리시키고, 공통 관심 사항을 구현한 코드를 핵심 로직을 구현한 코드 안에 삽입하는 것이다.


공통 기능이란 주로 트랜잭션 적용이나 보안 검사, 로그를 남기는 것과 같은 코드를 말한다.


아래와 같이 공통 기능들이 있을 때 코드는 다음과 같이 만들어질 것이다. 이렇게 되면 핵심 로직외에도 많은 코드들이 들어가야 할테고, 공통 로직에 변경이 생기면 이를 구현하고 있는 많은 클래스에서 변경이 일어날 것이다.



이를 aop의 개념으로 이용하면 다음과 같이 핵심 로직과 공통 기능을 분리시킬 수 있으며, 이를 변경함에도 쉽고, 쉽게 로직에 추가할 수도 있다. 


 




+ Recent posts