학습 목표
•
스프링 부트 어플리케이션 개발
•
데이터베이스 접근을 위한 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
•