Sunday, March 27, 2016

Node.js 서버 프로그래밍 배우기 가이드 (로드맵)


Node.js를 활용한 서버 프로그래밍을 위해 알아야 하는 것들.
        1. (기본) Javascript 언어
              -> 서버와 클라이언트에서 모두 사용된다.
              -> 참조 사이트
                      튜토리얼  https://developer.mozilla.org/ko/docs/Web/JavaScript/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
                      강의
                       http://math88.com.ne.kr/computer/js/JSmanual/
                      영어에 익숙하다면 W3CSchool이 체계적으로 정리되어 있다.
                       http://www.w3schools.com/js/

        2. (기본) Node.js 이해하기
                      Javascript를 서버에서 사용하기 위한 프레임워크라고 이해하면 된다.
                     (즉 클라이언트단에서만 사용되던 Javascript를 서버에서도 활용할 수 있도록 함)
                 
                      설치하기
                       https://nodejs.org/ko/

                      튜토리얼
                      http://www.nodebeginner.org/index-kr.html
                      http://pyrasis.com/nodejs/nodejs-HOWTO

         3. (기본) 자바 스크립트에서include/import 구현 규약
                     Java나 C++처럼 미리 작성된 코드를 include/import하여 사용할 수 있도록 함.
                     코드의 재활용(Reuse)을 가능하게 해준다.
                     대표적으로 CommonJS 규약과 AMD 규약이 있다.
                      -> node.js에서는 CommonJS 규약을 사용함.

                      참조: http://programmingsummaries.tistory.com/321

         4. (기본) npm -> Node.js용 모듈 관리자.
                     Node.js의 강점은 엄청나게 많은 모듈들이 작성되어 공개되어 있다는 것이다.
                     따라서 좋은 모듈을 찾아 사용함으로써 개발 시간을 크게 단축시킬 수 있다.
                   
                     npm 공식 홈페이지
                          https://www.npmjs.com/

                     npm 튜토리얼
                          위 node.js 기본 튜토리얼에 npm 사용법 설명이 포함되어 있습니다.
                          (별도 참조) https://blog.outsider.ne.kr/638

         5. (기본) Express -> Node.js용 웹 서버 모듈.
                     Node.js가 기본적으로 웹 서버를 제공하지만, middleware 방식으로 좀 더
                     사용하기 편하게 만든 웹 서버 프레임워크. 거의 대부분의 웹 서버가 이 모듈을
                     사용한다고 보면 됩니다.
   
                     참조
                            http://expressjs.com/ko/

          6. (응용) Passport -> Node.js용 범용 사용자 인증 모듈
                     이메일/암호 방식을 이용한 기본 사용자 인증, 페이스북이나 구글 계정을
                     연동한 인증등 거의 대부분의 인증 방식을 제공합니다.

                      참조
                            (한글) http://bcho.tistory.com/920
                            (영어) http://passportjs.org/

           7. (응용) Socket.io -> 서버/클라이언트간 실시간 정보 교환
                     서버와 클라이언트가 실시간으로 정보를 교환할 수 있도록 해준다. 예를 들면,
                     웹 기반 채팅 프로그램 같은 것을 쉽게 작성할 수 있다.

                      참조
                           (한글) http://bcho.tistory.com/896
                           (영어) http://socket.io/get-started/chat/

           8. (응용) MongoDB -> 서버용 NoSQL 데이터베이스
                      json과 유사한 형식으로 레코드를 저장하는 NoSQL 데이터베이스이다.
                      꽤 많이 사용되고 있다. node.js뿐만 아니라 다양한 개발 환경을 지원한다.
                   
                      참조
                           (한글) http://bcho.tistory.com/742
                                       http://daddycat.blogspot.kr/2013/02/mongodb-1.html
                           (영어) https://www.mongodb.org/

            9. (응용) mongoose
                     위 8. 항목의 mongodb를 좀 더 쉽게 사용하기 위한 node.js용 모듈
                     
                      참조.
                            (한글) http://devdoc.tistory.com/5
                                       http://bcho.tistory.com/890
                            (영어) http://mongoosejs.com/docs/

           10. (응용) Promise 프로토콜
                       node.js는 기본적으로 콜백(callback)을 기반으로 합니다.  단일 제어 흐름을
                       기본으로 하고, 시간이 걸리는 작업들은 백그라운드에서 처리후 콜백(callback)을
                       호출해주는 방식이죠. 여기에서 한가지 문제가 발생하는데, 좀 복잡한 작업을
                       처리하려고 하면 callback 함수들의 중첩이 감당할 수 없을 정도로 늘어납니다.

                       CallFunctionA(a, b, function(c, d) {
                                   ....
                                   CallFunctionB(e, f, function(g, h) {
                                               ....
                                              CallFunctionC(i, j, function(k, l) {
                                                         .....
                                              });
                                               ....
                                    });
                                    ....
                         });

                        이 경우, 코드를 읽는 것도 힘들어지고, 중복된 코드들이 다량으로 발생하는
                        문제점이 있습니다. (예를 들면, 예외 처리 코드들).

                        이 문제를 해결하기 위해 나온 것이 Promise라는 개념입니다.

                        참조
                               (한글) http://programmingsummaries.tistory.com/325
                                           http://www.html5rocks.com/ko/tutorials/es6/promises/
                               (영어) https://www.promisejs.org/