토요일, 2월 14, 2015

[일상다반사] (풀 스택 엔지니어로 이끌어주는) MEAN 스택을 사용한 모던 웹 개발 입문

지난번 일래스틱서치 관련 서적 출간 소식을 전한지도 한참 지난 느낌이다. 오늘은 요즘 관심이 집중되고 있는 풀 스택 엔지니어를 위한 멋진 도구인 MEAN(MongoDB, Express, AngularJS, Node.js) 스택 관련 번역서인 'MEAN 스택을 사용한 모던 웹 개발 입문'을 소개드린다. 현재 Yes 24에서 절찬 예약 판매 중이며, 내주 출간 예정이지만 설 연휴가 겹쳐 배송이 조금 지연되고 있다는 점을 양해해주시기 바란다.

이 책은 얇은 책 한 권에 MEAN 스택을 사용한 개발에 필요한 거의 모든 내용이 담겨 있기 때문에 늘 바쁜 업무로 인해 시간에 쫓기는 국내 개발자들이 부담없이 접근할 수 있다는 특징이 있다. 목차를 보면 알겠지만, 익스프레스를 사용한 노드 API 서버 구축(CRUD 중심), 바우어를 사용한 프론트엔드 의존성 관리와 AngularJS 앱 제작, 걸프를 사용한 빌드 자동화, 웹소켓을 사용한 푸시 통지, 종단간 테스트, 노드 서버 테스트, AngularJS 테스트에 이르기까지 풀 스택 엔지니어를 이끌어주는 주제를 망라하고 있다. 게다가 현업 Devops 개발자를 위해 PaaS 서버인 허로쿠와 (국내 개발자들 사이에 뜨고 있는) 디지털 오션에 배포하고 확장성을 높이는 방법까지 소개한다. 일단 이 책 한 권이면 MEAN을 맛보기에 전혀 무리가 없다는 생각이다. 물론 개별 주제에 대한 세부 지식이 필요할 경우 시중에 번역서와 저서가 꾸준하게 나오고 있으므로 부족한 부분을 채워나가면 된다.

저자가 상당히 꼼꼼하므로 깃허브 dickeyxxx/mean-sample에 본문에 나오는 모든 예제를 장별로 브랜치를 따서 제공하고(상당히 신선한 시도였다), 아예 허로쿠에 최종 예제를 배포했기에 책을 읽기 전에 미리 예습(?)하고 책을 읽으면서 복습할 수 있게 도와준다.

출간 기념으로 독자 여러분들께 드릴 선물을 하나 준비했다. 지난번 클린코드 복간 기념 발표 자료에 엄청난 성원을 보내주신 독자 여러분들께 다시 한번 감사하는 의미에서 지난 KELP 세미나 때 'MEAN 스택을 사용한 IoT 개발'이라는 주제로 발표한 자료를 슬라이드 셰어에 올려 공유해드린다. 올 겨울 4회에 걸친 숙명여자대학교/서일대학교 특강에서도 세미나 교재로 사용한 이 자료는 MEAN 설명과 함께 MEAN 스택을 사용해 최소한의 CRUD RESTful API 서버와 AngularJS 관리 프로그램을 만드는 예제(node-collector와 angular-lamp-app 참조)까지 제공하므로 오늘 소개하는 번역서와 더불어 함께 읽어보면 MEAN 입문에 많은 도움이 될 것이다.

그리고 보너스 소식 한 가지 더! 팩트 출판사에서 나온 'MEAN Web Development' 서적도 지금 한창 번역을 진행 중이므로 조만간 독자 여러분을 찾아뵐 예정이다. 'MEAN 스택을 사용한 모던 웹 개발 입문'을 읽고 나서 MEAN에 대해 더 깊은 내용을 알고 싶은 독자에게 적합하므로 기대하셔도 좋다(아마존 별 넷 반!).

아무쪼록 2015년 한 해도 많은 성원 부탁드리겠다. 설 연휴 모두 즐겁게 보내시기를 기원한다.

EOB

