쉽고 빠르게 익히는 실전 LLM - ChatGPT 활용부터 LLM 파인튜닝, 임베딩, 고급 프롬프트 엔지니어링까지 I LLM FAQ, AI/ML 용어 해설집 수록
시난 오즈데미르 지음, 신병훈 옮김 / 한빛미디어 / 2024년 2월
평점 :
구판절판


대중에게 Chat GPT가 사용되기 시작하며, 어떤 기술을 기반으로 구현되었는가가 매우 궁금했다. 그 기반에 LLM 대규모 언어 모델이라는 딥러닝 알고리즘이 있다는 것을 막연하게 알고는 있었는데, 이번에 책을 리뷰하는 기회에 더 자세히 알아본다.




Chat GPT 가 응답하는 것을 매우 쉽게 기술적으로 쉽게 설명할 때,  << 다음 중 괄호 ( ) 안에 알맞은 단어를 찾으시오. >> 라는 문제의 연속이라는 표현을 하는데, LLM을 극단적으로 추상화하여 표현한 아주 적젏한 표현이라고 생각한다. 그렇다면 이를 구현하기 위해서는 상식적으로도 매우 많은 예시, 샘플, 구문, 자료 즉 탄탄하게 지지해주는 데이터가 필요하다.

그렇다면 대량의 언어 모델링을 이용한 무언가를 만들어야 할 때, 미리 알아야 하고, 적용할 수 있으며, 구현해야 할 때 무엇이 필요하고 어떤 준비를 해야 하는가에 대한 내용이 이 책의 내용이다.

개발자 혹은 개발 입문자가 LLM 을 통해 할 수 있는 일에 대해서 소개하고 가장 많이 사용되고 있는 예로 BERT 와 Chat GPT를 소개한다. 생각해보니 LLM을 Chat GPT만 사용하는 것은 아니니 잠시 망각했엇다. 그렇다면 전통적인 기술(벌써?)이 되버린 챗봇과는 무엇이 다르고 어던 기대를 할 수 있는가는 2장부터 상세히 설명되기 시작한다.

흔히들, 질문이 훌륭해야 원하는 답을 얻을 수 있다는 말이 있는데, 질문을 처리하는 관점에서의 엔지니어링 입장에서 질문은 그 전에 고정된 리스트 형태 혹은 나열된 명령어 목록에서 선택 처리하는 방식에서 벗어나야 했다. 또한, 맥락으로 이어지는 자연어로 입력 되기에 지시에 대한 응답을 예측하는 수준을 넘어 대화를 이어가는 수준을 유지해야 하는데, 단순히 입력된 맥락을 분석하여 생성하는 AI를 넘어야 하는 숙제는 자기 자신을 극복 ( LLM이 결국 생성이므로 ) 해야 하는 숙제를 가진다.

이 책은 LLM을 이용하여 자신의 어플리케이션 혹은 목적 달성을 위해 데이터셋을 통한 학습을 통한 파인튜닝에 대한 소개, 어디에 집중시킬 것인가에 대한 어텐션, 의미를 파악하기 위한 관계를 살펴보는 임베딩 등 LLM 관련 용어/기술을 설명하면서 동시에 구글과 OpenAI가 어떤 기술셋을 활용하는지를 간단히 소개한다.

책에서는 딥러닝을 배우지 않아도 충분히 혹은 오히려 쉽게 접근할 수 있다고는 하지만 상세 도표나 용어가 낯설 수 있으므로 책 부록에 있는 용어 사전을 미리 살펴보거나 딥러닝에 대한 사전 학습을 하고 살펴보기를 바란다. 그렇다면 후반부에서 설명되는 맞춤형 아키텍처에 대한 설명에 대한 이해와 응용에 큰 힘이 될 것으로 믿는다.


"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
이것이 취업을 위한 백엔드 개발이다 with 자바 - 취업과 이직을 결정하는 백엔드 과제 테스트+기술 면접 가이드 이것이 시리즈
이준형 지음, 박상현 감수 / 한빛미디어 / 2024년 1월
평점 :
장바구니담기


