23 October 2023

스프링 부트에 대해 학습하고자 할 때, 필요한 것은 이론이나 개념을 설명하는 것뿐만 아니라 실제 상황에서 어떻게 활용할 수 있는지 알려주는 안내서이다. 스프링 데이터, 스프링 시큐리티, 스프링 웹플럭스와 같은 스프링의 핵심 모듈에 대해 실용적으로 알려준다. 스프링 부트의 철학과 간단한 코드로 어플리케이션을 개발하는 방법을 보여준다. 각 장은 이론적인 부분을 최소화하고, 실제 코드 작성을 통해 학습자가 직접 경험할 수 있도록 설계되어 있어, 개념을 빠르게 이해하는데 도움이 된다.

단순히 ‘어떻게’ 하는지를 가르쳐주는 것이 아니라 ‘왜’ 그렇게 해야 하는지에 대한 이해를 할 수 있도록 돕는 책으로, 확장 가능한 애플리케이션을 구축하는 방법을 소개하는 부분은 실제 세계의 문제를 해결하는 데 필요한 실용적인 지침을 제공하면서도, 스프링 부트가 지향하는 ‘관심사의 분리’와 ‘자동 구성’ 같은 원칙을 잘 따르고 있음을 느낄 수 있었다.

챕터 1 스프링 부트

  • 스프링 부트의 핵심을 담당하는 기본 사항에 대한 깊이 있는 이해를 구축할 수 있도록 도와준다. 챕터별로 진행하면서 도구의 선택, REST API의 구성, 데이터베이스 연동 방법 등 기초적인 내용부터 다양한 고급 기술까지 체계적으로 다룬다.

챕터 3 첫 번째 REST API

  • REST API의 중요성을 설명하면서, 실제로 API를 구축하는 과정을 상세하게 설명한다.

챕터 6 데이터 파고들기

  • 실제 데이터 작업을 위한 다양한 전략을 선보이면서, 이론적인 부분만이 아닌 실제 애플리케이션에서의 데이터 관리를 위한 구체적인 지침을 제공한다.
  • 엔티티 정의: 이 섹션에서는 스프링에서 엔티티를 어떻게 정의하는지, 엔티티와 테이블 간의 매핑, 관계 매핑 등의 내용을 다룬다.
  • 템플릿 지원: 스프링은 JDBC, Redis, MongoDB 등과 같은 데이터 액세스 기술에 대한 템플릿을 제공하여, 데이터 액세스 계층을 쉽게 구현할 수 있도록 지원하고 이러한 템플릿의 사용 방법에 대해 설명한다.
  • 저장소 지원: 스프링 데이터 저장소 지원은 데이터 액세스를 단순화하며, CrudRepository나 JpaRepository와 같은 저장소 인터페이스로 공통 CRUD 연산을 쉽게 수행할 수 있도록 한다.
  • @Before:
    • 이 부분은 스프링 테스트에서 사용되는 어노테이션으로, 테스트 메서드를 실행하기 전에 수행해야 할 작업을 정의할 때 사용된다.
    • 데이터 액세스 로직을 테스트할 때 필요한 설정을 초기화하는 데 사용될 수 있다.
  • 레디스로 템플릿 기반 서비스 생성하기:
    • 레디스를 사용하여 템플릿 기반의 서비스를 어떻게 생성하는지에 대한 예제와 함께 상세한 방법을 제공한다.
  • 템플릿에서 repository로 변환하기:
    • 기존에 템플릿을 사용하던 코드를 스프링 데이터 저장소를 사용하는 코드로 리팩터링하는 방법을 소개한다.
  • JPA로 repository 기반 서비스 만들기:
    • JPA(Java Persistence API)를 사용하여 데이터를 영속화하는 방법과 이를 위한 repository 기반 서비스의 생성 방법을 다룬다.
  • NoSQL 도큐먼트 데이터베이스를 사용해 repository 기반 서비스 만들기:
    • NoSQL 도큐먼트 데이터베이스를 사용하여, 스프링 데이터와 함께 repository 기반 서비스를 어떻게 만드는지 설명한다.
  • NoSQL 그래프 데이터베이스를 사용해 repository 기반 서비스 만들기:
    • 이 부분은 NoSQL 그래프 데이터베이스를 사용하여 데이터를 처리하고 repository 기반 서비스를 구현하는 방법에 대해 다룬다.

