Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

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/