Search
Duplicate
🛕

Spring Boot 3 Quick Start

학습 목표

스프링 부트 어플리케이션 개발
데이터베이스 접근을 위한 Hibernate/JPA 사용
스프링 부트를 사용한 REST API 개발
스프링 부트를 사용한 MVC 어플리케이션 개발
CRUD 기능을 위한 데이터베이스 연결
어플리케이션 접근 제어를 위한 스프링 시큐리티 도입
자바 설정 관리를 위한 의존성 관리 도구 사용

스프링 부트 개요

스프링 부트는 스프링을 쉽게 사용할 수 있게 해주며 다음과 같은 걱정을 덜어준다.
의존성 관리 간소화
여러 서드파티 라이브러리 간의 버전 충돌로 이한 문제를 해결하기 위해서 여러 라이브러리들의 묶음 패키지를 제공한다.
starter 의존성 통합 모듈이 이에 해당하며 버전 관리가 간편하다.
간결한 환경 설정
번거로운 XML 설정없이 최소한의 설정으로 Spring을 사용할 수 있고 기본적인 설정을 자동으로 처리하므로 비용을 줄여준다.
운영 편의성
애플리케이션의 상태 모니터링, 로깅, 보안 설정 등 운영에 필요한 기능들을 제공한다.
내장 서버
내장 서버를 제공하여 별도의 서버 설정없이도 어플리케이션을 실행할 수 있다.
배포를 위해 War 파일을 만들어 톰캣에 띄울 필요가 없으며 JAR 파일에는 모든 의존성 라이브러리가 포함되어 외부 서버 없이도 어플리케이션을 실행할 수 있다.

스프링의 목적

자바 순수 객체를 사용한 가벼운 개발
약한 결합도를 촉진하기 위한 의존성 주입
불필요한 보일러플레이트 코드 최소화

스프링 모듈

Core Container
Spring Core & Beans
Spring Core & Beans 모듈은 DI와 IoC를 포함한 기본적인 스프링 프레임워크 클래스들을 포함하고 있다.
BeanFactory 모듈은 팩토리 패턴의 정교한 구현으로 프로그래밍 방식의 싱글톤을 사용할 필요를 없게 만들어 이로 하여금 설정과 의존성의 상세를 프로그램 코드로부터 분리한다.
Spring Context
코어와 빈 모듈이 제공하는 견고한 기반 위에 구축된다.
컨텍스트 모듈은 빈 모듈에서 기능을 상속받고 전역화, 이벤트 전파, 리소스 적재 및 서블릿 컨테이너에 의한 컨텍스트의 생성을 지원한다.
ApplicationContext 인터페이스는 Context 모듈의 핵심이다.
SpEL - Spring Expression Language
런타임에 객체 그래프를 쿼리하고 조작하는 강력한 표현 언어를 제공한다.
이는 속성 값 설정 및 가져오기, 속성 할당, 메서드 호출, 배열, 컬렉션 및 인덱서의 컨텍스트 액세스, 논리 및 산술 연산자, 명명된 변수, Spring의 IoC 컨테이너에서 이름별로 객체 검색을 지원한다.
Data Access/Intergration Modules
JDBC, ORM, OXM, JMS, Transactions 모듈로 구성되어 있다.
JDBC 모듈은 지루한 JDCB 코드를 작성하는 것과 데이터베이스 별 오류 구문을 분석을 수행할 필요를 없게끔 하는 JDBC 추상화 계층을 제공한다.
ORM 모듈은 널리 사용되는 통합 계층을 제공한다.
Spring이 제공하는 다른 모든 기능과 결합된 프레임워크 단에서 선언적 트랜잭션 관리 기능 ORM 패키지를 사용하면 이러한 모든 ORM 매핑을 사용할 수 있다.
OXM 모듈은 JAXB, Castor, XMLBeans, JiBX 및 XStream에 대한 Object/XML 매핑 구현을 지원하는 추상화 계층을 제공한다.
JMS(Java Message Service) 모듈은 메시지를 생산하고 소비하는 기능을 가지고 있다.
Transaction 모듈은 POJO와 특수 인터페이스를 구현하는 모든 클래스에게 프로그래밍 방식과 선언적 트랜잭션 관리를 지원한다.
Web Modules
Web, Web-Servlet, WebSocket, Web-Prtlet 모듈로 구성된다.
Spring의 웹 모듈은 멀티파트 파일 업로드 기능, 서블릿 리스너를 사용한 IoC 컨테이너 초기화와 웹 지향 어플리케이션 맥락 등을 제공한다.
외에도 스프링에서 원격으로 제공하는 웹 관련 부분(WebSocket, Web-Prtlet)들을 가지고 있다.
WebServlet 모듈은 웹 응용 프로그램에 대한 구현을 제공하는데 스프링 MVC 프레임워크는 도메인 모델 코드와 표현 계층 간의 분명한 분리를 제공하며 스프링 프레임워크의 다른 기능들을 통합하는 기능또한 지원한다.
Web-Portlet 모듈은 portlet 환경과 Web-Sevlet 모듈의 기능을 미러링하는데 사용하기 위한 MVC 구현을 제공한다.
Infrastructure
AOP와 Aspects, Instrumentation, Messaging 모듈 등이 있다.
스프링의 AOP 모듈은 관점 지향 프로그래밍 구현을 통해 메소드 인터셉터와 포인트컷들을 분명하게 코드로부터 분리해낸다.
Aspects 모듈은 AspectJ와의 통합을 제공한다.
Instrumentation 모듈은 Class Instrumentation 지원 및 클래스 로더 구현을 제공한다.
Test
Test 모듈은 JUnit 또는 TestNG를 사용하여 Spring 요소들의 테스트를 지원한다.
이것은 스프링 ApplicationContexts의 일관된 적재와 해당 컨텍스트의 캐싱을 제공한다.
또한 코드로부터 독립적으로 테스트하는 데 사용할 수 있는 목 객체를 제공한다.

Maven이란?

빌드 관리와 의존성을 위한 프로젝트 관리 도구다.
Maver 프로젝트 구조
Maver 주요 개념

Project Files

Application Properties
@Value()
Static Content
do not user src/main/webapp
Tmeplates
FreeMarker, Thymeleaf, Mustache

Spring Boot Starters

기본적인 의존성을 모아둔 것,, 우리가 찾지 않아도 됨..!

Spring Boot Starter Parent

이를 사용해서 버전을 지정해줄 수 있다.

Spring Boot Dev Tools

자동 재시작을 지원한다.

Spring Actuator

다음 작업들을 제공해준다.
어플리케이션을 상태를 확인하거나 관리하거나 모니터링하는 방법을 제공해준다.
그외의 지표들도 확인할 수 있게 해준다.
/actuator
/health
어플리케이션의 상태를 확인한다.
/info
기본값은 비어있다.
application 속성값들을 수정(info.app.~~)하면 적용된다.
/beans
Bean 목록에 대한 정보를 제공한다.
서버 내부 사항이므로 보안을 적용시키는 것이 좋다.

Run Spring Boot apps from the Command Line