System Compleat.

'시스템엔지니어의 코딩'에 해당되는 글 1건

  1. System & JavaScript

System & JavaScript

Techs
( younjin.jeong@gmail.com , 정윤진 )

오래전에 그만두었던 프로그래밍을, 최근 들어서 다시 하게 되었다. 그 첫번째 이유는 인프라의 자동화와 관련되어 있는 Ruby 코드를 작성하기 위한 것이었고, 그 두번째가 바로 오늘 포스팅할 주제, 자바 스크립트 때문이다.

Aptana Studio 3.02



솔직히 말해서, 리눅스 커널/드라이버 관련 개발을 그만두고 나서는 별로 개발 할 생각이 없었다. 90년도 후반에 리눅스 배포판을 성공적으로 설치하면 따라오던 HOW-TO 문서를 따라하는 재미도 쏠쏠했고, 이미 이때부터 소개된 클러스터링이나 당시 떠오르던 웹 플랫폼에 관련한 인프라 기술들이 나에게는 더 매력적으로 느껴졌고, 또 더 재미 있었기 때문이다.  무언가를 미시적인 관점에서 살펴보는 것보다, 거시적으로 만들어 내는 재미가 보다 컸던 이유로, 또 하나는 이미 중학생 때부터 어셈블러, C, C++, Windows 95 API, MFC 클래스를 달달 외워낸 친구가 있었기 때문에, 그렇게 개발은 일찌감치 손을 떼었다. 고2때 이미 DirectX 3.0 을 가지고 3D 큐브 게임을 만들어 내던 놈이었으니, 당시가 이미 97~98년도다.

다시는 돌아보지 않을 것 같던 이런 탭으로 들여쓰기 해 놓은 코드들이 다시 언젠가부터 꼭 보아야만 할 것들로 다가오기 시작했다. 그 시작은 예전부터 자주 죽어나가던 데몬들의 사망 원인을 밝히기 위함이었고, 더 나아가서는 회사에서 사용하는 PHP의 프로파일링이 필요 했었고, 보안을 위한 exploit 의 코드를 twick 하여 운영서버에서 모의 테스트를 하는 등의 이유였달까. 더군다나 최근에 들어서는 인프라의 다량화가 진행되면서, 더이상 쉘코드나 펄과 같은 도구만으로는 자동화가 힘들었기에, Chef나 Puppet의 사용을 위해서 인프라를 코딩하는 정도의 수준에서 다시금 개발에 손을 대게 되었다.

Do you want to know more?

Image from: http://cfs12.tistory.com/image/18/tistory/2009/02/20/17/32/499e6a989c083


일을 꾸준히 하면서, 소스코드를 쓰는 능력이 필요한 개발자와 소스코드를 읽어낼 줄 아는 운영자의 능력 중, 후자의 능력을 배양하는 것은 제법 힘들지만, 반드시 필요하다는 점을 강하게 깨닫게 되었다. 시스템의 문제는 통상 인프라를 구성하는 일반적인 오픈 소스데몬의 문제라기 보다는, 그 위에서 동작하는 어플리케이션에 문제가 발생하는 경우가 대부분이고, 특히 국내와 같은 환경에서는 잘잘못을 가리기 위한 부분보다는 문제를 빠르게 해결 하기 위해, 그 필요성은 점점 더 강해졌다. 서비스 운영 중 대부분의 시간에 개발자가 관여하는 일은 드물고, 업데이트로 인해 발생했던 장애에 대해 그 원인의 분석은 코드에 까막눈이고서는 절대 불가능하다. 더군다나, 일부 개발자가 책임을 회피하기 위해서 묵비권이라도 행사하는 날에는 골치가 이만저만 아픈게 아니다. 이러한 점은 리눅스나 유닉스 기반에서보다, 윈도우 기반에서 더 강하게 느껴졌던건 아마도 윈도우 커널과 Support Tools에 대한 일천한 지식과 다소 폐쇠적인 윈도우 자체가 큰 몫을 했으리라.

