1. Framework
-뼈대나 구조를 제공 → 개성보다는 정형화된 구조로 기존 프로그램을 쉽게 작성할 수 있다.
-최적화 되어 있는 상태이기 때문에 생산성 및 성능이 우수하다 → 유지보수가 용이함.
-필요한 정보는 *메타 데이터(주로 XML[properties 가능])를 통해 제공
-컴포넌트의 모임으로 쉽고 빠르게 구현 가능
2. Spring Framework(Container)
: 계층구조 - 엔터프라이즈 / 확장밥법 - 화이트 박스 / 처리영역 - 통합(비즈니스, 퍼시스턴스, MVC까지 모두 지원가능)
특징
1) 프로그램이 가볍다
2) IoC(Inversion of control): 제어의 역행(객체 생성 및 관리), 어플리케이션의 느슨한 결합을 도모 → 유지보수 효율성 증가
3) AoP(관점지향 프로그램): 중복코드 최소화, 프로그래밍을 위한 풍부한 지원 → 유지보수의 효율성 증가
4) Container: 인스턴스를 제공, 어플리케이션 객체의 생명주기와 설정을 포함하고 관리 → *Reflection 기능
5) *Component: 간단한 컴포넌트의 조합으로 복잡한 어플리케이션을 구성하고 설정 할 수 있음
: Spring DI[Dependancy Injection: 의존성 주입 - 포함관계형성], Spring DL[Dependancy Lookup: 관계제공]
3. Spring Framework[Version]
: 버전이 높아질수록 제공 되는 라이브러리가 늘어나기 때문에 기능이 추가 된다.
: 내부적인 아키텍처가 조금씩 다르지만 거의 비슷하다
-2.5: SpringFramework의 가장 강력한 MVC 기능을 구성
-3.0: Security 기능: MVC 패턴에 있어서 권한 등의 보안 기능이 추가 >> 최소 사용 권장버전
-4.0: REST Service 기능 추가(클라이언트의 응답을 XML 외에도 JSON으로도 가능 / 스마트 기기의 데이터 전달 목적으로도 사용)
-5.0: Cloud 기능추가 >> 예로 윈도우 운영체제를 통해 PC 사용중 고장이 발생하면 재설치가 필요하고 데이터 증발의 우려가 존재하는데 이를 보완하기 위해 서버 시스템이 아닌 클라우드 시스템을 사용하여 개인 컴퓨터가 아닌 공용 컴퓨터에서 작업
스프링이 제공하는 주요 기능 간단 정리
DL(Dependency Lookup) - 의존성 검색
컨테이너에서는 객체들을 관리하기 위해 별도의 저장소에 Bean을 저장하는데 저장소에 저장되어 있는 개발자들이 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 Bean을 검색하는 방법.
DI(Dependency Injection) - 의존성 주입
의존성 주입이란 객체가 서로 의존하는 관계가 되게 의존성을 주입하는 것이다. 객체지향 프로그램에서 의존성이란 하나의 객체가 어떠한 다른 객체를 사용하고 있음을 의미한다. 그렇다면 IOC에서의 DI는 무엇일까?
바로 각 클래스 사이에 필요로 하는 의존관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것이다.
AOP(Aspect Oriented Programming)란 말 그대로 관점 지향 프로그래밍이다.
대부분 소프트웨어 개발 프로세스에서 사용하는 방법은 OOP(Object Oriented Programming)인데, OOP는 객체지향 원칙에 따라 관심사가 같은 데이터를 한곳에 모아 분리하고 낮은 결합도를 갖게 하여 독립적이고 유연한 모듈로 캡슐화를 하는 것을 일컫는다. 하지만 이러한 과정 중 중복된 코드들이 많아지고 가독성, 확장성, 유지보수성을 떨어뜨리게 되는데, 이러한 문제를 보완하기 위해 나온 것이 AOP다.
AOP에서는 핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워 넣는 개발 형태이며, 이렇게 개발함에 따라 무분별하게 중복되는 코드를 한 곳에 모아 중복 되는 코드를 제거 할 수 있어지고, 공통기능을 한 곳에 보관함으로써 공통 기능 하나의 수정으로 모든 핵심 기능들의 공통 기능을 수정 할 수 있는 효율적인 유지보수가 가능하여 재활용성이 극대화 된다.
*Reflection: 구체적인 클래스 타입을 알지 못해도 해당 클래스의 타입, 변수, 메소드에 접근할 수 있도록 해주는 Java API.
*Component: 컴포넌트는 프로그래밍의 한 부분을 의미하며 재사용이 가능한 최소 단위를 말한다. 그래서 객체지향언어를 사용할 때 자주 사용되며 재사용이 가능하기 때문에 컴포넌트 단위로 분류하거나 이동 가능하다는 특징이 있다. 이는 모듈(Module)과 혼동될 수 있는데 모듈은 특정 기능을 온전히 수행할 수 있도록 만들어 졌다면 그 모듈 내에서도 재사용이 가능한 단위가 컴포넌트라 할 수 있다.
*메타데이터(metadata): 데이터를 위한 데이터. 특정 정보 자산의 여러 측면을 기술하여 정보의 수명 주기 전반에 걸쳐 그 유용성을 개선하기 위한 정보.
댓글