애플리케이션의 배포와 운영을 고려한 7가지 설계 패턴

카순 인드라시리, 스리스칸다라자 수호타얀 지음

박수현 옮김

 

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

 

2022년 12월

2022 나는 리뷰어다 활동의 아홉 번째 리뷰

 

12월에 리뷰할 책은 "클라우드 네이티브 애플리케이션 디자인 패턴"이다.

벌써 2022 나는 리뷰어다 활동도 마지막 12월이 되었다.

 

2022년 한해는 이직후로 굉장히 바쁘게 1년을 보낸 것 같다.

(하지만 지금 또 다시 이직 준비중이다.)

 

더 실력있는 개발자가 되자라고 다짐했었는데 그만큼 노력을 많이 하지 않은 것 같아 후회도 많이 남는 2022년이다.

 

아무튼 리뷰를 시작해보자.

 

우선, 클라우드 네이트브 아키텍처란 무엇일까?

비즈니스 기능별로 독립적인 마이크로서비스들이 느슨하게 결합된 소프트웨어 애플리케이션을 통칭하는 말이다.

각 마이크로서비스는 각각의 실행 환경(퍼블릭, 프라이빗, 하이브리드, 멀티클라우드)에서 실행되며 자동화되고 확장성을 지원하며 탄력적인 관리 및 관찰을 제공한다.

 

클라우드 환경은 민첩함과 신뢰성, 경제성, 확장성이라는 장점 덕분에 클라우드 네이티브 애플리케이션 개발이 점점 더 각광받고 있다. 최근 애플리케이션의 배포 및 운영에 대한 관심이 늘어나면서 기존의 개발 패턴이나 기술을 적용하기는 힘든 상황이 되고 있다.

 

이 책에서는 이런 문제점들을 API와 데이터, 이벤트, 스트림 기반 패턴을 통해 해결해볼 것이다. 이 방법들을 통해 클라우드 네이티브 애플리케이션의 목적에 맞게 설계하고 개발하고 배포할 수 있으며 최소의 비용과 시간, 노력으로 애플리케이션을 관리하고 유지보수 할 수 있다.

 

클라우드와 클라우드를 기반으로 하는 네이티브 애플리케이션은 변화 속도가 굉장히 빠르다.

기존의 상업 애플리케이션 뿐만 아니라 ML, AI와 같이 새롭게 각광 받는 분야의 애플리케이션들 역시 클라우드 기반으로 개발하면서 다양한 도메인들이 클라우드로 쏟아져 들어오는 상황이다.

 

이런 상황에서 개발하고자 하는 애플리케이션에 적합한 구조나 메시지큐, 데이터베이스 등을 선택하는 것조차 매우 어렵다.

 

클라우드 네이티브 애플리케이션은 다양한 디자인 패텬을 통해 구성하고 개발할 수 있다. 이 책에서는 주로 클라우드 네이티브 애플리케이션의 비즈니스 로직을 만들 때 반드시 적용해야 할 개발패턴을 살펴본다.

 

또한, 이 책은 클라우드 네이티브 애플리케이션을 개발하거나, 혹은 기존의 애플리케이션을 클라우드 네이티브로 전환하고자 할 때 어떤 기술 스택을 사용하고 어떤 구조를 사용할 것인지에 대한 전반적인 방향을 제시해 줄 수 있다. AWS나 Azure, GCP와 같은 퍼블릭 클라우드 환경뿐 아니라 온프레미스 환경에서도 사용할 수 있는 다양한 구조와 그에 잘 맞는 소프트웨어 및 애플리케이션을 소개한다.

 

목차를 살펴보자.

 

1장. 클라우드 네이티브란?

2장. 통신 패턴

3장. 연결 및 구성 패턴

4장. 데이터 관리 패턴

5장. 이벤트 기반 아키텍처 패턴

6장. 스트림 처리 패턴

7장. API 관리 및 사용 패턴

8장. 실례로 살펴보는 클라우드 네이티브 패턴

 

으로 구성이 되어 있다.

 

애플리케이션의 특성에 따라, 그리고 개발할 때 사용하는 패턴에 따라 배포나 확장성, 보안, 관측, 가능성 구현이 서로 다를 수 있다. 이런 다양한 패턴이 서로 어떤 차이가 있는지, 장단점은 무엇인지 생각하면서 이 책을 보면 좋을것이다.

 

Love Yourself.

클라우드 시대의 코드형 인프라(IaC)와 데브옵스 완벽 가이드

키프 모리스 지음

이동규 옮김

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

 

2022년 9월

2022 나는 리뷰어다 활동의 여덟 번째 리뷰

 

9월에 리뷰할 책은 "코드로 인프라 관리하기"이다.

 

우선 옮긴이가 꼭 전달하고 싶은 책의 일부를 보자

 

"애자일 소프트웨어 개발과 코드형 인프라의 핵심은 변경에 대한 태도를 뒤집는 것이다. 변경을 두려워하거나 변경을 최소화하기보다는 자주 변경함으로써 오류를 예방할 수 있다. 변경을 더 잘하는 유일한 방법은 자주 변경하여 시스템과 프로세스를 지속적으로 개선하는 것이다."

 

저자는 '속도를 빠르게 하여 품질을 향상시키고 품질을 향상시켜 속도를 빠르게 한다'를 강조한다.

가장 높은 수준의 데브옵스란 인프라 코드가 애플리케이션 코드와 결합하여 빠르고 안전하게 변경을 실행하고 언제든지 전체 시스템을 복구할 수 있는 상태라고 생각한다.

 

저자와 옮긴이의 기조를 생각하며 책을 읽어나가야 한다.

 

코드형 인프라라는 용어는 무엇인가?

오래전부터 시스템 관리자는 시스템을 관리하기 위해 스크립트를 사용했고, 코드형 인프라는 데브옵스 움직임과 함께 성장했다. 2009년 애자일 인프라라는 강연에서 코드형 인프라 용어가 사용되었고 이 책에까지 이르고 있다.

 

