- 스프링은 오픈소스 경량형 엔터프라이즈 급 프레임워크입니다
- Springboot는 Spring의 여러 복잡한 환경설정들의 Best Pratice를 기본으로
개발자들이 최소한의 설정으로 SrpingFramework를 쉽게 사용할 수있게 하기위해 등장하였습니다
- Spring의 역사
- EJB를 주 프레임워크로 사용할 때 불편했던 점들을 해소
- 2002년 로드 존슨이 출판한 도서 Expert One-on-One J2Ee Design and Development에 선보인 코드가Spring의 근간이 됨
- 이 도서를 읽은 개발자들이 로드존슨의 허가를 받아 프레임워크로 발전됨
- 2003년 6월 Apache 2.0 License로 공개됨
- 버전 약력
- 1.0 : 2004.03
- 2.0: 2006.10
- 2.5 : 2007.11 ← 많은 변화가 일어남
- 3.0 : 2009.12
- 3.1 : 2011.12
- 4.0 : 2013.12
- 5.0 : 2017
- 개요
- Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
- 표준화
- 대규모 프로젝트에서 관리가 편해지고 예측이 가능해진다
- 애플리케이션 프레임워크
- 특정 계층 / 기술 / 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말한다
- 경량급 프레임워크
- 단순한 웹 컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있다
- 엔터프라이즈 개발 용이
- 오픈소스
- Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
- 특징
- 컨테이너 역할
- Spring 컨테이너(Core)는 Java 객체의 Life Cycle을 관리하며, Spring 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다(Managed Service)
- DI 지원
- 설정파일 or 어노테이션을 사용하여 객체간의 의존관계를 설정
- AOP 지원
- 트랜잭션, 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서 적용할 수 있음
- 객체지향을 보완할 수 있는 새로운 프로그래밍 기법
- 서드파티 외부 기술들(범용적인 복잡한 기술들)을 스프링에서 사용할 수 있도록 추상화(단순화) 하여 스프링만의 특별한 기능으로 modify
- POJO(Plain Old Java Object) 지원
- Spring 컨테이너에 저장되는 Java객체는 특정한 인터페이스를 구현하거나, 특정 클래스를 상속받지 않아도 됨
- 트랜잭션 처리를 위한 일관된 방법을 지원
- JDBC, JTA 등 어떤 트랜잭션을 사용하던 설정을 통해 정보를 관리하므로 트랜잭션 구현에 상관없이 동일한 코드 사용가능
- 영속성(Persistence)과 관련된 다양한 API 지원
- MyBatis, Hibernate 등 데이터베이스 처리를 위한 ORM(Object Relational Mapping) 프레임워크들과의 연동 지원
- 영속성 컨텍스트
- 엔티티를 영구 저장하는 환경, 논리적 개념
- 애플리케이션 - DB 사이에서 객체를 보관하는 가상의 DB역할(→ 플러시 시점에 DB에 반영)
- 엔티티 매니저를 통해 영속성 컨텍스트에 접근
- J2SE에서는 1:1관계로 생각, SpringBoot에서는 N:1
- 버퍼링이나 캐싱을 위해 사용
- 컨테이너 역할
- Spring Framework 5
- 비동기가 핵심
- spring4 에서도 멀티스레딩의 개념으로 비동기를 지원
- 서블릿 3.1 스펙 이후
- 서블릿기반이므로 서블릿의 기술 모두 지원
- Reactive기반의 비동기(Reactor)
- 기존 Servlet Stack
- 새로운 Reactive Stack
- 두 기술을 동시지원
- MVC부터 데이터연동까지 end to end로 비동기를 모두지원해야 비동기이다
- 앞단 ~ 데이터 까지 전체를 비동기로 사용할 수 있음
- Spring and Maven
- Maven Build 사용
- 프로젝트 개발과 배포환경이 다름
- 결국 목적은 war와 같은 표준 산출물이 필요
- Maven
- Spring의 의존 라이브러리를 간편하게 추가할 수 있도록 의존성 주입 제공
- 그 외 오픈 소스 라이브러리도 Maven Repository에 업로드함으로서 대부분의 라이브러리를 자동으로 추가 가능함
- 프로젝트의 구조를 자동으로 구성
- Build를 통해 배포를 위한 파일을 생성
- Gradle
- Gradle은 Maven을 확장시킨 빌드툴로 같은 기술기반
- Ant와 Maven의 기능을 모두 포함하고 있다
- Ant의 장점
- 개발자가 자유롭게 빌드단위(target)을 지정하고 빌드 단위간 의존관계를 자유롭게 설정할 수 있다
- 자유로운것이 장점이자 단점
- Maven의 장점
- Convention Over Configuration 전략에 따라 프로젝트 빌드 과정에 대한 많은 부분이 이미 관례로 정해져 있다
- 특수한 상황에서는 맞지 않는 경우도 종종 발생
- Ant의 자유도와 Maven의 관례를 모두 흡수
- xml에 대한 이슈도 Groovy라는 언어를 사용해 해결
- Maven Build 사용
'BackEnd > Spring, SpringBoot' 카테고리의 다른 글
[SpringBoot/JPA]웹 서비스 구현 - 1) 엔티티 (0) | 2021.04.30 |
---|---|
[SpringBoot] Oauth2.0 jwt token 구현 (0) | 2020.01.03 |
[SpringBoot]Oauth2.0 jwt token (0) | 2019.12.25 |