JAVA/지식

[Spring] Spring Framework란?

우엥우아앙 2021. 1. 26. 10:09

Spring Framework란?

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

Spring Framework는 경량 컨테이너로 자바 객체를 담고 직접 관리한다. 객체의 생성 및 소멸 그리고 라이프 사이클을 관리하며 언제든 Spring 컨테이너로 부터 필요한 객체를 가져와 사용할 수 있다.

이는 Spring 이 IOC 기반의 Framework임을 의미한다.

 

 

Spring Framework는 IOC 기반이다. IOC란?

IOC는 Inversion of Control의 약자로 말 그대로 제어의 역전이다.

일반적으로 지금까지 프로그램은

객체 결정 및 생성 -> 의존성 객체 생성 -> 객체 내 메소드 호출하는 작업을 반복했다.

이는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 구성하는 직업에 직접적으로 참여한 것이다.

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

 

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

 

 

IOC의 구성요소 DI와 DL

IOC는 DI와 DL의 의해 구현된다.

 

DL(Dependency Lookup) - 의존성 검색

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

 

DI(Dependency Injection) - 의존성 주입

의존성 주입이란 객체가 서로 의존하는 관계가 되게 의존성을 주입하는 것이다. 객체지향 프로그래밍에서 의존성이란 하나의 객체가 어떠한 다른 객체를 사용하고 있음을 의미한다. 그렇다면 IOC에서의 DI는 무엇일까?

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

 

 

Spring Framework의 특징 POJO

POJO(Plain Old Java Object) 란 말 그대로 평범한 자바 오브젝트이다.

이전 EJB(Enterprise JavaBeans)는 확장 가능한 재사용이 가능한 로직을 개발하기 위해 사용 되었었는데 EJB는 한가지 기능을 위해 불필요한 복잡한 로직이 과도하게 들어가는 단점이 있었다. 그래서 다시 조명받은게 POJO이다. POJO는 getter/setter를 가진 단순 자바 오브젝트로 정의를 하고 있다. 이러한 단순 오브젝트는 의존성이 없고 추후 테스트 및 유지보수가 편리한 유연성의 장점을 가진다. 이러한 장점들로 인해 객체지향적인 다양한 설계와 구현이 가능해지고 POJO의 기반의  Framework가 조명을 받고 있다.

 

"POJO를 사용함으로써, 당신의 코드는 더욱 심플해졌고, 그로인해 테스트하기에 더 좋으며, 유연하고, 요구사항에 따라 기술적 선택을 바꿀 수 있도록 바뀌었다."

 

 

Spring Framework의 특징 AOP

AOP(Aspect Oriented Programming)란 말 그대로 관점 지향 프로그래밍이다.

대부분 소프트웨어 개발 프로세스에서 사용하는 방법은 OOP(Object Oriented Programming) 이다.

OOP는 객체지향 원칙에 따라 관심사가 같은 데이터를 한곳에 모아 분리하고 낮은 결합도를 갖게하여 독립적이고 유연한 모듈로 캡슐화를 하는 것을 일컫는다. 하지만 이러한 과정 중 중복된 코드들이 많아지고 가독성이, 확장성, 유지보수성을 떨어 뜨린다. 이러한 문제를 보완하기 위해 나온 것이 AOP이다.

AOP에서는 핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워 넣는 개발 형태이며 이렇게 개발함에 따라 무분별하게 중복되는 코드를 한 곳에 모다 중복 되는 코드를 제거 할 수 있어지고 공통기능을 한 곳에 보관함으로써 공통 기능 하나의 수정으로 모든 핵심기능들의 공통기능을 수정할 수 있어 효율적인 유지보수가 가능하며 재활용성이 극대화된다.

물론 AOP로 만들 수 있는 기능은 OOP로 구현 할 수 있는 기능이지만 Spring에서는 AOP를 편리하게 사용 할 수 있도록 이를 지원하고 있다.

 

참고 블로그 : https://khj93.tistory.com/entry/Spring-Spring-Framework%EB%9E%80-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC