[Book] 공부하기/코드로 배우는 스프링 부트(구멍가게 코딩단)
Intro. { 이 책을 내며, 들어가며 }
Ben의 프로그램
2023. 7. 11. 12:42
728x90
코드로 배우는 스프링 부트 웹 프로젝트를 읽고 공부하는 내용임을 우선 밝힙니다.
이 책을 내며 (스프링 부트 등장 배경 이해하기 & 이 책의 핵심 목표 이해하기)
스프링 프레임 워크가 처음 세상에 나왔을 때 추구하는 목표는 '경량화'였다. 엔터프라이즈급 시스템 개발을 가볍고 빠르게 할 수 있다는 것을 내세우며 '의존성 주입'이나 'AOP' 등의 특징을 보여주었다. 이후 시간이 지나면서 스프링은 더 많은 기능을 포함하게 되었고 '스프링 개발은 설정이 반이다'라는 말이 생길 정도였다. 이제 스프링 프레임 워크는 더 이상 '경량'하지 않은 복잡한 설정과 실행 과정을 갖는 프로그램이 되었다.
스프링 부트는 이러한 배경에서 시작되었다. 스프링 부트는 원래 스프링 프레임워크가 추가하던 '경량'한 프로그램으로 돌아가고자 하는 욕구가 반영된 프로그램이다. 최소한의 설정으로 별도의 WAS 없이도 실행이 가능한 '경량'한 스프링 개발 도구 느낌을 받을 수 있습니다.
또한 '빠르게' 데이터베이스 개발을 하기 위해 JPA 를 도입하는 것도 매우 유용합니다. 스프링 프레임워크만 이용한다면 JPA의 설정을 하는 것만으로도 엄청난 일이지만, 스프링 부트는 몇 줄만으로도 가능합니다.
개발을 할수록 항상 중요하게 부각되는 것이 일관성입니다. 개발할 때는 일정한 기준점이 있어야 하며, 모든 팀원이 이를 공유합니다. 이러한 일관성이 코드에 반영되고 향후에 방법론이라는 문화가 되기도 합니다. JPA를 공부하면서 가장 힘들었던 부분이 이러한 '방향'과 '기준'에 대한 것이었습니다. JPA를 이용할 때 '단방향'을 이용할 것인지 '양방향'을 이용할 것인지, 중간에 테이블을 또 만들지, 여러 객체를 어떤 구조로 사용할 것인지, 스프링 시큐리티를 이용할 때 어떤 클래스를 상속해야 하는지, DTO를 어떤 방식으로 만들어서 사용할 것인지,,, 등 수많은 기준이 필요합니다.
이 책에서 다루어 보고자 했던 부분은 바로 이러한 기준입니다. 웹에서 흔하게 볼 수 있는 몇 가지 상황의 예제를 두고, 이를 구현할 때 어떻게 할 것인지에 대한 고민을 개인적으로는 어떤 방식으로 해결하였는지, 어떠한 장점과 단점이 있는지를 다루고자 합니다.
간혹 시작하는 개발자에게 '작게 만들어서 크게 키워라'라는 잔소리를 하곤 합니다. 스프링의 역사 뿐만 아니라 스프링 부트 역시 세월이 흘렀습니다. 처음부터 완벽하지 않았던 스프링과 스프링 부트처럼 시작하는 분들에게 이 책이 작은 '시작점'이 되기를 기원합니다.
들어가며
'스프링 프레임워크를 좀 더 간단히 사용할 수는 없을까?'
이 책의 시작은 위의 질문에서 시작합니다. 스프링 부트의 경우 자동 설정 기능을 이용하면 최소한이 설정만으로도 원하는 기능들을 사용할 수 있는 놀라운 개발 생산성을 보여줍니다.
개발에서 가장 중요한 데이터베이스 처리는 과감하게 JPA를 도입해 봅니다. JPA를 이용해서 최소한의 개발을 추구하고 데이터베이스에 독립적으로 실행 가능한 코드를 개발할 수 있습니다. JPA가 생성하는 SQL을 로그로 확인해 보면 직접 테이블들을 조인 처리해야 했던 시간을 얼마나 절약할 수 있는지 체감할 수 있을 것입니다.
인증 처리 역시 구글을 이용하는 소셜 로그인 처리와 더불어 JWT 토큰을 발행하는 방식을 도입합니다. 이를 통해서 전통적인 로그인과 API를 제공할 때 인증 처리를 모두 지원하는 애플리케이션을 구성하는 방법을 알아봅시다.
이 책의 주요 특징
- 개발 도구를 STS 대신에 IntelliJ Ultimate를 이용합니다.
- MariaDB를 이용하고, Spring Data JPA로 SQL을 대신합니다.
- JSP 대신에 Thymeleaf 를 이용해서 화면을 작성합니다.
- 소셜 로그인을 이용하고 이를 자동 회원가입으로 처리합니다.
- 스프링 시큐리티를 이용해서 일반 로그인과 JWT를 이용한 API 인증처리를 같이 적용합니다.
이 책의 구성
- Part 1 : 스프링 부트, Thymeleaf, Spring Data JPA 소개
- Part 2 : 단일 엔티티를 이용하는 방명록 프로젝트
- Part 3 : @ManyToOne 연관관계를 이용하는 게시물과 댓글 프로젝트
- Part 4 : 다대다 관계를 이용하는 영화와 회원의 영화 리뷰 프로젝트
- Part 5 : 스프링 시큐리티를 이용하는 일반 로그인 / 소셜 로그인 / API 로그인 처리
이 책의 대상 독자 (필요한 선행 지식)
- Java 언어의 기본적인 문법과 예외 처리, JDBC 관련 기능에 대한 이해가 필요합니다.
- JPA 를 다루긴 하지만 실제 실행은 SQL로 처리하므로 이에 대한 지식이 필요합니다.
- MVC 기반의 웹 프로그래밍 경험이 있어야만 합니다.
- 스프링에 대한 기본적인 개념과 이해가 있어야만 합니다.
이 책의 구성 특징
- 단순한 CRUD가 아닌 현실적인 데이터의 처리 방식 소개
- 단방향 위주의 연관관계 설정
- 테스트를 중시하는 개발 방식
- 공통된 구조와 재사용 가능한 클래스