그럼 이 책의 세 가지 핵심 실행 방법을 보자.

 

1. 모든 것을 코드로 정의한다

2. 코드를 지속적으로 테스트하고 딜리버리 한다

3. 시스템을 작고 간단하게 빌드한다.

 

이 세 가지 실행 방법은 서로를 보강하며, 코드는 변경 관리의 여러 단계에서 추적, 버저닝, 배포를 용이하게 한다. 이를 통해 팀은 더 쉽게 더 작은 부분을 지속적으로 테스트할 수 있는 것이다.

 

이 책의 대상 독자는 소프트웨어 배포와 실행에 필요한 인프라를 프로비저닝하고 관리하는 사람으로 팀에서 엔지니어링, 테스트, 설계, 관리자 역할을 맡은 경우다. 시스템, 인프라 또는 소프트웨어 배포와 실행 관련 배경지식이 필요하며, 인프라 자동화를 위해 코드를 사용하는 클라우드나 가상 인프라에 대한 경험이 있다고 가정한다.

 

결국 이 책은 숙련된 실무자와 팀이 효율적인 방법으로 공통 언어를 만들고 인프라 자동화에 도전하는 과정에서 찾은 해결 방법을 명확하게 설명한다. 이 책을 통해 많은 엔지니어들은 시스템과 프로세스 구현의 밑거름을 얻어갈 수 있을 것이다.

 

Love Yourself.

SRE를 위한 시스템 설계와 구축

헤더 애드킨스, 벳시 바이어, 폴 블랭킨십, 피오트로 레반도프스키, 애나 오프레아, 애덤 스터블필드 지음

장현희 옮김

 

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

 

2022년 8월

2022 나는 리뷰어다 활동의 일곱 번째 리뷰

 

8월에 리뷰할 책은 "SRE를 위한 시스템 설계와 구축"이다.

 

우선 SRE란 무엇인가?

SRE(Secure & Reliable Systems)은 IT 운영에 대한 소프트웨어 엔지니어링 접근 방식이다.

SRE팀은 소프트웨어 툴을 활용하여 시스템을 관리하고, 문제를 해결하고, 운영 태스크를 자동화한다.

기존에 운영 팀이 수동으로 하는 경우가 많았던 태스크를 받아 엔지니어 또는 운영 팀에 넘기고, 엔지니어 또는 운영 팀은 소프트웨어 및 자동화를 사용해 문제를 해결하고 프로덕션 시스템을 관리한다.

 

간단히 SRE에 대해서 알아보았다.

 

이 책은 구글이라는 거대 IT 기업이 지금까지 수많은 서비스를 개발하고 운영해 오면서 터득한 보안과 신뢰성 관련 경험과 지식을 총망라한 책이다. 보안과 신뢰성은 서로 상충하는 부분도 있지만 궁극적으로는 안전하며 안심하고 사용할 수 있는 소프트웨어와 서비스를 제공하기 위해서는 반드시 고려해야 할 필수적인 요소이다.

 

보안과 신뢰성은 현대 소프트웨어 개발에서는 반드시 최우선으로 고려해야 할 요소이다. 이 책은 보안과 신뢰성에 어떤 문제가 발생할 수 있는지 그리고 이를 어떻게 예방하거나 대처할지에 대해 실용적이면서도 현실적인 조언을 제공한다.

 

구글은 거대 IT 기업이기 때문에 여러분들이 몸담고 있는 회사의 규모에 맞지 않는다고 느껴질 수도 있지만, 하나씩 천천히 도입해보면 보안과 신뢰성은 점점 더 견고해질 것이다.

 

책의 구성에 대해서 알아보자.

저자는 먼저 1장과 2장을 읽은 후 그 다음으로 관심이 가는 부분을 읽어보길 권한다.

이 책의 대부분의 장은 다음과 같은 내용으로 구성된 서문이나 실천적인 요약으로 시작한다.

- 문제에 대한 정의

- 각 장이 소개하는 원리와 사례를 적용하기에 적합한 소프트웨어 개발 수명 주기 단계

- 신뢰성과 보안 사이의 교집합 또는 절충

 

이 책은 업계에서 권장 사례로 여기는 많은 도구와 기술을 추천한다. 하지만 모든 것이 독자 여러분의 상황에 적합하지는 않을 것이므로 진행 중인 프로젝트의 요구사항을 평가하고, 프로젝트의 위협 요소에 적합한 솔루션을 설계하기 바란다.

 

본문 중의 인상 깊었던 부분을 살펴보자.

신뢰성과 보안은 시스템 설계의 이머전트 속성이다

전체 서비스를 마이크로서비스 같은 여러 컴포넌트로 나누는 방법을 예로 들고 있는데, 구축 과정에서 발생할 수 있거나 예상해야 하는 리스트에 대한 부분을 여러 컴포넌트로 나누고 있다. 이렇게 많은 설계 목표 간에 균형을 맞추는 일은 어렵다는 설명으로 SRE라는 것이 경험이 많이 필요한 영역이라는 것을 말하며, 그 경험에 대한 부분을 책에서 제공해주기 때문에 관련한 직무를 하고 있거나 하고자 하는 개발자라면 직접적인 도움이 될 책이라 생각된다.

 

아직,

본인에게는 조금 거리가 있는 영역이긴 하나 SRE라는 것을 알고 머릿속에 인지하면서 커리어를 쌓아간다면 목표점이 좀 더 명확해지지 않을까 하는 막연한 기대가 있다.

 

더 열심히 하자.

 

Love Yourself.

기본 문법부터 8가지 구글 앱에서 활용하는 앱스 스크립트 활용 방법을 한 권으로 정복한다!

다카하시 노리아키 지음

김모세 옮김

 

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

 

2022년 7월

2022 나는 리뷰어다 활동의 여섯 번째 리뷰

 

7월에 리뷰할 책은 "구글 앱스 스크립트 완벽 가이드"이다.

 

구글 앱스란 무엇인가?

어느새 우리 곁에 자리 잡은 스프레스시트, 지메일, 드라이브, 캘린더 등등...

