상세 컨텐츠

본문 제목

예제로 배우는 스프링 부트 입문

전체 출간 도서

by 비제이퍼블릭 2020. 11. 27. 13:43

본문

 

예제로 배우는 스프링 부트 입문

부제 JSP, Oracle, MyBatis와 연동한 웹 애플리케이션 만들기

저자 이재환

 

출간/배본가능일 2020 11 30 

정가 30,000 

페이지 496 

판형 크라운판 (173 * 230) 

 

ISBN 979-11-6592-030-2 (93000) 

 

책 소개 

스프링 부트의 이론부터 실전까지
예제로 가장 쉽고 빠르게, 체계적으로 배운다!

 

기존의 책들은 이론이 너무 많았습니다. 그래서 스프링을 대하는 학생들을 보면 일단 너무 어려워하거나 지루해했습니다. 만약 혼자 책을 보면서 공부해야만 했다면 많은 학생들이 포기했을 것 같습니다. 그래서 이 책에서는 너무 많은 이론은 지양하고 꼭 필요한 이론은 빠지지 않도록 신경을 썼습니다.

이 책에서는 스프링 부트에 필요한 이론은 놓치지 않고 자연스럽게 모두 익힐 수 있도록 구성하였습니다. 웹 애플리케이션을 만들기 위해서 필요한 각각의 기능을 짧고 간단한 예제로 배워보면서 전체적인 기능을 배운다면, 나중에 본인만의 프로젝트를 진행할 때 만들고 싶었던 거의 대부분의 기능을 구현할 수 있게 될 것입니다.

 


이 책의 특징
- 예제를 만들면서 자연스럽게 스프링을 이해할 수 있다.
- 웹 애플리케이션을 만드는 데 필요한 기술들을 차례대로 설명한다.
- JSP, Oracle, MyBatis와의 연계에 대해 집중적으로 다룬다.

 


이 책이 필요한 독자
- 스프링 부트를 쉽고 빠르게 배우고 싶으신 분
- 취업이나 실무에 필요한 스프링 공부를 시작하는 분
- JSP, Servlet 과정을 배우고 Spring을 배워보고 싶으신 분

 


독자대상
초중급

 

 

소스코드 다운로드 

https://github.com/bjpublic/springboot

 

 

저자 소개 

이재환

26년차 개발자로 최근 10여년간 더조은컴퓨터아카데미에서 모바일 앱 개발과 강의를 겸하고 있다. 현재 인프런에서 ‘예제로 배우는 스프링 부트 입문’, ‘디자인 패턴 with JAVA(GoF)’, ‘자바 : 클래스의 이해와 객체지향 프로그래밍’ 등의 온라인 강의를 진행하고 있으며, 여러 직업 훈련 기관에서도 취업자를 위한 자바 개발자 과정을 가르치고 있다.

 

목차

Chapter 01 의존 주입
01 스프링 부트 사용하기
02 스프링 프로젝트 만들기
03 의존 주입의 이해

Chapter 02 Web 기초
04 정적 리소스 사용하기
05 JSP 사용하기
06 모델 사용하기
07 폼 데이터 사용하기
08 롬복 사용하기

Chapter 03 Form 값 검증
09 Validator 사용하기
10 ValidationUtils 사용하기
11 initBinder 사용하기
12 Valid 어노테이션 사용하기

Chapter 04 JdbcTemplate
13 JdbcTemplate 사용하기
14 간단한 게시판 만들기 

Chapter 05 MyBatis
15 MyBatis 기초 
16 MyBatis로 간단한 게시판 만들기
17 MyBatis에서 파라미터 사용하기
18 MyBatis에서 쿼리 결괏값 사용하기
19 MyBatis로 SQL 로그 출력하기

Chapter 06 트랜잭션
20 서비스의 개념과 사용
21 트랜잭션 미적용 시 에러 상황
22 트랜잭션 매니저 사용하기
23 트랜잭션 템플릿 사용하기
24 트랜잭션 전파 속성

