-
[Java Spring] 스프링 프레임워크란?Programming/Java 2022. 10. 21. 10:39반응형
스프링 프레임워크(Spring Framework)
✅ 프레임워크란?
소프트웨어의 기본적인 공통 구조를 재사용이 가용하게끔 협업화된 형태로 클래스를 제공하는 것
=> 프로그램을 만들기 위한 기본 틀- 스프링 프레임워크는 자바 플랫폼을 위한 오픈소스 어플리케이션 프레임워크로, 엔터프라이즈급 어플리케이션 개발을 위한 모든 기능을 종합적으로 제공화된 경량화된 솔루션
- 경량 컨테이너로 자바 객체를 담고 직접 관리하며, 객체의 생성 및 소멸, 라이프 사이클을 관리하는 객체 컨테이너
1. 스프링의 주요 특징
1) POJO (Plain Old Java Object) 방식
: 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 순수한 자바 객체를 의미
- 기존 Java EE의 EJB는 비즈니스 로직뿐만 아니라 트랜잭션, 보안 등 로우레벨의 로직까지 작성할 필요가 없어 효율적이었음
- 그러나, 한 두가지 기능을 위해 거대한 EJB를 상속/implements 해야 하거나, 종속성으로 인해 자바 코드를 다른 기능으로 대체하기 위해 전체 코드를 수정해야 하는 등의 문제점 발생
→ 객체 지향에 좀 더 집중하고, 특정 클래스와 라이브러리에 종속되지 않는 POJO 방식으로 이를 해결하고자 함2) IOC (Inversion of Control) 기반
: 객체 생성을 프레임워크가 유연하게 제어함으로써 객체간 결합도를 줄여, 유연성 증가, 코드 중복 제어, 유지 보수의 편리성 증가
- 일반적으로는 객체 생성 → 의존성 객체 생성 → 객체 내 메소드 호출 작업 반복함으로써 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 구성하는 작업에 직접적으로 참여
- 그러나, IOC 기반의 프로그래밍에서는 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권을 프레임워크에 넘김으로써 필요에 따라 사용자의 코드를 호출[ DL (Dependency Lookup), 의존성 검색 ]
- 컨테이너에서는 객체를 관리하기 위한 별도의 저장소에 빈(컨테이너에 의해 생성,관리되는 객체)을 저장
- 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 빈을 검색하는 방법
[ DI (Dependency Injection), 의존성 주입 ]
- 각 클래스 사이에 필요로 하는 의존 관계를 빈 설정 정보를 토대로 컨테이너가 자동으로 연결
- 각 클래스의 의존 관계가 소스코드 내부가 아닌 외부(스프링 프레임워크)에서 설정을 통해 정의되는 방식
- 이를 통해, 소스코드를 다양한 곳에서 사용할 수 있으며 모듈간 결합도를 낮춰 유연한 코드로 사용할 수 있음3) AOP (Aspect Oriented Programming), 관점 지향 프로그래밍
: 비즈니스 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화
- 소스코드상에서 계속 반복 사용되는 코드(cross-cutting concerns)를 aspect로 모듈화하고 비즈니스로직에 분리하여 재사용할 수 있게 하는 것
- 기존처럼 추상/부모/인터페이스 등으로 관리하는 것이 아닌, 종속 관계 없이 따로 분리하여 관리한다는 개념
- 공통 기능을 한 곳에 모아 보관함으로써 유지보수의 효율성과 코드의 재활용성이 극대화4) MVC (Model View Controller)
: 사용자 인터페이스와 비즈니스 로직을 분리하여 개발하는 방법론으로, 소스의 분리를 통해 각 소스의 목적을 명확히하고 유지보수를 용이하게 함
- Model: DB와 상호작용하여 비즈니스 로직을 처리하는 모듈 (Service, DAO)
- View: 사용자 interface를 담당하며 사용자에게 보여지는 결과화면을 반환하는 모듈
- Controller: 클라이언트 요청이 들어왔을 때 그 입력을 처리하고 어떤 로직을 실행할 것인지 제어하는 모듈2. 스프링의 구조
2-1. Core Container
: Bean의 생명 주기와 설정 그리고 처리 방법을 관리하는 코어 컨테이너로, 모든 스프링 모듈의 기반.
- Core/Beans: 스프링 프레임워크의 근간인 IoC/DI 기능 지원, BeanFactory기반으로 Bean클래스 제어
2-2. AOP and Instrumentation
- AOP: 분리되어야 하는 기능을 구현하는 코드를 깔끔하게 분리하기 위해 interceptor, pointcut등 제공
- Instrumentation: JVM에 에이전트를 추가하는 기능을 제공(톰캣용 위빙 에이전트 제공)2-3. Messaging
- Message, MessageChannel, MessageHandler 등 endpoint에서 메시지 매핑을 지원하는 API(프레임워크4)
2-4. Data Access/Integration
: JDBC, ORM, 트랜잭션 등 서비스 추상화를 이용해 쉽게 데이터에 접근하는 방법 제공(객체와의 관계를 설정)
- JDBC: JDBC기반 하의 DAO 개발을 더 효율적으로 할 수 있도록 추상화된 레이어 제공
- ORM: Object Relation Mapping프레임워크인 Hibernate, iBatis, JDO, JPA와의 통합 지원2-5. Web
: 다양한 MVC프레임워크와 사용 가능하지만, 자체적 Spring 모듈도 있으며 HTTP호출자는 REST API 등 모듈 제공
반응형'Programming > Java' 카테고리의 다른 글
[Java Spring] IoC, DI (의존성 주입 방법 xml, annotation) (0) 2022.10.30 [Java Spring] 스프링의 MVC 구조 (0) 2022.10.21 [Java 자바] 14. 람다식 (0) 2022.09.14 [Java 자바] 12. 멀티 스레드 ④ 스레드풀 (0) 2022.09.12 [Java 자바] 12. 멀티 스레드 ③ 데몬 스레드, 스레드 그룹 (0) 2022.09.12