MS-Office를 대체해가며 업무에 없어서는 안 될 존재가 된 구글 앱스이다.

 

2020년 기준 구글 워크스페이스를 도입한 조직은 600만 개 이상이며 액티브 사용자수는 월간 20억 명 이상으로 보고되고 있다.

 

구글 워크스페이스는 완전한 클라우드 환경 지원에 따른 훌륭한 서비스와 효과를 제공하는데, 여기에 이 능력과 잠재력을 한층 향상할 수 있는 방법이 있다.

 

바로 구글 앱스 스크립트 (Google Apps Script) - GAS 이다.

사실 본인은 이 책을 접하기 전에는 GAS라는 것이 있는지도 몰랐다. 그냥 사용했을 뿐.

 

GAS의 장점에 대해서 알아보자.

GAS를 사용하면 구글 서비스들을 자동화하고 연동할 수 있다. 스프레드시트에서 테이블과 슬라이드를 만들고, 지메일에서 알림 메일을 보내고, 드라이브의 폴더나 파일을 정리하고, 캘린더에 이벤트를 등록하고, 문서로 회의록 템플릿을 만들어 번역하는 등의 작업을 프로그래밍으로 할 수 있다.

 

그리고 GAS를 시작하는 데에 가장 큰 장점은 서버나 환경은 모두 구글이 제공하며 누구나 무료로 이용할 수 있다는 점.

 

하지만, GAS를 잘 사용하려면 공부를 많이 해야 한다. GAS의 구조와 사양, 프로그래밍 구문, 규칙이나 제약 등 많은 지식과 이를 실현할 스킬이 필요하다.

 

간단히 목차에 대해 알아보자.

1장과 2장에서는 GAS를 시작할 준비를 한다.

3장에서 7장은 GAS의 기반이 되는 자바스크립트 기초부터 객체 사양까지 차근차근 설명한다.

8장에서 15장은 실제로 구글 앱스를 다뤄본다.

16장에서 23장은 구글 서비스에서 공통으로 사용할 수 있는 노하우들을 제공한다.

 

구글 앱스 스크립트를 이용해 할 수 있는 작업들은 무궁무진하다. 구글이 제공하는 강력한 무기인 GAS를 제대로 배우고자 한다면 이 책은 좋은 가이드가 될 것이다.

 

개발자라면 좀 더 쉽게 접근이 가능하겠지만, 코드가 익숙하지 않은 직군은 초반에 어려움을 겪을 수도 있다. 하지만 걱정할 필요는 없다.

목차

목차를 보면 아시겠지만, 자바스크립트의 기본 문법부터 제어문, 함수로 이어지는 기본을 제공하고 있다.

순서에 따라서 차근차근 공부하면 잘 따라올 수 있을 것이다.

 

페이지가 많은 편이지만 꾸준히 하는 자에게는 기회가 올 것이기에 우리 오늘도 파이팅하자.

 

Love Yourself.

Learning Algorithms

조지 하이네만 지음

윤대석 옮김

 

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

 

2022년 6월

2022 나는 리뷰어다 활동의 다섯 번째 리뷰

 

6월에 리뷰할 책은 "Learning Algorithms"이다.

가볍게 300페이지 좀 안 되는 책은 알고리즘을 공부하고자 하는 이에게 좋은 책이라 생각되며,

파이썬을 조금 공부해보셨던 분이라면 더 좋은 책일 것이다.

 

저자는 소프트웨어 엔지니어링 및 알고리즘 분야에서 20여 년간 경험을 쌓은 컴퓨터공학과 교수다. 내용이 조금 딱딱하진 않을까 했지만 옮긴이 윤대석 님이 잘 옮겨주신 것 같다. 현직 엔지니어로서 알고리즘과 운영체제를 꾸준히 공부하시는 분이시고, [쓰면서 익히는 알고리즘과 자료구조]의 저자이다. 

 

알고리즘의 중요성이란 몇 번을 말해도 지나치지 않다.

컴퓨터 과학의 핵심이자 정보화 시대의 필수 요소로서, 수많은 분야의 인터넷 요청에 사용되고 있다.

컴퓨터 과학 내에서 알고리즘을 발견하고 적용할 수 있는 공부를 하는 것은 쉽지 않다.

대부분 수학적 증명과 컴퓨터 과학 개념을 강조하기에 효율적인 공부가 어렵다.

 

하지만 이 책은 코드에 당장 적용해 효율을 향상해주는 다양한 알고리즘을 소개하며 파이썬으로 작성된 예제 코드를 제공한다.

현재 파이썬은 다양한 분야에서 사용되며, 가장 인기 있고 사용자 친화적은 프로그래밍 언어 중 하나이다.

책에서는 알고리즘을 최대한 시각화하고 상세한 설명으로 독자의 개념 이해를 돕는다.

 

컴퓨터 과학에서 사용되는 자료구조와 기본 알고리즘을 알려주기에 효율적인 프로그래밍 작성이 되도록 도와줄 책이며, 코딩 인터뷰를 준비하는 개발자와 지망생에게도 좋은 가이드가 될 것이라 조지아 공과대학교의 즈비 갈릴리 명예 컴퓨팅 학장은 추천을 해주었다.

 

사실 실무에 종사중인 개발자에게 알고리즘의 학습은 꼭 필요한 공부가 아니라고 생각할 수도 있다.

하지만 알고리즘을 학습하게 되면 해결하고자 하는 문제를 다양한 시각으로 풀어내는 능력을 키울 수 있고, 좀 더 효율적인 소프트웨어를 개발할 수 있다는 장점이 있다. 이 책은 알고리즘이 어떻게 구성되는지 단계별로 꼼꼼히 설명해 기초를 실전에 잘 적용하도록 이끌어준다.

알고리즘 분야는 방대하기 때문에 이 책을 시작으로 접하면 아주 좋을 것이다.

 

책에서 다루는 내용에 대해서 살펴보자.

