사실 준비하면서 발표의 방향을 잡지 못해서 많이 우왕좌왕했습니다. 몇달전에 봄싹 스웨거에서 What is node.js라는 제목으로 발표를 한번 한적이 있었는데 이 당시에는 HTML5 AG에서 발표했던 경험을 토대로 좀 오랜기간 준비를 했기 때문에 나름 괜찮은 흐름으로 만들어졌다고 생각하고는 있었지만 대안언어축제의 Unconference에서도 한번더 써먹기도 했고 한번 만들어놓은 발표를 우려먹는 것 같아서 다시 써먹고 싶지 않았습니다. 발표를 한번 준비하고 1회성으로 끝난다는 건 사실 ROI로 봤을때 상당히 비효율적이라고는 생각하지만 듣는 사람입장에서는 같은 내용을 2번 듣는것이기 때문에 성경상 그렇게 하고 싶지 않았습니다. 겹치는 멤버가 어느정도 있다는 것도 알고 있었고요. 같은 걸 설명하는데 너무 지난번에 한 내용을 하나도 안넣으려고 하니 오히려 흐름이 이상해 져서 나중에는 필요한 내용을 재사용했습니다.
더욱이 저번 발표에서는 node.js의 동작방식이나 개념에 대해 상당히 집중하고 있었는데 node.js는 JavaScript를 하면 쉽게 사용할 수 있는 아주 접근성이 좋은 기술이라고 생각하고 있는데 막상 발표를 하고나니 개발자들이 약간은 생소한 Event기반, non-blocking I/O, 싱글쓰레드에 대해서 어떻게 그게 되는가? 이런 경우에는 어떻게 동작하는가?, 정말 싱글쓰레드로만 동작하는가? 논블락킹 I/O면 디비같은데의 동시성은 어떻게 해결되는가 하는 개념부분에 너무 집중해버리는 결과가 생겨버렸습니다. 사실 node.js를 하는데 이런 부분을 다 이해하지 않아도(저도 다 이해는 못했고요) 사용하는데 큰 어려움이 없는데 제 의도와 좀 다른 결과가 나왔기 때문에 이번 발표에서는 개념은 간단히만 설명하고 실제로 보여주면 훨씬 이해가 쉽겠다라는 쪽으로 방향을 잡았습니다. 사실 저는 라이브코딩의 전달력에 대해서 약간 의구심을 가지고 있는 편이라(중간중간 버그로 인한 혼란이나 잦은 화면 및 파일전환은 보는 사람이 파악하기 어려움 등) 라이브코딩을 좋아하지 않는 편인데 방향을 위와같이 잡은터라 어쩔수 없이 라이브코딩을 선택했습니다.
Node.js 자바스크립트로 서버사이드 개발하기
View more presentations from Outsider
저는 가르 레이놀즈가 프리젠테이션 젠과 프리젠테이션 젠 디자인에서 내용들에 대해서 상당히 공감하고 있는 편입니다. 몇번 발표자료를 준비해보고 나니 어느정도 제가 만드는 발표자료의 스타일이 자리잡혀가는 느낌이 좀 있습니다.(대부분 프리젠테이션 젠에서 배운 것이지만....) 보통 SI의 제안서 스타일에 글씨가 빽빽해서 다 읽을 수도 없는 슬라이드는 혐오하는 데다가 가르 레이놀즈가 얘기한 발표없이도 모두 이해할 수 있는 발표자료라면 발표자가 머하러 필요하냐는 얘기에 무척 공감하기 때문에 발표자료는 아주 심플하게 가는 편입니다. 그래서 사실 이렇게 공유를 해도 발표자료만 보고 전체 내용을 파악하시긴 어려울꺼라 생각하지만 그래도 만든거니 공유합니다. ㅎㅎ
사실 슬라이드는 한 20분정도만 하고 30분 정도는 모두 라이브코딩으로만 진행했기 때문에 발표자료를 공유하면서 소스코드도 모두 설명할까하는 생각도 해보았지만 귀찮은 일이기도 하고 KSUG에서 조만간 발표영상을 공유할 예정으로 알고 있기 때문에(전문 촬영은 아니라 퀄리티가 아주 뛰어나진 않겠지만 볼만한 정도로 들었습니다. 정확한 시기는 잘...) 발표영상이 나오면(손발이 좀 오그라들겠지만) 공유하는 것으로 하고 발표자료만 공유합니다. ㅎ
라이브코딩은 헬로월드 예제부터 몇가지 node.js의 특성을 보여줄 수 있는 간단한 예제를 보여주고 Socket.IO를 이용한 채팅예제를 만들었습니다. 처음에는 최근에 Socket.IO가 많이 나온것 같아서 JSDom을 이용한 예제를 준비하다가 구글검색의 URL이 이상해 진데다가 한글사이트는 인코딩 문제가 있는 것을 알게 되고는 역시 짧은 시간에 보여주기에는 Socket.IO가 낫다고 생각하고 채팅예제로 바꾸었습니다. 라이브코딩을 많이 연습은 못했지만 그래도 큰 실수없이 진행되어서 전달은 기대한 만큼은 된 것 같습니다. 준비는 더 힘들지만 진행이 자연스럽게 되면 라이브코딩도 할만하구나 하는 생각이 드는군요.(채팅예제 다 만들고 마지막에 채팅창에 메세지를 입력할때 안돌아가면 어쩌나 하고 어찌나 긴장했는지.. ㅋ)
원래 사람앞에 나서는거 별로 안좋아하는 성격이다가 좀 마인드를 바꿀 필요가 있다고 생각하고 있었는데 올해는 발표기회가 종종 오게되는군요. KSUG에서 좋은 세미나를 준비해주신 덕분에 좋은 발표경험을 한것 같습니다. 발표준비를 하게 되면 기술을 그냥 다루기만 할때랑은 약간 다른 시각으로 봐야해서 시간은 많이 들더라도 도움은 많이 되는듯 합니다. 이번 발표는 걱정도 많고 고민도 많이 하긴 했지만 5천원의 참가비와 주말의 시간투자는 제가 세션하나 말아먹(?)더라도 2,3세션의 benelog님과 Toby님이 충분히 채워주실 것이라고 생각해서 맘은 좀 편했습니다. ㅎㅎㅎ
멋쟁이 ㅋ
^^
여러자료를 찾다가 좋은 블로그 만나서 좋은글 잘 봤습니다. 마지막 이미지 출처에 제 친구 플리커 주소(Ryan이미지)가 나와서 살짝 놀라기도 했네요 :)
우와~ 그사진을 찍으신 분이 친구분이신가요? node.js 하시는 외국인 친구분 부럽네요..(아~ 저사진은 JS 컨퍼런스일지도 모르겠네요..)
암튼 감사합니다. ^^
멀티 스레드로 동작하는 웹서버와 싱글 스레드 + Event Driven + Non block I/O로 동작하는 웹서버를 비교하는 부분은 상당히 인상 깊네요. ^^
다중 작업이 필요하면 스레드를 생성해서 처리하고 있었는데,
과연 올바른 선택이었는지 한번 되묻게 하는 내용이었네요. ^^
좋은 글 잘 보고 갑니다. ;)
ps) 스레드는 결코 싸지 않다는 말에도 상당히 공감합니다. ;)
디버깅도 쉽지 않을 뿐더러 관리도 어렵더라구요. ^^;;;
쓰레드가 좋은가 이벤트기반이 좋은가는 많은 논의가 있는 주제인듯 하지만 당연한듯 쓰레드를 사용하는데는 생각해 볼 여지는 있다고 생각합니다. 이벤트기반이라고 만능은 아니니까요. ㅎㅎ
잘 봐주셔서 감사합니다.