댓글 13개:

  1. 새해복 많이 받으세요...

    자기조직화 슬라이드 인상적입니다...ㅎㅎ


    답글삭제
    답글
    1. 예, 카멜레온 님도 새해복 많이 받으세요~~~ :)

      삭제
  2. 나오자마자 얼릉 구입한 독자입니다. 두번째 기대하겠습니다. ^,^

    답글삭제
    답글
    1. 예, 성원에 감사드립니다. 팩트 책도 작업이 거의 다 완료되었으며, 출간 일정을 당기게 출판사에 부탁하겠습니다. :)

      삭제
  3. 반쯤 보고있는데요.. 이해하기 꾀 힘드네요.

    마치 구글 번역기를 이용한 자막으로 영화를 보는 기분입니다.

    MEAN Web Development 은 어느정도 의역도 해서 번역 부탁드립니다.

    답글삭제
    답글
    1. 피드백 감사드립니다.

      혹시 문제가 되는 부분을 두세 곳 정도 특정해 구체적인 예를 들어주시면 많은 도움이 될 것 같습니다.

      해당 페이지에 대한 원서 PDF 페이지를 보내드리겠습니다. 원서 부분 - 번역서 부분 - 앞으로 이렇게 번역되면 좋겠다는 제안 형태로 정리해서 보내주시면 향후 번역 품질 개선에 많은 도움이 될 것 같습니다.

      삭제
    2. 오.. 두서없는 글에 관심 가져 주셔서 고맙습니다.

      원서를 보내주신다고 했는데요, 역자님의 오역이나 능력을 의심하는 것이 절대 아닙니다.

      다만 저 같은 입문자가 이해하기 쉽게 더욱더 힘써 달라는 의미에서 드린 글이었습니다.


      예를 들면,

      소스 작성할 때 책 전반에 걸쳐서 나오는 "종단점" 이라는 단어에 아직까지도 적응을 못 하고 있습니다.

      문맥상 전혀 문제 될 것이 없는 표현이지만 계속 네트워크 관련 용어로 의미를 착각하게 됩니다.

      [함수 내용 부분에..] 또는 [소스 시작과 끝에]라고 표현해 주셨으면 제 입장에선 더 이해하기 쉬웠을 겁니다.

      아니, 이해라는 단계 없이 다음 단계로 자연스럽게 집중할 수 있었을 겁니다.

      이건 온전히 제 개인적인 성향이겠지만요..


      비슷하게, server.js 정리 => /api/posts 분리 부분의

      [한 가지 해법으로 다음과 같이 app 인수를 기대하는 함수로 전체 코드를 감싼다.]

      와 같은 문장들이 있습니다. 이 문장을

      [한 가지 해법으로 다음과 같이 app 이라는 인수를 갖는 함수로 전체 코드를 감싼다.]

      라고 표현해 주셨으면 이해하기 쉬웠을 겁니다.

      별로 차이가 없고 또 고민할 이유가 전혀 없어 보이는 문장이지만 저는 5분 넘게 이해하려고

      애써야 했습니다. 자연스럽게 다음 챕터로 넘어가기도 힘들었고요.

      제가 구글 번역 말씀 드린 것도 저런 표현 때문이었을 겁니다.


      또하나, 요즘 비동기, NON-Blocking 방식의 기술들이 유행인 것 같습니다.

      관련된 기술인 node.js 나 angularjs 에서 Dependency Injection 을 "의존성 주입" 라는

      단어로 많이 사용하고 있는 것 같고요.

      처음엔 이해하기 힘들었는데 관련 서적과 인터넷 상에 글들을 많이 봐서

      이젠 "의존성 주입" 이란 단어가 가지고 있는 의미에 적응이 된 상태입니다.

      책 내용중에 express 모듈의 Router 객체를 사용해서 .use() 를 이용하는 설명이 있습니다.

      [심지어 .use() 메소드에 이름공간을 전달하는 방법으로 라우트 경로를 지정할 수도 있다.]

      처음에 이 "이름공간" 이 뭔지 전혀 감이 잡히지 않았습니다.

      다른 node.js 책을 같이 보고 있는터라 "namespace" 라는 것을 뒤늦게 알았고요.

      "의존성 주입", "namespace" 등등 많은 기술 용어들이 용어 자체로는

      의미를 갖지 못하고 있지만 주류가 되는 용어들은 분명 존재한다고 생각합니다.


      다시 말씀드리지만 온전히 제 개인적인 사례였고 바람입니다.

      번역서, 특히 기술서는

      작가가 무엇을 얘기를 하는지 정확하게 전달하는 것 못지않게

      독자가 어떻게 이해하고 받아들일까도 중요하다고 생각됩니다.

      마치 이유식 처럼요. 응애..


      좋은 기술 전달해 주셔서 고맙습니다.

      MEAN Web Development 많이 기대하고 있습니다.

      삭제
    3. 먼저 귀한 시간 내서 올려주신 피드백에 감사드립니다. 다음 출간될 MEAN 책에서는 처음 기술을 접하는 분들을 위해 몇 가지 사항을 보완하는 조치를 취하겠습니다.

      그리고 말씀 주신 [한 가지 해법으로 다음과 같이 app 인수를 기대하는 함수로 전체 코드를 감싼다.]는 부분의 원문을 보시면 다음과 같습니다.

      One solution would
      be to wrap the whole bit of code into a function that expects an app argument, like so:

      원서에 뜬금없어 보이는 expects라는 표현이 나온 이유는... 다음에 소개드리는 자바스크립트 function(객체) 명세를 보시면 아시겠지만, 실제로 인수를 _기대_하기 때문입니다. 함수 정의 상에서는 매개변수(parameter)를 가질지 몰라도 객체 정의 상에서는 인수(argument)를 기대합니다. 본문 코드를 보면 함수 선언이 아니라 일종의 객체 대입 형태('='에 주목하십시오)입니다.

      module.exports = function (app) {


      다음 두 내용을 비교해보시면 조금 이해가 쉬우실지 모르겠습니다.

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function

      본 번역서가 자바스크립트에 대한 전문 서적이 아니라 MEAN 관련 서적이다 보니까 아무래도 프로그래밍 언어상 미묘한 부분은 설명없이 넘어가는 경향이 있습니다.

      참고로 의역을 할 경우 이런 언어 정의 부분이 문제가 되어 다른 독자 민원이 발생할 가능성이 있습니다. 제가 프로그래밍 언어 관련 서적은 번역을 되도록 안 하려는 이유도 바로 여기에 있습니다(아무리 노력해도 제가 해당 프로그래밍 언어를 만든 사람이 아니므로 실수가 생기더라구요). T_T

      이런 점은 너그럽게 양해해주시면 감사하겠습니다.

      그리고 다음 팩트 MEAN 서적이 나오면 피드백에 감사드리는 의미에서 보내드리겠습니다. 실례되지 않으시면 우편물 받을 주소와 연락처를 제 이메일(jrogue 에뜨 gmail.com)로 보내주시면 출간 직후에 발송하겠습니다.

      다시 한번 귀중한(아주 구체적인) 피드백에 감사드립니다.

      삭제
    4. 세심한 답변 진심으로 고맙습니다. 진심입니다!

      객체 대입 형태 관련해서는 역시나 제 낮은 지식의 한계를 실감하게 되네요.

      그래도 친절하게 설명해 주시니 다는 아니더라도 어느 정도 감이 잡히는 것 같습니다.

      작은 의견도 신경 써 주셔서 고맙습니다.

      살면서 소소한 즐거움 중 하나가 인터넷 서점에서 책을 주문하는 것이라서

      정말 고맙지만 책 나오는 날 직접 구매하고 싶습니다. :)

      덕분에 블로그에 좋은 글, 정보들 많이 얻어 가고 있습니다.

      앞으로도 역자님의 번역 및 저술 활동 기대(expect) 하겠습니다!!

      yun@jeongman.com

      삭제
    5. 예, 독자 여러분들께서 주시는 성원과 피드백을 바탕으로 앞으로도 좋은 책과 좋은 블로그 글을 계속해서 선보일 수 있게 저도 불철주야 노력하겠습니다.

      항상 감사드립니다.

      삭제
  4. Mean Web Development 발간 예정이 궁금합니다!

    답글삭제
    답글
    1. 내주 월요일 출판사에 개략적인 일정을 확인해서 올려드리겠습니다.

      삭제
    2. 출판사 문의 결과 6월 정도로 예상하고 있습니다.

      삭제