기본 타입을 사용해 정보를 구성하는 방법부터 시작하여, 자료구조에서 직접 작동하는 알고리즘, 스택이나 우선순위 큐와 같은 기본 추상 데이터 타입에 의존하는 복잡한 알고리즘까지 다양한 알고리즘이 어떻게 성능을 달성하는지 이해를 돕도록 하고 있다.

 

책의 본문 일부를 보자.

그림을 통해 독자의 이해를 돕고, 표를 통해 확실하게 비교를 할 수 있도록 도와주고 있다.

직접 코드를 치면서 이해를 하고, 각 챕터마다 마지막엔 연습 문제를 통해 문제 해결 능력을 키워주고 있다.

 

시중에 많은 알고리즘과 자료구조 관련한 책이 많지만, 이 책은 알고리즘 공부를 시작하는 사람에게 아주 적합한 책이 될 것이다.

비교적 친근한 파이썬이라는 언어를 사용하는 것도 큰 장점이 될 것 같다.

 

알고리즘 공부, 이젠 진짜로 시작해 봅시다.

 

Love Yourself.

구글러가 전하는 문화, 프로세스, 도구의 모든 것

타이터스 윈터스, 톰 맨쉬렉, 하이럼 라이트 큐레이션

개앞맵시 옮김

 

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

 

2022년 5월

2022 나는 리뷰어다 활동의 네 번째 리뷰

 

5월의 리뷰할 책은 "구글 엔지니어는 이렇게 일한다 (Software Engineering at Google)"이다.

700페이지에 달하는 이 책은 구글은 어떻게 개발하고 코드를 관리하는가에 대해서 서술한 책이다.

 

소프트웨어 엔지니어링은 단순히 고객의 요구사항을 해소하는 것에만 그치지 않고, 문제의 근본 원은을 찾고 개선해나가며, 지속 가능성과 확장성을 고려하여 최적의 결과물을 만들어나가야 한다고 당근마켓 서비스코어 부문은 말하고 있다. 더불어 이 책이 소프트웨어 엔지니어로 나아가기 위한 길을 제시해준다고 말한다.

 

그리고 우아한테크코스를 총괄하고 계신 박재성 님은, 이 책이 소프트웨어 엔지니어링을 '시간 위를 걷는 프로그래밍'으로 정의한 표현을 읽는 순간, 소프트웨어 엔지니어링이라는 용어에 대한 거부감이 사라졌다고 한다. 프로그래밍에 시간 축을 추가함으로써 한 조직이 고려해야 할 개발 문화, 프로세스, 도구를 소개하는 책이라고 한다.

 

어디 한번 그런 책인지 들어가 보자.

 

지금까지 소프트웨어 엔지니어링 이론과 관례는 그리 엄격하지 않았지만 소프트웨어가 우리 삶에 깊숙이 파고들면서 우리도 더 엄격한 엔지니어링 방법을 채택하고 따라야 하는 시대가 도래했다.

 

시간 위를 걷는 프로그래밍

소프트웨어 엔지니어링은 단순히 코드를 작성하는 행위에 더하여, 시간의 흐름에 발맞춰 한 조직이 그 코드를 구축하고 유지 보수하는 데 이용하는 모든 도구와 프로세스를 포괄한다.

 

"흐르는 시간 위에서 순간순간의 프로그래밍을 모두 합산한 것이다.'라는 관점이 이 책의 핵심이다.

 

이 책은 소프트웨어 조직이 설계, 아키텍처 잡기, 코드 작성 시 명심해야 한다고 믿는 세 가지 기본 원칙을 강조한다.

- 시간과 변경 : 코드가 수명을 다할 때까지 새로운 요구사항에 잘 적응하려면 어떻게 해야 하는가?

- 규모와 성장 : 커져가는 규모에 발맞춰 조직은 어떻게 진화해야 하는가?

- 트레이드오프와 비용 : '시간과 변경', '규모와 성장'에서 얻는 교훈들을 바탕으로 조직은 어떻게 의사결정을 내려야 하는가?

 

이러한 원칙이 엔지니어링 관행에 영향을 주어 오래 지속되도록 만드는 방법이라 말하고 있다.

 

구글의 시각

구글은 그 규모와 역사 덕에 지속 가능한 소프트웨어 생태계의 성장과 진화를 바라보는 독특한 시각을 갖게 되었고, 이 깨우침 들을 독자들에게 전달하기 위해 노력하고 있다.

구글이 소프트웨어 엔지니어링을 바라보는 주된 시각에 따라 이 책의 주제를 세 가지로 나누었다.

 

- 문화

- 프로세스

- 도구

 

문화를 다루는 2부(2~7장)는 소프트웨어 기업이 갖는 집단적 본성, 쉽게 말해 소프트웨어 개발은 팀에 의해 이루어지므로 조직이 성장하고 건실하게 유지되려면 개발 문화 면에서도 올바른 원칙이 필요하다는 점을 강조한다.

 

프로세스를 다루는 3부(8~15장)에서 소개하는 기법 대부분은 대다수 소프트웨어 엔지니어에게 익숙할 것이다. 구글이 버텨낸 시간과 규모에서 효과적으로 작동한 프로세스들을 소개하고, 아직 시원한 답을 찾지 못한 영역도 이야기한다.

 

도구를 다루는 4부(16~25장)는 끊임없이 커져가고 나이를 먹는 코드 베이스를 말끔하게 관리하기 위해 구글이 도구 인프라에 어떻게 투자해왔는지를 이야기한다.

 

이 책에서 소개하는 문화, 프로세스, 도구는 일반적인 소프트웨어 엔지니어가 경력을 쌓아가며 얻었으면 하는 교훈들이다. 구글 엔지니어링의 엄청난 규모는 수많은 문제에 대처하는 다양한 해법을 제시하기에 충분할 것이다.

 

저자 중 톰 맨쉬렉은 이 책이 거대한 소프트웨어 엔지니어링 조직이 멋진 제품을 만드는 방법을 보여주는 창이 되길 희망하며, 독자 여러분이 재밌게 읽고 그중 몇 가지 교훈을 받아들여 여러분의 것으로 만드는 것을 바란다고 했다.

 

