Inspired World

Node.js 를 이용한 웹 개발 - Express Framework 본문

Node.js

Node.js 를 이용한 웹 개발 - Express Framework

InspiredJW 2012. 2. 1. 01:33
Node.js 는 단순히 웹서버로써 또 서버 앞 단에 두는 Reverse Proxy로써사용하기에도 좋지만

NginxApache 와 같은 웹서버

PHP, Java, C#, Python, Ruby 등을 연결해서 사용해야 하는 기존의 방법과는 달리

Node.js 는 자체적으로 자신이 웹서버이면서 로직도 담당할 수 있습니다!

1어시 1골
이렇게 1 어시1 골을 혼자 다 하는 것이나 다름없죠 ㅎㅎ

 


물론 예전 포스팅 글에서 밝혔듯이

"Ryan Dahl추천사항으로 아직 발견되지 않은 Buffer Overflow 으로 인해 발생할 수 있는 취약점을 Nginx 를 앞에 Reverse Proxy로 둠으로써 완벽하진 않지만 어느정도 가릴 수(?) 있다고 합니다. 또 Static File( CSS, JavaScript, Image, Icon, Static HTML 등)을 더 잘 Serving 하기 때문이기도 하구요."

 
간략하게 설명하자면 Forward Proxy는 이 프록시 서버가 요청을 다른 서버로 단순히 리다이렉트 해주는 것이고
Reverse Proxy는 특정 서버의 요청을 가져와  이 프록시 서버의 도메인이나 IP에서 보여주는 것입니다. 


그럼 Node.js로 웹사이트/웹어플리케이션을 어떻게 만들까요?

Node.js에 내장된 fs (파일 입출력) 모듈, http 모듈 등이 있는데 이것으로 할 수 있는 구현은

단순한 static file로만 구성된 웹사이트 정도가능합니다.

그럼 이런 단순한 사이트 그 이상이 되려면 뭐가 필요할까요?

순수 HTTP로 할 수 있는 것은 많지 않습니다


바로 CookieSession 입니다!

 

쿠키와 세션이 동작하는 방식


2009년에 태어나 아직 황량한 Node.js 세계에서 웹 개발자로써 이런 기능을 하나하나 다 구현하려면

직접 파일 입출력과 http 요청을 주무르고 직접 모듈을 만들며 해나가야 합니다.

하지만 지금은 2012년. 나름 3년차에 접어들고 있는 시점이다 보니 많은 모듈들이 생겨났고 

새로운 영역이고 이 쪽 사람들 특성상 다소 열정적이고 진보적인 성향을 지닌 프로그래머들이 많습니다.

따라서 Github에 가보면 Github의 모토답게 Social Coding!



활발하게 오픈소스 커뮤니티가 형성되어 이미 다수의, 특히 최신 경향에 알맞는 모듈이 많이 있는데 이 중에는

웹소켓 및 기타 기술을 활용한 실시간 소켓 통신이나 여러 SNS 아이디를 통한 로그인 지원,

Cassandra, MongoDB, Redis, CouchDB 등의 NoSQL 계열 DB 드라이버 등이 이미 활발히 개발되고 있거나

개발되었고 앞으로도 계속 생기는 추세입니다.

이 중에 상당히 큰 기여를 한 것은 connect 모듈이라고 생각합니다.

이 모듈은 url을 변수로 쭉쭉 뽑아주는 Parser도 있고 Cookie와 Session을 담당하는 함수

csrf 방지 함수도 있습니다.

사실 http 요청마다 http 헤더의 _csrf 값에 매번 다른 hash값을 설정해주고 get요청이 아닌 요청인 경우에 parameter에 _csrf 값이 http 헤더에 있는 _csrf 값과 일치하는지 확인된 경우만 받아들이는 처리해주는 것이 다입니다

또 이 connect 모듈을 기반으로 Express라는 프레임워크를 만들었는데요.

저는 express를 좋아하는데 그 이유는 가볍고 확장성이 좋기 때문입니다.

프레임워크 자체가 기능이 많고 그 틀 안에서 프레임워크를 공부(?) 해야하는 것보다

정말 필요한 기능만 들어있고 여러가지 미들웨어를 개발하거나 오픈소스 미들웨어를 import 하기 쉽게

해 놓아서 많은 사람들의 코딩 스타일, 취향, 필요에 따라

모듈, 미들웨어, 템플릿 엔진 등을 마음대로 정해서 쓸 수 있는 것이 매력인 것 같습니다.

Express의 기본 템플릿 엔진은 Jade인데 저는 개인적으로 Django의 템플릿 엔진 스타일을 너무 좋아해서 현재

