일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- CI/CD
- cd
- hibernate
- CKA
- dabase
- 프로그래머스
- 코딩테스트연습
- 알고리즘
- 뷰
- map
- 해시맵
- programmers
- CI
- 자바
- builder-pattern
- IntelliJ
- Vue
- vuejs
- Di
- DevOps
- JPA
- Spring
- docker
- Oracle
- SpringMVC
- java
- Kubernetes
- k8s
- superBuilder
- ORM
- Today
- Total
문홍의 공부장
[Spring] Spring Framework의 정의와 특징 본문
Spring Framework 란?
자바 엔터프라이즈 개발을 위한 ①오픈소스 ② 경량급 ③애플리케이션 프레임워크.
① 엔터프라이즈 개발 용이 : 개발자가 복잡하고 실수하기 쉬운 Low Level에 많이 신경 쓰지 않으면서 Business Logic 개발에 전념할 수 있도록 해준다.
① 오픈소스 : 소프트웨어(S/w) 혹은 하드웨어의(H/W) 제작자의 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어, 오픈 소스 라이선스에 준하는 모든 통칭을 일컫는다. (소스가 공개되어 여러 개발자가 플랫폼을 함께 개발, 구축, 보완해 나가는 시스템. )
② 경량급 : 단순한 웹컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있다.
③ 애플리케이션 프레임워크 : 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의
전 영역을 포괄하는 범용적인 프레임워크를 말한다.
cf) 프레임워크: 개발할 때 설계 기본이 되는 뼈대나 구조 / 환경 (문제 영역을 해결한 재사용, 확장 가능한 라이브러리.)
스프링의 주요 컴포넌트

-
POJO: POJO는 객체지향 원리에 충실하면서, 특정 환경이나 규약에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 객체이다. 스프링은 사용자가 만들 객체들에 대해서도 라이프사이클 관리를 위임해서 수행하며, 이들의 조합으로 어플리케이션을 만들 수 있다.
-
AOP: AOP는 애플리케이션 로직을 담당하는 코드에 남아있는 기술 관련 코드를 분리해서
별도의 모듈로 관리하게 해주는 기술이다 -
DI : Spring은 객체지향에 충실한 설계가 가능하도록 단순한 객체형태로 개발할 수 있고,
DI는 유연하게 확장 가능한 객체를 만들어 두고 그 관계는 외부에서 다이내믹하게 설정해준다. -
PSA: 트랜잭션 추상화, OXM 추상화, 데이터 액세스의 Exception 변환기능 등 기술적인 복잡함은 추상화를 통해 Low Level의 기술구현부분과 기술을 사용하는 인터페이스로 분리한다. 예를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화 하므로 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 사용자는 이 모듈의 의존 없이 프로그램에 집중할 수 있다.
Spring Framework 의 특징
1. 경량 컨테이너
: 크기와 부하의 측면에서 경량
: 자바 객체의 생명주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라 할 수 있음
2. 제어 역행(IoC: Inversion of Control) 을 통해 어플리케이션의 느슨한 결합을 도모
: 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어, 필요에 따라 스프링에서 사용자의 코드를 호출한다.
3. 의존성 주입(DI: Dependency Injection)
: 설정파일을 통해 객체 간의 의존관계를 설정할 수 있다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우, 프레임워크가 서로 연결시켜준다.
4. 관점지향 프로그래밍(AOP: Aspect-Oriented Programming, 중복 코드 제거)
: 트랜잭션, 로깅, 보안 등 여러 모듈에서 공통적으로 사용하는 기능의 경우, 해당 기능을 분리하여 관리할 수 있다. => 비즈니스 로직과 기타 공통로직을 분리하여 비즈니스 로직에 집중할 수 있도록 함
5. 트랜잭션 관리 프레임워크
: 추상화된 트랜잭션 관리를 지원하며, 설정파일(xml, java, property 등)을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.
6. 영속성과 관련된 다양한 서비스를 제공
: myBatis, hibernate 등 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.
7. 모델-뷰-컨트롤러 패턴 (MVC)
: DispatcherServlet이 Controller를 담당하여, 각종 요청을 적절한 서비스에 분산시켜주며, 이를 각 서비스들이 처리하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.
8. POJO (Plain Old Java Object; 순수 자바 객체) 기반의 개발
: Spring 컨테이너에 저장되는 자바 객체는 특정 인터페이스를 구현하거나, 특정 클래스를 상속받지 않아도 된다.
스프링 모듈 다이어그램

위에서 보는 것 같이 우리가 웹을 만들기 위해 Spring을 사용하는 것으로 알고 있지만, Spring은 웹을 만드는 도구가 아니라 DI를 이용하여 JAVA 어플리케이션을 만들 수 있는 프레임워크 이다. 여기에서 추가적으로 웹 MVC모듈을 제공하여 웹을 효과적으로 만들수 있도록 도와주는 것 뿐이다.
References:
https://opentutorials.org/course/2428/13594
https://shlee0882.tistory.com/200
https://goddaehee.tistory.com/156
'개발 > Spring' 카테고리의 다른 글
[Spring] ResponseBodyAdvice 를 이용하여 ControllerAdvice 활용하기 (1) | 2024.01.24 |
---|---|
@Primary 와 @Qualifier (2) - 활용편: 2개 이상의 데이터베이스 연결하기 (0) | 2023.05.31 |
[Spring] @Primary 와 @Qualifier 비교하고 이해하기 (0) | 2023.04.18 |
[Spring/Java] 회원가입 이메일 인증 구현하기 (13) | 2020.03.31 |
[Spring] 스프링 핵심 개념: Ioc(제어의 역전)과 DI(의존성 주입) (0) | 2020.02.07 |