본문 바로가기
BOOKS BOOKS BOOKS

처음부터 제대로 배우는 스프링 부트 - 자바와 코틀린으로 만나는 클라우드 네이티브 애플리케이션 구축 - 한빛미디어

by 19810721 2023. 5. 13.

처음부터 제대로 배우는 스프링 부트 - 자바와 코틀린으로 만나는 클라우드 네이티브 애플리케이션 구축 - 한빛미디어

마크 헤클러 ( Mark Heckler ) 지음

오시영, 서정대 옮김

 

- 한 줄 리뷰

이 책을 받아 들고 마지막 페이지를 넘기는 순간까지 / 바다 건너 외국의 어떤 개발자가 쓴 기술 서적을 읽는 중 / 그 내용을 한국의 독자가 정확히 이해 못 하는 부분이 있을까 걱정하는 어느 번역가에게 / 친절한 과외를 받는 듯한 느낌이었다.

 

개념, 실체, 관념을 끊임없이 보여준다. 정신을 차리고 보면 마지막 장이다.

It is [ ].

빈칸에는 [개념(Concept)] 또는 [실체(Entity)]가 들어갈 수 있다. 혹은 그것을 서술, 상상, 요약하는 추상화의 목적물로 만들어내는 언어의 조각으로 [관념(Idea)]이 들어갈 수 있다. 우리가 세상의 어떤 것을 만날 때, 그 방법으로 누구나 생각할 수 있는 일반적이고 추상적인 형태로서의 존재 이미지인 개념(컨셉)과 실제로 존재하는 실체(객체, 개체, Entity)가 있다. 그리고 그것을 추상화하여 언어의 조각들을 모아 관념(Idea)을 통해 다른 사람의 생각으로 전달하거나 실체 (아마도 여기서는 Code 가 될 듯하다.)로 재 탄생할 수 있게 해주는 책이 있다면 선택을 하지 않을 이유가 없지 않을까 싶다.

 

자바 언어를 공부했거나 현업에서 사용한 경험이 있다면 누구나 한 번은 스프링 프레임워크를 접했을 것이고, 그것을 접한 후 자연스럽게 스프링 부트를 만나게 된다. 아이러니하게도 스프링 부트는 스프링을 사용하는 개발자가 매번 작업해야 하는 일을 손쉽게 진행하도록 돕는 부가 기능의 합인데도 불구하고 스프링부트가 제공하는 수많은 편의 기능을 모른 채 쓰지 못하거나, 자동으로 구성해 주는 내용을 직접 관리해야 하는 포인트 부분에서 방법을 몰라 고생하는 일이 많아 보였다.

스프링부트의 핵심 기능인 의존성 관리, 배포 간소화, 자동 설정 (또는 마법, 마술이라고 해도 된다.) 세 가지를 우선 개념(컨셉)을 설명하고, 실체(코드)를 통해 독자로 하여금 직접 코드를 작성하고 연동하고 실습하도록 시연을 보여주는 책이다. 그리고 매 챕터 마지막에는 이러한 개념과 실체를 정리하며 관념(정리, 그리고 내재화)을 독자의 것으로 만들어준다. 아주 충실하게 말이다. 글을 이어가며 이 말을 증명해 보겠다.

금요일 퇴근하니 책이 도착했다. 마지막 장을 넘기면서 정신을 차려보니 토요일 밤이다.

 

