솜나트무시브
SomnathMusib
10년이상의개발경험을갖고있으며여러언어를다룰수있는폴리글랏(polyglot)개발자.2015년부터스프링부트를사용하기시작했으며스프링부트애플리케이션개발에열성적으로참여하고있다.가르치는것을매우좋아하며복잡한내용을쉽게설명할때기쁨을느낀다.여가시간에는미디엄(https://musibs.medium.com/)에기술관련글을작성해서공유한다.
옮긴이머리말xi
베타리더후기xii
추천서문(조시롱)xiv
시작하며xvi
감사의글xviii
이책에대하여xx
표지에대하여xxiii
PARTI
CHAPTER1스프링부트시작하기3
1.1스프링부트소개4
__1.1.1왜스프링부트인가4
__1.1.2스프링부트는무엇인가5
__1.1.3스프링부트핵심기능6
__1.1.4스프링부트컴포넌트7
1.2코드예제9
__1.2.1메이븐vs.그레이들9
__1.2.2자바vs.코틀린10
__1.2.3데이터베이스지원10
__1.2.4롬복10
1.3스프링부트시작하기11
__1.3.1첫번째스프링부트프로젝트11
__1.3.2스프링부트프로젝트구조11
__1.3.3실행가능한JAR파일만들기22
__1.3.4JAR파일구조23
__1.3.5스프링부트애플리케이션종료24
1.4스프링부트기타개념25
__1.4.1스프링부트스타트업이벤트25
__1.4.2스프링부트애플리케이션이벤트감지26
__1.4.3커스텀스프링부트스타터29
__1.4.4커스텀자동구성29
__1.4.5실패분석기30
__1.4.6스프링부트액추에이터30
__1.4.7스프링부트개발자도구31
PARTII
CHAPTER2스프링부트공통작업35
2.1애플리케이션설정관리35
__2.1.1SpringApplication클래스사용36
__2.1.2@PropertySource사용37
__2.1.3환경설정파일40
__2.1.4운영체제환경변수47
2.2@ConfigurationProperties로커스텀프로퍼티만들기49
__2.2.1기법:@ConfigurationProperties를사용한커스텀프로퍼티정의50
2.3스프링부트애플리케이션시작시코드실행56
__2.3.1기법:스프링부트애플리케이션시작시CommandLineRunner로코드실행57
2.4스프링부트애플리케이션로깅커스터마이징62
__2.4.1기법:스프링부트애플리케이션의기본로깅이해및커스터마이징62
__2.4.2기법:스프링부트애플리케이션에서Log4j2사용67
2.5빈밸리데이션으로사용자입력데이터유효성검증72
__2.5.1기법:빈밸리데이션애너테이션을사용한비즈니스엔티티유효성검증72
__2.5.2기법:스프링부트애플리케이션에서커스텀빈밸리데이션애너테이션을사용한
POJO빈유효성검증76
CHAPTER3스프링데이터를사용한데이터베이스접근83
3.1스프링데이터소개83
__3.1.1왜스프링데이터인가?84
__3.1.2스프링데이터모듈85
3.2스프링부트애플리케이션데이터베이스연동설정87
__3.2.1기법:스프링부트애플리케이션에서관계형데이터베이스연동설정88
__3.2.2기법:스프링부트애플리케이션몽고DB설정93
__3.2.3기법:스프링부트애플리케이션에서관계형데이터베이스초기화96
3.3CrudRepository인터페이스이해101
__3.3.1기법:스프링데이터JPA를사용해서도메인객체를관계형데이터베이스에서관리
103
__3.3.2기법:커스텀스프링데이터리포지터리를만들어서관계형데이터베이스에서도메인
객체관리111
3.4스프링데이터를사용한데이터조회114
__3.4.1쿼리메서드정의114
__3.4.2기법:관계형데이터베이스에서스프링데이터JPA를사용한커스텀쿼리메서드정의
115
__3.4.3PagingAndSortingRepository를활용한페이징119
__3.4.4PagingAndSortingRepository인터페이스로데이터페이징및정렬119
__3.4.5@NamedQuery를사용하는쿼리123
__3.4.6기법:관계형데이터베이스에저장된도메인객체를NamedQuery로조회124
3.5@Query로쿼리문지정127
__3.5.1기법:@Query애너테이션을사용해서쿼리를정의하고관계형데이터베이스에저장
된도메인객체조회127
3.6CriteriaAPI사용132
__3.6.1기법:CriteriaAPI를사용해서관계형데이터베이스에저장된도메인객체관리132
3.7스프링데이터JPA와QueryDSL136
__3.7.1기법:관계형데이터베이스에저장된도메인객체를QueryDSL로관리136
__3.7.2기법:프로젝션142
3.8도메인객체관계관리144
__3.8.1기법:스프링데이터JPA를사용해서관계형데이터베이스에서다대다관계도메인객
체관리145
CHAPTER4스프링자동구성과액추에이터157
4.1스프링부트자동구성이해158
__4.1.1@Conditional애너테이션이해160
__4.1.2자동구성탐구163
4.2스프링부트개발자도구166
__4.2.1프로퍼티기본값167
__4.2.2자동재시작167
__4.2.3라이브리로드167
4.3커스텀실패분석기생성167
__4.3.1기법:커스텀스프링부트실패분석기생성168
4.4스프링부트액추에이터172
__4.4.1기법:스프링부트액추에이터설정173
__4.4.2스프링부트액추에이터엔드포인트이해174
__4.4.3스프링부트액추에이터엔드포인트관리177
__4.4.4Health엔드포인트탐구179
__4.4.5커스텀스프링부트HealthIndicator작성183
__4.4.6기법:커스텀스프링부트액추에이터HealthIndicator정의183
4.5info엔드포인트탐구186
__4.5.1기법:스프링부트액추에이터info엔드포인트설정186
__4.5.2기법:애플리케이션정보를표시하는커스텀InfoContributor190
4.6커스텀스프링부트액추에이터엔드포인트생성192
__4.6.1기법:커스텀스프링부트액추에이터생성193
__4.6.2스프링부트액추에이터메트릭200
__4.6.3커스텀측정지표생성203
__4.6.4프로메테우스와그라파나를사용한측정지표대시보드210
CHAPTER5스프링부트애플리케이션보안223
5.1스프링시큐리티소개224
5.2스프링부트와스프링시큐리티226
__5.2.1기법:스프링부트애플리케이션에서스프링시큐리티활성화226
__5.2.2필터,필터체인과스프링시큐리티231
__5.2.3스프링시큐리티아키텍처233
__5.2.4사용자인증236
__5.2.5스프링시큐리티자동구성239
5.3스프링시큐리티적용242
__5.3.1기법:스프링부트애플리케이션에서스프링시큐리티로그인페이지커스터마이징
242
__5.3.2기법:인메모리인증적용248
__5.3.3기법:JDBC인증설정255
__5.3.4기법:커스텀UserDetailsService적용259
__5.3.5기법:LDAP인증적용265
__5.3.6기법:HTTP기본인증적용270
CHAPTER6스프링시큐리티응용274
6.1스프링부트애플리케이션에HTTPS활성화276
__6.1.1기법:HTTPS활성화276
6.2스프링클라우트볼트를활용한비밀정보관리280
__6.2.1기법:스프링부트애플리케이션에서볼트를활용한비밀정보관리281
6.3사용자등록구현286
__6.3.1기법:스프링시큐리티를사용한사용자등록구현286
6.4이메일확인296
__6.4.1기법:사용자이메일확인297
6.5로그인시도횟수제한309
__6.5.1기법:로그인시도횟수제한309
6.6리멤버미기능구현316
__6.6.1기법:스프링시큐리티를사용한리멤버미구현316
6.7리캡차구현320
__6.7.1기법:구글리캡차적용321
6.8구글오센티케이터2단계인증328
__6.8.1기법:2단계인증적용329
6.9OAuth2인증342
__6.9.1기법:구글계정으로로그인342
6.10액추에이터엔드포인트보안353
__6.10.1기법:스프링부트액추에이터엔드포인트보안354
CHAPTER7스프링부트RESTful웹서비스개발357
7.1스프링부트RESTfulAPI개발358
__7.1.1기법:스프링부트를사용한RESTfulAPI개발358
7.2스프링부트RESTfulAPI예외처리368
__7.2.1기법:RESTfulAPI예외처리368
7.3RESTfulAPI테스트373
__7.3.1기법:스프링부트애플리케이션에서RESTfulAPI테스트374
7.4RESTfulAPI문서화380
__7.4.1기법:OpenAPI를사용한RESTfulAPI문서화380
7.5RESTfulAPI버저닝387
__7.5.1기법:URI버저닝388
__7.5.2기법:HTTP요청파라미터를사용한버저닝392
__7.5.3기법:커스텀HTTP헤더를사용한버저닝394
__7.5.4기법:미디어타입을사용한버저닝397
7.6RESTfulAPI보안400
__7.6.1기법:JWT를사용한RESTfulAPI요청인가401
PARTIII
CHAPTER8리액티브스프링부트애플리케이션개발425
8.1리액티브프로그래밍소개426
__8.1.1백프레셔429
__8.1.2리액티브프로그래밍의장점430
8.2프로젝트리액터431
8.3스프링웹플럭스소개435
__8.3.1기법:애너테이션컨트롤러기반의리액티브RESTfulAPI개발436
__8.3.2기법:함수형엔드포인트를사용하는리액티브RESTfulAPI개발445
8.4리액티브애플리케이션테스트451
__8.4.1기법:WebClient로API클라이언트작성452
8.5알소켓소개459
__8.5.1기법:알소켓과스프링부트를활용한애플리케이션개발460
8.6웹소켓소개471
__8.6.1기법:웹소켓을사용하는스프링부트애플리케이션개발473
PARTIV
CHAPTER9스프링부트애플리케이션배포483
9.1실행가능한JAR파일로스프링부트애플리케이션실행485
__9.1.1기법:실행가능한JAR파일로패키징하고실행485
9.2스프링부트애플리케이션을WAR패키지로만들어배포491
__9.2.1기법:스프링부트애플리케이션을WAR파일로패키징하고WildFly애플리케이션서
버에배포492
9.3클라우드파운드리에스프링부트애플리케이션배포502
__9.3.1기법:클라우드파운드리에스프링부트애플리케이션배포504
9.4허로쿠에스프링부트애플리케이션배포507
__9.4.1기법:허로쿠에스프링부트애플리케이션배포508
9.5도커컨테이너로스프링부트애플리케이션배포511
__9.5.1기법:컨테이너이미지생성과스프링부트애플리케이션을컨테이너로만들어실행하
기513
9.6쿠버네티스클러스터에스프링부트애플리케이션배포519
__9.6.1기법:쿠버네티스에스프링부트애플리케이션배포519
9.7레드햇오픈시프트에스프링부트애플리케이션배포525
__9.7.1기법:레드햇오픈시프트플랫폼에스프링부트애플리케이션배포525
PARTV
CHAPTER10스프링부트와코틀린,네이티브이미지,GraphQL531
10.1스프링부트와코틀린532
__10.1.1기법:코틀린으로스프링부트애플리케이션개발533
__10.1.2기법:스프링부트코틀린애플리케이션에스프링시큐리티적용540
10.2스프링네이티브544
__10.2.1GraalVM545
__10.2.2GraalVM네이티브이미지546
__10.2.3스프링부트네이티브이미지547
__10.2.4기법:빌드팩으로스프링부트네이티브이미지생성547
__10.2.5기법:메이븐플러그인으로스프링부트네이티브이미지생성553
__10.2.6스프링AOT메이븐플러그인555
10.3스프링부트와GraphQL557
__10.3.1REST의문제557
__10.3.2GraphQL소개558
__10.3.3스프링부트에서GraphQL사용560
__10.3.4기법:스프링부트애플리케이션에서GraphQLAPI개발560
__10.3.5기법:웹소켓을사용하는스프링부트GraphQLAPI개발577
APPENDIXA스프링이니셜라이저와스프링부트CLI583
A.1스프링이니셜라이저로스프링부트애플리케이션생성583
__A.1.1스프링이니셜라이저소개583
__A.1.2기법:스프링이니셜라이저웹으로스프링부트애플리케이션생성584
__A.1.3기법:인텔리제이에서스프링이니셜라이저로스프링부트프로젝트생성589
__A.1.4기법:스프링툴스위트에서스프링이니셜라이저로스프링부트프로젝트생성592
__A.1.5기법:비주얼스튜디오코드에서스프링이니셜라이저로스프링부트프로젝트생성
594
__A.1.6기법:터미널에서스프링이니셜라이저로스프링부트프로젝트생성598
A.2스프링부트CLI를사용한스프링부트애플리케이션개발600
__A.2.1스프링부트CLI소개600
__A.2.2설치601
__A.2.3스프링부트프로젝트생성602/A.2.4간단한스프링부트프로젝트개발602
APPENDIXB스프링MVC와타임리프템플릿엔진605
B.1스프링MVC복습605
__B.1.1프런트컨트롤러디자인패턴606__B.1.2요청처리과정이해607
B.2타임리프템플릿엔진609
__B.2.1속성표시610
__B.2.2조건평가612
__B.2.3폼관리613
B.3스프링부트에서템플릿엔진활성화616
__B.3.1기법:타임리프를사용해서스프링부트웹애플리케이션개발618
찾아보기637
스프링부트에서자주겪는개발문제를요구사항/해법/토론형식으로풀어낸실용적인레시피
IT업계에서마이크로서비스기반아키텍처가널리사용됨에따라스프링부트의인기는하늘을찌르고있으며스프링부트는개발자들사이에서가장배우고싶은자바프레임워크로자리매김하고있다.엄청난인기에도스프링부트의공식문서는너무나방대하고바로사용할수있는예제는턱없이부족하여초중급사용자에게적합하지않다.
이책은스프링부트의명확한그림을보여주고내부개념을알기쉽게설명한다.또한교과서스타일의이론적인예제가아니라실무에서사용할수있는예제를제공한다.1부에서는스프링부트를개괄적으로살펴보고주요특징과다양한기능을살펴본다.2부는데이터베이스연동,자동구성과액추에이터,스프링시큐리티,고급보안기법,RESTfulAPI개발방법등스프링부트애플리케이션개발에필요한개념과기법을알아본다.3부는웹소켓,R소켓을사용해서스프링부트리액티브애플리케이션을만들어본다.
4부는JAR이나WAR패키지를통해스프링부트애플리케이션을배포하는방법과클라우드파운드리와허로쿠에배포하는방법을알아보고,스프링부트애플리케이션을컨테이너로만들어서쿠버네티스클러스터와레드햇오픈시프트에배포해본다.5부는코틀린을사용해서스프링부트애플리케이션을개발하고,스프링네이티브를사용해GraalVM네이티브이미지를만들어보며,GraphQL을사용하는방법도알아본다.부록에서는스프링이니셜라이저로스프링부트애플리케이션을생성하는방법,스프링부트CLI를사용하는방법,스프링MVC,타임리프템플릿엔진사용법을알아본다.
프로메테우스,그라파나설치등원서설명이부족한부분은한국독자를위해옮긴이가그림과설명을추가해완성도를더욱높였다.최신내용으로가득찬이책은스프링부트개발자들에게올바른방향을알려주는최고의가이드다.개발문제를해결하고최신기술을익히고싶은실무자에게도움이되는것은물론,스프링부트기본개념과핵심기능들도다루기때문에초보자도순서대로정독하기만한다면스프링부트로애플리케이션을구축할수있다.
주요내용
전문가의관점에서바라본스프링부트의다양한기능
스프링부트애플리케이션설정관리,로깅,데이터검증
스프링시큐리티활용및실제서비스환경에적용하는고급보안기법
스프링부트로마이크로서비스및RESTfulAPI개발하기
마이크로서비스문서화,버저닝,보안성향상기법
웹소켓,R소켓을사용한리액티브애플리케이션개발
쿠버네티스및주요클라우드플랫폼에스프링부트애플리케이션배포
스프링부트애플리케이션에서컨테이너화구현하기
스프링부트에코틀린,GraalVM네이티브이미지,GraphQL통합하기