Spring Framework란?
by mignon25Spring Framework 를 살펴보기 전에 먼저 Framework 의 개념을 알아보자.
Framework 란?
프로그래밍을 하기 위한 어떠한 틀이나 구조.
하나의 애플리케이션이 완성된 건물이라고 한다면, Framework 는 그 건물의 구조라고 할 수 있다.
하나의 완성된 애플리케이션을 만드려고 할 때, 제로부터 시작한다면 개발자가 모든 것을 세팅하고 만들어나가야 할 것이다.
그러나 건물의 뼈대처럼 구조화된 무언가가 있는 상태부터 시작한다면, 개발자는 이 구조에 본인의 애플리케이션 목적에 맞게 살을 붙여나가기만 하면 될 것이다.
다시 말해 프레임워크가 개발 편의성을 위한 여러 기능들이 이미 구현된 여러 기능들을 제공할 것이고, 개발자는 이미 만들어진 기능들을 활용하여 개발하고자 하는 애플리케이션의 핵심 로직에만 집중하여 개발할 수 있을 것이다.
Java 의 Collection Framework 에 Framwork 라는 단어가 들어간 것도 이와 같은 맥락이다.
데이터를 효율적으로 관리하기 위해 여러 가지 자료구조의 개념을 활용할 수 있을 것이다.
Collection Framework 는 이미 이러한 자료구조의 개념을 적용한 인터페이스와 이를 구현한 구현체들의 집합이다.
어떠한 자료구조 개념을 이용하기 위해 그 자료구조의 기능을 처음부터 개발자가 구현할 필요없이 이미 구현된 Collection 을 활용하기만 하면 되는 것이다.
Framework 의 장단점
장점
- 효율적으로 코드를 작성할 수 있다.
- 서로 다른 애플리케이션 간의 통신이나, 데이터를 데이터 저장소에 저장하는 등의 다양한 기능들을 이미 Framework 가 라이브러리 형태로 제공함으로써, 개발자는 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있다.
- 정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있다.
- 정해진 Framework 규약에 맞게 코드를 작성하기 때문에, 유지보수가 필요한 경우 더 빠르고 쉽게 문제점을 파악할 수 있다.
- 협업 시에 다른사람이 작성한 코드를 파악하는 것도 수월하게 해 준다.
- 유지보수 이외에도, 비슷한 기능을 개발할 때, 코드의 재사용이 용이하고, 확장이 수월해진다.
단점
- 내가 사용하고자 하는 Framework 에 대한 학습이 필요하다.
- 자유롭고 유연한 개발이 어렵다.
- 집을 만들 때 구조화된 뼈대를 이용한다면 쉽게 살을 붙일 수는 있겠지만, 이미 구조가 정해진 뼈대의 구조를 내 맘대로 바꾸기는 어렵다.
Framework vs Library
Library : 애플리케이션을 개발하는 데 필요한 기능을 미리 구현해놓은 집합체
라이브러리도 필요한 기능을 미리 구현해 놓은 것이고 프레임워크도 필요한 기능을 제공하는 것이라고 했는데 이 둘의 차이는 무엇일까?
자동차를 예로 들자면,
차체를 구성하는 Frame, 그리고 바퀴나 핸들, 엔진 같은 다양한 부품들이 모여 하나의 자동차를 이루게 된다.
여기서 Framework 는 차체를 구성하는 Frame 이라고 할 수 있고,
Library 는 자동차에서 다양한 기능을 제공하는 부품들이라고 할 수 있다.
실제로 자동차를 구매하고 차체를 변경하는 것은 쉽지 않지만, 바퀴나 와이퍼, 라이트 등은 쉽게 교체가 가능하다.
다시 말해, 한 번 정해진 Framework 를 교체하는 일은 어렵지만, Library는 쉽게 교체가 가능하며, 필요한 Library 들을 선택적으로 사용할 수 있다.
또 다른 예시로,
라이브러리는 작은 도구라고 할 수 있다.
종이를 자르기 위한 가위나, 못을 박기 위한 망치 등 이러한 가위나 망치에 해당하는 라이브러리를 가져와서 이용하여 개발자는 종이를 자르는 작업, 또는 못을 박는 작업을 한다. 가위나 망치 등은 개발자가 직접 가져와서 직접 활용한다.
=> Library는 애플리케이션 흐름의 주도권이 개발자에게 있다.
반면 프레임워크는 비행기라고 할 수 있다.
비행기 또한 하늘을 날기 위해 사람이 만들어낸 도구이다. 그러나 비행기를 움직이기 위해 사람은 단지 비행기를 조종하는 방법을 통해 비행기를 조작하는 것이지, 비행기의 동작 원리를 활용하는 것이 아니다.
프레임워크 역시 수많은 기능들이 이미 구조화되어 있는 상태이며, 개발자는 이 프레임워크를 사용하는 방법을 통해 프레임워크를 애플리케이션에 적용하는 것이라고 할 수 있다.
=> 애플리케이션 흐름의 주도권이 개발자가 아닌 Framework 에 있다.
이것 IOC(Inversion Of Control, 제어의 역전) 의 개념이다.
Spring Framework 를 통해서
- 객체 지향 설계 원칙에 맞게 재사용과 확장이 가능한 애플리케이션을 개발할 수 있다.
- 보다 나은 성능과 서비스의 안정성이 필요한 복잡한 기업용 엔터프라이즈 시스템의 구축을 가능하게 해준다.
Spring Framework 만의 장점
- POJO (Plain Old Java Object) 기반의 구성
- DI (Dependency Injection) 지원
- AOP (Aspect Oriented Programming, 관점 지향 프로그래밍) 지원
- Java 언어를 사용함으로써 얻는 장점
'Spring' 카테고리의 다른 글
| 스프링 컨테이너 (0) | 2023.04.05 |
|---|---|
| [Spring 특징] PSA (Portable Service Abstraction) (0) | 2023.04.04 |
| [Spring 특징] AOP (Aspect Oriented Programming) (0) | 2023.04.04 |
| [Spring 특징] POJO (0) | 2023.04.03 |
| [Spring 특징] IoC (Inversion of Control) 와 DI (Dependency Injection) (0) | 2023.04.03 |
블로그의 정보
Mignon'S Dev Log
mignon25