스프링 인 액션(제5판): 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발
책 좀 읽자

스프링 인 액션(제5판): 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발

본 포스팅은 UPF 2021FW를 통해 Jpub의 도서 '스프링 인 액션(제5판)'을 무상제공받아 작성하였습니다.

스프링 인 액션(제5판): 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발

책을 읽기 전에 나는

지금까지의 백엔드 개발 활동 경험에서는 Python + Django를 주 기술 스택으로 사용했었다. 하지만, 4학년 2학기가 마무리되어가고 취업을 준비하다 보니 Java + Spring으로 넘어가야겠다는 생각이 들었다. 물론, 지금 취업 시장 때문만은 아니라, 대규모 서비스 운영에 있어서와 다양한 자료와 예제 때문이라도 언젠가 넘어가야겠다고 생각했다. 하지만 어떤 식으로 공부를 시작해야 할지 잘 모르기도 하고 고민도 되었다. Java + Spring 기술 스택은 지금 이미 너무나 많은 강의와 도서가 쏟아지고 있기 때문이었다. (사실 지금 하고 있는 활동과 졸업 준비 때문에 미뤄두고 있던 것도 있다.) 그러다 우연히 이 도서를 받아보게 되었다. 아마 이 도서가 나의 Spring 프레임워크의 첫 시작이라고 봐도 될 것 같다. 추운 겨울이 시작되는 이 시점, 따뜻한 봄이 오기를 바라는 마음과 함께 Spring을 공부하려 한다.(문과 감성)

(이후로부터는 Spring을 한글로 '스프링'이라고 부르도록 하겠다.)

 

이거 이렇게 자세하게 알려준다고??

처음 책장을 열었다. 웬만하면 제대로 읽어보고 스프링을 공부해보자 생각했기 때문에 옮긴이의 머리말부터 펼쳤다. 원서를 번역한 도서인데, 원서에서는 설명이 부족한 부분이나, 오타가 있어 빌드가 잘 안 되는 부분이 있었다고 한다. 그런 부분을 옮긴이가 다 수정을 하고 보충설명도 해두셨다고 했다. 스프링을 처음 접하는 나에겐 이 책은 좋은 선택이었던 것 같아 기대가 되었다.

 

Chapter 1. 스프링 시작하기 부터 읽어나갔다. 읽다가 '스프링 프로젝트 구조 살펴보기'에서 조금 놀랐다. 스프링 Initializr가 생성하는 pom.xml 파일에 대한 설명이 있었는데, 정말 상세하게 적혀있었다. 필자의 경험 상 입문자용 IT 서적들을 읽다 보면 너무 간략하게만 설명되어있거나, 설명하지 않고 넘어가는 것들이 있다. 그럼 나중에 해당 기술을 사용한 프로젝트를 진행하다 특정 내부 파일 때문에 이슈가 생기면, 그 파일과 내부의 코드가 어떤 것을 의미하는지 그제야 찾아보게 된다. 혹은 Stack Overflow에 나오는 해결 방법대로만 수정하곤 한다. 하지만 이 책은 정말 자세하게 설명해주기 때문에 처음부터 어떤 역할을 하는지, 해당 부분을 더 자세히 보려면 어떤 키워드를 검색해야 할지 던져주기 때문에 깊이 있게 공부하고자 하는 의욕을 돋우어 주었다. 필자는 그런 부분에 밑줄을 그으며 학습하고 있다. 그만큼 입문자에게는 자세한 설명이 굉장한 도움이 되는 책으로 느껴질 것이다.

 