Swig라는 템플릿 엔진을 Express와 함께 사용하고 있습니다.

개인적으로 HTML, CSS, JavaScript의 기본 문법까지도 바꿔쓰는 것은 선호하지 않기 때문에

Jade, Stylus, CoffeeScript는 선호하지 않습니다만 워낙 이쪽 사람들이 그런 것들을 도전하고 즐기기 때문에 은근

많이들 쓰는 편이지만 중요한 건 본인 입맛에 맞게 쓰는 것이 좋습니다.

예를들면 저는 Python 계열에서 Django 보다는 Web2pyTornado와 같이 심플하고 여러가지 

모듈을 import에서 쓰는 스타일을 선호합니다. 이유는 제 스타일도 있지만 불필요하게 무거운 프레임워크

쓰기 보다는 매번 상황에 알맞는 모듈이나 미들웨어를 사용해서 무게로 경량화하고 필요한 모듈들을 마음껏 입맛에

맞게 붙여 확장성이 뛰어난 특성이 있기 때문입니다. 

백문이불여일견입니다.

사실 아무리 많은 블로그 포스팅이나 기사를 보게 되더라도 뭐가 어떻게 왜 좋은지 나쁜지 가늠은 할 수 있어도

그 진상을 진정 알기 어렵습니다.

직접 부딪히며 해보는 것이 가장 많이 배우고 이해도 가장 잘 가는 법입니다.

Express에 대한 Documentation이나 설명을 가장 잘해놓은 것 아무래도 원사이트인 

http://expressjs.com/  이구요.

Firejune님이 직접 번역하고 호스팅을 하고 계신  http://firejune.io/express/  도 참고하시면 좋습니다.

혹시 API가 바뀌거나 추가된 경우가 있을 수 있으니 가급적이면 원문 사이트 Documentation을 보시고

이해가 잘 가지 않는 부분만 한글 버전을 참고하시면 좋습니다.

사실 Node.js 의 전반적인 모듈 시스템, npm, Express 나 non-blocking style에 대한 공부를 할 수 있는

사이트들이 많지만 영어라는 점이 장벽으로 많이 다가올 수 있는데요.

Node Web Development 라는 책이 2011년 12월에 한국어판으로 출시되었습니다.

국내 최초로 Node.js를 소개한 책
20,000
 


 Non-blocking, Server-side Javascript 에 관심이 있으시다면 한번쯤은 사서 읽어보시고

개발을 하다가 문제점이 생기거나 궁금한 것이 생기면


Stackoverflow
프로그래밍 지식인 사이트
(상당한 전문가들이 다양한 토픽에 관해 질의응답을 합니다 - 강력추천)
이 안에서 여러 분야에서 답변을 달고 채택되거나 추천을 받고 또 좋은 질문을 올리거나 하면
이 안에서 점수에 따라 권한이 달라집니다.
자주 가서 견문도 넓히고 글 마다 태그를 보시고 본인이 특정 분야에 관해 객관적으로 어느정도
지식이 있나 알 수 있는 나름 척도도 될 수 있고 좋습니다



GitHub - 호랑이를 잡으려면 호랑이 굴에 들어가라. 해당 모듈 개발자에게 직접 물어보시는 것도 좋은 방법입니다. 또 그 GitHub Issues에 Issue를 올리시면 다른 사람들이 또는 모듈 개발자가 직접 답변을 해줍니다.
멋지게 본인이 문제를 해결해서 반영해달라고 해도 좋구요 ㅎㅎ (Fork -> Pull Request) 


그리고 진리의 Googling

Google에 대한 수식어가 사실 굳이 필요할까요. 구지 하자면 문제가 발생했을 때 적절한 키워드나 언어, 모듈의

Reference 검색, 필요한 모듈 검색, 필요한 플러그인 검색 등 만능이지요.

솔직히 구글링 없이는 프로그래밍 하기 힘든 것 같습니다;




온라인에서 Node.js를 배울 수 있는 창구는 꽤 많구요.

체감상 Node.js 마이너 업데이트 및 그에 따른 모듈들도 업데이트 주기가 약 2~3주로 매우 빠르기 때문에

자주자주 살펴보셔야 하고 조금 된 블로그 포스팅이나 사람들 글을 보게 되면

이미 사라지거나 바뀐 API가 있을 수 있기 때문에 날짜

유의하시며 보시는 것이 좋습니다. 


Node.js를 배울 수 있는 사이트 목록
출처 - How do I get started with Node.js


Tutorials

Videos

Books

Blogs

Podcasts

JavaScript resources

Node Modules

 

Comments