Chapter 07 시큐리티
25 시큐리티 기초 
26 시큐리티 커스텀 로그인 폼
27 시큐리티 상태 체크
28 시큐리티 태그 라이브러리 사용하기
29 시큐리티 데이터베이스 사용하기

Chapter 08 기타
30 WebJars 사용하기
31 외부 라이브러리 사용하기
32 War 파일 배포하기

 

출판사 리뷰

스프링이 어려운 것은 스프링이라는 프로젝트가 워낙 방대한 내용을 다루고 있고 이론이 유독 많기 때문이라고 생각합니다. 그런데 우리가 웹 애플리케이션을 개발할 때 사용하는 스프링의 기술들은 많은 이론에 비해 실제로 만들어보면 그렇게 어렵지 않습니다. 그리고 스프링 부트는 이런 스프링을 쉽게 사용하라고 나온 기술이라 더욱 쉽습니다. 

이 책의 예제들은 많은 이론보다는 기능을 구현하기 위한 핵심 이론 하나씩을 담아 만들었습니다. 그렇게 개별 기능을 만들어 보면서 스프링 부트의 전체적인 기능을 배울 수 있도록 쿡북(CookBook) 형태로 구성하였습니다. 이 책을 통해 핵심 기능들을 배우고 익혔다면 개인 프로젝트를 통해 배운 기술을 어디서 어떻게 사용해야 하는지를 익히고, 필요하다면 응용하기 바랍니다. 

 

 

관련글 더보기

댓글 영역

  • 프로필 사진
    2021.10.17 16:22
    Chapter 08 기타 의
    32 War 파일 배포하기
    에서 "배포용 war 파일 만들기"가 안됩니다.
    배포용 war 파일은 만들어 지는데
    정작 브라우저에서 page가 안열립니다.
    이유가 뭘까요? 책데로 똑같이 했습니다. ㅠ.ㅜ

    참고로 실행 가능한 war파일 배포하기는 파일도 잘 만들어지고 page도 열리고 잘 됩니다.

    테스트를 해보니
    bulid.gradle에
    implementation 'org.springframework.security:spring-security-taglibs' 추가하고
    배포용 war 파일을 만든뒤 톰캣컨테이너에 설정한 뒤 브라우저로 띄어 보면 page가 안열립니다.
    이유가 무엇을까요? .ㅠ.ㅠ

    저자와 소통할수 있는 방법이 없어서 여기에 글 옵니다. ㅠ.ㅠ
  • 프로필 사진
    2021.10.30 23:54
    비밀댓글입니다
  • 프로필 사진
    2021.11.24 13:08
    안녕하세요 chapter 7장 ex25 실습시 에러가 나서요. 책에 나온 그대로 수행했는데 다음과 같은 오류가 납니다. 순환 참조 오류가 나는데 인터넷을 검색해도 정확한 정보를 찾기가 어렵네요.. 저자 또는 아시는 분의 도움을 받고 싶은데 방법이 없을 까요? 제 email은 cjh1565@hotmail.com 입니다.

    org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'webSecurityConfig': Requested bean is currently in creation: Is there an unresolvable circular reference?
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:355) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:227) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:410) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:362) ~[spring-context-5.3.13.jar:5.3.13]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:334) ~[spring-context-5.3.13.jar:5.3.13]
    at com.study.springboot.auth.WebSecurityConfig$$EnhancerBySpringCGLIB$$32c21daa.passwordEncoder(<generated>) ~[main/:na]
    at com.study.springboot.auth.WebSecurityConfig.configureGlobal(WebSecurityConfig.java:36) ~[main/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:724) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.13.jar:5.3.13]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.13.jar:5.3.13]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.0.jar:2.6.0]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.0.jar:2.6.0]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.0.jar:2.6.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.0.jar:2.6.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.0.jar:2.6.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.0.jar:2.6.0]
    at com.study.springboot.Ex25SecurityApplication.main(Ex25SecurityApplication.java:10) ~[main/:na]