이번에 만난 책은 기술이나 결과에 대한 해설이 아닌 배우는 과정으로 가득채워진 여행 가이드 북이다.
대부분의 기술 서적, 특히 프로그래밍은 어떤 기술이나 도구, 언어, 방법론처럼 특정 분야를 설명하는 내용으로 채워지기 마련이다. 지금 당장 책장만 바라봐도 그렇다. 그러나 이 책은 개발자가 되기로 마음을 먹고, 취업을 위하 무엇을 찾아야 하는지, 배워야 하는지, 준비해야 하는지를 알려주는 책이다. 마치 '삼촌, 저 이번에 졸업하는데, 개발자가 되고 싶어요."라고 질문하는 독자에게 우선 어떤 준비를 해야 하는지부터 어떻게 취업 관문을 넘어야 하는지 알려주는 과정을 알려주는 삼촌의 친절한 안내를 담아낸 노트같다는 생각이다.




코딩 테스트만 하면 취업을 할 수 있다고 하며 문제만 수십개를 보여주는 책이나, 비전공자도 면접을 통과할 수 있다며 CS 내용을 그저 카더라 ~ 수준으로 나열해 놓은 책이나, 너도 할 수 있다며 개발 서적이 아닌 자기 계발 에세이도 아닌, 순전히 취업준비부터 면접 자리까지 모든 내용을 담아낸 700쪽이 넘는 대담한 책이다.
최근 평소 꼭 해보고 싶은 버키리스트 중에 하나였던 '책'을 내보는 경험을 위해, 개발 서적을 직접 써 보겠다고 덤볐다가 350페이지를 쓰는데 어마어마한 에너지를 쏟아 부었는데, 700페이지가 넘는 책의 두께와 무게에, 저자가 얼마나 고생했을지 미루어 짐작할 수 있었다. 절반 정도의 책을 준비하면서도 다시는 안 쓴다고 이를 갈고 있는데 ㅎㅎ, 저자는 지금 어떤 마음일지 궁금하다.
이 책은 자바 백엔드 개발자로 취업하기 위한 취준생이나 이직을 준비하는 개발자가 보는 책이며, 그에 맞는 내용을 담고 있다. 살펴보자.




모든 책의 처음이 그렇듯 자바 백엔드 개발자가 무엇을 하는지 정의 부분이 나오며, 어떻게 취업 정보를 얻는지, 채용 과정은 어떠한지 정보를 알려준다. 개인적인 경험에 비추어보면, 이러한 정보를 정확하게 얻는 것이, 쉽게 지인을 통해 소개 받거나, 학생인 경우 학교에서 알선 받거나, 때로는 사회 생활이 부족한 상태에서 주변 어른들에게 소개 받는 쉬운 길을 선택하는 것보다 몇 배 더 값진 정보라고 생각한다. 타인에 의해 구직/구인 정보 또는 채용 정보를 얻게 되면, 자신의 능력이나 가치가 실제보다 크게 부풀려지거나 반대로 과소평가 될 여지가 있다. 못 버티거나 못 쓸 인재가 될 가능성이 높다. 객관적인 평가와 시험을 통해 자신이 선택할 수 있고, 선택 받는 수준으로 맞추고 준비할 수 있는 기회를 놓칠 수 있다.
이 책을 통해 얻은 점은 지금 시대에 살고 있는 취준생은 너무나 복을 받았다는 점이다. (그렇다. 라떼다.) 예전에는 문법 책 한 권 읽고 개발자를 시작하는 경우도 있고, 회사에 들어가고 나서야 알게 된 (그 과정에서 얻은 고통은.. 참으로 글로 표현하기 힘들다.) 내용이 많아, 내가 무엇을 모르는지 모르는 상태가 계속되는 시간이 매우 길었다. 죄책감은 덤이니 정신적으로도 힘들 수 밖에 없었다. 그런데, 이 책에는 다 담겨있다. 문법에 더해 모던 자바 문법을 소개하고, 무료 개발 툴에 머물지 않고, 인텔리제이를 설명하고, 서버와 클라이언트가 어떻게 구별되며 왜 직군이 나뉘어져 있는지 설명한다.(+ 그들이 왜 싸우는지도 넣어주었다면 무림비법서였을텐데...)
중간 중간에 기출문제를 곁들여 팁을 알려 준다. 아 물론, 취업을 위한 책이다 보니, 쉬운 혹은 기본적인 내용도 기출로 제시되는데, 모르면 심각한 기본적인 문제지만, 제발 부탁인데, 면접관은 경력 이직자를 앞에 두고 질문할 때는 너무 기초적인 질문을 반복하는 일은 없었으면 한다. 아, 물론 신입 지원자는 책에 나온 기출문제 정도는 모르면 외워서라도 준비해야 한다.
책에서 제시된 내용은 백엔드 개발자가 기본적으로 알아야 항목들로 놓치지 않고 담아냈지만, 사실 이 모든 내용을 제대로 담아내기 위해서는 한 챕터마다 이 책의 전체 만큼의 내용으로 꽉 찬 한 권으로 담애 내도 모자랄 것이다. 14챕터니 한 챕터 주제마다 총 14권이면 될까 싶을만큼 백엔드 개발자가 앞으로 공부해야 할 내용이 많다. 백엔드 개발자를 희망하는 취준생이라면 이 책을 통해, 앞으로 어떤 것을 공부해야 하는지 알게 되는 행운을, 이직을 희망하는 경력자라면 무엇을 더 보충해서 학습해야 하는지를 알게 되는 든든한 삼촌의 조언이라고 여기면 좋을 듯 싶다. 이 책의 저자가 어떤 지향점을 목표로 삼았는지는 독자의 한 사람으로 확언할 수 없지만, 적어도 이 책을 통한다면, 백엔드 개발자로서 무엇을 해야 하는지를 정리하는 마인드 맵에 첫 번째 Depth는 완성 된 것이나 다름없다고 여긴다.