이제 이 글을 보시는 분들이 이 책을 구입하여 읽어 볼 때이다.

책의 분량이 많아서 아직 완독 하지는 못했지만 개발 실무진과 관리자 모두가 읽기에 좋은 책인 것은 분명하다.

책의 모든 것을 접목시킬 순 없겠지만 하나라도 시도하고 접목해 간다면 더 좋은 조직이 될 것이라 확신한다.

 

Love Yourself.

16여 년 만의 개정을 기념해 재탄생한 한국 특별판???

에릭 프리먼, 엘리자베스 롭슨, 케이시 시에라, 버트 베이츠 지음

서환수 옮김

 

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

 

2022년 4월

2022 나는 리뷰어다 활동의 세 번째 리뷰

 

4월의 리뷰할 책은 "헤드퍼스트 디자인 패턴(개정판)"이다.

무려 16년 만에 개정판이 나왔다. 개정판이라고 할 수 있을지는 모르겠으나 아무튼 한국 특별판이다.

 

몇 페이지를 휘리릭 봤을 때 느낀 점은 예전 본판보다 보기가 훠어~~ 얼씬 편해졌다.

헤드퍼스트 디자인 패턴이라는 책이 워낙에 좋은 책으로 소문이 많이 났었기 때문에 꼭 봐야지 봐야지 했는데 뭔가 미쿡스런 책의 그림과 구성에 지쳐버리고 말았다. (공부 열심히 하지 않아서 그런 건 아니랍니다...)

어디를 어떻게 봐야 하는 거지? 라는 생각을 많이 했던 것 같다.

책의 일부분을 보여드립니다...

나는 정말 정신 없었다...

 

그런데!

개정판이 나왔다.

구성이 정말 깔끔하게 잘 나왔다.

 

훨씬 보기 편하고 텍스트 색감도 너무 좋다. 

이것 보세요 여러분!!!!

정말 잘 나왔다! 당장 읽어 보고 싶을 정도로 좋은 구성이다.

옮긴이의 말처럼 한국 정서에 맞게 일러스트레이션도 싹 바뀌고 뼈대와 태가 바뀌었다.

어디에 감사를 드려야 하나 ㅎㅎㅎ

일단 한빛미디어에 감사드립니다!!

(늘 감사하고 있어요!!)

 

그럼 이제 책의 본문에 집중해보자.

헤드퍼스트 디자인패턴은 친절하게도 책을 보는 방법을 잘 설명해준다.

여러분의 두뇌를 정복하는 방법

1. 천천히 하세요.

2. 연습문제를 꼭 풀어보세요.

3. <무엇이든 물어보세요> 부분은 꼭 읽어보세요.

4. 자기 전 마지막으로 이 책을 보세요.

5. 물을 많이 마십시다.(????)

6. 배운 내용을 얘기해 봅시다.

7. 두뇌의 반응에 귀를 기울여 봅시다.(힘들면 쉬라는 뜻)

8. 뭔가를 느껴 봅시다.

9. 직접 디자인해 봅시다.

 

진짜 이대로만 하면 개발 실력이 쑥쑥 성장할 수 있을 것 같다.

이 책뿐만 아니라 다른 책들도 이런 식으로 공부한다면 내 머릿속에 잘 남으리라.

 

어쨌든,

이 책은 디자인 패턴을 말하는 책이다.

디자인 패턴을 잘 활용하면 코드 재사용뿐만 아니라 더 확장될 앱을 준비할 수가 있다.

괜히 패턴이라는 단어를 사용하는 것이 아니다. 선배 개발자 분들이 시행착오를 많이 겪은 후에 가장 효율적이라고 생각하는 것을 패턴으로 남겼을 테니 말이다.

지속적으로 공부하고 접목시켜 보다 보면 디자인 패턴을 가장 현명하게 활용하는 법을 깨달을 수 있을 것이다.

 

이 책은 우선 초급 개발자에게 가장 도움이 될 책이라고 생각이 된다.

물론 요즘 시대에 초급 / 중급으로 굳이 구분하고 싶지는 않지만 언어를 공부하고 프레임워크를 다뤄보기 시작한 개발자가 디자인 패턴을 공부하면 가장 도움이 될 것 같기 때문이다.

본인이 생각하기에 자바객체지향을 지속적으로 사용해야 한다면 이 책은 필수라고 생각한다.

 

디자인패턴을 이야기하자면 보통 GoF의 디자인 패턴을 많이 이야기한다.

하지만 GoF의 책은 난이도가 좀 있는 편이기 때문에 이 책으로 먼저 시작하고 디자인 패턴에 대해서 더 궁금하다면 GoF로 넘어가는 것도 좋은 방법일 것 같다. 패턴도 패턴이지만 객체를 설계하는 법에 대해 설명을 잘해주는 책이기 때문에 강추하는 책이다.

 

마지막으로, 개정판이라고 해서 내용은 크게 바뀌진 않았다.

일단 예제 코드가 최신 자바버전인 자바 16에 대응 가능하도록 변경이 된 것 제외하고는 내용에서 큰 변화는 없는 것으로 보인다.

 

디자인 패턴을 재미있게, 그리고 효과적으로 공부하고 싶은 분들은 헤드퍼스트 디자인패턴으로 시작하자.

괜히 16년 만에 개정판이 나온 것이 아니다. 그것도 한국 특별판으로.

 

Love Yourself.

Go 개발자처럼 생각하는 방법

존 보드너 지음

윤대석 옮김

 

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

 

2022년 3월

2022 나는 리뷰어다 활동의 두 번째 리뷰

 

올해 두 번째 리뷰할 책은 "러닝 Go" 이다.

 

어떤 책을 선택할까 고민하다가 Go를 단어만 들어봤지, 뭐 어떤 건지 전혀 몰라서 무작정 신청해 보았다.

 

Go는 구글이 만든 개발 언어이다.

