공공기관, 정부기관에서 주로 사용하는 "전자정부프레임워크"는

Model-View-Controller(MVC) 구조의 "스프링프레임워크"를 기반으로 만들어졌습니다.

저는 전자정부프레임워크 구조가 익숙하다보니 (개발을 해본 적은 없습니다)

스프링프레임워크 자체는 익숙합니다 :-)

 

그런데 "스프링 부트" 는 웹개발자들 사이에서 얘기가 나오긴 했지만,

저는 아직 잘 몰라서 정말 생소했고, 어디에 쓰는건지 궁금했습니다.

 

궁금하던 차에 "배워서 바로 쓰는 스프링 부트2" 책을 통해서 "스프링 부트"를 좀 이해할 수 있었습니다.

 

책 앞면
책 뒷면

 

스프링 부트는 자바기반 스프링 프레임워크를 사용해 보다 쉽게 애플리케이션을 개발할 수 있다고 합니다.

서드파티 라이브러리나 스프링 플랫폼 설정이 들어있어 최소한의 작업으로 개발을 시작할 수 있습니다.

톰캣 등의 애플리케이션 서버도 내장되어 있다고 합니다.

 

여러모로 자바 기반 스프링 프레임워크 개발이 가능한 환경으로 보시면 되겠습니다.

 

책에서 소개하는 장점은 다음과 같습니다. 

 

 1. 스프링 애플리케이션을 단독으로 실행할 수 있습니다.

 2. 기본 설정이 되어 있는 스타터 컴포넌트를 제공합니다.

 3. 설정을 위해 일일이 XML 코드를 생성하거나 설정하는 번거로움이 없습니다.

 

또한, 책에서 소개하는 스프링 부트의 특징은 다음과 같습니다.

 1. 스타터 : 의존관계를 간단하게 정의하는 모듈

 2. 빌드 도구 : 버전 해결 등 개발을 효율화하는 플러그인

 3. 구성 클래스 : XML이 아닌 에너테이션과 자바로 설정을 작성한다

 4. 자동 구성 : 디폴트 구성이 적용되며 필요한 부분만 설정하면 된다

 5. 메인 애플리케이션 클래스 : 자바 명령으로 내장된 톰캣을 실행한다

 6. 설정 파일 : 속성을 외부 파일에 정의할 수 있으며 동작 사양을 쉽게 변경할 수 있다

 

기존에 번거롭게 XML로 설정을 일일이 해야하는 부분도 스프링 부트에서는 간단한 설정으로 개선이 되었습니다.

 

목차 는 다음과 같습니다. (책은 크지 않지만, 다루는 스프링 부트 내용이 꽤 많습니다 :0)

Chapter1. 스프링 부트의 구성

  1.1 스프링 부트의 기초

        1.1.1 스프링 부트란?

        1.1.2 스타터

        1.1.3 빌드 도구

        1.1.4 의존관계 관리

        1.1.5 구성 클래스

        1.1.6 자동 구성

        1.1.7 메인 애플리케이션 클래스

        1.1.8 설정 파일

        1.1.9 애플리케이션 실행하기

  1.2 웹 애플리케이션 개발

        1.2.1 개발자 도구

        1.2.2 재실행 vs 리로드

   1.3 예제 프로젝트의 구성

        1.3.1 멀티 프로젝트

        1.3.2 애플리케이션 아키텍처

        1.3.3 예제 프로젝트의 빌드 스크립트

        1.3.4 롬복 이용하기

 Chapter2. 웹 애플리케이션의 공통 처리

   2.1 유효성 검증

        2.1.1 메시지 설정

        2.1.2 유효성 검증 종류

        2.1.3 단일 항목 체크

        2.1.4 상호 관련 항목 체크

   2.2 객체 매핑

        2.2.1 재작성 비용 절약하기

   2.3 로그 출력

        2.3.1 추적을 위한 공통 처리

        2.3.2 로그 레벨

        2.3.3 로그 로테이션

   2.4 파일 다운로드

        2.4.1 PDF 파일 다운로드

        2.4.2 CSV 파일 다운로드

        2.4.3 엑셀 파일 다운로드

   2.5 파일 업로드

        2.5.1 파일의 크기 설정

        2.5.2 파일 처리

        2.5.3 데이터베이스 보관

   2.6 메일 송신

        2.6.1 템플릿 엔진 이용