미안하지만, 700 페이지가 넘는 이 두꺼운 책은 완성이 아니라, 시작점이다.
환영하는 바이다. 모든 자바 백엔드 개발자 취업 준비생들여...

2024년에도 고통 받는 자바 백엔드 개발자 'Ted'로부터...

직접 구매해서 보는 가운데, 리뷰 이벤트로 책을 또 받게 되어 아래 문구를 첨부한다. 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
스프링 부트 3 백엔드 개발자 되기 : 자바 편 - JPA + OAuth2 + JWT + AWS와 배우는 스프링 부트 3 자바 백엔드 입문자를 위한 풀 패키지(연습문제 수록) 골든래빗 되기 시리즈
신선영 지음 / 골든래빗(주) / 2023년 5월
평점 :
구판절판


스프링부트 3 백엔드 개발자 되기 (자바편) – 골든 래빗
신선영 지음

”리뷰를 목적으로 [골든래빗] 출판사에서 책을 제공받아 작성된 서평입니다.”

코흘리개 시절이었던 어릴 적에, 동네에 미국에서 살다 온 형(이하, 미국형)이 있었다. 지금이야 온갖 매체 또는 직접 경험을 통해 외국이라봐야 별 것 아니지만, 당시로는 영화 속에서나 보던 일들을 경험해 본 낯선 이야기를 하는 그 형이 너무나 신기하기만 했다. 특히 전자기타를 앰프에 연결하고는 무슨 곡인지 알 수 없는 노래 (사실 도레미파솔라시도 ~만 해도 놀라울텐데)를 연주하는 모습은 척 베리의 Johnny B. Goode를 연주하는 장면이었을 것이라고 기억을 왜곡하여 간직하고 있다. (백투더퓨처 영화 1편에 나오는… 맞다. 그 노래다. )

그 미국형이 자신이 미국에서 살면서 겪은 모든 일과 어려움과 즐거움, 기쁨을 그 짧은 시간에 다 담아서 전할 순 없었을 것이다. 다만, 미국에서의 삶에 대한 희망을 불러 일으키기에는 아주 훌륭한 시간이었다. 오늘 소개하는 책은 400페이지가 약간 안되는 평범한 책이지만, 코흘리개 어린 시절 처음 만났던 미국형이 들려 준 이야기처럼, 개발을 막 시작하려는 이에게는 아주 훌륭한 가이드이면서 메뉴얼이면서, 지도이면서 나침반이다.



개발자 되기라 해서 초급 입문이라고 생각했다가 정신없이 배웠다. 가볍게 보지 말지어다.

개발자라면 매년 발표되는 (비공식이든 공식이든) 개발자 로드맵을 한 번쯤은 본 적이 있을텐데, 이 책은 처음 홍보를 시작할 때부터 로드맵을 기반으로 모든 내용을 담겠다고 했다. 책 한 권에???? 라고 의심을 할 수 밖에 없었다. 마치 미국에서의 삶을 어쩌다 만난 하루의 인연으로 다 담아 이야기할 수 없는 것처럼…