챕터 8 프로젝트 리액터와 스프링 웹플럭스를 사용한 리액티브 프로그래밍과 12 리액티브로 더 깊이 들어가기

  • 리액티브 시스템의 기본 원리부터 시작하여, 프로젝트 리액터와 스프링 웹플럭스를 통한 리액티브 프로그래밍의 실제 적용 사례에 대해 상세히 설명한다.
  • 리액티브 프로그래밍: 리액티브 프로그래밍의 기본 개념과 그것이 왜 중요한지, 그리고 리액티브 시스템을 구축할 때 고려해야 할 설계 원칙에 대해 설명한다.
  • 프로젝트 리액터:
    • 프로젝트 리액터는 리액티브 프로그래밍을 위한 스프링의 라이브러리로, 개발자가 비동기 및 논블로킹 애플리케이션을 쉽게 만들 수 있도록 도와주며 라이브러리의 핵심 개념과 사용 방법을 다룬다.
  • 톰캣 vs. 네티: 이 섹션에서는 서블릿 컨테이너인 톰캣과 비동기 네트워크 애플리케이션 프레임워크인 네티 사이의 차이점을 비교 분석한다.
  • 리액티브 데이터 액세스: 여기에서는 데이터베이스와의 비동기 통신을 가능하게 하는 리액티브 데이터 액세스의 개념과 구현 방법에 대해 설명한다.
  • 리액티브 Thymeleaf:
    • Thymeleaf는 서버 측 Java 템플릿 엔진이다.
    • 리액티브 프로그래밍 모델에 Thymeleaf를 어떻게 통합하는지를 설명한다.
  • 완전한 리액티브 프로세스 간 통신을 위한 RSocket:
    • RSocket은 리액티브 애플리케이션에서 사용되는 네트워크 프로토콜로, 양방향 스트리밍 데이터 전송을 지원한다. RSocket을 사용한 리액티브 시스템의 구현 방법을 다룬다.

챕터 10 애플리케이션 보안

  • 안전성과 보안에 대한 내용도 눈여겨볼 만한데, 챕터 10에서는 스프링 시큐리티를 활용한 인증 및 인가 메커니즘 구현에 대한 실용적인 접근을 소개한다.
  • 인증과 인가의 개념, 스프링 시큐리티의 활용, 그리고 보다 복잡한 보안 프로토콜의 구현에 대해 설명한다.
  • 인증 및 인가 부여:
    • 보안의 두 가지 핵심 요소인 ‘인증(authentication)’과 ‘인가(authorization)’의 개념을 소개한다.
    • 인증은 사용자가 자신이 주장하는 사람임을 증명하는 과정이며,
    • 인가는 인증된 사용자가 애플리케이션의 특정 자원이나 경로에 접근할 수 있는 권한을 가지고 있는지 결정하는 과정이다.
  • 스프링 시큐리티 살펴보기:
    • 스프링 시큐리티는 인증과 인가를 비롯한 여러 보안 기능을 제공하는 강력한 프레임워크입니다.
    • 스프링 시큐리티의 주요 구성 요소, 핵심 기능, 그리고 이를 활용하는 방법에 대해 세부적으로 설명한다.
  • 스프링 시큐리티로 폼 기반 인증 및 인가 구현:
    • 표준 폼 기반의 인증 방식을 구현하는 방법을 다룬다. 사용자의 자격 증명을 확인한 후 적절한 인가 처리를 수행하는 전체 과정이 담겨 있다.
    • 로그인 폼의 제출, 자격 증명의 검증, 그리고 세션 생성과 관리를 포함한다.
  • 인증 및 인가를 위한 OIDC와 OAuth2 구현:
    • OIDC(OpenID Connect)와 OAuth2를 사용한 보안 프로토콜 구현에 초점을 맞춘다.
    • OAuth2는 외부 서비스 제공자를 통한 인증을 처리하는 데 사용되며, OIDC는 OAuth2 기반의 인증 프로토콜로서, 클라이언트가 사용자의 ID 토큰을 받을 수 있게 해준다.
    • 여기에서는 이러한 프로토콜을 사용하여 애플리케이션에 더 강력한 보안 계층을 추가하는 방법을 상세히 설명한다.

챕터 11 애플리케이션 배포

  • 애플리케이션의 배포와 관련된 실제 조언을 챕터 11에서 제공하며, 실제 작업 환경에서의 스프링 부트 애플리케이션 구축에 필요한 노하우를 알려준다.
  • 실행 가능한 JAR(Java Archive):
    • 전통적인 Java 애플리케이션과 달리, 스프링 부트는 내장된 서버를 포함한 모든 종속성을 하나의 JAR 파일에 패키징하며 복잡한 배포 프로세스 없이도 독립적으로 실행 가능한 애플리케이션을 만들 수 있도록 한다.
  • JAR 확장:
    • JAR 파일에 추가적인 기능을 제공하거나, 애플리케이션을 더욱 유연하게 구성할 수 있도록 한다.
  • 컨테이너에 스프링 부트 애플리케이션 배포하기:
    • 컨테이너는 애플리케이션을 포함하고 실행하는 표준화된 유닛으로, 환경에 구애받지 않고 일관된 방식으로 애플리케이션을 실행할 수 있게 해준다.
    • 이미지 생성 및 컨테이너화된 환경에서의 애플리케이션 관리 방법을 설명한다.

이 리뷰는 한빛미디어의 나는 리뷰어다 이벤트를 통해 책을 제공받아 작성했습니다.