Chapter3. 데이터 액세스

   3.1 스타터

   3.2 도마 사용 방법

        3.2.1 엔티티

        3.2.2 Dao 인터페이스

        3.2.3 SQL 템플릿

   3.3 엔티티 공통 처리

        3.3.1 엔티티 기본 클스

        3.3.2 엔티티 리스너

   3.4 페이징 처리

        3.4.1 검색 옵션으로 페이징 처리하기

   3.5 배타 제어

        3.5.1 낙관적 배타 제어

        3.5.2 비관적 배타 제어

   3.6 논리 삭제

        3.6.1 갱신 기능으로 구현하기

        3.6.2 엔티티 리스너로 공통 처리하기

        3.6.3 논리 삭제 레코드 제외하기

Chapter4. 보안

    4.1 스타터

    4.2 인증

        4.2.1 인증 설정

        4.2.2 인증 정보 취득

        4.2.3 로그인 기능

    4.3 RememberMe

        4.3.1 로그인 기록 영속화

    4.4 인가

        4.4.1 권한 관리에 필요한 테이블 작성하기

        4.4.2 권한 관리 데이터 로드하기

        4.4.3 권한과 메서드 관계 부여

        4.4.4 인가를 제어하는 인터셉터

    4.5 CSRF 대책

        4.5.1 CSRF 대책 확장

    4.6 이중 송신 방지

        4.6.1 토큰 관리

        4.6.2 RequestDataValueProcessor 변경하기

        4.6.3 이중 송신 방지 토큰의 생명 주기를 관리하는 인터셉터

        4.6.4 이중 송신 방지 토큰 체크

Chapter5. 화면 개발

     5.1 타임리프

        5.1.1 스프링 부트에서 타임리프 이용하기

     5.2 폼 바인딩

        5.2.1 폼 바인딩 구현

     5.3 전처리

        5.3.1 전처리 구현

     5.4 템플릿 공유

        5.4.1 템플릿 부품화

        5.4.2 템플릿 공통화

     5.5 타임리프의 다른 기능

        5.5.1 이스케이프 처리되지 않은 텍스트

        5.5.2 날짜 조작 확장 라이브러리

     5.6 정적 콘텐츠 관리하기

        5.6.1 정적 콘텐츠의 배치 장소

        5.6.2 캐시 제어

        5.6.3 액세스 제어

        5.6.4 클라이언트 라이브러리의 구성 관리

Chapter6. API 개발

     6.1 스프링 부트를 이용한 API 개발

        6.1.1 API 사양

        6.1.2 리소스 구현

        6.1.3 컨트롤러 구현

        6.1.4 오류 핸들링 구현

     6.2 스프링 부트를 이용한 API 연계

        6.2.1 RestTemplate

        6.2.2 사용자 목록 취득 API에 연계하기

        6.2.3 사용자 생성 API에 연계하기

     6.3 API 개발 효율 극대화

        6.3.1 스웨거

        6.3.2 스프링폭스

        6.3.3 스프링 REST Docs

Chapter7. 팀 개발

     7.1 인프라 구성 관리

        7.1.1 도커

        7.1.2 메이븐/그레이들에서 이용하기

     7.2 데이터베이스 구성 관리

        7.2.1 플라이웨이 이용하기

     7.3 유지보수 가능한 테스트 코드

        7.3.1 스폭

     7.4 문서 생성 도구 활용

        7.4.1 스핑크스

     7.5 소스 생성기

        7.5.1 소스 생성기 플러그인 활용