이 책은 그 일을 아주 빠른 스텝으로 해 낸 것으로 보인다.

우선 신발 끈을 묶고 출발하자는 듯, 개발 툴에 대한 설정과 사용법, 단축키를 알려주고 쉼 없이 달린다. (개발자 인증이라도 하듯 0 부터 책 내용이 시작된다. 1부터 시작하는 책보다 신뢰감 UP)

책 제목에 부응하듯 우선 서버, 클라이언트의 개념과 프로그래밍이 처리할 대상, 즉 데이터베이스에 대한 개념 정리와 용어 정리를 시작으로 백엔드 개발자 되기가 시작된다. 이어 웹 개발에 필요한 IP와 Port의 개념, 라이브러리와 프레임워크의 차이를 알아보고 백엔드 개발자의 업무를 마치 OJT를 하듯 상세히 알려준다.

5장까지 이어지는 레벨 1 에서는 스프링 프레임워크와 데이터베이스를 설명하면서 스프링부트, 테스트, ORM (JPA)를 설명하며, 과거 기술을 굳이 꺼내 혼란을 일으키지 않으면서도 2023년 현재 시점에 교양처럼 필요한 기술들을 설명한다. 대부분 아는 내용이지만 정확히는 모르고 그저 빠르게 사용하고 개발하는 수준에서 머물렀던 나조차도 매 페이지마다 다시 봐야 할 부분이라고 체크하기 바쁜 책이다. 책을 보다보면 당장 이해가 안되거나 중요해서 혹시 이 책을 보게 될(?) 누군가가 한 번 더 보라는 의미로 체크표시를 하는데, 책이 손에 들어온지 몇 일 되지도 않았는데 너덜 너덜해졌다. 내 책이니 뭐라 할 사람 없겠지만 …

이 책이 흥미로운 점은 설명을 이렇게 짦게 해도 되나 싶으면서도 놓친 부분은 없다는 점이다. 그래서 책에서 몇 차례 중요하다고 강조한 부분이나 볼드체로 강조된 부분을 직접 구글링해가면서 자신만의 ‘백엔드 개발자 노트’를 작성해봐도 좋을듯 싶다. 처음 개발하는 사람도, 경험이 많은 경력자라도 말이다. 요즘 에버노트나 노션, 옵시디언 등등의 여러 노트 툴이 많으니 원하는 걸 사용하고 또 뜻이 있다면 공유까지 한다면 이 책의 역할이 더 빛이 날 듯 하다.

레벨 2는 드디어 본게임이다. 직접 블로그를 만드는 과정을 시작하여 기능 별로 API를 만들고 배경 지식을 설명한다. ORM 을 실현하기 위해 각각의 엔티티와 리파지토리를 만든다. 이어 글을 쓰고 조회하고 삭제하는 과정을 일일이 설명하면서 결정적으로 매 기능을 구현할 때마다 테스트 코드를 작성하는 과정을 보여준다. 이는 습관처럼 늘 해야 함을 온라인 강의가 아닌 책에서 시도했다는 점에서 엄지를 치켜든다. 물론 프론트 영역을 잘 모르는 개발자를 위해 화면을 만드는 실습을 위한 기본 HTML 소스를 제공하고 작업해야 할 부분을 친절히 표시해두었으니 블로그 화면을 직접 만들어야 하는가에 대한 부담도 덜어내고 편안하게 시작할 수 있다.

API 만으로는 서비스라 할 수 없으니 화면(tymeleaf)과 회원 기능과 보안을 위해 스프링 시큐리티와 JWT 사용, OAuth2 를 이어 설명하면서 백엔드 로드맵을 탄탄하게 채워나간다.

마지막으로 레벨 3단계에서는 백엔드 개발자에게 요구되는 기술 중 하나인 인프라 또는 CI/CD 기술인데, 이는 제품 혹은 프로그램을 만들고 실제 고객( 또는 엔드포인트)에 서비스를 안정적으로 제공하고 운영하는데 바탕이 되는 기술이다. 이를 책으로 엮으면 또 엄청난 책 한 권 이상은 충분히 나올 분량인데 가장 유명하고 많이 쓰이는 AWS 와 Github Action 을 통해 ‘찍먹’을 통해 최소한으 경험을 할 수 있도록 했다. 이는 개발조직내에서 인프라 담당자와의 협업이나 배포 작업에 대한 개선 작업에 필히 도움이 될 수 있는 기본 소양을 키우기에 충분하다.

