Skip to main content

4 posts tagged with "node-js-2"

View All Tags

· 4 min read

1. Disable session

구현중인 REST API에서 SNS 연동이 필요한 부분이 있다. (API server에서 SNS 연동까지 해야하는지는 고민중이지만)

REST API는 session 유지를 해서는 안된다고 많은 참고자료들에서 언급이 되고 있는데 (인증에 대한 정보를 API 호출시 넘기도록 함)

SNS와의 OAuth를 위해 살펴본 node.js의 passport 모듈에도 관련 내용이 기술되어 있다.

참고 링크 : http://passportjs.org/guide/authenticate/

스크린샷 2013-11-06 오후 11.35.11

Passport는 인증과 관련된 기능을 좀 더 쉽게 처리하고자 만들어진 모듈인데, 인증 기능을 다룬 부분에 session이 필요없을 경우 disable이 가능하도록 옵션을 제공하고 있는 것을 알 수 있다. 그리고 굳이 API server와 같은 상황을 예로 들고 있다.

2. Passport를 활용한 strategy의 구현부 (Session 강제)

Passport를 활용하고 있는 모듈들이 몇가지 있는데 주로 passport의 API만 가지고 구현하기 번거로우니 특화된 기능을 사용하기 쉽게 정리해놓고 있다. passport-oauth, passport-twitter, passport-facebook 등이 그 예인데, twitter와 연동해보려고 간단히 사용해보니 session을 사용하지 않으면 오류가 발생하는 걸 확인했다. passport-twitter가 포함하고 있는 passport-oauth1 (OAuth 1.0을 구현, 링크 : https://github.com/jaredhanson/passport-oauth1)의 strategy.js (실제 대부분의 기능을 담고 있는 구현부)를 보니 120번째 라인에서 request에 session이 없는 경우 오류를 리턴하도록 구현되어 있었다.

스크린샷 2013-11-06 오후 11.39.59

passport-oauth1은 passport-oauth와도 관계가 있는 모듈로 passport 자체는 session을 disable 할 수 있도록 되어있지만 passport를 활용한 다른 모듈들은 사실 session을 강제하고 있다. 실험삼아 session disable이 가능한 authenticate 함수에서 disable option을 담아서 호출해 봤는데 결국 마지막에 호출되는 passport-oauth1에서 오류가 발생하는 걸 확인할 수 있었다.

3. 결국 oauth 구현

passport.js만을 이용해서 SNS 연동을 할 수도 있겠지만 passport 자체가 OAuth만을 위해 만들어진게 아니라서 작업이 번거로울 것 같다는 생각이 들었다. 어찌되었든 비슷한 기능을 하는 다른 모듈을 찾거나 결국은 내가 직접 구현을 해야하는 상황. node-oauth (npm에서는 oauth라는 이름, 링크 : https://github.com/ciaranj/node-oauth) 라는 모듈을 passport 대신 사용해서 직접 구현할 생각이다.

· 3 min read

node.js로 개발할 때 귀찮은 것 중 하나가 수정사항을 reload 하는 것이다.

node process로 실행되기 때문에 항상 실행중인 process를 죽이고 다시 실행해줘야 하는데

개발중일 때에는 참 귀찮은 작업이다.

이런 경우에 많이 사용하는게 nodemon이나 supervisor 라는 패키지인데

nodemon의 경우 수정사항이 발생했을 때 자동으로 reload 해준다.

 

1. Eclipse에서의 nodemon 문제점

Eclipse에서 nodeclipse 라는 플러그인으로 개발중인데 nodeclipse 설정에는

node 경로와 express 경로에 대한 설정만 존재한다.

node 대신 nodemon을 입력해주면 nodemon으로 실행하지 않을까 싶었는데 오류가 발생한다.

nodemon의 내부를 보니 /usr/bin/env node로 path를 뒤져 node를 실행하도록 되어있는데

eclipse에서 env를 인식하지 못하는 것 같다. (아직 해결책을 찾지 못함)

 

2. forever & deploy

개발이 종료되고 서비스할 때 데몬으로 돌리기 위해 forever라는 패키지를 많이 사용하는 것 같다.

node.js로 개발한 것들을 백그라운드로 돌리기 위해 nohup을 사용하곤 했는데 그런 불편함을 덜어줄 수 있을 것 같다.

deploy를 위해서는 수정사항을 reload 할 수 있어야 하고 항상 백그라운드에서 안정적으로 동작하고 있어야 하는데

nodemon은 reload는 가능하지만 백그라운드로 동작시키려면 역시 nohup을 사용하는 등의 다른 방안을 함께 고려해야 한다.

게다가 시스템 로그를 남기는 문제도 생각해야 하는데 nohup만 사용해서는 뭔가 아쉽다.

forever는 백그라운드에서 돌릴 수 있고 restart 기능이 있다.

하지만 restart는 연결중인 session까지 끊어버릴거라 보완이 필요하다.

시스템 구조 측면에서의 deploy 방안을 고민해야 할 것 같다.

· 2 min read

널뛰듯 장르를 넘나드는 업무 속에서 뭐라도 하나 지속적으로 하자는 생각에 Node.js를 공부하고 있다. 이틀.

다른 시간은 쓰기가 어려워서 점심시간에 말이다.

비동기식 이벤트를 이용하기 때문에 뭐가 좋고 나쁘고 이런 얘기들은 아직 체감되진 않는다.

아직 대규모 요청을 처리하거나 해본 적이 없기 때문에.

 

정말 신기했던건 다음 몇 줄로 브라우저에서 request가 들어올 때 마다

Hello World를 찍어 보여줄 수 있었다는 것이다.

웹서버를 돌리지도 않았고 단지 node.js 설치와 몇 줄 써주고 실행한게 전부였을 뿐이다.

var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type" : "text/plain"});
response.write("Hello World"); response.end();
}).listen(8888);

이걸 익혀서 Jenkins job 상태를 보여주는 서비스를 만드는 것을 목표로 하기로 했다.

기간은 2주 정도. 물론 점심시간만.

 

설치는 official page에서 간단하게 가능하고

보고 있는 자료는 누군가 친절하게 번역해 놓은 node beginner page.

Eclipse plugin도 있는데 아래 주소를 추가하면 Node Project / File 생성이 가능하다.

http://www.nodeclipse.org/updates/