Chapter 3. 데이터로 작업하기 에서는 한국어로 번역된 '상용구 코드'라는 단어가 나왔다. '상용구 코드' 단어 옆에 'boilerplate code'라고 적혀있었는데, 사실 처음엔 '상용구 코드'라는 단어만 보고서 이게 뭔지 이해하지 못했다. 하지만 바로 옆에 적힌 'boilerplate code'라는 단어를 읽고서야 "아, boilerplate code를 상용구 코드라고도 하는구나"라고 이해했다. 솔직히 이 부분에서는 너무 무리하게 번역을 한 것이 아닐까 하는 생각이 들었다. 하지만, 페이지 아래에 옮긴이가 '상용구 코드'에 대해 한 줄 설명을 해둔 것을 보고 이렇게도 불리니 뜻과 함께 참고하라는 의미로 느껴졌다. 필자는 개발 공부를 하고 여러 커뮤니티나 활동을 하면서 'boilerplate code'라는 단어를 미리 알고 있었지만, 기억을 더듬어보니 다른 학생 개발자 친구가 'boilerplate code'라는 단어를 모르고 있어 필자가 설명해줬던 적이 있었다. 그런 학생들이 입문용으로 이 서적을 선택하였을 때, 낯선 단어의 뜻에 대해 일일이 검색을 해야 한다는 번거로움을 해소해준 부분이 아닐까 싶다.

 

나 정말 Java 제대로 이해하고 있는 거 맞니...?

Part 3. 리액티브 스프링 에서는 내가 알고 있던 Java가 아닌 것 같다는 생각이 들었다. 필자는 현재 iOS에 관심이 생겨 Swift를 공부한 이후로 Functional Programming(이하 FP)에 이어 Reactive Programming(이하 RP)을 가능케 해주는 ReactiveX 라이브러리인 RxSwift를 공부하고 있다. RxSwift를 공부하면서 FP와 RP가 참 신기하고 재밌다는 느낌을 받았었다. (아직은 걸음마 단계지만 흥미를 느낀다는 것이 어디야...) 그리고 이번에 이 도서에서 Part 3. 리액티브 스프링 을 보자마자, "이게 내가 알던 Java가 맞나...?" 싶은 생각이 들었다. RxSwift와 너무 비슷한 생김새를 Java에서 보게 된 것이 정말 신기했다. 물론 RxJava가 아닌 '리액터'라는 라이브러리에 대해 알려주긴 하지만, 스프링에서 RP를 차근차근 경험해볼 수 있다는 것은 큰 장점이라고 느껴졌다. 더욱이 스프링 기본서에서 RP를 적용해서 프로젝트를 만들어 볼 수 있다는 것에 큰 감명을 받았다.

 

사실 이 정도로 이 책에 대해 이야기하긴 이르다.

필자는 '스프링 인 액션'이 스프링을 이제 막 시작한 학생 개발자가 접근하기 좋은 기본서임에 틀림없다고 생각한다. 하지만 아직 이 책에 대해 이야기 하기는 이른 것 같다. 뒷부분에 남은 MSA(마이크로 서비스 아키텍처)에 대한 이해부터 시작해서 Spring Boot(스프링 부트) 프로젝트의 Admin 기능, 스프링 프로젝트 배포 등등 좋은 부분들이 아직 많기 때문이다. 필자는 개인적으로 백엔드 개발은 단순 API 개발부터 시작해 배포까지 공부해서 큰 그림을 그려보아야 된다고 생각한다. 때문에 이전의 여러 프로젝트 및 활동들에서 AWS EC2 + NginX + ELB를 활용한 배포 작업도 진행해본 경험이 있다. 그 당시에 곳곳에 퍼져있는 지식들을 끌어모아 구현하느라 꽤나 애를 먹었던 기억이 있다. 하지만 이 도서에서는 Docker(도커)를 활용한 스프링 프로젝트 배포까지 짚어주어 큰 그림을 그려볼 수 있도록 한다. 이처럼 처음부터 끝까지 잘 마무리된 책이 많이 있나 싶은 생각이 들었다.

 

생각해보니 몇 주 전, 졸업하고 리눅스 엔지니어로 일하고 있는 친한 대학 동기에게서 연락이 왔었다. 백엔드 개발자로 커리어를 변경해서 이직하고 싶은데, 어디서부터 공부하고 어떤 프로젝트 경험을 쌓아보는 것이 좋을까 조언을 구하는 내용이었다. 당시 필자가 Java + Spring에 대한 지식은 없지만, 여러 프로젝트 경험과 스프링에 대해 어떤 온라인 강의가 좋은지 주워들은(?) 정보가 있었기에 알려주었다. 그 동기도 어쩌면 나와 같은 스프링 초심자이기에 이 도서를 추천해주고 싶다는 생각이 들었다. 조만간 연락해보아야겠다.