몰랐거나 모르면 큰일 날 뻔?한 내용 체크 표시하기에 정신이 없었다. 책은 너덜너덜해지고 말았다.

책을 읽으면서 연필을 손에 쥐고 쉴 틈이 없었다. 중요하게 생각되는 부분, 놓치면 안되는 부분, 혹은 모르고 있던 내용에 표시를 하면서 결국 책을 세 번이나 읽게 되었다. 리뷰를 쓰려고 가볍게 시작한 일이 나에게 ‘진짜 백엔드 개발자 되기’의 과업이 되고 말았던 것이다. 이 책을 누군가에게 소개하기 전에 내가 먼저 내용을 얻기 위해 고군분투 할 줄은 꿈에도 몰랐다.

어린 시절 만났던 그 미국형을 지금 다시 만나면 형님 덕분에 비행기를 타야 갈 수 있는 저 먼 외국에 대한 환상을 어릴 떄부터 가질 수 있었고 많은 나라를 여행할 수 있었다는 말을 하고 싶다. 마찬가지로 이 책을 만난 새로운 개발자가 어느 덧 시간이 흐르고 흘러 다시 이 책의 저자를 만나고 싶다는 생각이 들기도 하고, 훌륭한 가이드 책을 써 준 형님 덕에 막막하던 개발에 대한 희망을 얻고 마침내 무언가 개발을 해냈다는 말을 할 수 있다면 얼마나 좋을까?? 이 많은 내용을 적으려면 최소한 1,000 페이지는 원고가 나올 법 한데, 줄이고 줄이느라 편집자와 많이 힘겨루기를 했을 것 같다는 상상을 하며 리뷰를 마무리한다.

3줄 요약 :

백엔드개발자가 되기 위한 400미터 달리기 전력질주.
한 페이지도 놓칠 수 없는 압축 zip 파일 같은 탄탄한 내용.
최소 3번은 집중하고 읽어야 1 번 읽은 것 같은 압축 해제 같은 느낌적인 느낌.

1줄 요약 :

백엔드 개발자가 되려면 우선 이 책을 지도삼아 출발하면 된다.

사족 :
개발자는 남자가 많다는 생각에 저자가 남자인 줄 알았는데, 여자다.
책 날개를 보고 늦게 알았다. 리뷰를 다시 쓸 순 없다.
그래도 나보다 “개발 잘하면 형” 이라는 룰이 있으니 형이라고 해두자.


댓글(1) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
moby 2023-06-28 10:19   좋아요 0 | 댓글달기 | 수정 | 삭제 | URL
님 책 끝까지 다 안읽고 리뷰 달았죠?
 
처음부터 제대로 배우는 스프링 부트 - 자바와 코틀린으로 만나는 클라우드 네이티브 애플리케이션 구축
마크 헤클러 지음, 오시영.서정대 옮김 / 한빛미디어 / 2023년 5월
평점 :
장바구니담기


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가 되어서야 받았다. 일해라 알라딘!!!


댓글(2) 먼댓글(0) 좋아요(1)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
ststar87 2023-05-18 13:00   좋아요 0 | 댓글달기 | URL
좋은 책, 좋은 번역, 좋은 서평 이네요

moby 2023-08-07 18:24   좋아요 0 | 댓글달기 | 수정 | 삭제 | URL
부트 초보가 봐도 괜찮을까요. 완전 초보는 아니고 다른책 따라가다가 템포가 갑자기 빨라져 필름끊겨 중간에 접은 책이 3~4권정도 됩니다.
 
처음부터 제대로 배우는 스프링 부트 - 자바와 코틀린으로 만나는 클라우드 네이티브 애플리케이션 구축
마크 헤클러 지음, 오시영.서정대 옮김 / 한빛미디어 / 2023년 5월
평점 :
장바구니담기


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

댓글(1) 먼댓글(0) 좋아요(2)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
ststar87 2023-05-18 12:59   좋아요 0 | 댓글달기 | URL
좋은 책 좋은 번역에 좋은 서평이네요