이제 국내의 많은 곳에서도 마이크로서비스를 실제로 도입하려는 움직임이나 도입한 사례를 어렵지 않게 찾을 수 있다. 기존의 일체형 시스템 개발과 비교해보면 개념적으로는 마이크로서비스의 장점을 쉽게 이해할 수 있지만, 이를 실제로 구현해내려면 여러 가지 기술과 도구의 도움이 필요하다.
이 책은 스프링 부트와 스프링 클라우드 기술을 바탕으로 검색, 예약, 체크인, 운임 등 여러 도메인으로 구성된 항공 운항 시스템을 마이크로서비스로 구현하는 과정을 다룬다. 마이크로서비스라는 큰 주제에서 부분별로 서로 동떨어진 예제를 보여주는 것이 아니라, 일반적인 스프링 부트 웹 애플리케이션에서 시작해 스프링 클라우드 기술을 적용해가면서, 처음부터 끝까지 일관성 있게 하나의 대상 시스템을 클라우드 기반의 마이크로서비스 아키텍처로 구축해가는 전체 과정을 보여주는 것이 이 책의 가장 큰 장점이다.
새로운 서비스의 구현뿐만 아니라, 이미 일체형 아키텍처로 구현된 프로젝트를 마이크로서비스로 전환하는 과정도 상세하게 다룬다. 전환 과정에서 마주칠 난관과 해결 방법을 통해 얻을 수 있는 통찰만으로도 이 책을 사서 볼 만한 가치가 충분하다고 생각한다. 꼭 마이크로서비스가 아니더라도 분산 환경에서 발생할 수 있는 다양한 문제와 그 해법에서 많은 것을 배울 수 있다.
또한 서비스 지향 아키텍처 및 12 요소 애플리케이션과의 비교를 통한 마이크로 서비스 개념 정립, 데브옵스와의 관계, 마이크로서비스 개발에 적합한 문화와 방법론 등 이론적인 면에 있어서도 폭넓은 이야깃거리를 다루며 다양한 화두를 던진다.
마이크로서비스 역량 모델의 개념적 틀을 반복적으로 제시하면서 역량 모델의 각 요소에 대한 구체적인 내용을 전개해가는 서술 방식 덕분에 마이크로서비스의 방대한 내용을 공부할 때 중심을 잡고 길을 잃지 않도록 도와준다. 복잡다단한 다양한 서비스를 구현하는 많은 개발자들이 이 책을 통해 마이크로서비스를 익히고 실무에 점진적으로 적용해가면서 개인 역량도 up, 생산성도 up, 야근 시간은 down되기를 진심으로 바란다.
이 책은 전체적인 흐름이 매우 균형적이고 매끄럽다는 장점이 있는 반면, 부드럽게 읽히지 않는 미묘한 문장들이 상당히 많아서, 번역하는 입장에서 그런 부분을 보완하는 데 정말 많은 공을 들였다. 책의 기본 내용과 흐름이 워낙 좋아서 독자들의 만족도도 높으리라고 조심스레 예상해본다. 한걸음 더 나아가 독자들로부터 이 책을 '부드럽게' 읽을 수 있었다는 평을 들을 수 있다면 번역자로서 더 바랄 것이 없을 것 같다.
마이크로서비스는 이제 국내에서도 많은 곳에서 실제로 도입했거나 도입하려는 움직임을 어렵지 않게 찾을 수 있게 됐다. 기존의 일체형 시스템 개발과 비교해보면 개념적으로는 마이크로서비스의 장점을 쉽게 이해할 수 있지만, 이를 실제로 구현해내려면 여러 가지 기술과 도구들의 도움이 필요하다.
이 책은 스프링 부트와 스프링 클라우드 기술을 바탕으로 검색, 예약, 체크인, 운임 등 여러 도메인으로 구성된 항공 운항 시스템을 마이크로서비스로 구현하는 과정을 다룬다.
마이크로서비스라는 큰 주제에 대해 부분별로 서로 동떨어진 예제를 보여주는 것이 아니라 일반적인 스프링 부트 웹 애플리케이션에서 시작해서 스프링 클라우드 기술을 적용해가면서 처음부터 끝까지 일관성 있게 하나의 대상 시스템을 클라우드 기반의 마이크로서비스 아키텍처로 구축해가는 전체 과정을 보여주는 것이 이 책의 특징이자 가장 큰 장점이라고 할 수 있다.
새로운 서비스의 구현 뿐만 아니라 이미 일체형 아키텍처로 구현된 프로젝트를 마이크로서비스로 전환하는 과정도 상세하게 다룬다. 전환 과정에서 마주치게 될 난관들과 해결 방법에서 얻을 수 있는 통찰만으로도 이 책을 사서 볼 만한 가치가 충분하다고 생각한다. 꼭 마이크로서비스가 아니더라도 분산 환경에서 발생할 수 있는 다양한 문제들과 그 해법에서 많은 것을 배울 수 있다.
또한 서비스 지향 아키텍처 및 12 요소 애플리케이션과의 비교를 통한 마이크로서비스 개념 정립, 데브옵스와의 관계, 마이크로서비스 개발에 적합한 문화와 방법론 등 이론적인 면에 있어서도 폭넓은 이야깃거리를 다루며, 화두를 던진다.
마이크로서비스 역량 모델의 개념적 틀을 반복적으로 제시하면서 역량 모델의 각 요소에 대한 구체적인 내용을 전개해가는 서술 방식 덕분에 마이크로서비스의 방대한 내용을 공부할 때 중심을 잡고 길을 잃지 않도록 도와준다.
복잡다단한 다양한 서비스를 구현하는 많은 개발자들이 이 책을 통해 마이크로서비스를 익히고 실무에 점진적으로 적용해가면서 개인 역량도 up, 생산성도 up, 야근 시간은 down되기를 진심으로 바란다.
이 책은 전체적인 흐름이 매우 균형적이고 매끄럽다는 장점이 있는 반면에 세부적인 문장 단위로 보면 어딘지 모르게 부드럽게 읽히지 않는 미묘한 부분들이 상당히 많아서, 번역하는 입장에서 그런 부분을 보완하는 데 정말 많은 공을 들였다.
책의 기본 내용과 흐름이 워낙 좋아서 독자들의 만족도도 높으리라고 조심스레 예상해본다. 한걸음 더 나아가 독자들로부터 이 책을 '부드럽게' 읽을 수 있었다는 평을 들을 수 있다면 번역자로서 더 바랄 것이 없을 것 같다.
세상에 처음 선보인 지는 오래됐지만 꽤 오랜 시간이 흐르고 나서야 사람들의 주목을 받고 현업에서 사용되는 기술들이 꽤 많습니다. 대표적으로 인공지능을 들 수 있을 것 같습니다. 등장한 지는 오래됐지만 주목받지 못하다가 인공지능을 뒷받침해줄 수 있는 하드웨어가 나오자 뒤늦게 세간의 주목을 받고 세상을 또 한 번 바꾸는 데 일등 공신이 되었습니다.
리액티브 프로그래밍도 비슷한 부류에 속하는 것 같습니다. 저도 이 책을 옮기면서 알게 된 사실인데 리액티브 프로그래밍은 무려 1970년대에 나온 프로그래밍 패러다임이라고 합니다. 적지 않은 시간 동안 큰 관심을 받지 못했지만, 클라이언트 쪽에서는 모바일 디바이스의 확산과 함께 이벤트를 중심으로 하는 리액티브 프로그래밍도 다시 관심을 받게 됐고, 서버 쪽에서는 모바일로부터의 트래픽 증가와 아마존 웹서비스AWS를 시작으로 클라우드 컴퓨팅이 보편화됨에 따라 서버의 자원 사용 효율이 서비스의 비용 경쟁력과 직결되기 시작하면서 리액티브 프로그래밍은 다시 관심을 받게 된 것 같습니다.
하지만 패러다임이 다르면 새로운 인식 모델을 필요로 하기 때문에 진입 장벽이 높을 수밖에 없습니다. 아직은 익숙하지 않은 리액티브 프로그래밍을 가장 효과적으로 배울 수 있게 만들기 위해, 저자 그렉 턴키스트는 '익숙한 문제 영역에 익숙하지 않은 기술을 사용하는 전략'을 선택했습니다. 리액티브 프로그래밍에 그다지 익숙하지 않은 제가 용기를 내서 이 책을 옮기기로 마음먹은 이유 또한, 이런 방식이라면 동일한 노력으로 개발자 생태계에 더 큰 보탬이 될 수 있겠다는 확신이 있었기 때문입니다.
리액티브 프로그래밍을 다룬 시중의 여러 책들은 아무래도 리액티브 프로그래밍 그 자체와 굉장히 다양한 연산자에 중점을 두는 경향이 강한 편입니다. 하지만 이 책은 애플리케이션 개발에 가장 널리 사용되는 스프링 부트를 기반으로, 장바구니 서비스 구현이라는 아주 현실적이고 익숙한 문제를 리액티브 프로그래밍 방식으로 해결해나가면서, 스프링 웹플럭스, 비동기 데이터 액세스, 하이퍼미디어, 개발자 도구, 테스트, API 문서화, 운영 지원, 보안 등 코어 비즈니스 외에 실무적으로 꼭 필요한 알짜 지식을 하나의 문맥에서 통합적으로 함께 다루고 있기에 학습 효과가 굉장히 높습니다. 거기에 덧붙여 메시징과 R소켓을 사용하는 비동기 프로그래밍을 연달아 배우고 비교하면서 새로운 지식을 익히는 재미도 정말 쏠쏠합니다.
처음에는 책 앞부분 리액티브 프로그래밍에 대한 설명이 너무 좋아서 번역을 시작했는데, 작업을 진행하다 보니 꼭 리액티브가 아니더라도 스프링 부트를 사용해서 개발/테스트/운영하는 실무에 도움이 될 만한 내용이 적절한 분량으로 꽤 다양하게 다뤄지고 있어서 이 책을 꼭 리액티브 책이라고 규정할 필요가 없다는 생각이 들었습니다. 번역 완료 후 교정 작업을 진행하면서도 역자의 입장보다 독자의 입장에서 여러 번 읽어보니, 이 책은 '스프링 부트의 중고급 주제를 다루는 내용이 대부분인데, 예제 코드를 흔치 않은 리액티브로 작성한 책'이라는 느낌을 받았습니다. 두 마리 토끼를 잡는 건 어려운 일이지만 이 책은 어쩌면 그 어려운 걸 해내는 책인지도 모르겠습니다.
언제나 모자람이 많아 아쉬움을 남기지만 이번에도 원서보다 나은 역서를 목표로 번역 작업을 했습니다. 그래서 리액티브 스트림을 큰 틀에서 먼저 이해할 수 있도록, 한국어판 특별 부록도 추가했습니다. 리액티브 프로그래밍 학습을 시작하기에 앞서, 부록에서 설명한 '리액티브 시퀀스 다이어그램'을 먼저 살펴보신다면, 수월하지만은 않은 리액티브 프로그래밍을 익히는 데 큰 도움이 될 것이라 생각합니다.
독자분들도 이 책을 통해 스프링 기반의 리액티브 프로그래밍을 가장 효율적으로 익히는 행운을 누리시길 바랍니다. 궁극적으로는 사실상 거의 다 외국 회사인 클라우드 서비스 제공자들에게 조금이라도 돈을 덜 지불하고 국부 유출을 막는 데 이 책이 앞장서기를 바라봅니다. :)
이젠 빅데이터를 활용하지 않는 분야가 없는 시대를 살고 있다고 해도 과언이 아닐 것 같습니다. 여러 분야에서 인간을 넘어서며 새로운 시대를 열 것으로 기대되는 인공 지능도 막대한 데이터가 없으면 학습을 할 수가 없습니다.
이 책은 빅데이터를 다루는 데 필요한 기본 개념부터, 실무에서 사용되는 다양한 컴포넌트의 장단점 비교, 여러 컴포넌트를 조합해서 구성하는 운영 환경 구축, 조직 구성까지 아우르는 방대한 내용을 다채로운 그림과 비교 표를 통해 압축해서 이해할 수 있게 도와줍니다. 그래서 이미 데이터 엔지니어링을 하고 있는 사람들에게는 이 책이 더 심도 있고 실무적인 지식의 보고가 될 수 있고, 데이터 엔지니어가 되고 싶어 하는 분들에게 이 책은 안정적인 출발선이 되어줄 것입니다.
모쪼록 이 책을 통해 많은 분이 한 단계 더 높이 올라설 수 있기를 바라며, 궁극적으로는 우리나라 개발자, 데이터 엔지니어들이 데이터가 원유가 되는 시대를 이끌어나가는 데 조금이라도 도움이 될 수 있다면 더 바랄 것이 없겠습니다.
- 오명운
마이크로서비스라는 말을 들어본 지 5년이 넘은 것 같습니다. 작게 나누어 빨리 만들고 빨리 실패하고 빨리 진화시키는 일이 말처럼 쉬운 일은 아니지만 분명한 장점이 있기 때문에 많은 시행 착오에도 불구하고 꾸준히 시도되고 있습니다. 이제는 여기에서 한걸음 더 나아가 배포 환경을 클라우드로 가져가면서 데브옵스로의 전환이 시작되고 있습니다. 이 책은 클라우드 네이티브 개발의 A to Z와 같은 책으로서 개념 정리 및 상세한 예제를 통해 여러분을 클라우드 네이티브 개발의 세계로 이끌어 줄 것입니다.
몇 년 전만 해도 눈길을 끌 만한 화려한 시각화는 대부분 플래시 기술로 만들어진 차트였다. 플래시는 결과물도 훌륭하고 생산성도 좋은 괜찮은 기술이었지만, 보안 문제, 모바일 적응 문제 등 여러 가지 이유로 이제는 시장에서 점차 퇴출되는 기술이 되고 말았다.
사라져가는 플래시의 빈 자리는 웹 표준인 HTML5가 채우고 있다. 더 구체적으로는 Canvas와 SVG(Scalable Vector Graphics)가 플래시를 대체하고 있다. 여느 기술과 마찬가지로 두 기술 역시 장단점을 함께 가지고 있어 어느 한쪽이 다른 한쪽보다 언제나 우월하다고 할 수는 없다.
D3.js는 데이터 기반 문서(D3, Data-Driven Documents)를 표방하는 SVG 기반의 시각화 기술이다. SVG는 HTML 페이지 안에서 다른 태그와 같은 방식으로 화면을 그리고, 이벤트를 처리할 수 있고, 벡터 기반 그래픽으로 더 나은 화질을 화면에 보여줄 수 있기 때문에 데이터 시각화 분야에 한해서는 Canvas에 비해 확실히 좋은 점이 많다. D3.js는 이런 SVG의 장점을 충분히 활용해서 고품질의 화려한 데이터 시각화를 쉽게 만들어낼 수 있는 다양한 API를 제공한다. D3.js의 홈페이지에 가보면 상상을 초월할 만큼 기묘하면서도 필요한 정보를 쉽게 파악할 수 있게 해 주는 수많은 예제를 볼 수 있다.
이 책은 이런 D3.js를 중심으로 프론트엔드 개발 환경 전반에 걸쳐 사용되는 다양한 도구를 함께 활용해서 실시간 데이터 시각화를 만들어가는 과정을 차근차근 알기 쉽게 보여준다. Node.js 환경에서의 프론트엔드 경험이 풍부한 개발자라면 D3.js를 실전 환경에 어떻게 도입해서 사용할 수 있는지에 대한 값진 정보를 얻을 수 있을 것이고, 프론트엔드 경험이 풍부하지 않은 개발자라면 D3.js에 더하여 Node.js를 중심으로 npm, 바우어(bower), 보우(vows), 그런트(grunt) 등 프론트엔드 개발 라이프 사이클 전반에 걸친 주요 도구에 대한 지식까지 덤으로 얻을 수 있을 것이다.
거의 십 년 만에 개발 현장에 돌아왔는데, 어쩌면 걱정보다는 많은 것들이 그리 달라지지 않고 그대로였다. 여전히 자바는 주류 언어이고, RDB(Relational Database)가 주류 DBMS를 이루고, 이클립스가 주류 IDE다. 변화가 적다는 것은 오랜만에 돌아온 사람에게는 다행한 일이었다.
하지만 역시나, 오래지 않아 큰 변화가 눈에 들어왔는데 정말로 의외였다. 예전에는 조금 하찮게까지 여기던 것이었는데, 지금은 정말 밝게 빛나고 있는 것이 있었으니, 바로 자바스크립트였다.
지금의 개발자들은 상상하기 어렵겠지만, 예전에는 웹이 지금처럼 동적이지 않았고, 그래서 자바스크립트는 브라우저상에서 폼의 입력 값을 검증하고, 서버에 요청을 날리는 이벤트 처리 정도만을 담당했다. 그래서 웹상에서 여러 가지 차트를 구현할 때도 고가의 전문 그래픽 라이브러리를 쓰지 않는 한 자바 기반의 라이브러리를 사용해 정적인 이미지 파일 형태로 만드는 수준에 머물렀다.
이제는 오히려 자바로 차트를 구현한다고 하면 '왜?', '자바스크립트로 안하고?'라는 반문에 바로 직면하게 될 정도로 수많은 자바스크립트 차트 라이브러리가 유료도 아닌 무료로, 그것도 오픈소스로 구현되어 있다.
D3.js는 그중에서도 가장 뛰어난 자바스크립트 기반의 오픈소스 데이터 시각화 라이브러리다. HTML 요소와 데이터를 연결해 SVG로 화려한 데이터 시각화를 만들어내고, 함수형 프로그래밍 개념을 도입해 적은 코드로 쉽게 사용할 수 있는 API를 제공해 줄 뿐 아니라, 수많은 예제를 통해 어떤 식으로 데이터 시각화를 만들어내는 것이 좋은지에 대한 가이드까지 제공해준다.
이 책을 통해 자바스크립트를 사용하는 많은 개발자들이 D3.js라는 호화 유람선을 타고 데이터 시각화라는 색다른 세계에서 마음껏 놀 수 있기를 기대한다.
SNS가 발달한 요즘 인터넷에서는 개발자에 대한 유머를 심심치 않게 볼 수 있다. 외국의 괴짜 개발자에 대한 이야기, 열악한 국내 소프트웨어 개발 환경에 한 자조적인 이야기 등 꽤나 다양한 주제에 대한 재미난 이야기를 들을 수 있는데, 그 재미를 관통하는 문맥을 한 가지만 고르라고 하면 '개발자의 자부심'을 꼽을 수 있을 것 같다.
코드 리뷰는 아무리 조심스럽게 한다고 할지라도, 자부심 높은 개발자들끼리 서로의 코드에 대해 다양한 의견을 나누다 보면 본질적인 목적보다 그 자부심에 대한 전쟁으로 번지는 경우가 많다. 특히나 활발한 토론보다, 스스로를 낮추며 적극적인 의견 개진을 삼가는 것이 미덕이라고 받아들여지는 국내 분위기상 코드 리뷰가 자리잡기는 더 어려울 수 있다고 본다.
자부심과 관계된 일이라면 직접적인 대면에 의한 의견을 나누는 것보다는 간접적인 방식으로 의견을 나누는 것이 훨씬 더 나은 차선책이 될 수 있다. 게릿 코드 리뷰는 웹을 통해 간접적인 방식으로 가장 구체적이고 실질적인 의견을 나눌 수 있는 환경을 제공해준다. 게릿 코드 리뷰를 프로젝트에서 잘 활용하면 개발자의 자부심을 지키면서도 소프트웨어의 품질을 향상시킬 수 있고, 개발자 스스로도 코드 리뷰를 통해 다양한 의견을 주고받으면서 발전할 수 있다.
이 책은 게릿 코드 리뷰의 소개와 실제 적용을 위한 다양한 환경에서의 설치 및 설정 방법뿐 아니라, 실제 코드 리뷰 활동 진행에 필요한 권장 작업 흐름과 개발자의 자부심을 해치지 않는 코드 리뷰 에티켓까지 실질적인 정보를 전달해주고 있다. 이 책을 통해 코드 리뷰가 소프트웨어 개발 과정에서 선택이 아닌 필수 활동으로 자리잡을 수 있기를 기대한다.
인터넷이 세상에 나온 지 그리 오래되지 않았을 때, 집 밖에 나가지 않고 인터넷만으로 얼마나 잘 지낼 수 있는지를 실험해보는 체험 예능 컨텐츠가 있었던 걸로 기억합니다. 하지만 이제 그런 예능은 아무도 보지 않을 것 같습니다. 스마트폰을 사용할 수 있다면 누구든 인터넷만으로 불편 없는 삶을 영위할 수 있다는 사실을 누구나 알고 있으니까요.
이처럼 손 안에서 몇 번의 스와이프와 클릭만으로 물건을 받아 사용할 수 있고 음식을 배달받아 먹으며, SNS를 통해 이 모든 것을 자랑까지 할 수 있게 된 편리한 세상을 돋보기로 계속 확대하면서 들여다보면 그 마디마디에 API가 숨어 있음을 확인할 수 있을 것입니다. API는 다양한 소프트웨어의 연결점 역할을 하면서 이 세상을 든든하게 떠받치고 있습니다.
소프트웨어의 연결점 역할을 하는 API는 소프트웨어 개발자들에게는 의사소통 수단으로 사용됩니다. 원활한 의사소통을 위해서는 주고받는 데이터 형식과 호출 방식을 정의하는 규격과 그에 대한 친절한 설명을 작성해야 합니다. 즉 API를 기술해야(describe) 합니다. OpenAPI는 HTTP 프로토콜 기반의 HTTP API를 기술하는 표준 명세이며, 표준이 있으면 자동화가 가능해지므로 OpenAPI를 통해 많은 작업을 자동화할 수 있습니다.
이 책은 OpenAPI를 사용해서 API 정의서를 기술하는 방법을 설명합니다. 그걸로 그쳤다면 그다지 재미없는 책이 될 수도 있었을 텐데, 작은 웹 서비스의 요구 사항을 정리하고, 사용자 스토리를 작성하고, 이를 바탕으로 비즈니스 도메인 모델을 설계하고, 이를 반영한 API를 설계하고, OpenAPI를 사용해서 API 정의서를 작성하고, 정의서를 바탕으로 자동화를 이용해 개발 생산성을 높이고, 시간이 지남에 따라 API를 매끄럽게 진화시켜 확장하는 방법까지 그야말로 모든 것을 다루고 있습니다.
API를 설계하고는 있지만 어쩌면 별다른 학습이나 기준 없이 편의성만을 생각하며 설계하고 구현하다가 나중에 확장하기 어렵게 되는 안타까운 일이 실무적으로 많이 발생하는데, 이 책에 나오는 모범 사례를 읽다 보면 자연스럽게 확장성 있는 API를 설계하는 데 필요한 지식을 얻을 수 있습니다.
이런 내용만으로도 유익할 텐데, 이 모든 과정을 지루하고 딱딱한 설명이 아니라 실제로 작은 프로젝트 팀이 구성되고 각자의 역할을 수행하며 난관에 부딪치고 해결하는 모습을 묘사하는 형식으로 전개하고 있어 흥미진진하고 재미있기까지 합니다. 게다가 예제를 위해 간혹 특정 기술을 사용하고 있기는 하지만 본질적으로 특정 도구에 종속되는 내용이 아니라서, 한마디로 API를 만들고 활용하는 개발자 모두에게 재미있고 유익한 책입니다.
이 책의 내용이 전반적으로 OpenAPI를 사용해 새로운 시스템을 설계하고 만들어 가는 과정을 보여주고 있어서 이미 만들어진 시스템에는 적용할 수 없는 건가라는 의문이 들 수도 있는데, 다행스럽게도 기존 시스템에도 적용할 방법이 있습니다. 국내에서 API 서버 개발에 가장 널리 사용되는 스프링 부트 기반의 API 서버라면 아주 간단한 설정과 애너테이션만으로도 스웨거 UI 사이트를 자동으로 만들 수 있습니다. 단순한 예제지만 실무적으로 꽤 큰 도움이 될 것이라 생각해서 한국어판 특별부록으로 추가했습니다.
코딩도 그렇지만 번역도 늘 볼 때마다 개선점이 눈에 보입니다. 아마 원서를 작성한 저자들도 마찬가지일 겁니다. 번역자는 일차적으로는 원서를 우리글로 옮기는 일을 하는 사람이지만, 훌륭한 번역자는 먼저 독자의 입장에서 원서를 읽고 불편했던 점을 찾아 개선하고 최종 독자에게는 더 나은 결과물을 보여주는 사람이라고 생각합니다. 이번에도 모자람이 있겠지만 훌륭한 번역자 흉내라도 내보고 싶어서 원서보다 나은 역서를 목표로 번역 작업을 했습니다. 모쪼록 독자분들이 읽어나가시면서 마치 애초부터 한글로 쓰여진 책인 것처럼 술술 읽으실 수 있기를 욕심내어 바라봅니다.