옮긴이의 말을 빌리자면, 비교적 최근에 개발되었고 오랫동안 유지 개발되어온 다른 인기 있는 프로그래밍 언어들과는 다르게 최신 멀티코어 아키텍처(?)를 제대로 활용할 수 있도록 고안되었다. 특히 Go루틴(goroutine)과 채널을 통해 작업을 동시성과 병렬성을 쉽게 구현해 낼 수 있도록 한 부분에서 다른 언어들과 차이를 보인다.

 

특히 Go 언어는 도커나 쿠버네티스와 같은 대형 프로젝트에서 사용되는 만큼 성공했다고 할 수 있다.

 

이런 장점으로 시스템 프로그램이나 서버용 프로그램 개발에 많이 활용되고 있지만, 국내에서는 서버 개발로 아직도 자바를 많이 쓰고 있다.

(자바 만세!)

 

개발자가 원하는 프로그램을 구성하면서 언어에서 제공하는 다양한 기능을 사용하는 방법뿐만 아니라 효율적이고 확장할 수 있게 진행하려면 언어가 가지는 특징과 철학을 잘 이해할 필요가 있다고 생각한다. 개발자가 자신이 사용하던 언어와 Go가 개념적인 부분에서 크게 다르지 않지만, 이 책에서는 다른 언어들과의 차이점을 명확히 구분해주기 때문에 Go 언어만의 매력을 느낄 수 있다.

 

옮긴이가 한 말 중에 가장 와닿는 부분은,

"Go 언어는 다른 언어에 비해 배우기 쉽고 프로젝트가 커지더라도 간결함을 유지하여 확장도 쉬운 언어라고 생각한다."

프로젝트가 커지더라도 간결함을 유지할 수 있다니?

굉장히 매력적인 부분이라는 생각이 든다. 간결하지만 강력한 기능을 제공하여 유지 보수에도 많은 이점을 가지고 있다는 Go.

 

다음으로 대상 독자에 대해 저자가 정리해준 부분이 있다.

본인이 구분 지어 보고자 한다.

1. 두 번째 개발 언어를 찾는 개발자

2. 버전 관리나 IDE를 사용해본 경험이 있는 개발자

3. 동시성이나 추상화 같은 컴퓨터 과학 개념에 익숙한 개발자

4. 기본적인 HTTP 개념에 익숙한 개발자

이 정도로 정리가 되는 것 같다. 4가지 조건을 다 충족시킬 필요는 없지만 하나의 언어가 익숙해진 미들급 개발자가 이 책을 본다면 가장 적합한 시기의 책이 아닐까 싶다.

 

목차를 간단히 보자.

1. Go 개발 환경 설정

2. 기본 데이터 타입과 선언

3. 복합 타입

4. 블록, 섀도, 제어 구조

5. 함수

6. 포인터

7. 타입, 메서드, 인터페이스

8. 오류

9. 모듈, 패키지 그리고 임포트

10. Go의 동시성

11. 표준 라이브러리

12. 컨텍스트

13. 테스트 작성

14. Reflect, Unsafe, Cgo

15. Go의 제네릭

 

보통의 컴퓨터 언어 책과 구성은 비슷하지만 익숙하지 않은 단어들이 있는데, Go 만의 특징이 아닐까 싶다.

 

본문은 설명과 코드 그리고 Tip, NOTE 등으로 구성되어 정리하기 편하게 되어 있다.

근 450 페이지에 달하는 분량이지만 새로운 언어를 배우고자 한다면 Go를 450 페이지 만에 배울 수 있다는 것이다.

 

개발이 무료하고 새로운 것을 찾고자 하는 개발자들이여.

러닝 Go에 도전해 보는 것은 어떨까?

 

LoveYourself.

단 한 번에 필요한 정보만 불러오는 효율적은 API 구축하기

 

사메르 부나 지음

김완섭 옮김

 

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

 

2022년 2월

2022 나는 리뷰어다 활동의 첫 번째 리뷰.

(작년에 이어 올해도 "나는 리뷰어다" 활동 지원 감사드립니다!! 자~ 드가자~~~~!)

 

2022년 한빛미디어 나는 리뷰어다 활동의 첫 번째 책은 "그래프QL 인 액션"이다.

 

먼저 GraphQL이 무엇인지 알아보자.

facebook에서 만든 Graph Query Language로 어플리케이션 레이어 쿼리 언어이다.

다시 말하자면?

API를 위한 쿼리 언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임이다.

(무슨 말인지 잘 모르겠다.)

 

SQL과 비교하면서 좀 더 쉽게 풀어 설명해보자.

 

GraphQL(이하 GQL) 은 API를 만들 때 사용할 수 있는 쿼리 언어. 그와 동시에 쿼리에 대한 데이터를 받을 수 있는 런타임이다.

GQL은 선언현 데이터 fetching 언어라고 흔히 일컬어지며, 개발자는 무슨 데이터가 필요한지에 대한 요구사항만 작성하면 되고 어떻게 가져올지는 신경 쓰지 않아도 된다.

 

SQLDBMS에 저장된 데이터를 효율적으로 가져오는 것이 목적이고,

GQL웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적이다.

 

SQL의 문장은 주로 백엔드 시스템에서 작성하고 호출하는 반면,

GQL의 문장은 주로 클라이언트 시스템에서 작성하고 호출한다.

 

서버사이드 GQL 애플리케이션은 GQL로 작성된 쿼리를 입력받아 쿼리를 처리한 결과를 다시 클라이언트로 돌려준다.

HTTP API 자체가 특정 데이터베이스나 플랫폼에 종속적이지 않은 것처럼 마찬가지로 GQL 역시 어떠한 특정 데이터베이스나 플랫폼에 종속적이지 않다.

일반적으로 GQL의 인터페이스 간 송수신은 네트워크 레이어 L7의 HTTP POST 메서드와 웹소켓 프로토콜을 활용한다.

 

아래 GQL 파이프 라인도 같이 확인해보자

GraphQL 파이프 라인

비교하는 김에 GraphQL과 REST API에 대해서도 비교해보자.

REST API

- URL, Method 조합으로 다양한 Endpoint가 존재

