IT/책리뷰 / / 2023. 9. 29.

실전 스프링 부트 (SPRING BOOT in PRACTICE) : 실용적인 접근을 통한 유용한 가이드 (제이펍)

포스팅 목차

    요즘 MSA (마이크로서비스 아키텍처) 에 대한 관심이 많아 지면서 자바개발자들에게 빼놓을 수 없는 인기 많은 자바 프레임워크중 하나로 스프링부트를 들 수 있다. 복잡한 스프링을 좀더 편하게 쓸 수 있다는 장점에 대해 알고 있었고 기존 스프링에 대한 지식을 가지고 있다면 좀 더 유용하게 개발에 도움이 된다 정도로만 인지하고 있었다. 최근 스프링부트에 관심이 생기던 차에 따끈따근하게 제이펍에서 출간한 실전 스프링 부트 서평이벤트에 운좋게 당첨되게 되었다. 이 책에 대한 소개와 함께 책을 읽으면서 느낀 점을 간단하게 나눠 보고자 합니다.

     

    실전 스프링 부트 - 책 소개

    Spring Boot in Practice 이 책은 매닝 출판사의 In practice 시리즈 중 하나로 11년차 개발자인 솜나트 무시브(Somnath Musib) 에 의해 쓰여진 책으로 다수의 책을 번역하신 오명운님이 번역한 책입니다.

     

    제이펍 책 소개 보러가기

     

    실전 스프링 부트

     

    제이펍 출판사에서 소개하는 이 책의 특징

    "스프링 부트에서 자주 겪는 개발 문제를 요구 사항/해법/토론 형식으로 풀어낸 실용적인 레시피"
    "엄청난 인기에도 스프링 부트의 공식 문서는 너무나 방대하고 바로 사용할 수 있는 예제는 턱없이 부족하여 초중급 사용자에게 적합하지 않다."
    "이 책은 스프링 부트의 명확한 그림을 보여주고 내부 개념을 알기 쉽게 설명한다."
    "또한 교과서 스타일의 이론적인 예제가 아니라 실무에서 사용할 수 있는 예제를 제공한다."
    "프로메테우스, 그라파나 설치 등 원서 설명이 부족한 부분은 한국 독자를 위해 옮긴이가 그림과 설명을 추가해 완성도를 더욱 높였다. "
    "최신 내용으로 가득 찬 이 책은 스프링 부트 개발자들에게 올바른 방향을 알려주는 최고의 가이드다. 개발 문제를 해결하고 최신 기술을 익히고 싶은 실무자에게 도움이 되는 것은 물론, 스프링 부트 기본 개념과 핵심 기능들도 다루기 때문에 초보자도 순서대로 정독하기만 한다면 스프링 부트로 애플리케이션을 구축할 수 있다."

     

     

     

    이 책에서 다루는 내용들

    • 전문가의 관점에서 바라본 스프링 부트의 다양한 기능
    • 스프링 부트 애플리케이션 설정 관리, 로깅, 데이터 검증
    • 스프링 시큐리티 활용 및 실제 서비스 환경에 적용하는 고급 보안 기법
    • 스프링 부트로 마이크로서비스 및 RESTful API 개발하기
    • 마이크로서비스 문서화, 버저닝, 보안성 향상 기법
    • 웹소켓, R소켓을 사용한 리액티브 애플리케이션 개발
    • 쿠버네티스 및 주요 클라우드 플랫폼에 스프링 부트 애플리케이션 배포
    • 스프링 부트 애플리케이션에서 컨테이너화 구현하기
    • 스프링 부트에 코틀린, GraalVM 네이티브 이미지, GraphQL 통합하기

    이 책의 목차

    CHAPTER 1 스프링 부트 시작하기 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.4 JAR 파일 구조 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

    CHAPTER 2 스프링 부트 공통 작업 35
    2.1 애플리케이션 설정 관리 35
    __2.1.1 SpringApplication 클래스 사용 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

    CHAPTER 3 스프링 데이터를 사용한 데이터베이스 접근 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.3 CrudRepository 인터페이스 이해 101
    __3.3.1 기법: 스프링 데이터 JPA를 사용해서 도메인 객체를 관계형 데이터베이스에서 관리 103
    __3.3.2 기법: 커스텀 스프링 데이터 리포지터리를 만들어서 관계형 데이터베이스에서 도메인 객체 관리 111
    3.4 스프링 데이터를 사용한 데이터 조회 114
    __3.4.1 쿼리 메서드 정의 114
    __3.4.2 기법: 관계형 데이터베이스에서 스프링 데이터 JPA를 사용한 커스텀 쿼리 메서드 정의 115
    __3.4.3 PagingAndSortingRepository를 활용한 페이징 119
    __3.4.4 PagingAndSortingRepository 인터페이스로 데이터 페이징 및 정렬 119
    __3.4.5 @NamedQuery를 사용하는 쿼리 123
    __3.4.6 기법: 관계형 데이터베이스에 저장된 도메인 객체를 NamedQuery로 조회 124
    3.5 @Query로 쿼리문 지정 127
    __3.5.1 기법: @Query 애너테이션을 사용해서 쿼리를 정의하고 관계형 데이터베이스에 저장된 도메인 객체 조회 127
    3.6 Criteria API 사용 132
    __3.6.1 기법: Criteria API를 사용해서 관계형 데이터베이스에 저장된 도메인 객체 관리 132
    3.7 스프링 데이터 JPA와 QueryDSL 136
    __3.7.1 기법: 관계형 데이터베이스에 저장된 도메인 객체를 QueryDSL로 관리 136
    __3.7.2 기법: 프로젝션 142
    3.8 도메인 객체 관계 관리 144
    __3.8.1 기법: 스프링 데이터 JPA를 사용해서 관계형 데이터베이스에서 다대다 관계 도메인 객체 관리 145

    CHAPTER 4 스프링 자동 구성과 액추에이터 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.4 Health 엔드포인트 탐구 179
    __4.4.5 커스텀 스프링 부트 HealthIndicator 작성 183
    __4.4.6 기법: 커스텀 스프링 부트 액추에이터 HealthIndicator 정의 183
    4.5 info 엔드포인트 탐구 186
    __4.5.1 기법: 스프링 부트 액추에이터 info 엔드포인트 설정 186
    __4.5.2 기법: 애플리케이션 정보를 표시하는 커스텀 InfoContributor 190
    4.6 커스텀 스프링 부트 액추에이터 엔드포인트 생성 192
    __4.6.1 기법: 커스텀 스프링 부트 액추에이터 생성 193
    __4.6.2 스프링 부트 액추에이터 메트릭 200
    __4.6.3 커스텀 측정지표 생성 203
    __4.6.4 프로메테우스와 그라파나를 사용한 측정지표 대시보드 210

    CHAPTER 5 스프링 부트 애플리케이션 보안 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

    CHAPTER 6 스프링 시큐리티 응용 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.9 OAuth2 인증 342
    __6.9.1 기법: 구글 계정으로 로그인 342
    6.10 액추에이터 엔드포인트 보안 353
    __6.10.1 기법: 스프링 부트 액추에이터 엔드포인트 보안 354

    CHAPTER 7 스프링 부트 RESTful 웹 서비스 개발 357
    7.1 스프링 부트 RESTful API 개발 358
    __7.1.1 기법: 스프링 부트를 사용한 RESTful API 개발 358
    7.2 스프링 부트 RESTful API 예외 처리 368
    __7.2.1 기법: RESTful API 예외 처리 368
    7.3 RESTful API 테스트 373
    __7.3.1 기법: 스프링 부트 애플리케이션에서 RESTful API 테스트 374
    7.4 RESTful API 문서화 380
    __7.4.1 기법: OpenAPI를 사용한 RESTful API 문서화 380
    7.5 RESTful API 버저닝 387
    __7.5.1 기법: URI 버저닝 388
    __7.5.2 기법: HTTP 요청 파라미터를 사용한 버저닝 392
    __7.5.3 기법: 커스텀 HTTP 헤더를 사용한 버저닝 394
    __7.5.4 기법: 미디어 타입을 사용한 버저닝 397
    7.6 RESTful API 보안 400
    __7.6.1 기법: JWT를 사용한 RESTful API 요청 인가 401

    CHAPTER 8 리액티브 스프링 부트 애플리케이션 개발 425
    8.1 리액티브 프로그래밍 소개 426
    __8.1.1 백프레셔 429
    __8.1.2 리액티브 프로그래밍의 장점 430
    8.2 프로젝트 리액터 431
    8.3 스프링 웹플럭스 소개 435
    __8.3.1 기법: 애너테이션 컨트롤러 기반의 리액티브 RESTful API 개발 436
    __8.3.2 기법: 함수형 엔드포인트를 사용하는 리액티브 RESTful API 개발 445
    8.4 리액티브 애플리케이션 테스트 451
    __8.4.1 기법: WebClient로 API 클라이언트 작성 452
    8.5 알소켓 소개 459
    __8.5.1 기법: 알소켓과 스프링 부트를 활용한 애플리케이션 개발 460
    8.6 웹소켓 소개 471
    __8.6.1 기법: 웹소켓을 사용하는 스프링 부트 애플리케이션 개발 473

    CHAPTER 9 스프링 부트 애플리케이션 배포 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

    CHAPTER 10 스프링 부트와 코틀린, 네이티브 이미지, GraphQL 531
    10.1 스프링 부트와 코틀린 532
    __10.1.1 기법: 코틀린으로 스프링 부트 애플리케이션 개발 533
    __10.1.2 기법: 스프링 부트 코틀린 애플리케이션에 스프링 시큐리티 적용 540
    10.2 스프링 네이티브 544
    __10.2.1 GraalVM 545
    __10.2.2 GraalVM 네이티브 이미지 546
    __10.2.3 스프링 부트 네이티브 이미지 547
    __10.2.4 기법: 빌드팩으로 스프링 부트 네이티브 이미지 생성 547
    __10.2.5 기법: 메이븐 플러그인으로 스프링 부트 네이티브 이미지 생성 553
    __10.2.6 스프링 AOT 메이븐 플러그인 555
    10.3 스프링 부트와 GraphQL 557
    __10.3.1 REST의 문제 557
    __10.3.2 GraphQL 소개 558
    __10.3.3 스프링 부트에서 GraphQL 사용 560
    __10.3.4 기법: 스프링 부트 애플리케이션에서 GraphQL API 개발 560
    __10.3.5 기법: 웹소켓을 사용하는 스프링 부트 GraphQL API 개발 577

    APPENDIX A 스프링 이니셜라이저와 스프링 부트 CLI 583
    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

    APPENDIX B 스프링 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

    Vmware 스프링 개발자 조시 롱의 추천평

    조시롱하면 많이들 들어 보셨겠지만 VMware 소속의 스프링 개발자입니다.
    "방향을 제대로 정하지 않고 길을 찾아낼 수는 없는 법이다. <실전 스프링 부트>는 내게 희망을 안겨줬다. 이 책 덕분에 서버 애플리케이션 확장과 서비스 배포 시 항상 뒤따라오는 현기증을 피할 수 있게 됐다. 알찬 내용으로 가득 찬 이 책을 읽으면 애플리케이션 구축 업무에 바로 뛰어들 수 있을 것이다. 먼저 기초를 빠르고 단단하게 다질 수 있고, 읽다 보면 어느새 무언가를 만들고 있는 자신을 발견하게 된다. 무언가를 배우는 데는 이보다 좋은 방법이 없을 것이다."

    이 책의 주요 포인트

    이 책을 보면서 느낀 주요 포인트에 대해서 이야기 해보고자 합니다.

    번역자님 배려와 제이펍의 편집 구성

    번역본 책은 읽어도 어딘가 매끄럽지 않거나 이해가 안되는 번역들이 있는건 어쩔 수 없는 일 같습니다. 하지만 그런 부분을 오명운님께서는 줄이기 위해 노력한 모습이 많이 보이고 원 저자의 생각과 함께 좀더 이해하기 쉽도록 번역해 준 노력이 느껴집니다. 그리고 책을 볼때 구성이나 편집 등도 호불호가 있을 수는 있지만 저는 좋게 생각합니다.

    아래는 원서에 대한 부분과 제이펍의 번역책의 비교 부분입니다.

    출처 : 구글 도서 미리보기

     

    실용적인 접근을 통해 실무 적용에 도움을 줌

    이 책은 문제, 해결, 토론 이라는 순서로 이야기를 전개해 나갑니다. 바로 현재 개발자들이 처해 있는 상황 그리고 고민하는 상황에 대해 현실 시나리오를 제시하고 이를 해결하는 방법을 제공합니다. 그리고 토론이라는 것을 통해 좀더 구체적으로 접근하여 이해를 돕도록 해줍니다. 이러한 접근 방법으로 실제 프로젝트에서도 좀더 살을 붙여서 적용할 수 있도록 가이드를 제공해 줍니다.

    예를 들면 위와 같이 스프링 부트 애플리케이션 시작 시 먼저 선행작업이 필요한 경우가 있다는 개발자가 고민하고 있다고 했을때 이를 해결 하는 방법을 제시한다. 바로 CommandLineRunner를 사용하는 방법을 제시한다.

    그리고 토론을 통해 제시된 해결 방법 이외에 고려해야 할 이야기들을 말해줍니다. 그리고 마지막으로 요약을 통해 다시 한번 정리할 수 있는 시간을 주고 있습니다.

    다양한 내용을 녹이려 함

    기본적인 스프링 부트 내용으로 시작해서 자동 구성이나 보안적인 내용들 Microservice 로 부터 반응형 애플리케이션 개발 같은 고급 기능까지 다양한 기능들을 소개하려고 합니다. 예를 들면 코틀린과 함께 스프링부트를 사용하거나 클라우드에 애플리케이션을 배포하는 방법 등도 간단하게 참고할 수 있도록 합니다. 이런 점은 스프링부트를 활용하는데 좀 더 다양하게 활용할 수 있는 부분을 응용할 수 있게 해주지 않을까 라는 생각을 해봅니다. 그리고 실제적으로 많이 사용하고 있는 캡차 서비스를 구현한다던가 GraphQL, 웹소켓 연동에 대한 내용도 다루고 있습니다. 이는 저자가 많은 지식을 전달하려고 하는 게 아닐 까라는 생각이 들었습니다.

    저자의 경험과 노하우를 담은 소스 및 설명 제공

    책 중간 중간에 보면 source url을 제공하고 있고 필요한 spring boot document 링크도 포함하여 여기서 소개하는 내용 뿐만 아니라 좀더 자세하게 심화할 수 있는 기회를 제공해 주고 있습니다. 예를 들면 스프링부트 설정에 대한 옵션은 모든 것을 다루면서 설명할 수 없어 일부만 설명해주지만 도큐먼트 문서등의 링크를 제공해 좀더 필요한 내용을 찾아가면서 접근할 수 있도록 도와 줍니다.
    그리고 저자의 개발 경험을 토대로 팁과 모범 사례 등도 함께 알려주고 있습니다. 이 부분은 헤매지 않고 좀더 스프링부트를 배울 수 있도록 도움을 준다고 생각합니다.

     

    책 소스 보러가기 (github)

     

    이 책의 총평

    IT 개발 운영 업무를 하다보면 바이블 도서 하나쯤은 갖고 있으면 마음이 편하다는 생각이 듭니다. 이책은 실제 실무적인 부분을 최대한 예시로 많이 들어 주려고 했고 저자가 알고 있는 지식을 최대한 전달 하려고 하는 부분도 엿보입니다. 이 책은 책꽂이에 꽂아두고 소장할 만한 가치가 있는 책이라 생각됩니다.

    아직 전부 실습해 보지는 못했지만 예제 소스와 설명을 보면서 차근차근 실습하면서 이해 한다면 스프링 부트를 이해하는데 많은 도움이 될 것으로 보입니다.

    JAVA에 대한 이해가 있다면 충분히 따라 갈 수 있는 책이고 spring 프레임워크를 미리 경험 해본 사람이라면 스프링 부트에서 해당 어노테이션이나 소스에 대한 원리를 이해하는데 도움이 될 것으로 보입니다.

    정리하자면 스프링부트 개발의 준비 운동을 위한 학습서로써 전체적인 스프링부트를 알고싶거나 개발 환경이나 개발 사이클을 맛보고 싶은 분들에게 추천합니다. 또한 실제 서브프로젝트나 실무에서 살을 붙여가면서 활용한다면 취준생이든 실무에 있는 분들이든 전체적인 스프링 부트를 보는데 많은 도움이 될 것으로 보입니다.

     



    실전 스프링 부트 구매하기 (YES24)

    실전 스프링 부트 구매하기 (쿠팡)

    실전 스프링 부트 구매하기 (교보문고)

    실전 스프링 부트 구매하기 (알라딘문고)


    • 네이버 블로그 공유
    • 네이버 밴드 공유
    • 페이스북 공유
    • 카카오스토리 공유