[Spring]Spring Framework란?

Jihun·2022년 4월 15일
0

Spring

목록 보기
1/2
post-thumbnail

Framework란?(feat. Library)

Framework

소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합

프레임워크는 소프트웨어 어플리케이션이나 솔루션의 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협엽화된 형태로 제공하는 소프트웨어 환경을 말합니다.

앱/서버 등의 구동, 메모리 관리, 데이터베이스 연동 등의 공통된 부분은 프레임워크가 알아서 관리하며, 개발자는 서비스별로 필요한 부분만 프레임 워크가 정해준 방식으로 코드를 작성하여 애플리케이션을 완성해야 합니다.

Library

단순 활용 가능한 도구들의 집합

라이브러리는 개발자가 어떠한 기능을 수행하기 위해서 도움을 주는 또한 필요한 것을 제공해 주는 역할을 합니다.

미리 작성된 코드, 변수, 함수, 클래스가 포함될 수 있고, 개발자가 개발하는데 필요한 것들을 모아둔 도구들의 나열로 필요할 때 호출하여 사용하는 방식을 취하고 있습니다.

프레임워크와 라이브러리의 차이

가장 큰 차이점은 코드 흐름의 제어권입니다.

프레임워크는 전체적인 흐름을 자체적으로 가지고 있으며, 개발자가 그 안에 필요한 코드를 작성하는 반면에 라이브러리는 사용자가 흐름에 대해 제어를 하며 필요한 상황에 가져다 쓰는 식입니다.

프레임워크의 장/단점

장점

  • 체계적인 코드관리로 유지보수가 용이하다.
  • 기본설계 및 기능 라이브러리를 제공하여 개발 생산성이 높다.
  • 코드에 대한 재사용성이 높다.
  • 추상화된 코드 제공을 통해 확장성이 좋다.

단점

  • 학습난이도가 높다.
  • 기본 설계된 구조에 의해 자유로운 개발에 한계가 있다.
  • 사용하지 않는 기능에 대한 라이브러리가 포함될 수 있다.
  • 제공되는 기능만큼 프로젝트의 용량이 증가한다.

Spring Framework란?

자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈 급 애플리케이션을 만들기 위한 모든 기능을 종합적으로 제공하는 경량화 된 솔루션

엔터프라이즈급 개발이란 뜻대로만 풀이하면 기업을 대상으로 하는 개발이라는 말입니다. 즉, 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로 부터 행해지는 매우 큰 규모의 환경을 엔터프라이즈 환경이라 일컫습니다.

애플리케이션 프레임워크

애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애츨리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말합니다. 즉, 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크입니다.

Spring의 특징

경량컨테이너

자바 객체를 담고 있는 컨테이너입니다. 각각의 객체 생성, 소멸과 같은 라이프사이클을 관리하며 언제든지 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있습니다.

IOC(Inversion of Controller - 제어의 반전)

Spring이 갖고 있는 핵심적인 기능으로, 일반적으로 지금까지 프로그램은

객체 결정 및 생성 -> 의존성 객체 생성 -> 객채 내의 메소드 호출 하는 작업을 반복했습니다.
이는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 구성하는 작업에 직접적으로 참여한 것입니다.

즉, 모든 작업을 사용자가 제어하는 구조인 것입니다.

IOC에서의 객체는 자기가 사용할 객체를 선택하거나 생성하지 않습니다. 또한 자신이 어디서 만들어지고 어떻게 사용되는지 또한 모릅니다. 자신의 모든 권한을 다른 대상에 위임함으로 써 제어권한을 위임받은 특별한 객체에 의해 결정되고 만들어집니다.

즉, 제어의 흐름을 사용자가 컨트롤 하지 않고 위임한 특별한 객체에 모든 것을 맡기는 것입니다.

IOC란 기존 사용자가 모든 작업을 제어하던 것을 특별한 객체에 모든 것을 위임하여 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권이 넘어 간 것을 IOC, 제어의 역전 이라고 합니다.

DI(Dependency Injection - 의존성 지원) 패턴 지원

DL(Dependency Lookup) - 의존성 검색

컨테이너에서는 객체들을 관리하기 위해 별도의 저장소에 빈을 저장하는데 저장소에 저장되어 있는 개발자들이 컨테이너에서 제공하는 API 를 이용하여 사용하고자 하는 빈 을 검색하는 방법입니다.

DI(Dependency Injection) - 의존성 주입

의존성 주입이란 객체가 서로 의존하는 관계가 되게 의존성을 주입하는 것입니다. 객체지향 프로그램에서 의존성 이란 하나의 객체가 어떠한 다른 객체를 사용하고 있음을 의미합니다.

각 클래스 사이에 필요로 하는 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것입니다.

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

AOP는 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법입니다. 이는 문제를 해결하기 위한 핵심관심 사항과 전체에 적용되는 공통관심 사항을 기준으로 프로그래밍 함으로서 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 합니다.