그대_앞에만서면_나는_왜_작아지는가.jpg

Image from: http://www.flutterby.com/images/other0000/MSInfoMinister_WindowsNET.jpg

뭐 어쨌든 그런 시절은 지나갔고, 나에게 생소했던 닷넷이라는 프레임웍은 이제 당분간 보지 않아도 되게 되었지만, 현희형과 준호형, 그리고 AJ, 그렇게 함께 만들어 냈던 일본의 모 서비스가 쌩쌩 돌아가는 것을 보면서, 무슨 도구던지 제대로 만질 줄 아는 사람들이 뭉치면 어마어마한 서비스 퀄리티가 튀어나온다는 것도 깨닫게 되었다. 진정한 협업이란 그런 것이었을 게다.

Real Collaboration

Image from: http://agile101.files.wordpress.com/2009/07/collaboration.jpg

이제 그분들과 모두 적을 달리하게 된 지금에 와서 컨설팅으로 여기저기 쑤시고 다니다 보면, 참 어이없는 상황들을 많이 맞이하게 된다. 게다가 그분들과 같이 일하게 되면서 괜시리 눈만 높아진건 아닌가 하는 생각이들 정도로, 웹 어플리케이션의 완성도에 대한 욕구는 커져만 갔지만, 인프라 아키텍쳐와 어플리케이션의 설계에 대한 방향성은 제시 할 수 있어도 내가 직접 샘플을 보여 줄 수는 없다는 현실에 점점 기술적인 못난이가 되어가는 느낌을 지울수 없었다.

너 못났어! ㅠㅠ

Image from: http://cfile211.uf.daum.net/image/137AEB0A49ABD9149B0C26

요새 맨날 클라우드 이야기만 풀었는데, 굳이 클라우드가 아니더라도 요새의 서비스들은 자바 스크립트와 Ajax, 그리고 HTML5 를 통한 서비스 구성의 유연성이 날로 확대 재생산 되고 있다. 더군다나 최근 서비스의 주요한 개념인 Eventual Consistency 의 주요한 사용은, 더 이상 자바스크립트와 Ajax를 모르고서는 세상살기 힘들겠다는 생각이 들게 하기에 충분했다. 더군다나 최근 인프라에 사용되는 여러가지 도구들과 서비스들은 실제 웹 페이지 기반 보다는 REST로 구성된 API 호출의 형태가 많아졌으며, 이를 통해 주고 받는 JSON 또는 XML의 데이터들은 이런 기본 언어들을 모르고서는 페이지 한장에 간단히 표시조차 하기 힘들어 졌다. 게다가 카산드라나 Reddit, SimpleDB 와 같은 NoSQL 지원 서비스들의 등장은 이제 제아무리 시스템 분석가라 하여도 코드를 읽거나 간단한 시스템 동작을 시뮬레이트 할 수 있을 정도의 코딩 능력이 없다면 개발자들과 대화하는 것도 쉽지 않겠다 라는 생각에 이르게 되었다.

NoSQL

Image from: http://stormseed.com/files/2010/03/image2.png


시스템 하는 사람이 오지랖도 넓네 라고 말할지도 모르겠지만, 경험상 이러한 도구들이 어떻게 어플리케이션에 사용되는지를 알고, 어떤게 제대로 사용하는 것인지를 아는 것은 매우 중요하다. 물론 내가 직접 개발을 해서 좋은 코드를 쓰겠다는 것은 분명 아니다. 하지만, 만들어진 코드의 동작이 인프라의 설계 구조나 목적과 부합하는가의 여부에 대한 판단은 정말로 중요한 것이어서, 이는 누가 어떤 일을 하는가에 대한 롤의 분류보다 서비스 그 자체를 문제 없도록 하는데 더 큰 이유가 있는 것이다.



그러한 이유로 해서, 좀 시간을 두고 살펴보아야 할 것들을 간추려 보니 HTML5, Java Script, Ajax 정도가 될 것 같다. 그야말로 필수 요소만 보겠다는 노력이 가상하지 않은가! 


