728x90
Spring Framework의 정의
- Spring은 Java Enterprise Edition 애플리케이션 개발에 가장 널리 사용되는 프레임 워크
- 즉 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
- 보안, 트랜잭션과 같은 엔터프라이즈 개발에서 요구되는 기술에 신경쓰지 않고 비지니스 로직에만 집중할 수 있게 만든다는 의미이다
- Spring의 핵심 기능은 모두 Java 애플리케이션 개발에 사용할 수 있다
- 복잡하지 않고 경량화 된 애플리케이션 프레임워크
스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
스프링이 말하는 스프링
- 스프링은 자바 엔터프라이즈 애플리케이션 생성을 쉽게 해준다.
- 그루비, 코틀링 등 JVM내의 대체언어들 까지 지원이 가능하다.
- 만들고자 하는 애플리케이션의 목적에따라 유연하게 아키텍쳐를 구성 할 수 있다.
- 스프링은 오픈소스로써, 오랜시간동안 성공적인 프레임워크로써 진화해 왔다.
- Spring Framework는 여러 개의 모듈로 나뉜다
- 애플리케이션은 필요한 모듈을 선택할 수 있음
- 핵심 모듈은 구성 모델(configuration model)과 의존 관계 주입 메커니즘(dependency injection mechanism)을 포함하고 있는 core container 모듈
- 그 외에도 Spring Framework는 다양한 애플리케이션 아키텍처에 대한 기본 지원을 제공
Spring의 특징 및 장점
1. 경량 Container
- 경량 컨테이너로써 자바 객체를 직접 관리한다
- 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다
2.POJO(Plain Old Jave Obejct) 기반의 구성
- 스프링은 내부적으로 별도의 API를 사용하지 않고, 일반적인 Java 코드를 이용하여 객체를 구성하는 방식 그대로 사용하고 있다.
- 이것은 코드를 개발할 때, 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다 라는 것을 의미한다
3. 제어의 역전 (IoC,Inversion of Control)
- 애플리케이션의 느슨한 결합•을 도모
- 컨트롤러의 제어권이 사용자가 아니라 프레임워크에 있어 필요에 따라 스프링에서 사용자의 코드를 호출한다
- 자바 코드로 직접 객체간의 결합을 코딩하는 것이 아니라 컨테이너로 처리하여 결합도를 낮춰준다
• 느슨한 결합(Loose Coupling)은 다른 클래스를 직접적으로 사용하는 클래스의 의존성을 줄이는 것이고 강한 결합(Tight Coupling)은 클래스와 객체가 서로 의존하고 있는 것이다.
일반적으로 강한 결합은 좋지않다. 왜냐하면 유연성과 코드의 재사용성을 줄이기 때문이다. 또한 변경을 더 어렵게 하고 시험 가능성(testability)을 지연시킨다.
4. DI(Dependency Injection, 의존성 주입)
- DI는 해당 개념을 구현하기 위해 사용하는 디자인 패턴 중 하나로, 이름 그대로 객체의 의존관계를 외부에서 주입시키는 패턴을 말한다
- 스프링에서는 ‘ApplicationContext’라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해주는 구조이다
- ApplicationContext가 관리하는 객체들을 Bean이라고 칭하고, 빈과 빈 사이의 의존 관계를 처리하는 방식으로 XML,Annotation, Jave등 다양한 방식이 사용된다
- 따라서 스프링을 사용하면 객체와 객체를 분리해서 생성하고, 이런 객체들을 엮는 작업을 하게된다(Wiring)
- 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜 준다
5. 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)
- 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점 으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다
- 트랜잭션이나 로깅,보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리 할 수 있다
- 중요한 부분과 덜 중요한 부분으로 나눠 관리할 수 있다
6. 트랜잭션의 지원
- DB를 연동해서 사용할 때 반드시 신경써야하는 부분은 트랜잭션이다. 상황에 따라 여러 코드를 작업해줘야 하는데, 스프링에서는 Annotation,XML로 설정할 수 있도록 지원해준다
결국 스프링을 사용하게 되는 목적들
- 스프링은 자바 및 JVM 환경의 대체언어들의 효율적이고 쉬운 엔터프라이즈 애플리케이션 개발 환경을 제공한다.
- 스프링은 만들고자하는 애플리케이션의 요구사항과 목적에 따라 유연하게 적용시킬수 있습니다.
- 스프링은 패키지들간의 순환 의존성이없는 깨끗한 프로젝트구성을 만들수 있다.
- 스프링은 직관적인 API를 제공한다.
- 스프링은 오픈소스로써 지속적인 업데이트가 되고 있으며 이전 버전들에대한 강력한 호환성을 지원한다.
스프링의 모토는 결국 "기본으로 돌아가자" 이다
스프링의 기술과 전략은 모두 객체지향이라는 자바언어가 가지는 강력한 도구를
극대화하여 사용할 수 있도록 돕는 것 이라고 할 수 있다
스프링은 단지 거들뿐이다.
'Spring' 카테고리의 다른 글
서블릿과 서블릿 컨테이너 (0) | 2023.03.07 |
---|---|
웹서버와 웹 애플리케이션 서버(WAS) (0) | 2023.03.07 |
IoC와 컨테이너 (0) | 2023.03.07 |
스프링 의존성 주입(Dependency Injection, DI) (0) | 2023.02.25 |
프레임워크란? (feat.라이브러리) (0) | 2023.02.24 |