이렇게 개발함에 따라 무분별하게 중복되는 코드를 한 곳에 모아 중복 되는 코드를 제거 할 수 있어지고 공통기능을 한 곳에 보관함으로써 공통 기능 하나의 수정으로 모든 핵심기능들의 공통기능을 수정 할 수 있어 효율적인 유지보수가 가능하며 재활용성이 극대화됩니다.

POJO(Plain Old Java Object) 지원

POJO는 특정 인터페이스를 구현하거나 또는 클래스를 상속하지 않는, gettet/setter를 가진 단순일반 자바 객체를 뜻합니다. 이러한 단순 오브젝트는 의존성이 없고 추후 테스트 및 유지보수가 편리한 유연성의 장점을 가집니다.
이러한 장점들로 인해 객체지향적인 다양한 설계와 구현이 가능해지고 POJO의 기반의 Framework가 조명을 받고 있습니다.

MVC (Model2)

비즈니스 로직 영역과 프레젠테이션 영역이 분리되어 있는 구현 방식입니다.

Model

Model에서는 데이터처리를 담당하는 부분입니다. Model부분은 Serivce영역과 DAO영역으로 나누어지게 되고 여기서 중요한 것은 Service 부분은 불필요하게 HTTP통신을 하지 않아야하고 request나 response와 같은 객체를 매개변수로 받아선 안된다. 또한 Model 부분의 Service는 view에 종속적인 코드가 없어야 하고 View 부분이 변경되더라도 Service 부분은 그대로 재사용 할 수 있어야 한다.

Model에서는 View와 Controller 어떠한 정보도 가지고 있어서는 안된다.

View

View는 사용자 Interface를 담당하며 사용자에게 보여지는 부분입니다. View는 Controller를 통해 모델에 데이터에 대한 시각화를 담당하며 View는 자신이 요청을 보낼 Controller의 정보만 알고 있어야 하는 것이 핵심이다.

Model이 가지고 있는 정보를 저장해서는 안되며 Model, Controller에 구성 요소를 알아서는 안된다.

Controller

Controller에서는 View에 받은 요청을 가공하여 Model(Service 영역)에 이를 전달한다. 또한 Model로 부터 받은 결과를 View로 넘겨주는 역할을 합니다. Controller에서는 모든 요청 에러와 모델 에러를 처리하며 View와 Controller에 정보를 알고 있어야한다.

Model과 View의 정보에 대해 알고 있어야한다.

이렇게 Model, View, Controller를 나누는 이유는 소스를 분리함으로서 각 소스의 목적이 명확해 지고 유지보수하는데 있어서 용이하기 때문이다. Model의 Service영역은 자신을 어떠한 Controller가 호출하든 상관없이 정해진 매개변수만 받는다면 자신의 비즈니스 로직을 처리할 수 있어야한다.
즉, 모듈화를 통해 어디서든 재사용이 가능하여야 한다는 뜻이다.
이말은 View의 정보가 달라지더라도 Controller에서 Service에 넘겨줄 매개변수 데이터 가공만 처리하면 되기 때문에 유지보수 비용을 절감 할 수 있는 효과가 있다. 또한 Service영역의 재사용이 용이하기 때문에 확장성 부분에서도 큰 효과를 볼 수 있는 장점이있다.

SpringFramework Module

Spring Core

Spring Framework의 핵심 기능을 제공 하며, Core 컨테이너의 주요 컴포넌트는 Bean Factory입니다. Bean Factory는 IOC패턴을 적용하여 객체 구성 부터 의존성 처리까지 모든 일을 처리하는 역할을 합니다.

Spring Context

Spring을 컨테이너로 만든 것이 Spring core의 BeanFactory라면, Spring을 Framework로 만든 것은 Context module이며, 이 module은 Application 생명주기 이벤트, 유효성 검증 등을 지원함으로써 BeanFactory의 개념을 확장합니다.

Spring AOP

설정 관리 기능을 통해 AOP 기능을 Spring Framework와 직접 통합 시킵니다.

Spring DAO

DAO란 Data Access Object의 약자로 Database Data에 접근하는 객체입니다. Spring JDBC DAO는 추상 레이어를 지원함으로써 코딩이나 예외처리 하는 부분을 간편화 시켜 일관된 방법으로 코드를 짤 수 있게 도와줍니다.

Spring ORM

ORM이란 Object relational mapping의 약자로 간단하게 객체와의 관계 설정을 하는 것입니다. Spring에서는 Ibatis, Hibernate, JDO 등 인기있는 객체 관계형 도구(OR도구)를 사용 할 수 있도록 지원합니다.

Spring Web

Spirng에서 Web context module은 Application module에 내장되어 있고 Web기반의 응용프로그램에 대한 Context를 제공하여 일반적인 Web Application 개발에 필요한 기본적인 기능을 지원합니다.

Spring MVC

Spring Framework는 자체적으로 MVC 프레임워크를 제공하고 있으며, 스프링만 사용해도 MVC기반의 웹 애플리케이션을 개발할 수 있습니다.

참고 블로그

profile
slow and steady

0개의 댓글