- REST API에서는 각 Endpoint마다 데이터베이스 SQL 쿼리가 달라짐

 

GraphQL

- GQL은 단 하나의 Endpoint가 존재

- GQL API는 GQL 스키마의 타입마다 데이터베이스의 SQL 쿼리가 다름

GraphQL vs REST API

이 정도면 GQL에 대한 이해는 됐을 거라 생각한다.

좀 더 자세히 보고자 한다면?

https://velog.io/@jangwonyoon/1.-GraphQL-%EA%B0%9C%EB%85%90

 

#1. GraphQL 개념 및 개요

Graph QL(이하 gql)은 Structed Query Language(이하 sql)와 마찬가지로 쿼리 언어입니다. 하지만 gql과 sql의 언어적 구조 차이는 매우 큽니다. 또한 gql과 sql이 실전에서 쓰이는 방식의 차이도 매우 큽니다. gq

velog.io

링크를 참고하도록 하자. 저자님 감사합니다. 그대로 옮겨오면서 이해했어요.

 

그럼 이제 이 책의 구성에 대해서 알아보자.

 

이 책은 데이터 API를 사용하는 프런트엔드 개발자와 효율적인 데이터 API를 만들어야 하는 백엔드 개발자를 대상으로 한다.

그리고 기본적인 프로그래밍에 대한 지식과 javaScript에 대한 기초 지식도 필요하다.

 

1부 - 그래프QL 에 대한 다양한 질문을 왜, 무엇을, 어떻게의 관점으로 답한다.

  - 1장 : 그래프QL이 정확히 무엇이며 어떤 문제를 해결할 수 있고, 어떤 문제가 발생할 수 있는지 소개
             또한, 그래프QL의 설계 컨셉과 REST API와의 차이점에 대해 설명

  - 2장 : 그래프QL의 인터랙티브 환경 소개. 그래프QL 요청을 실제 작성하고 테스트

  - 3장 : 그래프QL의 기본 내장 기능에 대해 소개. 직접 데이터 요청과 응답을 구성하고 변경

 

2부 - 실제 웹 애플리케이션에서 동작하는 데이터 API를 만들어본다. 이를 통해 그래프QL 서비스 구축 방법과 그래프QL 언어가 무엇인지 이해할 수 있다.

  - 4장 : UI 기능들을 API 처리와 연계하는 방법을 배우고 이를 이용해서 그래프QL 스키마 설계

  - 5장 : 데이터베이스 전용 Node.js 드라이버와 그래프QL.js를 사용해서 실행 가능한 그래프QL 스키마 생성

  - 6장 : API 쿼리를 구현하기 위해서 데이터베이스 필드를 연동

  - 7장 : 6장에서 만든 쿼리를 바탕으로 그래프QL 쿼리 최적화 방법

  - 8장 : 데이터베이스 개체를 생성, 변경, 삭제하기 위한 API 변경 처리

 

3부 - 그래프QL API를 프론트엔드 웹 애플리케이션에 사용하는 방법을 보여준다.

  - 9장 : 그래프QL 클라이언트 라이브러리에 의존하지 않고 그래프QL API를 사용해서 직접 Ajax 요청을 처리

  - 10장 : 유명한 그래프QL 클라이언트 라이브러리 중 하나인 아폴로 클라이언트(Apollo Client)의 강력한 기능

 

소개부터 시작하여 GitHub 같은 그래프QL API 서비스를 사용한 실용적인 예제도 같이 보여주고 있다.

 

Git Repository와 Docker 파일도 제공하기 때문에 환경 구축을 어렵지 않게 할 수 있다.

 

공부를 하면서 어려운 점이 있다면 Pluralsight 같은 동영상 강좌 플랫폼에서 저자의 강의를 볼 수도 있다.

이외에도 jsComplete.com에 많은 동영상 자료가 있으며,

jscomplete.com/help slack 채널도 제공하고 있으니 많이 방문하면 좋을 것 같다.

 

484 페이지에 달하는 분량이지만, 관심이 있는 사람이라면 쭉쭉 진도가 나갈 것이다.

본인은 자바 스프링 백엔드 개발자라서 javaScript에 취약하기 때문에 빠르게 일고 나가지는 못했다.

하지만 꼭 완독 하고, 실제 프로젝트에도 접목시켜 보리라.

 

올해는 시작과 동시에 이직을 하고, 보다 좋은 환경의 회사에서 일을 하고 있다.

(너무 자유로워서 걱정입니다...)

2022년에는 정말 튼튼한 코드를 만드는 개발자가 되고 싶다.

 

LoveYourself.

MongoDB The Definitive Guide / 실전 예제로 배우는 NoSQL 데이터베이스 기초부터 활용까지

크리스티나 초도로, 섀년 브래드쇼, 오언 브라질 지음

김인범 옮김

 

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

 

12월

나는 리뷰어다 활동의 11번째 리뷰.

(벌써 11번째 리뷰라니... 시간 정말 빠르다! 한빛미디어 항상 감사합니다. 내년에도 잘 부탁드려요!!)

 

2021년 한빛미디어의 마지막 리뷰 책은 "몽고DB 완벽 가이드" 다.

RDBMS도 아직 능숙하지 않지만 그렇다고 NoSQL 공부를 안 할 수는 없지 않겠는가.

 

12월은 NoSQL 이다.

NoSQL은 무엇인가?

 

행과 테이블을 사용하는 관계형(SQL) 데이터베이스보다 훨씬 다양한 방식으로 빠르게 바뀌는 대량의 비정형 데이터를 처리할 수 있다는 점을 강조하기 위해 "비관계형", "NoSQL DB" 또는 "non-SQL" 이라고도 한다.

1960년대부터 다양한 이름으로 존재해 온 NoSQL 기술은 데이터 환경이 변화하고 개발자들이 클라우드, 모바일, 소셜 미디어와 빅 데이터로부터 생성되는 다양한 대규모 데이터를 처리해야 할 필요가 늘어남에 따라 그 인기가 급증하고 있다.

