어떤 정보를 저장해야 한다는 요구사항을 받으면, 거의 본능적으로 데이터베이스를 떠올리게 된다. 물론 요즘에는 관계형 데이터베이스뿐만 아니라 NoSQL 계열의 데이터베이스도 일반화되고 있기에 선택의 폭이 넓어지긴 했지만, 다크호스가 하나 있다. 바로 검색 엔진이다. 물론 검색 엔진 자체만으로 기존 데이터베이스 관리 시스템에서 가능한 모든 작업을 그대로 수행하기는 어렵지만, 최소한 검색 측면에서 보여주는 유연함은 기존 관계형/NoSQL 계열 데이터베이스가 따라오기 어렵다는 생각이다. 검색 엔진을 사용할 경우 접두어/접미어 검색은 물론이고 구문 검색, 검색 키워드 사이의 연관성에 맞는 우선순위 조정, 어간 추출 검색 등을 자유롭게 수행할 수 있다. 여기에 보너스로 이런 복잡한 연산을 수행하는 경우에도 성능까지 보장한다. 이렇듯 텍스트 분석과 질의 능력이 뛰어나기에 전문(full text) 검색 엔진이라 부르는 이유가 바로 여기에 있다.
솔라는 검색과 관련된 기본 프레임워크를 제공하는 아파치 루씬을 기반으로 실제 기업에서 사용 가능한 완성된 검색 엔진을 목표로 삼고 있다. 루씬이 검색 관련 API를 제공하는 프레임워크라면 솔라는 루씬을 기반으로 REST와 유사한 API를 클라이언트에 제공하는 완성된 프로그램으로 아파치 톰캣이나 제티에 올려서 바로 시작 가능하다. 앞서 '기업'에서 사용 가능한 검색 엔진이라는 표현을 사용한 이유는 솔라가 관리자용 GUI 도구를 제공하며 레플리카와 분산 환경 구성을 위한 SolrCloud 기능을 제공하기 때문이다. 단독으로 동작하는 형태로는 수직 확장에 한계가 있기 마련이므로 고성능/고가용성을 달성하기 위해 솔라 4.0부터는 수평 확장이 가능한 아키텍처를 제공한다. 이런 좋은 특성으로 인해 상용 검색 엔진을 대신해 솔라를 채택한 사이트가 점점 늘어나고 있다. http://wiki.apache.org/solr/PublicServers를 살펴보면 솔라를 검색 엔진으로 채택한 곳은 일반 회사, 정부 기관, 오픈소스 프로젝트 등 분야를 가리지 않는다.
이 책은 솔라를 사용하는 과정에서 자주 발생하는 문제와 고민을 풀어주는 짧은 예제를 정리한 형태의 쿡북으로, 검색 엔진에 대한 기본 지식을 갖춘 개발자라면 재빨리 솔라 세상에 합류할 수 있는 여러 가지 힌트를 제공한다. 목차를 보면, 솔라 설정부터 시작해, 색인과 자료 분석, 질의 방법, 패싯 메커니즘 사용 방법을 소개하며, 다음으로 성능 개선, 클라우드 활용, 추가 기능 사용 방법, 실제 상황에서 자주 나오는 문제의 해법을 소개한다. 보다시피 솔라 운영과 활용, 그리고 문제 해결에 필요한 전 주기에 걸친 내용을 빠짐없이 다루고 있으므로, 아파치 솔라 공식 사이트(https://lucene.apache.org/solr/documentation.html)에서 제공하는 튜토리얼과 참조 가이드와 함께 읽으면 더욱 좋은 결과를 얻을 것이다.
이 책에서 다루는 아파치 솔라 버전은 4.0을 기준으로 하고 있지만, 번역 시점에서 가장 최신 버전은 4.7까지 나왔다. 여러 가지 다양한 기능이 추가되었고 버그도 수정됐으므로, 혹시 '책에 나오지는 않지만 솔라를 사용해 이런 작업도 가능할까?'라는 의문이 들 경우 릴리스 노트(https://lucene.apache.org/solr/4_7_0/changes/Changes.html)를 참조해 버전 4.0 이후 새로 추가된 기능 목록을 살펴보고 공식 참조 가이드에서 해당 부분을 읽어보기 바란다. 마지막으로, 한국 독자 여러분이 가장 관심이 많을 법한 솔라에서 한국어 처리와 관련된 정보를 정리해봤다. '검색에서 쓸 만한 오픈소스 한국어 형태소 분석기를 만들자!'라는 목표로 진행되고 있는 은전 한닢 프로젝트(http://eunjeon.blogspot.kr/2013/02/blog-post.html)와 루씬 KoreanAnalyzer 개발을 목표로 진행되고 있는 루씬 한글 분석기 오픈소스 프로젝트(http://sourceforge.net/projects/lucenekorean/)를 참고하면 된다. 온오프라인을 통틀어 솔라에 대한 정보가 부족한 상황에서 아무쪼록 이 책이 독자 여러분들께 조금이라도 도움이 되면 좋겠다.
예전에는 검색 엔진이라는 용어가 나오면 대부분 일반적인 관계형 데이터베이스 관리 시스템의 정형 자료 검색과 대비되는 개념으로서 문자열을 중심으로 하는 비정형 자료 검색을 지칭하는 경우가 많았다. 물론 여전히 이런 설명은 유효하지만 요즘에는 검색 엔진을 대용량 자료 처리, 분석, 시각화까지 엮어 더 큰 관점으로 보기 시작했다. 예를 들어, 애플리케이션 로그를 쌓을 경우 (크기와 형식 양쪽 측면에서) 비정형적인 특성으로 인해 기존 관계형 데이터베이스에 넣기가 곤란한 경우가 많다. Blob 형태로 넣었다고 하더라도 분석 과정에서 필요한 질의를 만들기도 어렵고 성능도 보장하지 못한다. 하지만, 요즘 나온 신형 검색 엔진들은 이런 작업을 손쉽게 처리해주는 다양한 기능을 제공하고 있다. 따라서, 원래부터 존재했던 비정형 텍스트 분석과 질의 능력에 대용량 자료 처리와 분석이라는 강점이 더해져 검색 엔진은 엔터프라이즈에서 유용하게 사용할 수 있는 기술로 발전해왔다.
일래스틱서치는 솔라와 마찬가지로, 검색과 관련된 기본 프레임워크를 제공하는 아파치 루씬을 기반으로 실제 기업에서 사용 가능한 완성된 검색 엔진을 목표로 삼고 있다. 아파치 루씬이 검색 관련 API를 제공하는 프레임워크라면 일래스틱서치는 루씬을 기반으로 검색 가능한 API(또는 DSL)를 클라이언트에 제공하는 완성된 프로그램으로 복잡한 설치 과정이나 프로그래밍 작업 없이도 바로 사용할 수 있다. 특히 일래스틱서치의 기본 구성값은 균형이 잘 잡혀 있기 때문에 기존 관계형 데이터베이스나 NoSQL 계열 프로그램에 비해 진입 장벽이 무척 낮다. 이 책의 1장만 읽으면 시스템 관리자가 아니더라도 누구나 바로 설치해서 사용할 수 있는 수준이다. 그렇다고 해서 엔터프라이즈 지원이 결코 약하지 않다. 백업을 위한 스냅샷 기능, 샤드와 레플리카로 대표되는 수평 확장 기능, 다양한 관리용 API 등을 비롯해 패싯과 집계로 대표되는 자료 분석 기능은 일래스틱서치를 엔터프라이즈급으로 올려놓았다. 공식 홈페이지에 올라온 사례연구(http://www.elasticsearch.org/case-studies/)를 살펴보면 많은 회사들이 일래스틱서치를 자사의 검색 엔진 엔진으로 채택한 이유가 나온다.
아파치 솔라에 관심이 많은 개발자라면 필연적으로 일래스틱서치와 솔라를 비교하고 싶은 욕구가 생길 것이다. 다행스럽게도, 'Apache Solr vs ElasticSearch'(http://solr-vs-elasticsearch.com/)라는 사이트에서 아파치 솔라와 일래스틱서치의 기능을 API, 색인, 검색, 플러그인, 분산 측면으로 나눠 분석하고 있다. 기존에 솔라를 사용해본 경험이 있다면 기능 비교부터 출발하면 훨씬 이해하기 쉬울 것이다. 물론 솔라나 일래스틱서치 양쪽을 두고 고민하는 경우에도 선택을 위해 비교 내용을 참고하면 좋겠다.
이 책은 일래스틱서치를 제대로 사용하기 위해 필요한 기본 지식을 충실히 담고 있다. 검색 엔진에 대한 최소한의 기본 지식을 갖춘 개발자라면 이 책을 읽는 과정에서 어떠한 불편함도 느끼지 않게 검색 엔진의 기초 이론부터 자료 색인, 질의, 자료 분석, 패싯과 집계 메커니즘 등을 설명하며, 지리위치 색인과 예상 검색, 제안 기능과 같은 고급 기능도 설명한다. 물론 가장 마지막에는 클러스터 구성과 관리 기법을 설명하므로, 일래스틱서치를 실제 배포하고 운영하는 과정에서 필요한 지식도 빼놓지 않는다. 일래스틱서치 공식 사이트(http://www.elasticsearch.org/guide/)에서 제공하는 튜토리얼과 참조 가이드를 함께 읽으면 더욱 좋은 결과를 얻을 것이다.
이 책에서 다루는 일래스틱서치 버전은 1.0GA를 기준으로 하고 있지만, 번역 시점에서 가장 최신 버전은 1.2.0까지 나왔다. 여러 가지 다양한 기능이 추가되었고 버그도 수정되었으므로, 혹시 "책에 나오지는 않지만 일래스틱서치를 사용해 이런 작업도 가능할까?"라는 의문이 들 경우 다운로드 페이지(http://www.elasticsearch.org/downloads/)에서 제공하는 릴리스 노트를 참조해 버전 1.0 이후 새로 추가된 기능 목록을 살펴보고 공식 튜토리얼과 참조 가이드에서 해당 부분을 읽어보길 바란다. 온오프라인을 통틀어 일래스틱서치에 대한 정보가 부족한 상황에서 아무쪼록 이 책이 독자 여러분들께 조금이라도 도움이 되면 좋겠다.
요즘 한창 사람들의 관심이 집중되고 있는 다재다능한 풀스택 엔지니어가 되려면 프론트엔드부터 백엔드까지 전반적인 기술을 아우르는 방대한 주제를 이해해야 하므로 폭넓게 학습해야 한다. 기술은 계속 발전하고 있으며 알아야 할 내용은 끝이 없기 때문에 어떻게 시작할지 막막하기만 한 것이 현실이다. 다행히 MEAN이라는 스택이 등장해서 개발자들에게 한 가닥 희망을 주고 있다. MEAN은 MongoDB, Express, AngularJS, Node.js의 첫 글자를 따서 만들었으며, 과거 웹 개발에 유명했던 LAMP(Linux, Apache, MySQL, PHP(또는 Perl))에 비견할만한 지위를 갖추고 있다. MEAN의 가장 중요한 특성은 바로 모든 구성 요소가 공통 언어로 자바스크립트를 사용한다는 점이다. 일단 자바스크립트만 알고 있으면, 프론트엔드부터 백엔드까지 상이한 프로그래밍 언어 문제로 곤란을 겪는 일은 없을 것이다.
여러 구성 요소에서 프로그래밍 언어가 통일되어 있더라도 모든 것을 처음부터 다시 쌓아 올려야 한다면 문제가 될 것이다. 다행히도 MEAN은 노드에서 기본으로 제공하는 NPM이라는 백엔드 패키지 관리자와 바우어(Bower)라는 프론트엔드 패키지 관리자를 제공해 외부 라이브러리를 자유롭게 활용하게 도와준다. MEAN용으로 개발된 엄청나게 많은 오픈소스 개발 도구와 라이브러리가 존재하므로, 개발자를 든든하게 뒷받침해준다. 매번 처음부터 새로 만들지 않고 검증된 기성 부품을 잘 활용해 원하는 서비스와 제품을 만들면 되기 때문에 생산성이 엄청나게 높아진다. 모든 것을 최대한 단순하게 가져간다는 노드의 철학은 작은 것이 아름답다는 유닉스의 철학과 일맥 상통하므로 다양한 유틸리티와 라이브러리를 연결하는 과정에서 전체는 부분의 합보다 크다는 상승 작용을 느낄 수 있을 것이다.
이 책은 자바스크립트와 MEAN 스택에 대한 기본 지식이 있는 개발자에게 적합한 구성을 택하고 있다. 먼저 MEAN을 구성하는 개별 구성 요소를 공략한다. 노드, 익스프레스 웹 애플리케이션, MongoDB, AngularJS를 사용한 개발 방식을 소개한다. 또한 익스프레스 애플리케이션과 MongoDB를 연결하는 몽구스와 실제 상용 환경에서 요구하는 사용자 인증 관리와 소셜 로그인을 위한 패스포트에 대해 추가적으로 설명한다. 그러고 나서 앞서 설명한 개별 구성 요소를 모두 연결해 CRUD 모듈 생성 방법을 설명한다. 이런 서술 방식은 MEAN 개별 구성 요소에 대한 진입 장벽을 낮춘 다음에 실제로 여러 구성 요소를 합치기 때문에 MEAN 스택 학습 시간을 상당히 줄여주는 효과가 있다. 전반적인 개발 역량을 끌어올린 다음에 Socket.io를 사용한 실시간 기능 추가와 테스트, 자동화, 디버깅으로 마무리한다. 웹 브라우저 단에서 데이터베이스 단까지 전체를 다루며, 구현에서 테스트에 이르는 개발 과정을 아우르기 때문에 이 책 한 권이면 MEAN 스택을 단기간에 독파할 수 있을 것이다.
이 책에 앞서 독자 여러분들께 선보인 『MEAN 스택을 사용한 모던 웹 개발 입문』(에이콘출판, 2015)과 함께 읽어보면 도움이 될 것이다. 이 책과는 조금 다른 관점으로 MEAN을 바라볼 수 있을 것이다. 아무쪼록 MEAN 스택을 사용해 생산성을 높이고 성능과 확장성도 덤으로 얻는 좋은 성과를 얻기 바란다. 독자 여러분의 행운을 빈다!
임베디드 분야에서 리눅스 사용은 이제 특별하거나 신기한 현상이 아니라 일상이 되어버렸다. 라우터와 유무선 공유기부터 시작해 IPTV와 케이블 셋톱박스를 거쳐 안드로이드 마크가 찍힌 휴대폰에 이르기까지, 리눅스 커널은 사실상 가전용 임베디드 세상을 지배하는 운영체제로 발전해왔다. 하지만 일반 애플리케이션과는 달리 리눅스 디바이스 드라이버는 늘 신비에 쌓인 전문가만의 전유물로 여겨져 왔다. 아주 까다로운 리눅스 커널은 물론이고 디바이스를 둘러싼 표준과 기반 하드웨어 특성을 알아야 하기 때문에 임베디드 리눅스를 제대로 익히기란 쉽지 않았다.
물론 원시 코드가 공개된 리눅스 특성으로 인해 다른 독점 운영체제와는 달리 리눅스 커널 내부는 물론이고 리눅스 커널을 구성하는 디바이스 드라이버에 자유롭게 접근할 수 있다. 하지만 커널과 디바이스 드라이버를 다루는 책은 많지 않으며, 임베디드 리눅스 특성에 맞춰 이를 다루는 책은 더욱 찾아보기 어렵다. 다행히 프렌티스 홀 오픈소스 개발 시리즈로 나온 이 책은 다양한 리눅스 디바이스 드라이버 유형을 설명하므로 임베디드 리눅스 개발자에게 숨통을 틔어주고 있다. 현재 진행 중인 프로젝트에 딱맞는 해법을 제시하지는 못하겠지만 이 책에서 다루는 다양한 디바이스 드라이버 유형은 무작정 임베디드 리눅스 프로젝트에 뛰어 들기 전에 어느 정도 안정적인 출발점을 제시하기에 충분한 정보를 제공한다고 보면 틀림없다.
이 책은 디바이스 드라이버 유형마다 간단한 기술 소개, 관련된 리눅스 커널 구조체와 함수 소개, 실제로 동작하는 예제 소개와 설명, 주의 사항과 응용 방안을 제시하므로 임베디드 리눅스에 처음 뛰어든 C를 잘 아는 시스템 개발자를 위한 입문서는 물론이고, 실전에 바로 적용 가능한 지침서로서도 손색이 없다. 물론 리눅스 커널을 디바이스 드라이버 관점에서 이해하고 싶은 리눅스 커널 호사가에게도 흥미로운 생각거리를 던져줄 것이다. 책의 특성상 예제가 많이 나오므로 원시 코드가 필요하다면 http://www.elinuxdd.com/를 방문하기 바란다. 아무쪼록 이 책이 임베디드 리눅스 디바이스 드라이버 개발 과정에 도움이 되기를 바란다.
학창 시절 1990년대 초반에 워크스테이션이 가득 찬 연구실에서 근무할 때, 모든 서버 전면에는 이름과 IP 주소가 적힌 명패가 붙어 있었다. 만화 영화 주인공, 행성, 보석 등에서 아이디어를 얻은 멋진 서버 이름은 심지어 다른 학교에서도 알고 있을 정도였다(아, 그 당시는 겁도 없이 공인 IP로 인터넷에 접속하던 시절이라서 DNS 이름이 서버의 진짜 별명이었다). 장애가 발생하면 서버로 달려가서 하드웨어에는 문제가 없는지, 경우에 따라서는 리부팅이 필요한지 꼼꼼하게 콘솔 앞에서 진단하고 문제를 해소한 다음에 결과 보고서의 가장 상단에 문제가 된 서버 이름을 기입했다.
강산이 두 번 바뀌어 2010년 이후 퍼블릭 클라우드가 본격적으로 시장을 공략하기 시작하면서 서버 관리자도, 서버 이름도 소리소문없이 사라지기 시작했다. 누구나(관리는 클라우드 업체에서 담당하므로 실제 업무를 맡은 개발자일 확률이 높겠지만) 클라우드 콘솔에 들어가서 버튼만 누르면 인스턴스가 바로 만들어지고 사라지는 상황에서 그까짓 이름 따위가 무슨 소용이 있겠는가? 인스턴스 ID만 알면 API로 서버를 관리할 수 있기에 서버 이름은 물론이고 심지어 클라우드 데이터 센터의 물리적인 위치나 표준 시간대에 맞춘 운영 시간도 관심에서 멀어지기 시작했다. 어차피 인스턴스는 SLA 범위 내에서 멈춰버리거나 심지어 다른 물리 서버로 옮겨지는 상황이 불가피하므로 애지중지 관리할 필요가 없다.
2013년 글렌 베리(Glenn Berry)가 SQLPASS 2013 컨퍼런스에서 'Scaling SQL Server 2012'라는 제목으로 발표하는 중에 '수직 확장 대 수평 확장'이라는 내용을 소개하면서, 수직 확장은 서버를 애완 동물처럼 취급하는 반면에 수평 확장은 가축으로 취급한다는 마이크로소프트 빌 베이커가 설명한 비유를 보고 들은 사람들은 엄청난 충격에 휩싸인다. 전통적인 서버는 이름을 붙이고 고장이 나지 않은지 계속 살피며 문제가 생기면 건강하게 치료하지만, 클라우드 네이티브 서버는 숫자만 세고 있다가 아프면 바로 죽여버린다는 상당히 비정한 설명 때문이었다. 클라우드 환경을 접하고 나서 문화적인 충격을 느꼈다면 아마 어느 랙의 어느 하드웨어 서버에 들어있는지도 모르는 수많은 인스턴스들의 익명성 때문인지도 모르겠다.
엄청나게 빠른 속도로 사회가 바뀌고 있으므로 사업의 승부는 속도와 확장성에 달려 있고, 이를 위해 컴퓨팅 환경을 뒷받침하는 인프라스트럭처도 발전해왔다. '클라우드 네이티브 인프라스트럭처'는 바로 이런 시대의 변화에 부응하는 최신 기술이며, 아키텍처 수립부터 설계와 구현을 거쳐 테스트에 이르기까지 소프트웨어 엔지니어링 부문에서 여러 가지 개념을 빌려와 인프라스트럭처를 소프트웨어처럼 취급할 수 있게 만든다. 명세를 문서화하고 싶은가? 코드로 만들면 된다. 명세를 실 환경에 반영하고 싶은가? 코드를 빌드해서 수행하면 된다. 이력을 관리하고 싶은가? 코드이므로 깃과 같은 분산 관리 시스템으로 추적하면 된다. 제대로 동작하는지 테스트하고 싶은가? 코드이므로 단위 테스트와 통합 테스트를 돌리면 된다.
하지만 현실로 돌아와 보면 상황은 생각보다 훨씬 더 복잡하다. 퍼블릭 클라우드, 가상화 기술, 마이크로서비스, 셰프나 퍼핏과 같은 구성 관리 도구, 컨테이너, 쿠버네티스와 같은 오케스트레이터, Go와 같은 최신 프로그래밍 언어, 스프링 프레임워크와 같은 클라우드 네이티브 프레임워크를 비롯해 여러 가지 기술들이 현기증이 들 정도로 사방에서 쏟아져 나오고 있지만, 이런 기술들을 무작정 도입해 사용한다고 해서 클라우드 네이티브가 되지는 않는다는 사실이 클라우드로 이전하는 가장 큰 걸림돌이 되고 있다.
어떤 상황에서도 사업을 최대로 지탱하는 인프라스트럭처를 고도화하고 싶은 우리에게는 클라우드 애플리케이션의 새로운 시대를 연 '12요소 애플리케이션'과 같은 지침이 필요하며, 다행스럽게도 바로 이 책이 클라우드 네이티브한 인프라스트럭처의 아키텍처를 수립하고 설계하는 데 도움이 되는 패턴과 지침을 제공한다. 이 책은 우선 클라우드 네이티브 인프라스트럭처 개요부터 클라우드 네이티브 도입 시점, 클라우드 네이티브 배포 방식의 진화를 다루고, 본론으로 들어가서 인프라스트럭처 애플리케이션 설계와 개발과 테스트와 관리 방법을 다룬다. 마지막으로 애플리케이션을 보호하고 클라우드 네이티브 인프라스트럭처를 구현하는 내용으로 마무리한다. 네트워크 회복성을 위한 패턴과 락인에 대한 조언, 그리고 박스(Box) 사의 쿠버네티스 도입을 정리한 부록도 실용적인 도움을 준다.
모자이크와 넷스케이프로 인터넷 업계의 지형도를 완전히 바꾸는 데 성공한 마크 앤드리슨(Marc Andreessen)은 2011년 8월 무렵 <월스트리트 저널>에 기고한 "왜 소프트웨어가 세상을 먹어치우고 있는가?"라는 글에서 제조업은 물론이고 기존 소프트웨어 대기업까지 새로운 소프트웨어의 물결에 휩쓸려 경쟁력이 급격하게 떨어지고 있는 현실을 정확하게 분석했다. 데이터 센터에서 상면을 빌리고 랙을 설치하고 전용선을 끌어들이며 서버를 구매하고 CD로 소프트웨어를 설치하는 시대는 서서히 저물어가고 있다. 업계 전체가 소프트웨어로 인해 흔들리는 판국에 소프트웨어를 움직이는 인프라스트럭처가 소프트웨어가 되지 말라는 법이 있는가?
이 책 본문에서 인프라스트럭처가 애플리케이션이며, 다시 애플리케이션이 인프라스트럭처가 된다는 설명을 읽으면서 장자의 '호접지몽'이 떠올랐다. 영화 <매트릭스>의 가상 세계 만큼이나 클라우드 세계는 거의 모든 것이 소프트웨어로 움직이므로 너무나도 적절한 설명이 아닐까 싶다. 이 책을 통해 클라우드 네이티브 인프라스트럭처 세상에 들어오신 독자 여러분을 환영한다.
자바스크립트 하면 웹브라우저부터 떠올리기 마련이다. 하지만 점점 영역을 넓혀서 요즘 자바스크립트는 임베디드 장비부터 애플리케이션 서버와 데이터베이스에 이르기까지 다양한 분야에서 맹활약 중이다. 일례로 TESSEL(http://www.tessel.io)은 자바스크립트를 구동하는 마이크로컨트롤러이며 노드 호환이 가능한 개발 환경을 갖춰 npm 패키지 형태로 다양한 디바이스 프로그래밍을 가능하게 만든다.
bonescript(http://beagleboard.org/support/bonescript)는 비글본(Beaglebone) 보드에 최적화된 Node.js 라이브러리로 아두이노(Arduino) 함수 호출 방식으로 임베디드 프로그램을 작성하게 도와준다. 풀 스택(full stack)을 기치로 내걸어 웹부터 데이터베이스까지 모든 프로그래밍을 자바스크립트로 가능하게 만들었으며, 이제 임베디드 단말까지 자바스크립트로 프로그래밍이 가능한 세상이 도래했다. 이런 변화는 개발자에게 상당히 큰 의미를 부여한다. 과거에는 임베디드 프로그램은 C, 웹 서비스/애플리케이션 개발은 PHP나 루비 등의 인터프리터 또는 기업용 환경에 적합한 자바, 웹 브라우저 프로그래밍은 자바스크립트(그리고 HTML5와 CSS), 데이터베이스 질의는 SQL 등으로 명확하게 나뉘어졌지만 이제는 모두 자바스크립트로 가능하기 때문이다. C와 비교할 수 없는 범용성을 자랑하는 자바스크립트라는 언어가 등장했으므로 프로그래밍 언어 학습에 따른 부담이 줄어들었다.
자, 그렇다면 서비스 개발자 입장에서 편재적인 자바스크립트를 사용해 웹브라우저부터 애플리케이션 서버를 거쳐 데이터베이스에 이르기까지 빠른 시간 내에 애플리케이션을 개발하려면 어떻게 해야 할까? 대답은 바로 MEAN이다. MEAN은 몽고DB(MongoDB), 익스프레스(Express), AngularJS, 노드(Node.js)의 첫 글자를 따서 만들었으며, 과거 웹 개발에 유명했던 LAMP(리눅스Linux, 아파치Apache, MySQL, PHP(또는 펄Perl))에 비견할만한 지위를 갖추고 있다. MEAN과 LAMP의 공통점은 구성 요소가 모두 오픈소스라는 점이고 차이점은 여러 가지 언어가 복잡하게 얽힌 LAMP와 달리 MEAN에서는 처음부터 끝까지 자바스크립트만 사용해서 프로그램이 가능하다는 점이다.
이 책은 (자바스크립트에 대한 기초 지식은 어느 정도 알고 있지만) MEAN 스택을 처음 접하는 사람에게 적합한 구성을 택하고 있다. 트위터 피드와 유사한 소셜 앱을 구축하려는 큰 목표를 중심으로 단계별로 글 쓰기, 글 읽기, 데이터베이스 설정, 인증과 로그인, 웹소켓으로
상호 대화성 높이기, NPM(서버 단)과 바우어(클라이언트 단) 패키지 관리 시스템을 사용한 의존성 관리, 빌드 자동화, 통합 테스트, 서버와 클라이언트 단위 테스트 방법을 설명한다. 그리고 마지막에는 PaaS와 IaaS에 배포하는 방법으로 마무리한다. 웹 브라우저 단에서 데이터베이스 단까지 전체를 다룰 뿐만 아니라, 구현부터 배포에 이르기까지 반드시 필요한 다양한 도구와 기법을 설명하고 있으므로 빠른 시간 내에 자바스크립트를 사용한 서버와 클라이언트 구현이 필요한 개발자에게 많은 도움이 될 것으로 확신한다.
이 책을 읽고 나서 MEAN에 대한 감을 잡으면 각각의 기술에 대해 세부적으로 파고들 필요가 있다. 비동기식 프로그래밍, 사건 구동 방식, MVVM(Model-View-ViewModel), 의존성 주입, 의존성 관리와 같은 복잡한 개념으로 인해 학습 곡선이 상당히 가파르기 때문이다. 다행스럽게도 최근에는 노드뿐만 아니라 AngularJS에 대한 저서와 번역서들도 많이 출간되고 있기 때문에 필요한 정보를 얻기에 어려움이 없을 것이다. 아무쪼록 MEAN 스택을 사용해 생산성을 높이고 성능과 확장성도 덤으로 얻는 좋은 성과를 얻기 바란다. 새로운 개발 세상에 온 독자 여러분을 환영한다!