스프링의 유래
'스프링'이라는 이름의 유래는 이전에 Java EE(엔터프라이즈 에디션)의 스펙을 구현한 EJB가 있었습니다.
EJB 스펙을 따르는 오브젝트들은 객체지향적인 특징과 장점을 포기해야 했습니다.
EJB는 상속과 다형성 등의 혜택을 제대로 누릴 수 없었습니다.
그럼에도 EJB가 계속 사용되었던 이유는 엔터프라이즈 애플리케이션에서 반드시 필요로 하는 주요한 엔터프라이즈 서비스들을 애플리케이션 코드와 분리해서 독립적인 서비스로 사용할 수 있게 만들어졌다는 점입니다.
EJB가 기술의 복잡도가 증가해서 성능이 느렸던 것을 탈피하여, EJB 시절을 “겨울”에 빗대어 겨울 후의 “봄”으로 새로운 시작한다는 것을 의미하는 Spring(봄)이 되었습니다.
Spring이란 무엇인가?
Spring은 Framework입니다.
Framework를 그대로 번역하면 뼈대라는 뜻입니다.
컴퓨터 프로그래밍에서는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조입니다.
Spring Framework는 Java 애플리케이션 개발을 위한 포괄적인 인프라 지원을 제공하는 Java 플랫폼입니다.
Spring이 인프라를 처리하므로 애플리케이션에 집중할 수 있습니다.
Spring을 사용하면 "plain old Java objects"(POJO)에서 애플리케이션을 빌드하고 POJO에 엔터프라이즈 서비스를 침해하지 않고 적용할 수 있습니다.
이 기능은 Java SE 프로그래밍 모델과 전체 및 부분 Java EE에 적용됩니다.
프레임워크 모듈
Spring Framework는 약 20개의 모듈로 구성된 기능으로 구성되어 있습니다.
이러한 모듈은 다음 다이어그램과 같이 그룹화됩니다.
Core Container
Data Access/Integration
Web, AOP(Aspect Oriented Programming)
Instrumentation
Messaging
Test

Spring 주요 특징
POJO(Plain Old Java Object) 방식
POJO는 Java EE의 EJB 를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하며 나타난 용어다. 별도의 프레임워크 없이 Java EE를 사용할 때에 비해 특정 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기가 용이하고, 객체가 가볍습니다.
관점 지향 프로그래밍(Aspect Oriented Programming, AOP)
컴퓨팅에서 관점 지향 프로그래밍(aspect-oriented programming, AOP)은 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임입니다.
코드 그 자체를 수정하지 않는 대신 기존의 코드에 추가 동작(어드바이스)을 추가함으로써 수행하며, "함수의 이름이 'set'으로 시작하면 모든 함수 호출을 기록한다"와 같이 어느 코드가 포인트 컷(pointcut) 사양을 통해 수정되는지를 따로 지정합니다.
이를 통해 기능의 코드 핵심부를 어수선하게 채우지 않고도 비즈니스 로직에 핵심적이지 않은 동작들을 프로그램에 추가할 수 있게 합니다.
관점 지향 프로그래밍은 관점 지향 소프트웨어 개발의 토대를 형성합니다.
의존성 주입(Dependency Injection, DI)
프로그래밍에서 구성요소 간의 의존 관계가 소스코드 내부가 아닌 외부에서 설정을 통해 정의되는 방식입니다.
코드 재사용을 높여 소스코드를 다양한 곳에 사용할 수 있으며 모듈간의 결합도도 낮출 수 있습니다.
계층, 서비스 간에 의존성이 존재하는 경우 스프링 프레임워크가 서로 연결시켜줍니다.
제어 역전(Inversion of Control, IoC)
전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리의 코드를 호출해서 이용했습니다.
제어 역전은 이와 반대로 외부 라이브러리 코드가 개발자의 코드를 호출하게 됩니다.
즉, 제어권이 프레임워크에게 있어 필요에 따라 스프링 프레임워크가 사용자의 코드를 호출합니다.
생명주기 관리
스프링 프레임워크는 Java 객체의 생성, 소멸을 직접 관리하며 필요한 객체만 사용할 수 있습니다.
후기
백엔드 개발자를 하게 된다면 스프링은 들어볼 수밖에 없습니다.
하지만 스프링을 사용하는 이유를 잘 모르는 사람도 많습니다.
이미 큰 규모의 인프라가 구축되어 있어서 스프링 시장이 잘 죽지 않고 다른 언어에 비해 조만간 사라질 언어는 아니다 라는 느낌으로 사용하는 분들도 있습니다.
틀린 말은 아닙니다.
하지만 스프링이 왜 탄생하게 되었고, 그래서 다른 프레임워크들과 비교했을 때 장점이 무엇인지 알게 된다면 스프링의 특징을 잘 활용할 수 있다고 생각합니다.
참조 자료: Spring IO 페이지
참조 자료: Spring 나무위키
'스프링 > Spring' 카테고리의 다른 글
[Spring] POJO란 무엇인가? (0) | 2022.01.17 |
---|---|
[Spring] 스프링 DI란?(Dependency Injection) (0) | 2022.01.14 |
[스프링] 트랜잭션이란? (0) | 2022.01.12 |
[스프링] 기본 흐름과 주요 컴포넌트 (0) | 2022.01.02 |