Chapter8. 운용

     8.1 환경별 설정 관리

        8.1.1 스프링 프로파일

        8.1.2 환경별 설정 관리

     8.2 애플리케이션 서버 설정

        8.2.1 실행 가능한 JAR

        8.2.2 애플리케이션 서버 설정 및 릴리스

     8.3 애플리케이션의 상태 확인

        8.3.1 스프링 부트 액추에이터

        8.3.2 주요 엔드포인트

        8.3.3 건강 체크 커스터마이즈

        8.3.4 커스텀 애플리케이션 정보 추가하기

        8.3.5 스프링 부트 액추에이터의 시큐리티 제어

     8.4 애플리케이션 모니터링

        8.4.1 프로메테우스

        8.4.2 프로메테우스 도입하기

        8.4.3 프로메테우스의 서비스 디스커버리

        8.4.4 스프링 애플리케이션과 연계하기

        8.4.5 메트릭 시각화

        8.4.6 경고 알림

    8.5 요청 추적

        8.5.1 엔진엑스 추적

        8.5.2 엔진엑스와 추적 ID 통합하기

    8.6 지연 시간 분석

        8.6.1 스프링 클라우드 슬루스

        8.6.2 요청 추적 데이터 시각화

    8.7 무정지 배포

        8.7.1 롤링 배포

        8.7.2 롤링 배포 순서

        8.7.3 롤링 배포 구현하기

        8.7.4 보충 설명 : 롤링 배포(URL 기반 건강 체크)

     8.8 컨테이너 오케스트레이션 배포

        8.8.1 컨테이너 이미지 작성

        8.8.2 쿠버네티스

Chapter9. 시스템 아키텍처 구성

     9.1 시스템 아키텍처 고찰

        9.1.1 시스템 요구 사항

        9.1.2 시스템 요구 사항 검토

     9.2 시스템 아키텍처 구성안

        9.2.1 구성 요소 리스트

        9.2.2 가용성

        9.2.3 확장성

        9.2.4 비용

     9.3 구축 튜토리얼

        9.3.1 IaC

        9.3.2 테라폼

Chapter10. 스프링 5와 스프링 부트 2의 신기능

     10.1 웹플럭스

        10.1.1 애너테이션을 사용한 개발

        10.1.2 함수형 프로그래밍 개발

        10.1.3 함수형을 사용한 프로그램

Chapter11. 로컬 개발 환경 구축

      11.1 깃 설치

      11.2 예제 프로젝트 다운로드

         11.2.1 예제 프로젝트 브랜치 설정

      11.3 도커 설치

      11.4 JDK 설치

      11.5 IDE 설치

         11.5.1 인텔리제이 설정

         11.5.2 IDE에서 예제 프로젝트 열기

         11.5.3 애플리케이션 실행하기

Chapter12. 예제 애플리케이션

      12.1 관리 애플리케이션의 기능

      12.2 관리 애플리케이션 이용 방법

         12.2.1 로그인

         12.2.2 시스템 담당자 패스워드 변경

        

목차에서도 알 수 있듯이 책에서는

 * 프레임워크로 데이터베이스 액세스 최적화

 * 스프링 시큐리티를 이용해 고성능 보안환경 구축하기

 * 타임리프를 이용해 효율적으로 화면 개발하기

 * 도커를 활용해 팀 개발 협업 능력 높이기

 * 스프링 프로파일로 시스템 운용 최적화하기

 

를 다양한 예시 코드들과 함께 상세하게 설명합니다.

 

스프링 부트를 사용하여 웹 개발을 한다고 하면, 단순 이론부터 실제 적용하는 부분까지

공통처리, 데이터베이스 액세스, 보안, 화면 개발, API 개발, 운용, 시스템 아키텍처 등

실무에 적용할 부분들을 책에서 잘 다루기 때문에

개발자 레퍼런스 책으로 참고해도 좋을 것 같습니다.

 

제대로 스프링부트를 다뤄볼 시간이 안 되어 책을 읽어보기만 했는데

시간을 내서 책에서 나온 스프링부트2 설정~구현부를 제대로 시도해볼까 합니다.