서버 인프라 분야에서 일을 한다고 해도 꽁짜 VM을 쓰는것은 만만치 않다. 뭐 물론 방법이 있기는 하지만, 굳이 그런 방법을 쓰지 않더라도 로컬에서 코드 동작하는거 테스트 해 보는 정도로 앱태나는 정말 걸출한 듯 하다. 게다가 Github나 Cloud9IDE, 구글 사이트의 도움 정도면 사이트를 개발하는데 필요한 것들은 무난하게 배워 볼 수 있지 않나 싶다.



신기한 것은, 묘하게 욕구가 샘솟는 점이다. 이는 아마도, 인프라스트럭처/네트워크/스토리지/큐/메세지/백엔드/프론트엔드 에 대한 원큐 샘플을 필요한 모델별로 만들어 낼 수 있을 것 같다는 기대감에서 오는 것 같다. 구글API나 트위터 API를 사용한 인증 체계의 구현 모델이라던가, 이에 얹혀지는 컨텐츠들의 저장과 메세지 통신에 대한 것들을 좋은 모델로, 또 각 부분의 코드로 제시할 수 있다면 이 얼마나 기쁜 일이겠는가.  게다가 이 블로그를 조금 더 이쁘게 내손으로 코딩 할 수 있는 재주까지 생기게 되는것은 덤으로 얻어지는 행복일 것이다. 


이런 그림과 코드의 제공을 동시에!!

Image from: http://m1.mycloudbuddy.com/images/cb_dataflow.gif



비동기로 가능해지는 기존에 생각 할 수 없었던 많은 부분의 분산처리 모델은 분명 또 다른 컴퓨팅의 모델일 것이다.



그리고 혹시 여러분은 Darkstar 에 대해 들어보신적이 있는가?  어마어마하게 흐르는 SNS 메세지 형태의 데이터 형태들을 실시간 분석에 사용할 수 있다면 얼마나 좋을까?  아마 이런 기술의 사용도 앞으로 볼 생각을 하니 묘한 기대를 넘어 흥분까지 되는 것 같다. 훗. NoSQL을 넘어 Continuous SQL로, Cloud Event Processing 으로!  이건 나중에 기회가 되면 소개하도록 하겠다. 못 기다리시는 분들은 아래 링크의 pdf 에 소개된 내용을 바탕으로 구글링을 쎄워 보시도록.



돌아다니다 보니 깔끔하게 정리된 튜토리얼 페이지들이 몇개 있어 소개한다.


HTML5 - 영문 페이지

http://www.w3schools.com/html5/default.asp


JavaScript - 영문 페이지

http://www.w3schools.com/js/js_howto.asp


Ajax - 한글 페이지

http://www.ibm.com/developerworks/kr/library/wa-ajaxintro1.html


이론과 개념에 대해서는 옆의 링크에 소개된 A.J의 블로그도 많은 호응을 얻는 것 같다.
심화된 자바스크립트의 사용 역시 옆의 링크의 파이어준 횽아의 블로그도 인기 절정.

About Darkstar, SAX, Continunous SQL
http://www.google.co.kr/url?sa=t&source=web&cd=1&ved=0CCoQFjAA&url=http%3A%2F%2Fwww.eventprocessing-communityofpractice.org%2Fep-10%2Fcc-pdf.htm&ei=JO78TcPXEJSCvgOkipWvDw&usg=AFQjCNGHZwk0PYp_HnXiER6XdjYywJoHYA&sig2=W7_YW1CHoK8O2mP9QC4JMw

Darkstar 개발자인 Colin Clark의 블로그
http://colinclark.sys-con.com/node/1394840/blog

(younjin.jeong@gmail.com, 정윤진)

Serious Cat, "Yay"

Image from: http://img.photobucket.com/albums/v418/bawanaal/SeriousCatYAY.jpg