이 책은 우선 믿고 보는 O`RIELLY의 Spring Boot Up And Running이라는 제목의 한국어 번역판이다. 한국어 제목은 ‘처음부터 제대로 배우는 스프링 부트 - 자바와 코틀린으로 만나는 클라우드 네이티브 애플리케이션 구축’이다. 이 책을 받아 들고 마지막 페이지를 넘기는 순간까지 바다 건너 외국의 어떤 개발자가 쓴 기술 서적을 읽는 중에 그 내용을 한국의 독자가 정확히 이해 못 하는 부분이 있을까를 걱정하는 어느 번역가에게 매우 친절한 과외를 받는 듯한 느낌이 들었다.

 

이 책의 원 저자인 마크 헤클러 (Mark Heckler)는 서문에서 스프링 부트를 다루는 능력이 서툴든 능숙하든 전 세계 도처의 개발자들과 만나 상호작용을 할수록 자신의 지식(실력)이 늘었다고 고백한다. (프로그래밍 영역으로 확장해도 그렇다.) 우리는 다른 것을 다른 시간에 다른 방식으로 배우고 있다 하며 이 책을 구상하게 된 배경이라고 언급한다. 성숙한 혹은 경험을 해 본 경력자에게도 ‘원래 되는 것’이라는 생각을 넘어 ‘왜’라는 영역을 단단히 설명하고 있으면서, 처음 사용하는 개발자에게도 공유된다면 반드시 필요하고 큰 도움이 될 거라는 소개와 함께 주요 기능을 활용하는 방법을 안내한다.

 

이 책의 실습내용 소스코드는 원서가 제공하는 소스코드(깃허브)와 번역서에 업데이트된 내용을 위한 소스코드(깃허브)가 역자의 노력에 의해 함께 제공된다. 원서가 전달되고 번역서가 서점에 배포될 때는 시차도 있고 역서의 구성이 원서와 페이지까지 동일할 수 없기 때문에 혼란스럽기 마련인데, 동시제공 방법으로 독자를 배려했다.

소스를 개선하면서(리팩토링) 만나게 되는 오류화면을 IDE가 보여주는 그대로 지면에 담고, 그것을 해결하기 위해 과감하게 x 표시를 하여 사라져야 하는 부분을 지우고, 새로 작성해야 하는 부분을 형광펜(책에서는 물론 음영처리)으로 보기 좋게 표시해 주는 저자의 센스가 지금까지 만나보지 못한 개발자 친화적인 저술 방법이다. 현재 본인이 집필 중인 책에 이 방식을 도입해야겠다는 생각을 해본다.

 

처음에는 스프링 부트의 핵심기능을 설명하며, 의존성관리와 배포, 자동 설정에 대한 이야기를 한다. 이때 각각의 기능들이 어떻게 동작하는지에 대한 설명과 함께 관리, 배포, 자동 설정(이라고 쓰고 마법)은 잊고 개발자는 자신의 코드를 작성하는데 집중하면 된다고 전한다. 커스텀할 수 있지만 그럴 필요 없다며, 대부분의 것들이 ‘설정보다 관습 Convention over Configuration’이라는 정신에 기반한다는 것을 보여준다. 이는 스프링 설정에 고통받아본 개발자라면 특히 Spring 3 혹은 그 이전에 xml에 의해 좌절해 본 개발자들에게 환호할 일이다.

다음은 메이븐 vs 그래들의 내용이다. 흔히 빌드 도구라 알고 있지만, 빌드를 하기 위한 여러 라이브러리의 의존성 관계를 관리해 주는 도구라고 표현해도 나쁘지 않다. 메이븐이 오래전에 출시되었다고 구시대의 도구라고 생각하지만 메이븐의 선언적 접근법이 프로젝트를 일관성 있게 유지해 주기 때문에 오히려 문제가 발생되지 않는 장점이 있다는 내용을 함께 알려준다. Better 문제가 아닌 Choosing의 문제뿐이라는 것이다.

JDK의 선택에 있어 가장 빠르게 설치하는 방법(SDK Man)이라든가 IDE 선택에 있어 어떤 IDE를 선택해도 좋지만 (어느 한편을 들 수 없지만) 자신은 인텔리제이(IDEA)를 사용하고 있다고 전한다. (리뷰를 작성하는 본인도 여러분에게 인텔리제이를 권한다.) 빌드 시스템, 도구 또는 프로그래밍 언어 어떤 것이든 지원하는 놀라운 유연성을 강조하면서 논쟁의 여지가 없으니 우리는 애플리케이션을 만드는데 집중하자는 이야기로 마무리된다.

 

데이터베이스 파트로 넘어갈 거라고 생각되는 영역에서 우선 REST API를 설명한다. REST API를 모두 알고 있을 것이라 생각되고 (이 리뷰를 찾아볼 정도라면..), 이때부터 이 책의 진가가 드러나기 시작한다. 개념(컨셉)을 설명하고, 실체(코드, 시연)를 보여주고, 관념(생각 또는 기억으로 남는 정리의 글)으로 마무리 짓는 패턴이 시작된다.

아울러, 원 저자는 REST 원칙에 대한 소개하는 설명을 마칠 때 즈음 30년(’1994) 전으로 거슬러 올라가는 역사를 설명하려다 더 깊이 파고들지 않겠다며 다음 챕터로 넘어가는데, 역자는 그것마저도 응? 왜? 하며 언급된 내용이 담긴 논문의 저자와 제목을 “옮긴이_” 라 붙은 풋노트에 적어놓았다.

 

번역을 하다 보면 의외로 우리말로 번역하기 힘든 단어 혹은 용어가 있는데, 그럴 때는 가장 근접한 소리 표시로 한글로 옮기는 경우가 많다. 의역을 해서 옮기는 경우 또 다른 의미로 잘못 전달 되거나 원 단어가 가진 고유의 뜻이 사라지는 상황이 발생할 수 있기 때문이다. 역자는 본래의 단어를 최대한 살린 채 독자로 하여금 그 뜻을 직접 찾아볼 수 있도록(68p 참조) 위키디피아의 링크를 친절하게 남겨준다. 이 책에서 만나는 모든 용어를 처음 만나게 될지 모르는 독자에 대한 세심한 배려가 아닐 수 없다. 번역기간이 상당히 지체되었다는 말을 전해 들었을 때 생긴 의문은 책을 읽는 동안 이해와 감사가 함께 찾아왔다.

 

이어 살펴보면, 초보자들도 그리고 경력자들도 이해하기 쉽도록 데이터베이스를 연결하고(4장), 애플리케이션을 구동하고 살펴보면서 각 레이어 별로 백업 계획(장애 대비)에 대한 언급도 놓치지 않는다.(5장), 데이터가 가치를 만들기 위한 측면에서 데이터베이스 엔진을 간결하고 강력하게 다룰 수 있는 방법으로 Spring Data를 소개한다.(6장), 데이터를 사용자와 상호작용할 수 있도록 템플릿 엔진을 활용하는 방법과 웹소켓 대화(Conversation)의 생성 과정을 보여준다.(7장), 다음에는 수많은 스레드를 감당하는 시스템 구성 방법으로 전통적인 모놀리틱 대규모 시스템 대신 활용되는 프로젝트 리액터와 웹플럭스를 사용한 리액티브 프로그래밍에 대한 섹션도 빠트리지 않았다. 사실 이게 주인공인 듯싶다.(8장).

 

실제 프로덕션으로 운영하기 앞서 테스트에 대한 마크 헤클러(저자)의 의견과 함께 단위 테스트, 애플리케이션 테스트, 슬라이스를 차례로 안내하고(9장), 애플리케이션의 보안에 대한 안내에는 스프링 시큐리티에 대한 자세한 설명과 함께 구현법을 보여준다.(10장). 그리고 최근의 MSA 추세에 맞춘 최적화된 JAR 구성과 컨테이너 이미지 배포 내용까지 담았다. 인텔리제이(IDEA)에서 컨테이너 이미지를 만드는 방법도 상세히 나와있다. 찐 개발자다.(11장). 마지막으로는 그래도 걱정이 되었는지 우리가 흔하게 접한 명령형(Imperative)과는 결이 다른 선언형(Declative)으로 사용하는 리액티브 프로그래밍에 익숙하지 않은 개발자를 걱정하면서 한 챕터를 더 채웠다. 심지어 역자도 주석(Foot Note)을 적극 활용하여 독자들에게 원저자가 하고 싶어 하는 내용을 빠짐없이 전달하고자 노력하는 모습이 보였다. (337p, 주석이 본문보다 길다.)

 

Maven, Gradle, REST, API, HTTP METHOD… 404. 502 놀이에 한참인 개발자들….

익숙한 단어를 가지고 마치 은어처럼 즐기는 일은 행복한 일이지만, 이러한 것들을 처음 접하는 개발자라면, 용어가 어려운 것이 아니고 영어가 어려운 것도 아니고 우리 인간의 언어자체가 원래 어렵다는 말을 전하고 싶다. 특히 기술 서적에 서술된 내용을 정확하게 전달하기 위해 애쓴 역자의 노력은 마치 소스코드에 달린 상세한 주석처럼 각 페이지 하단에 풋노트로 상세히 적혀 있다. 지금까지 이렇게 친절한 번역서를 본 적이 없다. 49 페이지의 하단을 보자. 이는 번역서가 아닌 번역해설서의 지위로 봐도 무방하다. 내용은 선수들을 위한 내용이지만 입문자를 배려한 흔적이 곳곳에 담겨 있다. 그래도 책 구매가 망설여진다면 53, 358, 368p 하단을 보자. 무엇을 공부해야 하는지 알아야 하는지 혹시 놓친 부분이 있는지 친절하게 살펴준다. 입문자는 감사할 일이고, ‘이런 게 있었어?’ 하는 경력자라면 부끄러울 일이다. 내가 그러하다.

알고 있었지만 정확히 무엇인지 몰랐던 IETF, RFC… 개발자라면 당연히 알고 있을 것이라고 생각하고 작성되는 수많은 중급 이상자 대상 문서들에서 볼 수 없었던 배려가 곳곳에서 드러난다. 마치 학교에서 수업(잘 듣지 못한 영어 수업)을 듣고 와서는 과외 선생님에게 교재를 친절하게 다시 설명 듣는 느낌마저 든다. 이 역자 분은 개발자 입문 혹은 학생들을 위한 용어 사전 스타일의 책을 출간한다면 입소문 만으로 ‘베스트셀러’가 될 거 같다.

 

책에 대한 이야기는 그만하고 이제 책을 다 읽은 나의 생각을 적어본다.

지금부터가 리뷰다. 여기까지는 그저 시동을 걸었을 뿐…..

 

저자 Mark Heckler의 책 출간 관련 인터뷰 영상을 보면 커피를 사랑하고 비행기 타는 것을 좋아하는 것 같다. 인터뷰 중간중간 커피를 같이 들자며 미소를 지으며 카메라에 들이댄다. 자연스럽게 같이 커피를 마시게 되는 매력이 있다. 소스코드의 예시가 그렇다. 제시한 소스 코드의 도메인이 커피로 시작해서 비행기(에어크라프트)로 끝이 난다. 심지어 실시간 데이터를 전달하겠다고 보여주는 리액티브 관련 챕터에서는 무려 실시간 항공 데이터다.

 

그의 트위터( @mkheck ) 에 보면 그가 얼마나 비행에 진심인지 알 수 있다. 더 장난끼 넘치는 사진이 많으나 ㅎㅎ 책의 권위(?)를 위해 이 사진으로 소개한다.

 

일을 하지 않을 때는 사랑하는 아내와 함께 비행기를 타고 아름다운 경치를 바라보는 비행을 즐긴다 한다. 나도 그러하고 싶다. ‘혼자보다는 둘이 낫지 않은가’ 하며 그의 아내에 대한 사랑에 감탄하고 있을 때에도 그는 직업 정신을 끝까지 놓지 않았다. 비행을 할 때는 펼쳐지는 풍경에 포커스(이때 눈치를 챘어야 했다. ㅠ)를 맞춘다. 그러다 비행기 계기판이 피드백을 주면 바로 비행기 내부로 포커스를 옮긴다. 그것이 아날로그든 디지털이든 신뢰할 수 있고 실패하지 않는(피드백 수치의 정확성 확보를) 피드백이라면 우리는 그것을 믿고 비행기 운전을 할 수 있다고 이야기한다. 날씨가 좋지 않더라도 (피드백 값이 정확하다면) 비행기를 운행할 수 있다 하면서 신뢰할 수 있는 고품질의 소프트웨어라는 것이 얼마나 중요한지 특히 실패하지 않는 것의 중요성을 이야기한다. 로맨틱가이에서 프로그래머까지 순식간에 모드 전환하는 이 이야기는 스프링 부트가 데이터베이스에서 데이터를 찾아오는 단계를 제시하며 동시에 모든 일에는 백업 계획을 2~3단계 이상 유지해야 한다는 말로 이어진다. (본문 4,5 챕터 연계)

 

스프링 데이터를 소개(챕터 6)할 때는 JPA, JDBC 같은 기본 외에도 NoSQL… 심지어 메모리 DB에서도 완전한 추상화를 기반으로 프로젝트가 빌드되는 놀라운 경험을 보여준다고 소개한다. 이어 데이터를 생성하는 면에서 유용하지만, 라이브만큼 훌륭한 데이터는 없다며 항공 데이터를 샘플로 하여 풀어가는 책의 내용을 보다 보면 이 사람은 성공했다는 느낌을 매우 강하게 받는다. 덕업일치를 넘어 삶의 즐거움까지도 책에 담아 표현하는 자유…

 

이어지는 내용을 보면 테스트에 대한 언급이 있다. 이는 개발자들에게도 끊임없는 논쟁거리 중 하나인데 그가 생각하는 ‘기본 개념을 설정하는 것이 이치에 맞다’는 이야기를 한다. 아울러, 격리(Isolation)와 슬라이스(Slice)가 과도하면 안 된다는 지점에서 이를 근거로 테스트가 과하면 낭비가 발생한다는 말을 한다. 어떤 기능이나 범위를 테스트하기 위해 과하게 슬라이스(분리? 책을 읽고 나서야 이 부분을 이해했다. 9장) 하는 과정에서 오히려 낭비할 (공간? 시간? waste of them이라고 들리는데 뭐라는지 모르겠다 ㅠ ) 것들에 대한 우려를 나타냈다. 결국 어떤 것이 적합한(Suitable) 한 방법인지 묻는 말에 그는 ‘옵션을 가져야 한다.’ 이야기한다. (현답이로다.!!!)

매우 구체적이고 작은 기능을 테스트하여 원하던 정확한 응답을 받아야 할 때, 혹은 워크스테이션 (서버나 시스템 단위로 해석하면 될까) 단위로 확장하고 싶을 때, 혹은 구체적으로 부분을 파악하고 싶을 때 문제가 발생한다면 다시 한번 생각해 보자. 확장 또는 축소에 대한 옵션을 쥐고 있어야 한다는 뜻으로 받아들였다.

 

스프링부트(feat. 스프링)가 어떻게 동작되어야 하는가라는 질문에는 프레임워크 방식으로 하던가 혹은 전혀 그렇게 하지 않던가~ 로 해야 한다고 이야기한다. 그러기 위해 가장 먼저 설명한 것이 종속성 관리다. 스프링 부트의 주요 기능을 설명하며 스프링 부트가 고집을 부리는 (? 더 강한 말이 필요하지만 억지라는 말은 양보를 하지 않는다는 말이니 고집이라는 말을 써 본다. 제안?이라는 말을 붙이기에는 또 아무것도 안 하면 먼저 해버리는 면도 있으니 참 어려운 단어선택.) 규칙이 있더라도 사용자가 원하는 다른 방향을 언급해 주면 (간단한 설정 혹은 속성 입력) 완전히 유연하게 돌아간다. ( 경험해 보면 기절한다 ) 아울러, 스프링 부트는 프로덕션 수준의 애플리케이션을 매우 빠르게 실행하고 통합할 수 있지만, 수많은 자동 컨피규레이션 기능을 살펴보고 학습하면 ‘방대하다’고 소개하면서, 이는 개발자가 선택할 수 있는 수많은 것들이 함께 주어진다는 것이고 간단한 속성 변경만으로 또는 CLI에 의해 쉽게 작동된다는 것을 의미한다. 개발자에게 축복이다.

 

마크헤클러는 책을 쓰는 과정을 설명하는 인터뷰의 말미와 본 책의 끝 부분에 같은 이야기를 담았다. 스프링 부트의 개념을 소개하고 시연을 통해 실체를 보여주면서도 매 순간 고민을 했다는 이야기말이다. 힘든 과정임을 설명하면서도 자신에게 허락된 시간이 확장된다면 그 작업의 시간도 같이 늘어난다는 이야기를 전했다. 3개월이 주어지면 3개월, 6개월이 주어지면 6개월이라는 이야기를 한다. 책의 범위를 두 배나 세 배로 늘리고 싶다며 책에 넣고 싶은 자료의 양은 항상 넘쳐났고, 시간이 아무리 많아도 시간이 충분하지 않았다는 말을 한다. 포함하고 싶었던 내용을 잘라내야 했다고 말하는 내용에서 그는 아쉬운 책이라기보다는 완성된 책을 위해서 어떤 고민과 어떤 결단이 있어야 현명한 방법인지를 알려주었다. 우리도 매 순간 같은 고민을 하지 않았나 하고 돌아본다. 예를 들면 이 책을 살까 말까. 읽을까 말까. 책 한 권을 완성하는데도 끝이 없는데, 읽는 우리가 단 하나의 책으로 지식을 완성할 수 있을까라는 고민을 해도 되는 것인가?라는 생각을 해본다. ‘꼭 전문가가 될 필요는 없으며 개념을 이해하고 어떻게 서로 맞춰지는지 이해하길 바란다’고 말한 그의 당부를 되새겨 본다.

 

세줄 요약.

+ 스프링부트를 알고 있는 모든 개발자는 반드시 읽어야 한다고 생각하는 책을 만난 것이다.

+ 스프링부트 핵심 전문가가 꼭 필요하고 중요하다 판단한 핵심적인 내용을 담아 내놓은 책.

+ 역자가 상세한 해설을 더해 한국의 개발자들에게 내놓은 선물 같은 책.

 

언젠가 기회가 된다면 그와 만나 커피를 한 잔 하고 싶다. 유쾌한 농을 던지면서 개발자 후드티를 벗을 것이다. 영어 공부를 해야겠다.

 

 

— 코로나라는 역병이 돌기 전 즈음 ‘Pivotal Summit 2019 Seoul.’ 행사를 통해 한국에 와 발표를 한 영상을 찾아보게 되었다. 그때 미리 알았더라면 꼭 찾아가서 ‘당신 참 쿨하고 멋진 개발자다.’ 라며 엄지 손가락을 멋지게 올려 주었을 거 같다. 영상을 보면 매우 유쾌하고 즐거운 분임을 알 수 있다. 등장하자마자 나는 조쉬 롱이 아니라고 하면서 후드티를 벗는다. 공항(에어포트)에서 그 둘을 혼동 한다(? 또는) 가끔 실수를 한다(? 아 못알아 듣겠다 진짜. 영원한 고통. 잉글리쉬 ~)는 농담이 여기서부터 있었다니 놀랍다. (하늘을 나는 것에 진심인 그다.) 발표주제는 이 책이 결국 도달하고자 했던 내용인 리액티브에 관한 발표이니 꼭 한 번 찾아보도록 하자. 유튜브를 바보 취급하는 사람이 간혹 있는데, 멋지고 쿨한 영상을 찾아보면 보석처럼 빛나기도 한다. (아주 가끔)

 

 

 

내돈내산 : 예약판매라고는 하지만 출간일이 5/8일인데 5/12가 되어서야 받았다. 일해라 알라딘!!!

 

http://aladin.kr/p/mzK3u

 

처음부터 제대로 배우는 스프링 부트

성숙한 언어로 널리 사용되고 스프링 프레임워크의 공식 언어이기도 한 자바의 장점과, 간결하고 안전한 코드를 작성할 수 있는 코틀린 언어의 장점을 한눈에 볼 수 있게 구성되었다. 그뿐 아니

www.aladin.co.kr

http://www.yes24.com/Product/Goods/118710279

 

처음부터 제대로 배우는 스프링 부트 - YES24

도구 선택부터 애플리케이션 보안과 배포까지 스프링 부트의 모든 것스프링 부트에서는 자바와 코틀린 언어 모두 사용할 수 있습니다. 개발자의 취향과 프로젝트의 특성에 따라 적합한 언어를

www.yes24.com