이미 소장하고 있다면 판매해 보세요.
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 컨트롤러에 반응형으로 데이터 반환 ____템플릿에서 데이터를 반응형으로 처리 __요약 |
Greg L. Turnquist
그렉 턴키스트의 다른 상품
김진웅의 다른 상품
◈ 이 책에서 다루는 내용 ◈
◆ 번거로움을 최소화하고 강력한 프로덕션 수준의 웹 애플리케이션 만들기 ◆ 하나의 아티팩트로 여러 환경을 지원하고, 프로덕션급 지원 기능 추가하기 ◆ 다양한 속성을 통해 자바 앱을 조정하는 방법 알아보기 ◆ 앱의 보안 모델 강화하기 ◆ 스프링 부트에서 네이티브 배포 및 반응형 프로그래밍과 같은 향상된 기능 활용하기 ◆ 가벼운 단위 테스트부터 완전히 실행되는 임베디드 웹 컨테이너 통합 테스트까지 빌드하기 ◆ 반응형 프로그래밍을 알아보고 적합한 접근 방식인지 의사 결정하기 ◈ 이 책의 대상 독자 ◈ 스프링 부트 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를 사용해 반응형 데이터를 쿼리하는 방법을 알아보고 애플리케이션의 효율성을 확인하는 데 도움을 준다. ◈ 지은이의 말 ◈ 이 책은 초보자와 숙련된 스프링 개발자 모두를 위해 설계됐다. 인프라 및 기타 지루한 세부 사항에 시간을 낭비하지 않고 자바 애플리케이션을 빌드하는 방법을 알려준다. 대신 최신 보안 관행으로 잠긴 실제 데이터베이스 위에 웹 애플리케이션을 구축하는 데 집중할 수 있도록 도와준다. 또한, 애플리케이션을 프로덕션 환경으로 옮기는 다양한 방법을 알아볼 수 있다. 그것만으로 충분하지 않다면 마지막에는 반응형 프로그래밍을 선택해 기존 서버 또는 클라우드를 통해 더 많이 활용할 수 있는 비밀스러운 방법도 포함돼 있다. 사실 비밀은 아니다. ◈ 옮긴이의 말 ◈ 스프링 부트 프레임워크는 작고 빠르게 사용할 수 있어 많은 조직에서 선호하며 사용하고 있다. 2022년에 3.0 버전을 릴리스한 이후 2024년 7월 현재 3.3.x 버전까지 출시돼 작은 스타트업부터 대규모 엔터프라이즈까지 폭넓게 활용되고 있다. 스프링 부트 3.0의 주요 특징으로는 자바 17을 기본으로 지원하고, 기존의 자바 EE API에서 자카르타(Jakarta) EE 9 API로 전환된 부분이 있다. 또한, GraalVM을 사용해서 클라우드 네이티브 이미지를 빌드해 경량화된 이미지를 통해 부트스트랩 시간을 단축하고 메모리 사용량을 최적화할 수 있는 것이 큰 장점 중 하나다. 이번 책에서는 자세히 다루지 않지만 Micrometer 및 Micrometer Tracing 기능이 통합돼 더 효율적으로 관측 데이터를 수집할 수 있게 된 것도 중요한 특징이다. 이 책은 스프링 부트 3.0을 활용해 자바와 스프링으로 빠른 시간 내에 애플리케이션 개발을 단순화하는 종합적인 가이드로 활용할 수 있다. 초보자와 경험 많은 개발자 모두를 대상으로 하며, 기본 설정에서부터 고급 기능까지 실용적인 예제와 함께 다루고 있다. 초보자들이 반드시 알아야 하는 스프링 부트의 핵심 요소인 자동 설정, 스타터, 설정 프로퍼티, 의존성 관리 등을 초반에 설명하고, Thymeleaf 기반의 간단한 웹 애플리케이션부터 시작한다. JPA, 스프링 시큐리티, 테스트 등을 살펴보고 GraalVM을 사용해서 클라우드 네이티브 이미지를 빌드하고 여러 가지 도구를 사용해 도커 컨테이너 기반으로 베이크하는 방법도 다룬다. 후반부에는 웹플럭스를 통해 반응형 웹 컨트롤러를 작성하는 방법과 반응형 데이터를 처리하는 방법까지 다룬다. 사실 이 책은 스프링 부트의 모든 내용을 담고 있지는 않지만, 스프링을 사용해본 경험이 있거나 스프링 부트에 대해 기초적인 지식이 있는 분들께 유용하게 활용될 것이라 생각한다. |
스프링 부트(Spring Boot)는 2022년에 ‘주류’라고 표현해도 틀린 말이 아닐 정도로 큰 성공을 거뒀다. 거의 모든 자바(Java) 개발자는 스프링 부트에 대해 알고 있을 것이며, 심지어 대다수의 개발자는 화가 나는 상황에도 스프링 부트를 사용해본 적이 있을 것이다. 하지만 소프트웨어 엔지니어링 분야에는 항상 배워야 할 새로운 것이 있고, 해결해야 할 새로운 문제가 있기에 결국에는 보람을 느낄 수 있다. 항상 새로운 것을 발명하고, 코드를 생성할 수 있는 기술과 기회를 갖는다는 것은 지적인 면을 비롯한 모든 점에서도 매우 보람 있는 일이다.
이 책의 저자가 말하는 스프링 부트의 목표 중 하나는 아이디어를 가능한 한 빠르고 효율적으로 코드로 구현해 프로덕션(production)과 같은 가장 특별한 곳에 적용할 수 있도록 하는 것이다. 짧고 즐거운 여정, 혹은 조금 더 길고 즐거운 여정이 되기를 바란다. 이 책에서 그렉은 내부자라는 이점을 활용해 모든 자바 개발자가 경험했을 법한 오래되고,자주 만나는 문제들에 스프링 부트 지식을 추가했다. HTTP 엔드포인트(endpoint) 생성, 보안, 데이터베이스 연결, 테스트 작성 등 우리 모두가 거의 매일 해결해야 하는 작업의 관찰을 통해 스프링 부트를 살펴보는 것보다 더 좋은 학습 방법이 있을까? 이 책은 현대적인 아이디어와 도구를 적용해 진부한 이야기에 새로운 관점을 추가하므로 이 책을 읽다 보면 가장 실용적인 관점에서 하이퍼미디어(hypermedia)와 OAuth 등을 배울 수 있다. 또한, 이 책은 스프링이나 자바에 대한 사전 지식이 전혀 없다고 가정하고 처음부터 시작한다. 기본적인 기술이나 프로그래밍 능력이 있는 사람이라면 누구나 스프링 부트를 사용하는 방법과 이유를 이해할 수 있을 것이다. 스프링 부트에는 주요 메서드(method), 임베디드 컨테이너(embedded container), 자동 설정, 관리 엔드포인트 외에도 많은 것이 존재한다. 예를 들어, 코드 몇 줄로 모든 기능을 갖춘 스프링 애플리케이션을 시작할 때의 순수한 기쁨은 이루 말할 수 없다. 이 책을 읽고 편집기나 통합 개발 환경(IDE, Integrated Development Environment)을 꺼내서 직접 애플리케이션을 만들어보길 바란다. 그렉은 스프링 부트 팀의 중요한 일원으로 스프링 엔지니어링과 관련된 많은 일을 하고 있다. 그럼에도 불구하고 이 훌륭한 책을 위해 아낌없는 노력을 기울인 것에 감사하게 생각한다. 그는 교육자이자 정보 제공자이고 엔지니어임을 매우 명확하게 보여준다. 이 책을 읽으면 항상 차분하지만 열정적이고 유머가 가미되어 있는 그렉의 목소리와 개성이 매우 선명하게 들린다. 스프링을 사용한 코딩은 세월이 흘러도 여전히 재미있으니 직접 읽어보고 즐기자 - 데이브 사이어(Dave Syer) (스프링 부트 공동 창시자 겸 수석 스태프 엔지니어,2022년, 런던) |
나는 그렉 턴키스트를 오랫동안 알고 지냈다. 피보탈(Pivotal)에 합류한 후 공식적으로 업무를 시작하기 전에 스프링과 관련된 모든 것을 다루는 연례 콘퍼런스인 SpringOne2GX에서 그를 처음 만났다. 둘 다 그루비(Groovy)와 그레일즈(Grails)의 열광적인 시절을 기억하고 있다. 그곳에서 우리는 생각을 자극하는 훌륭한 대화를 나눴고, 그 대화는 그 이후로 몇 년 동안 계속됐다.
내가 처음 읽은 스프링 부트 관련 서적 중 하나는 그렉의 『Learning Spring Boot』 초판이다. ‘더 일찍 읽었더라면 어땠을까’ 하는 아쉬움이 있다. 믿을 수 있는 동료들이 쓴 다른 책들과 함께 스프링 부트 관련 주제들을 소개하고 참고할 수 있는 가치 있는 자료로 이 책을 추천하고 있다. 나 역시 저자로서 이 책을 집필하고 업데이트할 때 그렉이 얼마나 짜릿하고 힘든 작업을 했는지 잘 알고 있다. 모든 저자는 공유하고 싶은 모든 것, 가장 중요하다고 생각하는 모든 주제와 시간과 분량의 끊임없는 제약 사이에서 균형을 맞춰야 한다. 그렉은 이 두 가지를 능숙하게 조정해 기초를 잘 다진 다음 개발자에게 중요한 주제로 빠르게 전환해 스프링 부트를 사용하며 실제 애플리케이션을 구현할 수 있도록 한다. 데이터, 보안, 설정, 자바스크립트(JavaScript)와의 통합까지 모든 것이 책 안에 다 들어 있다. 나는 스프링 팀에서 그렉과 함께 일할 수 있어서 정말 즐거웠고, 앞으로도 계속 대화를 나눌 수 있기를 바란다. 내 책장에는 항상 그렉의 책이 놓일 영광스러운 자리가 있을 것이고, 여러분도 책장에 이 책을 위한 공간을 만들기를 바란다. 이 책을 읽고 그렉에 대해 알아보자. 여러분의 스프링 부트 애플리케이션에 도움이 될 것이다. 당신의 스프링 부트 여정을 응원한다. - 마크 헤클러(Mark Heckler) (마이크로소프트 수석 클라우드 애드버킷(Advocate)) |
이 서문을 읽으면서 책에 대한 설득력 있는 추천사나 인생에 대한 재미있는 일화를 기대했으리라는 것을 알고 있다. 책의 서문이니까 그렇지 않을 이유가 없다. 하지만 양심상 그런 서문을 써줄 수는 없다. 부조리한 느낌이 들기 때문이다. 물론 이 책은 환상적이지만, 그래서 뻔한 얘기에만 머물고 싶지 않다.
이 걸작의 저자인 그렉에 대해 이야기해보자. 그렉은 스프링 팀에서 나보다 더 오래 근무했다. 대부분의 사람이 스프링에 대해 알고 있는 것에 비해 그에 대해서는 잘 모른다. 그렉은 크고 작은 일에 시간을 투자한다. 그가 여러분의 셰르파(sherpa)가 돼 초보자부터 스프링 부트 전문가가 될 때까지 여러분을 안내해줄 것이라고 믿어도 좋다. 정말이다. 그렉은 친구다. 그렉과 나는 몇 가지 중요한 면에서 매우 닮았기 때문에 사이가 좋다. 나는주류는 아니지만 때때로 매우 고통스러운 문제를 해결하는 기묘한 작은 프로젝트를 좋아한다. 한번은 청중 3명에게 강연을 한 적이 있다. 내 발표가 너무 특정한 주제여서 수천 명의 전체 참석자 중 단 3명만이 참석했었다. 희미하게나마 해결의 실마리가 보인다면 기꺼이 지지할 의향이 있다. 그렉도 마찬가지다. 그는 크고 작은 일에 투자한다. 우리는 둘 다 자바 가상 머신(JVM, Java Virtual Machine)과 파이썬(Python)을 좋아한다. 이러한 공통의 애정이 우리를 스프링 파이썬으로 이끌었다. 오래 전, 그렉은 스프링 파이썬 프로젝트를 통해 스프링 프레임워크의 우수성을 파이썬 생태계에 도입했다. 파이썬 생태계는 모든 사용 사례에 대한 대안으로 가득하다. 이러한 선택의 바다에서 스프링 파이썬은 단연 돋보였다. 이 라이브러리는 스프링 프레임워크의 매우 높은 목표를 달성하면서도 익숙한 파이썬 프로그래머에게 라이브러리가 관용적으로 느껴질 수 있는 ‘파이토닉(phythonic)’한 특성을 유지했다. 이는 크게 다른 두 가지 생태계에 대한 깊은 헌신과 친숙함을 보여줬다. 스프링 파이썬 때문에 그렉을 좋아한다. 문제가 아무리 크든 작든 해결될 때까지 기꺼이 앉아서 소매를 걷어붙이고 시야를 넓혀 코드를 작성하는 그의 모습을 볼 수 있다. 한 가지 주제를 깊이 파고들려는 의지가 그를 재능 있는 저자이자 강사로 만들었으며, 이는 그의 책, 강좌, 블로그, 기사에서 잘 드러난다. 그의 재능 덕분에 이 책은 소프트웨어에 관한 또 다른 책이 아니라 시간을 투자할 만한 가치가 있는 책이 됐다. 이 책은 2013년 스프링 부트가 처음으로 공개된 이후 가장 중요한 릴리스인 최근 출시된 스프링 부트 3.0을 다룬다. 그렉을 포함한 스프링 팀원 모두가 이 릴리스를 출시하기 위해 그 어느 때보다 오랜 시간 동안 열심히 일한 것으로 알고 있다. 그런 모든 업무에도 불구하고 그렉은 기록적인 시간 내에 이 책을 여러분의 손에 쥐어주는 데 성공했다. 독자 여러분을 위해 그가 그렇게 노력했기 때문에 기록적인 시간 내에 출판 작업에 들어갈 수 있었던 것이다. 그리고 그렉은 우리가 크고 작은 투자를 할 필요가 없도록 해줬다. - 조쉬 롱(Josh Long) (스프링 개발자 애드보킷, VMware, 잘 알려진 그렉 턴키스트의 팬) |