스프링 부트 3.0 3/e [프로덕션급 애플리케이션 개발 간소화]
- 원서명Learning Spring Boot 3.0: Simplify the development of production-grade applications using Java and Spring, Third Edition (ISBN 9781803233307)
- 지은이그렉 턴키스트(Greg L. Turnquist)
- 옮긴이김진웅
- ISBN : 9791161758633
- 28,000원 (eBook 22,400원)
- 2024년 08월 27일 펴냄
- 페이퍼백 | 324쪽 | 188*235mm
- 시리즈 : 프로그래밍 언어
책 소개
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/spring-boot-3.0-3e
요약
스프링 부트 3에 대한 포괄적인 가이드로, 초보자부터 숙련된 개발자까지 모든 수준의 독자들이 활용할 수 있도록 구성돼 있다. 복잡한 인프라 설정을 피하고 효율적인 개발 방법에 초점을 맞춰 웹 애플리케이션 개발의 기초부터 고급 주제까지 다룬다. 주요 내용으로는 빠른 애플리케이션 시작, 데이터 처리, 보안, 테스팅, 그리고 GraalVM을 이용한 네이티브 이미지 배포와 반응형 프로그래밍 같은 최신 기술 트렌드를 포함한다. 또한 실용적인 예제를 통해 애플리케이션의 설계, 개발, 테스트, 그리고 배포 과정을 체계적으로 안내하며, 다양한 환경에서의 애플리케이션 운영 방법도 제시한다.
추천의 글
스프링 부트(Spring Boot)는 2022년에 ‘주류’라고 표현해도 틀린 말이 아닐 정도로 큰 성공을 거뒀다. 거의 모든 자바(Java) 개발자는 스프링 부트에 대해 알고 있을 것이며, 심지어 대다수의 개발자는 화가 나는 상황에도 스프링 부트를 사용해본 적이 있을 것이다. 하지만 소프트웨어 엔지니어링 분야에는 항상 배워야 할 새로운 것이 있고, 해결해야 할 새로운 문제가 있기에 결국에는 보람을 느낄 수 있다. 항상 새로운 것을 발명하고, 코드를 생성할 수 있는 기술과 기회를 갖는다는 것은 지적인 면을 비롯한 모든 점에서도 매우 보람 있는 일이다.
이 책의 저자가 말하는 스프링 부트의 목표 중 하나는 아이디어를 가능한 한 빠르고 효율적으로 코드로 구현해 프로덕션(production)과 같은 가장 특별한 곳에 적용할 수 있도록 하는 것이다. 짧고 즐거운 여정, 혹은 조금 더 길고 즐거운 여정이 되기를 바란다.
이 책에서 그렉은 내부자라는 이점을 활용해 모든 자바 개발자가 경험했을 법한 오래되고,자주 만나는 문제들에 스프링 부트 지식을 추가했다. HTTP 엔드포인트(endpoint) 생성, 보안, 데이터베이스 연결, 테스트 작성 등 우리 모두가 거의 매일 해결해야 하는 작업의 관찰을 통해 스프링 부트를 살펴보는 것보다 더 좋은 학습 방법이 있을까? 이 책은 현대적인 아이디어와 도구를 적용해 진부한 이야기에 새로운 관점을 추가하므로 이 책을 읽다 보면 가장 실용적인 관점에서 하이퍼미디어(hypermedia)와 OAuth 등을 배울 수 있다. 또한, 이 책은 스프링이나 자바에 대한 사전 지식이 전혀 없다고 가정하고 처음부터 시작한다. 기본적인 기술이나 프로그래밍 능력이 있는 사람이라면 누구나 스프링 부트를 사용하는 방법과 이유를 이해할 수 있을 것이다.
스프링 부트에는 주요 메서드(method), 임베디드 컨테이너(embedded container), 자동 설정, 관리 엔드포인트 외에도 많은 것이 존재한다. 예를 들어, 코드 몇 줄로 모든 기능을 갖춘 스프링 애플리케이션을 시작할 때의 순수한 기쁨은 이루 말할 수 없다. 이 책을 읽고 편집기나 통합 개발 환경(IDE, Integrated Development Environment)을 꺼내서 직접 애플리케이션을 만들어보길 바란다.
그렉은 스프링 부트 팀의 중요한 일원으로 스프링 엔지니어링과 관련된 많은 일을 하고 있다. 그럼에도 불구하고 이 훌륭한 책을 위해 아낌없는 노력을 기울인 것에 감사하게 생각한다. 그는 교육자이자 정보 제공자이고 엔지니어임을 매우 명확하게 보여준다. 이 책을 읽으면 항상 차분하지만 열정적이고 유머가 가미되어 있는 그렉의 목소리와 개성이 매우 선명하게 들린다. 스프링을 사용한 코딩은 세월이 흘러도 여전히 재미있으니 직접 읽어보고 즐기자.
나는 그렉 턴키스트를 오랫동안 알고 지냈다. 피보탈(Pivotal)에 합류한 후 공식적으로 업무를 시작하기 전에 스프링과 관련된 모든 것을 다루는 연례 콘퍼런스인 SpringOne2GX에서 그를 처음 만났다. 둘 다 그루비(Groovy)와 그레일즈(Grails)의 열광적인 시절을 기억하고 있다. 그곳에서 우리는 생각을 자극하는 훌륭한 대화를 나눴고, 그 대화는 그 이후로 몇 년 동안 계속됐다.
내가 처음 읽은 스프링 부트 관련 서적 중 하나는 그렉의 『Learning Spring Boot』 초판이다. ‘더 일찍 읽었더라면 어땠을까’ 하는 아쉬움이 있다. 믿을 수 있는 동료들이 쓴 다른 책들과 함께 스프링 부트 관련 주제들을 소개하고 참고할 수 있는 가치 있는 자료로 이 책을 추천하고 있다.
나 역시 저자로서 이 책을 집필하고 업데이트할 때 그렉이 얼마나 짜릿하고 힘든 작업을 했는지 잘 알고 있다. 모든 저자는 공유하고 싶은 모든 것, 가장 중요하다고 생각하는 모든 주제와 시간과 분량의 끊임없는 제약 사이에서 균형을 맞춰야 한다. 그렉은 이 두 가지를 능숙하게 조정해 기초를 잘 다진 다음 개발자에게 중요한 주제로 빠르게 전환해 스프링 부트를 사용하며 실제 애플리케이션을 구현할 수 있도록 한다. 데이터, 보안, 설정, 자바스크립트(JavaScript)와의 통합까지 모든 것이 책 안에 다 들어 있다.
나는 스프링 팀에서 그렉과 함께 일할 수 있어서 정말 즐거웠고, 앞으로도 계속 대화를 나눌 수 있기를 바란다. 내 책장에는 항상 그렉의 책이 놓일 영광스러운 자리가 있을 것이고, 여러분도 책장에 이 책을 위한 공간을 만들기를 바란다. 이 책을 읽고 그렉에 대해 알아보자. 여러분의 스프링 부트 애플리케이션에 도움이 될 것이다.
당신의 스프링 부트 여정을 응원한다.
이 서문을 읽으면서 책에 대한 설득력 있는 추천사나 인생에 대한 재미있는 일화를 기대했으리라는 것을 알고 있다. 책의 서문이니까 그렇지 않을 이유가 없다. 하지만 양심상 그런 서문을 써줄 수는 없다. 부조리한 느낌이 들기 때문이다. 물론 이 책은 환상적이지만, 그래서 뻔한 얘기에만 머물고 싶지 않다.
이 걸작의 저자인 그렉에 대해 이야기해보자. 그렉은 스프링 팀에서 나보다 더 오래 근무했다. 대부분의 사람이 스프링에 대해 알고 있는 것에 비해 그에 대해서는 잘 모른다. 그렉은 크고 작은 일에 시간을 투자한다. 그가 여러분의 셰르파(sherpa)가 돼 초보자부터 스프링 부트 전문가가 될 때까지 여러분을 안내해줄 것이라고 믿어도 좋다. 정말이다.
그렉은 친구다. 그렉과 나는 몇 가지 중요한 면에서 매우 닮았기 때문에 사이가 좋다. 나는주류는 아니지만 때때로 매우 고통스러운 문제를 해결하는 기묘한 작은 프로젝트를 좋아한다. 한번은 청중 3명에게 강연을 한 적이 있다. 내 발표가 너무 특정한 주제여서 수천 명의 전체 참석자 중 단 3명만이 참석했었다. 희미하게나마 해결의 실마리가 보인다면 기꺼이 지지할 의향이 있다. 그렉도 마찬가지다. 그는 크고 작은 일에 투자한다.
우리는 둘 다 자바 가상 머신(JVM, Java Virtual Machine)과 파이썬(Python)을 좋아한다. 이러한 공통의 애정이 우리를 스프링 파이썬으로 이끌었다. 오래 전, 그렉은 스프링 파이썬 프로젝트를 통해 스프링 프레임워크의 우수성을 파이썬 생태계에 도입했다. 파이썬 생태계는 모든 사용 사례에 대한 대안으로 가득하다. 이러한 선택의 바다에서 스프링 파이썬은 단연 돋보였다. 이 라이브러리는 스프링 프레임워크의 매우 높은 목표를 달성하면서도 익숙한 파이썬 프로그래머에게 라이브러리가 관용적으로 느껴질 수 있는 ‘파이토닉(phythonic)’한 특성을 유지했다. 이는 크게 다른 두 가지 생태계에 대한 깊은 헌신과 친숙함을 보여줬다. 스프링 파이썬 때문에 그렉을 좋아한다. 문제가 아무리 크든 작든 해결될 때까지 기꺼이 앉아서 소매를 걷어붙이고 시야를 넓혀 코드를 작성하는 그의 모습을 볼 수 있다. 한 가지 주제를 깊이 파고들려는 의지가 그를 재능 있는 저자이자 강사로 만들었으며, 이는 그의 책, 강좌, 블로그, 기사에서 잘 드러난다. 그의 재능 덕분에 이 책은 소프트웨어에 관한 또 다른 책이 아니라 시간을 투자할 만한 가치가 있는 책이 됐다.
이 책은 2013년 스프링 부트가 처음으로 공개된 이후 가장 중요한 릴리스인 최근 출시된 스프링 부트 3.0을 다룬다. 그렉을 포함한 스프링 팀원 모두가 이 릴리스를 출시하기 위해 그 어느 때보다 오랜 시간 동안 열심히 일한 것으로 알고 있다. 그런 모든 업무에도 불구하고 그렉은 기록적인 시간 내에 이 책을 여러분의 손에 쥐어주는 데 성공했다. 독자 여러분을 위해 그가 그렇게 노력했기 때문에 기록적인 시간 내에 출판 작업에 들어갈 수 있었던 것이다. 그리고 그렉은 우리가 크고 작은 투자를 할 필요가 없도록 해줬다.
이 책에서 다루는 내용
◆ 번거로움을 최소화하고 강력한 프로덕션 수준의 웹 애플리케이션 만들기
◆ 하나의 아티팩트로 여러 환경을 지원하고, 프로덕션급 지원 기능 추가하기
◆ 다양한 속성을 통해 자바 앱을 조정하는 방법 알아보기
◆ 앱의 보안 모델 강화하기
◆ 스프링 부트에서 네이티브 배포 및 반응형 프로그래밍과 같은 향상된 기능 활용하기
◆ 가벼운 단위 테스트부터 완전히 실행되는 임베디드 웹 컨테이너 통합 테스트까지 빌드하기
◆ 반응형 프로그래밍을 알아보고 적합한 접근 방식인지 의사 결정하기
이 책의 대상 독자
스프링 부트 3.0을 사용하고자 하는 초보자와 숙련된 스프링 개발자 모두를 위해 만들어졌다. 자바에 대한 기초적인 이해가 있어야 하며, 가급적이면 자바 8 이상 버전이어야 한다. 람다(lambda) 함수, 메서드(method) 참조, 레코드(record) 유형, 자바 17 버전에서 새롭게 개선된 컬렉션 API에 익숙하면 좋지만 필수는 아니다.
필수는 아니지만 이전 버전의 스프링 부트(1.x, 2.x)를 사용해본 경험이 있다면 도움이 될 것이다.
이 책의 구성
1장, ‘스프링 부트의 핵심 기능’에서는 애플리케이션을 빌드할 때 사용할 수 있는 기본 기능과 함께 스프링 부트의 매력을 알아본다.
2장, ‘스프링 부트로 웹 애플리케이션 만들기’는 서버 및 클라이언트 측 옵션을 모두 사용해 자바 애플리케이션의 웹 레이어(layer)를 쉽게 제작하는 방법을 알려준다.
3장, ‘스프링 부트로 데이터 쿼리하기’에서는 스프링 데이터로 데이터베이스를 최대한 활용하는 방법을 보여준다.
4장, ‘스프링 부트 애플리케이션 보호’에서는 스프링 시큐리티의 최첨단 기능을 사용해 애플리케이션을 내부와 외부의 악당으로부터 보호하는 방법을 살펴본다.
5장, ‘스프링 부트 테스트’는 모의 데이터베이스와 임베디드 데이터베이스로 테스트하고, 실제 데이터베이스와 결합된 테스트컨테이너(Testcontainer)를 사용해 시스템에 대한 신뢰를 구축하는 방법을 알려준다.
6장, ‘스프링 부트 애플리케이션 구성’에서는 애플리케이션이 빌드된 후 조정하고 적용하는 방법을 알아본다.
7장, ‘스프링 부트 애플리케이션 릴리스’에서는 애플리케이션을 프로덕션 환경으로 전환하고 사용자에게 제공하는 다양한 방법을 살펴본다.
8장, ‘스프링 부트로 네이티브 전환’에서는 몇 초만에 시작하고 모든 리소스를 차지하지 않는 네이티브 이미지를 사용해 애플리케이션의 속도를 비약적으로 향상시키는 방법을 보여준다.
9장, ‘리액티브 웹 컨트롤러 작성’에서는 반응형 웹 컨트롤러를 작성하는 것이 얼마나 쉬운지, 그리고 반응형 웹 컨트롤러가 어떻게 더 효율적인 애플리케이션의 핵심이 될 수 있는지를 설명한다.
10장, ‘반응형 데이터 작업’에서는 R2DBC를 사용해 반응형 데이터를 쿼리하는 방법을 알아보고 애플리케이션의 효율성을 확인하는 데 도움을 준다.
목차
목차
- 1부. 스프링 부트 기본
- 1장. 스프링 부트의 핵심 기능
- 기술 요구 사항
- 자바 17 설치
- 최신 IDE 설치
- 깃허브 계정 생성
- 추가 지원 찾기
- 스프링 빈 자동 설정
- 애플리케이션 콘텍스트 이해
- 스프링 부트의 자동 설정 정책 살펴보기
- 스프링 부트 스타터를 사용해 포트폴리오 구성 요소 추가
- 설정 프로퍼티를 사용해 설정 사용자 지정
- 사용자 지정 프로퍼티 생성
- 애플리케이션 설정 외부화
- 프로퍼티 기반 빈 설정
- 애플리케이션 의존성 관리
- 요약
- 기술 요구 사항
- 2부. 스프링 부트로 애플리케이션 만들기
- 2장. 스프링 부트로 웹 애플리케이션 만들기
- start.spring.io을 사용해 애플리케이션 빌드
- 스프링 MVC 웹 컨트롤러 생성
- start.spring.io를 사용해 기존 프로젝트 보강
- 템플릿을 활용해 콘텐츠 생성
- 템플릿에 데모 데이터 추가
- 더 나은 디자인으로 애플리케이션 빌드
- 생성자 호출을 통한 의존성 주입
- HTML 템플릿을 통해 데이터 변경
- JSON 기반 API 생성
- 스프링 부트 웹 애플리케이션에 Node.js 후킹
- Node.js로 자바스크립트 빌드
- React.js 애플리케이션 생성
- 요약
- 3장. 스프링 부트로 데이터 쿼리하기
- 기존 스프링 부트 애플리케이션에 스프링 데이터 추가하기
- 스프링 데이터를 사용해 손쉽게 데이터 관리
- 프로젝트에 스프링 데이터 JPA 추가
- DTO, 엔티티, POJO
- 엔티티
- DTO
- POJO
- 스프링 데이터 리포지터리 생성
- 사용자 지정 파인더 사용
- 결과 정렬
- 쿼리 결과 제한
- 까다로운 답변을 찾기 위한 쿼리 예제
- 자바 퍼시스턴트 API 사용
- 요약
- 기존 스프링 부트 애플리케이션에 스프링 데이터 추가하기
- 4장. 스프링 부트 애플리케이션 보호
- 프로젝트에 스프링 시큐리티 추가
- 사용자 지정 보안 정책으로 자체 사용자 생성
- 하드 코딩된 사용자를 스프링 데이터 지원 사용자 집합으로 교체
- 웹 경로 및 HTTP 메서드 보안
- CSRF를 사용할 것인가 말 것인가, 그것이 문제로다
- 스프링 데이터 메서드 보안
- 모델 업데이트
- 데이터 소유권 확보
- 삭제 버튼 추가
- 데이터 소유자에 대한 액세스 권한 잠그기
- 메서드 수준 보안 활성화
- 사이트에 사용자 세부 정보 표시
- 구글을 활용해 사용자 인증
- OAuth 사용의 장점
- OAuth 사용의 단점
- 구글 OAuth 2.0 애플리케이션 생성
- 스프링 부트 프로젝트에 OAuth 클라이언트 추가
- 원격으로 OAuth2 API 호출
- OAuth2 기반 웹 애플리케이션 생성
- 요약
- 5장. 스프링 부트 테스트
- 애플리케이션에 JUnit 5 추가
- 도메인 기반 테스트 케이스 생성
- MockMVC를 사용해 웹 컨트롤러 테스트
- 모킹으로 데이터 리포지터리 테스트
- 임베디드 데이터베이스로 데이터 리포지터리 테스트
- 애플리케이션에 테스트컨테이너 추가
- 테스트컨테이너를 사용한 데이터 리포지터리 테스트
- 스프링 시큐리티 테스트로 보안 정책 테스트
- 요약
- 3부. 스프링 부트 애플리케이션 릴리스
- 6장. 스프링 부트 애플리케이션 설정
- 사용자 지정 프로퍼티 생성
- 프로파일 기반 프로퍼티 파일 생성
- YAML 전환
- 환경 변수로 프로퍼티 설정
- 프로퍼티 오버라이드 순서
- 요약
- 7장. 스프링 부트 애플리케이션 릴리스
- uber JAR 생성
- 도커 컨테이너 베이킹
- ‘올바른’ 유형의 컨테이너 빌드
- 애플리케이션을 도커 허브에 릴리스
- 프로덕션 환경 조정
- 스프링 부트 스케일링
- 요약
- 8장. 스프링 부트로 네이티브 전환
- GraalVM이 중요한 이유
- GraalVM에 맞게 애플리케이션 갱신
- GraalVM으로 기본 스프링 부트 애플리케이션 실행
- GraalVM을 다시 사용해야 하는 이유
- GraalVM으로 도커 컨테이너 베이킹
- 스프링 부트 3.0과 스프링 부트 2.7 및 스프링 네이티브 비교
- GraalVM 및 기타 라이브러리
- 요약
- 4부. 스프링 부트 애플리케이션 확장
- 9장. 반응형 웹 컨트롤러 작성
- 반응형이란 무엇이며 관심을 가져야 할 이유
- 반응형
- 반응형 스트림 세부 정보
- 반응형 스프링 부트 애플리케이션 생성
- 반응형 GET 메서드로 데이터 서비스
- 반응형 POST 메서드로 들어오는 데이터 소비
- 프로젝트 리액터로 애플리케이션 확장
- 자바 동시성 프로그래밍 역사 빠르게 훑어보기
- 반응형 템플릿 서비스
- 리액티브 웹 컨트롤러 생성
- 타임리프 템플릿 생성
- 반응형 하이퍼미디어 생성
- 요약
- 반응형이란 무엇이며 관심을 가져야 할 이유
- 10장. 반응형 데이터 작업
- 반응형으로 데이터를 가져온다는 것의 의미
- 반응형 데이터 저장소 선택
- 반응형 데이터 리포지터리 만들기
- R2DBC 사용
- R2dbcEntityTemplate로 데이터 로드
- API 컨트롤러에 반응형으로 데이터 반환
- 템플릿에서 데이터를 반응형으로 처리
- 요약