바이럴 성격의 유명인 트윗에서 전자 의료 기록에 포함된 의학 정보에 이르기까지, 새로운 데이터와 데이터 형식이 놀라운 속도로 만들어지고 있다.

 

빅데이터에 대한 중요성이 부각되기 시작한 시점부터 NoSQL에 대한 관심이 증대되었다.

이해를 돕기 위해 SQL과 NoSQL의 차이에 대해 잘 정리해놓은 표를 한번 보자.

출처 :&nbsp;https://azure.microsoft.com/ko-kr/overview/nosql-database/

NoSQL 에 대한 이해가 없었던 개발자라면 오늘 차이점을 알고 가도록 하자.(필자 역시...)

 

책을 살펴보도록 하자.

(총 600 페이지에 달하는 얇은 종이다.)

몽고DB 코리아 시니어 컨설팅 엔지니어이신 김동한 님의 추천사를 보면,

이 책은 몽고DB 최신 정보에 발맞추어 3판까지 개정판을 출간하는 유일한 실전 입문서라고 한다.

책에서는 기초뿐 아니라 전반적인 개발 과정에 필요한 다양한 기능을 배울 수 있고, 개발자에게는 데이터베이스에 대한 지식을, 데이터베이스 관리자에게는 도큐먼트 지향 데이터베이스에 대한 개념을, 운영자에게는 고가용성과 분산 환경 경험을 제공한다고 한다.

 

이 책을 통해 독자들은 몽고DB를 사용해 개발 시간을 단축하고 유연한 스키마를 설계함으로써 빠르게 변화하는 비즈니스에 대응하고 새로운 사업의 가능성을 확인할 수 있다고 한다.

 

사실 추천사가 크게 와닿지는 않지만 개발자가 NoSQL을 공부해야 한다는 사실만은 확실하다. 아직까지 국내 IT 시장은 Java&Spring을 이용한 웹 개발 시장이 가장 크고, 보통은 RDBMS를 사용하고 있다. 하지만 신생 스타트업이나 새로운 프로젝트들은 조금씩 MongoDB를 채택해 나가고 있는 상황이다. 아직 NoSQL 엔지니어들이 많지 않은 상황에서 MongoDB에 대한 이해력을 가진다면 본인의 가치를 높일 수 있는 것은 확실하다.

 

다음으로 이 책의 구성에 대해서 살펴보도록 하자.

 

몽고DB 시작

1장 - 몽고DB가 만들어진 배경과 지향점, 몽고DB를 선택해야 하는 이유

2장 - 몽고DB의 핵심 개념과 용어 설명, 데이터베이스와 셸을 실행하는 방법

3장 - 기본적인 쓰기 연산 방법. 안전성과 속도에 따른 방법

4장 - 도큐먼트를 검색하는 방법과 복작한 쿼리를 생성하는 방법

 

몽고DB 개발

5장 - 인덱스의 개념과 몽고DB 컬렉션에서 인덱스를 사용하는 방법

6장 - 여러 유형의 인덱스와 컬렉션을 사용하는 방법 설명

7장 - 카운트, 고유한 값 찾기, 도큐먼트 그룹화하기, 집계 프레임워크, 그리고 이러한 결과를 컬렉션에 쓰기 등 데이터 집계를 위한 기술

8장 - 트랜잭션

9장 - 몽고DB와 잘 연동되는 애플리케이션을 작성하는 팁

 

복제

10장 - 복제 셋을 구축하고 활용 가능한 설정 옵션을 다루는 방법

11장 - 복제와 관련된 다양한 개념

12장 - 복제가 어떻게 애플리케이션과 상호작용 하는지

13장 - 관리자 측면에서 복제 셋을 운영하는 방법

 

샤딩

14장 - 샤딩에 관한 간단한 설정

15장 - 클러스터 구성 요소의 전반적인 면을 살펴보고 어떻게 설정하는지

16장 - 다양한 애플리케이션에서 샤드 키를 고르는 방법

17장 - 샤드 클러스터를 운영하는 방식

 

애플리케이션 관리

18장 - 몽고DB가 어떤 작업을 하는 중인지 살펴보는 방법

19장 - 몽고DB의 보안과 더불어 배포를 위한 인증 및 권한을 구성하는 방법

20장 - 몽고DB가 어떻게 데이터를 견고하게 저장하는지 설명

 

서버 관리

21장 - 몽고DB를 구동하고 멈출 때의 일반적인 옵션

22장 - 각 유형별 배포에 대해 백업하고 복구하는 방법

23장 - 각 유형별 배포에 대해 백업하고 복구하는 방법

24장 - 몽고DB를 배포할 때 유의해야 하는 여러 시스템 설정

 

부록 A - 몽고DB 버전 부여 방식과 각 OS에서 몽고DB를 설치하는 방법

부록 B - 몽고DB의 내부 작동 방식과 관련된 스토리지 엔진, 데이터 포맷, 와이어 프로토콜

 

내용이 굉장히 방대하다. 정말 이 책 한권만 통달하면 몽고DB를 실무에서 다루는 데는 문제가 없을 것 같다.

본문의 일부를 살펴보자.

쿼리 조건

RDBMS를 사용하던 분들도 SQL과 비교하면서 보면 이해가 더 잘 될 것 같다.

예약어를 사용하여 쿼리문을 뽑아내는 과정이 재미있다. 예약어를 한 번만 더 생각해 보면 어느 정도 뜻을 유추해 낼 수 있다.

처음에는 익숙하지 않더라고 연반추 학습법으로 보고 또 보자.

 

아직 뒷부분은 보지 못했지만, 빅데이터를 다루고자 하는 직군이라면 필수적으로 학습해야 하는 책임은 분명하다.

 

개발자의 공부는 끝이 없지만, NoSQL을 다뤄야 하는 시기가 온다면 꼭 "몽고DB 완벽 가이드" 를 통해 능력 있는 엔지니어가 되도록 하자.

 

우리 개발자 모두들

메리 크리스마스 & 해피 뉴 티어!!

+ Recent posts