저는 죽을 때까지 공부를 해야한다는 직종인 프로그래머로 일하고 있습니다. 어렸을 때 부터 컴퓨터를 좋아했던 저는 여러가지 프로그래밍언어들을 주변친구들보다 빨리 접했었는데, 그 당시에는 프로그래밍 언어라고 해봤자 C/C++, Java, PHP, JSP, ASP 이정도 였습니다. (JavaScript도 있었지만 이건 언어라기보다는 HTML을 이쁘게 꾸미기 위한 도구일뿐) 그런데 지금은 정말 수많은 프로그래밍 언어들로 서비스를 만들고 사람들끼리 서로 코드를 공유하는 시대가 되었습니다. 그 중에서 오늘 소개해드릴 내용은 브라우저에서만 사용했었던 언어인 JavaScript로 서버까지 만들 수 있는 Node.js에 대해 이야기를 시작해보려 합니다.
JavaScript
프로그래밍언어를 조금이라도 아시는 분들이라면, 혹은 관심이 조금이라도 있으신 분들이라면 JavaScript
를 한번이라도 들으셨을 것이라 생각합니다. 흔히 JavaScript
라고 하면 브라우저에서만 작동하는 Client언어로 알고 계시며, 컴퓨터전공학과에서도 그렇게 배우셨을겁니다. 하지만 지금의 JavaScript는 서버, 클라이언트의 구분이 없어졌으며, 만능의 언어(?)로 성장하고 있지요.
위키설명에 의하면
자바스크립트(JavaScript)는 객체 기반의 스크립트 프로그래밍 언어이다. 이 언어는 웹브라우저 내에서 주로 사용하며, 다른 응용 프로그램의 내장 객체에도 접근할 수 있는 기능을 가지고 있다. 또한 Node.js와 같은 런타임 환경과 같이 서버 사이드 네트워크 프로그래밍에도 사용되고 있다.
자바스크립트는 본래 넷스케이프 커뮤니케이션즈 코퍼레이션의 브렌던 아이크(Brendan Eich)가 처음에는 모카(Mocha)라는 이름으로, 나중에는 라이브스크립트(LiveScript)라는 이름으로 개발하였으며, 최종적으로 자바스크립트가 되었다. 자바스크립트가 썬 마이크로시스템즈의 자바와 구문(syntax)이 유사한 점도 있지만, 이는 사실 두 언어 모두 C 언어의 기본 구문을 바탕했기 때문이고, 자바와 자바스크립트는 직접적인 관련성이 없다. 이름과 구문 외에는 자바보다 셀프와 유사성이 많다.
라고 설명하고 있습니다.
크게 이렇게 설명되고 있고, JavaScript
언어 자체가 엄청 유연하기 때문에 프로그래밍언어를 전혀 모르는 일반사용자도 처음에 쉽게 접근하며 배울 수 있는 장점을 가지고 있습니다 : ) (깊이들어가면 엄청 어렵지만..)
위에서도 틈틈히 말씀드렸던 Node.js 를 이어서 소개하려 합니다. 기존에는 생각할 수 없었던 개념들로 무장한 Node.js라고 생각합니다. (개인적인 의견)
Node.js를 언어라고 하기도 그렇고, 프레임워크라고 하기도 그렇고, 참 설명하기 애매한 그런 존재인 것 같습니다. 그래서 이번에도 역시 위키를 인용하여 설명드리겠습니다.
Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. Node.js는 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.
Node.js는 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.Node.js는 V8 (자바스크립트 엔진) 위에서 동작하는 이벤트 처리 I/O 프레임워크이다. 웹 서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었다.
Node.js는 파이썬으로 만든 트위스티드, 펄로 만든 펄 객체 환경, 루비로 만든 이벤트머신과 그 용도가 비슷하다. 대부분의 자바스크립트가 웹 브라우저에서 실행되는 것과는 달리, Node.js는 서버 측에서 실행된다. Node.js는 일부 CommonJS 명세[3]를 구현하고 있으며, 쌍방향 테스트를 위해 REPL 환경을 포함하고 있다.
뭐라고 설명드려야하나 했더니, 소프트웨어 플랫폼
이라고 합니다!
JavaScript의 장점들을 Node.js가 그대로 흡수하여 만들어졌기에, 엄청난 장점들을 보유하고 있습니다. 대표적으로 정말 빠른 개발속도 입니다. Client와 Server가 같은 언어를 사용하다보니 개발속도가 미친듯이 빨라집니다.
그리고 수많은 오픈소스입니다. npm
을 통해 많은 라이브러리들을 설치하여 Node.js에 바로 적용할 수 있습니다. 그 외에도 많은 장점들이 있는데, 포스팅을 써내려가며 말씀드리도록 하겠습니다 : )
단점으로는 한국만 그런지 모르겠는데, Node.js 커뮤니티가 많이 활성화 되어있지 않다는 것입니다. 그렇기 때문에 컨퍼런스자체도 없는 편이구요. 그런데 이번에 두번째로 Node.js 한국 컨퍼런스인 The 2nd Node.js Korea Conference
가 열리게 되었습니다. 저는 회사덕분에 컨퍼런스에 참여할 수 있는 기회가 생겼고, 학교/회사일정으로 참여하지 못하신 여러분들을 위해 열심히 정리하여 포스팅하려 합니다.
아침 9시부터 저녁 5시 30분까지 많은 발표들이 있었고, 그 이야기들을 정리하였습니다. 다소 부족한 부분들도 있지만 Node.js로 개발하고 사용하실 때 도움이 되셨으면 하는 바램으로 정리를 시작합니다.
return play.node();
// 2015년 11월 12일(목)
// 서울특별시 동작구 보라매로5길 15
// (신대방동,전문건설회관 4층)
8시 30분부터 컨퍼런스 등록을 시작하였고, 소정의 선물들을 나누어 주었습니다.
Node.js의 성장과정과 io.js가 왜 빠져나왔고, 왜 다시 합치게 되었는지에 대해 설명하는 시간이였습니다.
이 내용은 제가 설명하는 것보다 잘 정리되어 있는 링크를 남기도록 하겠습니다.
외국분이 컨퍼런스 첫발표를 시작했습니다. 하나도 알아듣지 못해 (프로그래밍코드이야기할 때 빼고) 통역자막을 보고 열심히 정리했습니다. 신혼이기에 발표끝나고 집으로 빨리가야한다고 했던 이야기가 기억에 남네요.. :D
이 분이 가장 많이 말씀하신 것은 모든 코드는 플랫(Flat)하게!, 아주 쉽고, 가장 간단하게 만드는 것을 강조하셨습니다. JavaScript이기에 이 말이 더 더욱 중요하다고 느껴졌습니다.
중복보다는 항상 플랫한 것이 낫다.
다음은 npm CLI팀의 팀장님이 나왔습니다. 음, 패션이 눈에 띄었습니다. 역시 외국은 엄청 개성적인 사람들이 많은 것 같습니다.
발표내용에서는 npm의 간단한 역사와 앞으로의 로드맵에 대해 설명해주셨습니다.
'peerDependencies' : {"grunt-cli" : "5.0"}'
"scripts" : {
"preversion" : "npm test"
},
"script" : {
"preversion" : "git push --follow-tag && npm publish"
}
스타트업 KnowRe
회사에서 일하고 계시는 조승연님께서 발표를 진행해주셨습니다. 자바스크립트를 사용하다보면 반드시 겪게 되는 콜백지옥
의 대해 재미있게 설명해주셨습니다.
콜백지옥을 피하기 위해 여러가지 라이브러리들을 소개해주셨고, 이 분은 그 라이브러리로도 만족하지 못해 직접 만드시고 오픈소스로 공개하셨습니다.
자바스크립트가 진지하게 연구되고 비동기 프로그래밍에 대한 이해가 깊어질수록 사람들은 점점 더 콜백지옥에 고통받게 되었고, 그러면서 그 고통에서 해방시켜 주겠다는 수많은 거짓된 선지자들이 나타났습니다. 저는 발표를 통해 콜백지옥을 해방시켜 준다고 주장하는 또 다른 거짓된 선지자를 소개하고자 합니다.
프리랜서로 활동중이신 박창우님께서 Gulp를 활용한 정적페이지 만드는 방법에 대해서 설명해주셨는데, 너무 빠른속도로 진행하셔서 많은 내용은 담지 못했습니다. (중간에 슬라이드쉐어를 찾게된다면 링크 올리도록 하겠습니다)
결론적으로는 Gulp
는 매력적이다! 였습니다!
gulp-load-plugins
모듈을 설치하면 node.js에서 $로 쉽게 사용가능GSSHOP의 김요한님께서 발표진행해주셨고, 이 분은 유명하신 분이라 설명이 필요없을 것 같네요. 제가 초기에 Node.js를 시작할 때 stalk.io
를 써보고 감동을 받았었는데, Node.js를 정말 필요한 곳에 잘 사용하시는 것 같습니다.
서버 할당은 어떻게 하는가?
var HashRing = require('hashring');
var ring = new HashRing({
'12.0.0.1' : {weight:200},
'12.0.0.1' : {weight:200},
'12.0.0.1' : {weight:200},
'12.0.0.1' : {weight:1000}
});
ring.get('chatKey');
// 좀더 잘하기 위해서는 weight값을 실시간으로 수정 (ZooKeeper사용시 weight값을 같이 전달)
죽으면 어때 다시 시작하면 되지
wrap up
개발중인 오픈소스프로젝트
Development - MongoDB, Express, AngularJS And Node.js = MEAN Stack
yohany@gmail.com, https://www.facebook.com/JohnKim0331
Dable의 김군우님께서 발표 진행해주셨습니다. AWS에 Node.js를 올려 사용했던 경험기 위주로 말씀해주셨습니다. 또한 괜찮은 라이브러리들도 같이 소개해주셨습니다.
http://miya.pe.kr - PT 올라올 예정
파일관리
app.js // Cluster count == CPU cuont
route.js // 라우팅 맵, Documentation (with apidoc)
controller// // Express의 Middleware
lib/ // 공통로직관련
front/ // Front-end에서 사용하는 것들의 모음집
style/ // css
script/ // javascript
test/ // mocha+should+rewire(for server), qunit+karma(for Front-end)
views/
public/
즐겨쓰는 라이브러리
이 서비스는 이전부터 알고 있던 서비스였는데, Node.js로 개발했다는 것에 신기하고 반가웠습니다. 트랜드한 기술들을 많이 접목해서 서비스하고 있다는 것. Node.js서버로 전세계를 대상으로 서비스한다는 것에 대해 경험과 사용중인 라이브러리, 운영방법들을 설명해주셨습니다.
C, Java, Fashion Photography in Tokyo, Ruby on Rails, Node.js
Node.js in Flitto
Seungwoo Lee
Engineer
asbubam@Flitto.com
서비스 : http://www.Flitto.com
카카오의 장동수님께서 발표진행해주셨습니다. 딱딱한 구조의 한국문화에서 Node.js같은 트랜드한 기술을 사용하고 싶을 때 적용하는 노하우에 대해서 설명해주셨습니다. 매력적이기는 하지만 개인적으로 이부분은 엄청 사서고생하는 것이 아닐까?라는 생각도 들었습니다. 하지만 여러 프로젝트를 진행하면 이런식으로 개발을 해야하는 경우도 생길 것 같습니다 : )
Dongsu jang.
SK planet의 이병준님께서 발표진행해주셨고, Node.js를 처음사용하면서 겪었던 많은 실수들에 대해 설명해주셨습니다. 이 발표의 핵심은 node-java
는 정말 최악의 상황이 아니라면 사용하지 않는 것이 좋다! 였으며, 다른 언어와 통신을 해야한다면thrift
를 활용하는 것도 나쁘지는 않다! 였습니다.
오전 9시부터 저녁 5시 30분까지 정말 쉬지않고 발표들이 진행되면서 허리와 다리가 아프기는 했지만 정말 유익한 시간이였습니다. Node.js로 단순이 코드만 짜는 것이 아닌 여러가지 라이브러리들을 섞어 사용하면 더 멋진 것을 만들 수 있다는 것을 간접적으로나마 경험할 수 있었습니다.
Node.js로 개발하여 서비스하는 것에는 아직 무리가 있다라는 말을 종종 듣기도 했는데, 이 컨퍼런스를 통해 실제 서비스를 적용한 곳이 있다는 것을 보면서 많은 궁금증이 풀리게 되었습니다.
개발이라는 것을 처음시작하시거나, front-end만 하시는 분들이거나, FullStack개발을 원하시는 분들이 시작하기 좋은 언어이며, 좋은 플랫폼이라고 생각합니다 : )
감사합니다.
2015 티스토리X구글애드센스 포럼 참여후기 (2) | 2015.08.21 |
---|---|
Daum DevOn 2013 행사참가 후기 (0) | 2013.10.31 |
NHN D2FEST 개발자대회. 결승전진출팀 선정! 그린팩토리 방문기! (8) | 2013.08.25 |
[멀티룸카페 추천] 강남 놀러와멀티방 체험리뷰! (2) | 2013.05.28 |
댓글 영역