프레임워크(Framework) 란?

소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것

즉, 복잡한 문제를 해결하거나 서술하는데 사용되는 기본 개념 구조(뼈대) 이다.

프레임워크는 라이브러리와 달리 애플리케이션의 틀과 구저를 결정할 뿐 아니라, 그 위에 개발된 개발자의 코드를 제어한다.

프레임 워크는 구체적이며 확장 가능한 기반 코드를 가지고 있으며, 설계자가 의도하는 여러 디자인 패턴의 집합으로 구성되어 있다.

 

라이브러리(Library)란 ?

자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합

소프트웨어 개발 시 사용되는 프로그램의 구성요소로, 공통으로 상요될 수 있는 특정한 기능(들)을 모듈화한 것

대상 환경(플랫폼)에서 바로 실행될 수 있는 형태로 제공

라이브러리 자체로는 사용자가 직접 일반적인조작으로실행할 수 없으며, 해당 라이브러리의 기능을 직접 호출하는 프로그램을 실행하거나, 사용자가 해당 라이브러리의 기능을 실행하는 API를 사용하는 프로그램을 직접 개발하여 실행

프로그래밍 언어에서 라이브러리를 사용할 수 있도록 소스코드 수준에서 인터페이스를 노출시킨 것이 API이다.

 

스프링 프레임워크란?

자바엔터프라이즈 개발을 위한 오픈 소스 애플리케이션 프레임워크

자바 객체를 담고 있는 경량의 컨테이너로서 자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리

DI(Dependency injextion), AOP(Aspect Oriented Programming), MVC(Model View Controller), 트랜잭션, 보안 등의 기능을 지원

Spring Framework는 IoC(Inversion of Control, 제어의 역전) 기반이다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어 필요에ㅜ 따라 스프링에서 사용자의 코드를 호출한다.

제어의 역전(IoC : Inversion of Control) ?

- 일반적인 프로그램은 객체의 생성 및 소면, 의존성 주입, 메소드 호출 등을 개발자가 제어하는 구조이다. 하지만, 기존 개발자가 모든 작업을 제어하던 것을 특별한 객체에 모든 것을 위임하여 객체의 생성부터 소멸까지의 생명주기, 의존성 주입 등 모든 객체에 대한 제어권이 넘어간 것을  IoC(제어의 역전)라 한다. 

 

특징

- 컨테이너 역할 : Spring 컨테이너는 객체의 LifeCycle을 관리하며, 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.

- 의존성 주입(DI : dependency Injection) : Spring은 설정파일이나 어노테이션을 통해서 객체 간의 의존관계를 설정한다.

- 관점지향 프로그래밍(AOP : Aspect-Oriented Programming) : 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리

- 트랜잭션 처리를 위한 일관된 방법 제공 : JDBC, JTA(JavaTransaction API) 등 어떤 트랜잭션을 사용하던 설정을 통해 정보를 관리하므로 트랜잭션 구현에 상관없이 동일한 코드 사용가능

- 영속성과 관련된 다양한 API를 지원 : JDBC 및 MyBatis, Hibernate, JPA(Java Persistence API) 등 데이터베이스 처리를 위한 ORM(Object Relational Mapping) 프레임워크와의 연동을 지원

- POJO(Plain Old Vaca Object) 지원 : 컨테이너에 저장되는 Java 객체는 특정한 인터페이스를 구현하거나, 특정 클래스를 상속받지 않아도 된다.

 

POJO(Plain Old Java Object)

- POJO란 객체지향적인 원리에 충실하면서, 특정 환경과 규약에 종속되지 않아 필요에 따라 재사용될 수 있는 방식으로 설계된 오브젝트라 할 수 있다.

- 조건

(1) 특정 규약에 종속되지 않는다.

- 지정된 클래스를 extends 하지 않는다.

- 정의된 인터페이스를 implement 하지 않는다.

- 정의된 Annotation을 포함하지 않는다.

- 특정 규약에 종속되지 않아 객체지향 설계가 용이하다.

(2) 특정 환경에 종속되지 않는다.

- 예를 들어 웹 환경에 종속되는 HttpServletRequest나 HttpSession과 관련된 API를 직접 이용하면 안된다.

- 다른 환경에서 사용하기 어려우며, 웹 서버 없이 독립적으로 테스트가 어렵다.

- 비지니스 로직과 기술적인 내용을 담은 웹 정보 코드가 섞여 이해하기 어려워진다.

(3) 단일 책임 원칙을 지키는 클래스

책임과 역할이 각기 다른 코드를 하나의 클래스에 넣는 경우 진정한 POJO라 할 수 없다.

 

 

Spring Framework의 구조

- Spring Core

Spring Core는 Spring Container을 의미하며 Spring Framework의 핵심이다.

- Spring Context

 context정보들을 제공하는 설정 파일로, JNDI, EJB, Validation, Scheduling, Internalization 등의 서비스

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

 공통의 관심 사항을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소해 주는 프로그래밍 기법

- Spring DAO(Data Access Object)

 JDBC 추상화계층을 제공하여 코드나 예외처리부분을 간편화 시켜 일관된 방법

- Spring ORM(Object Relational Mapping)

Hibernate, JPA(Java Persistence API), JDO(java Data Objects), MyBatis 등을 지원

- Spring Web

 일반적인 Web Application 개발에 필요한 기본적인 기능을 지원

- Spring MVC(Model-View-Controller)

Model2 구조로 Application을 만들 수 있도록 지원

+ Recent posts