Intro
웹 애플리케이션을 개발하기 위한 프레임워크는 Spring뿐만 아니라 Django, Express, Flask, Lalavel 등 다양한 프레임워크들이 존재한다.
또한, 프레임워크마다 사용하는 언어도 다르고, 개발 방법도 다르다.
Spring Framework는 약 20개의 모듈을 통해 다양한 기능을 제공하고 있다.
AOP, Aspect, Servelet, Web 등 여러 용어들을 아키텍처에서 확인할 수 있다.
스프링 프레임워크(Spring Framework)
스프링 프레임워크는 자바 플랫폼을 기반으로 하는 오픈 소스 애플리케이션 프레임워크로 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션이다.
Java 기반의 웹 애플리케이션 개발을 위한 프레임워크는 Spring Framework만 있는 것은 아니다.
Apache Struts2, JSF, Grails 등 Java 또는 JVM 기반의 웹 프레임워크가 존재하며 현재에도 새로운 기능이 업데이트되고 있다.
하지만, 유독 Spring Framework를 더 많이 사용하는 이유는 기업용 엔터프라이즈 시스템용 애플리케이션 개발에 있어 개발 생산성, 유지보수 등에 초점을 맞추어 선택하기 때문이다.
기업용 엔터프라이즈 시스템은 기업의 업무를 처리해주는 시스템으로 대량의 사용자 요청을 처리해야 하기 때문에 서버의 자원 효율성, 보안성, 시스템 안정성이나 확장성 등을 고려하여 시스템을 구축하는 것이 일반적이다.
따라서 수많은 기업들이 스프링을 선택하는 이유는 개발 생산성과 유지보수를 용이하도록 하는 스프링 프레임워크의 특징이 있기 때문이다.
Spring Framework의 특징
- POJO(Plain Old Java Object) 기반의 구성
- 의존성 주입(DI : Dependency Injection) 지원
- 제어의 역전(IoC : Inversion Of Control)
- 관점 지향 프로그래밍(AOP : Aspect Oriented Programming) 지원
- Java 언어를 사용하면서 얻는 다양한 장점
POJO(Plain Old Java Object)
위 이미지는 Spring 삼각형이라는 유명한 이미지로 Spring의 핵심 개념들을 모두 표현하고 있다.
POJO는 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는 것을 의미한다.
POJO를 직역하면 순수한 오래된 자바 객체라고 해석할 수 있다.
이는 어떠한 상속이나 구현 없이 속성과 기능만 있는 객체를 뜻한다.
DI(Dependency Injection: 의존성 주입)
DI는 의존하는 객체를 new 키워드를 통해 직접 생성하지 않고, 스프링 컨테이너에서 의존하는 객체를 전달받는 것을 뜻한다.
객체를 사용하기 위해서는 객체를 생성하고 인스턴스를 통해 사용할 수 있다. 인스턴스를 생성하기 위해 new 연산자를 통해 호출하는 방식이 있으나, 이를 스프링 컨테이너가 대신해주는 것을 말한다.
스프링 컨테이너(IoC 컨테이너) : 객체의 생성부터 소멸까지 관리하는 역할
빈(Bean) : 스프링 컨테이너가 관리하는 객체
IoC(Inversion of Control: 제어의 역전)
IoC는 개발자가 프레임워크 API를 사용하면서 설정 파일을 통해 객체의 생명주기, 클래스 등을 프레임워크가 직접 제어권을 갖게 되었다. 이처럼 개발자의 제어권이 프레임워크로 넘어가게 되어 제어의 역전이라 부른다.
IoC는 제어의 역전 또는 제어의 역행이라 불리며 스프링의 가장 핵심적인 기능으로 객체의 생명주기를 관리하고 의존성 주입(DI)을 통해 각 계층이나 서비스들 간의 의존성을 맞춰준다.
AOP(Aspect Oriented Programming: 관점 지향 프로그래밍)
AOP는 관점 지향 프로그래밍을 뜻하며 관심사 분리라고도 말한다.
이는 프로그램의 공통되는 부분과 핵심이 되는 부분을 나누어 바라보는 것을 뜻한다.
공통 관심 사항(Cross-cutting concern) : 중복되는 코드 (보안, 로그, 트랜잭션 등)
핵심 관심 사항(Core concern) : 비즈니스 로직
Java 언어를 사용하면서 얻는 다양한 장점
Java 언어에서는 변수의 타입, 메서드의 입출력 등에 사용되는 데이터의 타입을 특정하도록 강제한다.
이는 여러 사람이 함께 작업할 때, 다른 사람의 코드나 이전에 작성했던 코드를 수정, 보완하는 데 용이하고 웹 서버를 구축하는 데 있어 런타임에 발생하는 오류를 사전에 방지할 수 있다.
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring] 스프링 IoC와 DI란 무엇인가? (제어의 역전과 의존성 주입) (0) | 2022.10.21 |
---|---|
[Spring] POJO란 무엇인가? (1) | 2022.10.20 |
[Spring] 4-2. 스프링 동적 페이지 만들기 with Gradle (Thymeleaf 동작 구조) (0) | 2022.08.29 |
[Spring] 4-1. 스프링 웹 개발 기초: 시작 페이지와 정적 컨텐츠 with Gradle (0) | 2022.08.26 |
[Spring] 3. 스프링 프로젝트 빌드 및 실행하는 방법 with Gradle (0) | 2022.08.02 |