발생일: 2013.12.02 문제: 진행 중인 프로젝트에서 백본(Backbone) 라이브러리를 사용하고 있는데,대상 API가 완벽히 RESTful 하진 않다. RESTful 한 부분만 백본의 `sync` 프로세스를 적용할 것인지,아니면 아예 사용하지 않을 것인지에 대해 토의가 필요했다. 유지보수를 생각해서 팀에서는 사용하지 않는 것으로 결정했다.나중에 새 멤버가 들어오면 구현되어 있는 모습을 이해하기 어려울 수 있고,어떤 건 `sync`로 구현하고 어떤 건 그냥 구현하는 룰이 명확하지 않을 거라는 것 때문이었다. 여튼, 토의 준비 과정에서 정리해뒀던 `sync` 과정을 메모해둔다. 해결책: `Backbone.sync()`를 호출하는 각 메서드는 아래와 같이 동작한다. fetch()1. 서버에 'GET' ..
발생일: 2013.10.19 문제: 며칠 전부터 와이프와 함께 하루에 한 문제씩 알고리즘을 풀기로 했다.와이프는 자바로, 난 C로. ㅎㅎ 알고스팟(http://algospot.com/)에서 한 문제씩 골라서 풀어나가기 시작하고 있는데,C는 책으로만 읽은 터라 삽질이 많다. -_-; 정렬을 위해 `qsort()`의 파라미터로 문자열 비교 함수를 전달하려고 하는데,로컬에선 정상적으로 수행되는 것이 채점하는 서버에선 아래와 같은 컴파일 오류가 난다. invalid conversion from ‘const void*’ to ‘const int*’ 뭔가 문제일까...? 해결책: 포인터를 형변환할 때의 문법이 컴파일러마다 약간씩 다른 모양이다. 난 `gcc`로 컴파일하고 있었는데, 채점 서버는 `g++` 컴파일러를..
발생일: 2013.10.10 문제: 이번 ABC Talk 주제론 `node.js 시작하기`를 선정했다.node.js에 대해 얘기는 많이 들어봤지만, 실제로 코드 작업을 해보지 않은 사람들을 대상으로 했다. 장단점이나 특징에 대해선 검색하면 쉽게 찾을 수 있어서,이론은 짧게 설명하고 실제 작업 시 기억해야할 만한 것들만 전달하기로 했다. 실습 위주로 진행하고 간단한 걸 뚝딱 만들어내서,'별 거 아니군~'이란 느낌을 주는 게 목적이었는데, 잘 전달됐는지 모르겠다.ㅎㅎ 여튼, 슬라이드랑 예제 링크를 메모해둔다. 해결책: Node.js 시작하기 from Ohgyun Ahn 실습 예제: https://github.com/ohgyun/nsrank/
발생일: 2013.10.04 문제: 다음 ABC Talk 주제로 `node.js 시작하기`를 선정했다.어떻게 소개하면 좋을까 하고 슬라이드쉐어를 서핑하다보니,어떤 슬라이드에서 동시성 처리가 좋다며 `Apache`와 `node.js`의 벤치마크 결과를 사용하는 걸 봤다. 헌데, 벤치마킹 방법으로 `ab`라는 명령을 사용하고 있더라.음.. 난 처음보는 건데, 이건 뭘까~? 해결책: 아파치가 설치될 때 같이 설치되는 벤치마킹 도구이고,웹서버의 성능 검사 도구로 사용한다. 유닉스에서 `ab` 명령으로 사용한다. $ ab -n 10 -c 5 http://testserver.com/ -n 은 요청수를, -c 는 동시요청수를 나타낸다. 주요 옵션 -n requests 벤치마킹을 위한 요청수.-c cuncurrency..
발생일: 2013.09.26 키워드: 노드웹킷, Node Webkit, NW, NW.js, 일렉트론, Electron, 크로미엄, Chromium, 크로스 플랫폼, cross platform 문제: 얼마 전에 노드웹킷(Node Webkit)을 사용해 프로토타이핑 하는 작업을 맡았었다. 나도 처음 접해보는 거였고, 살펴보면서 메모해둔 게 있어 옮겨둔다. 해결책: https://github.com/rogerwang/node-webkit 소개 크로미엄과 노드를 활용해 네이티브 애플리케이션을 만들 수 있는 환경.HTML, JavaScript, CSS 같은 웹 기술로 네이티브 앱을 만들 수 있다. node-webkit slidehttps://speakerdeck.com/zcbenz/node-webkit-app-r..
발생일: 2013.10.04 문제: 어디서 보고 읽게 된 건진 잘 기억나지 않지만,노드에서 자식 프로세스를 실행하는 `spawn`과 `exec` 메서드의 차이를 잘 정리해둔 포스트가 있었다. 포스트를 읽으면서 메모해둔 게 있어 옮겨둔다. 해결책: http://www.hacksparrow.com/difference-between-spawn-and-exec-of-node-js-child_process.html `spawn`과 `exec`가 하는 작업은 동일하지만, `spawn`은 스트림(stream)을 리턴하고, `exec`는 버퍼(buffer)를 리턴한다. `spawn`은 `stdout`과 `stderr` 스트림을 포함한 객체를 리턴한다.자식 프로세스의 표준 출력을 `stdout` 객체로 받아 처리할 수 ..
발생일: 2013.10.11 문제: 서버가 죽으면 해당 로그를 파일로 저장해두려고 한다.파일명에 현재 시간을 포함해두려고 하는데, 쉘에선 날짜를 어떻게 포맷팅하지? 해결책: http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ `date` 명령의 파라미터로 `+"포맷"`을 전달하면 된다. # 현재 시간을 `년월일-시분`으로 출력한다. 예) 131110-1530$ date +"%y%m%d-%H%M"
발생일: 2013.10.07 문제: 프로젝트에서 클라우드로 할당받은 테스트 서버는 사내망으로만 한정되어 있다.외부 요청은 프록시 서버를 통해서만 나갈 수 있는데,옆자리 D가 이미 `npm`과 `yum`은 프록시 서버를 통해 가져오도록 설정해뒀다 한다. 음... 이건 어떻게 한 거지? 해결책: 물어보니, 보통 패키니 매니저들엔 프록시 설정하는 옵션이 있고,`npm`과 `yum`의 설정에 추가해줬다고 한다. 아항~ 그런거였구나. `npm`이라면 아래처럼 확인할 수 있다. 먼저, 현재 설정되어 있는 설정을 조회해본다. $ npm config ls 프록시가 설정되어 있지 않다면, 기본 항목엔 어떤 게 있는지 조회해본다. $ npm config ls -l 새 설정은 `~/.npmrc`에 저장하면 된다.(https..
발생일: 2013.10.07 문제: 작업하던 중에 API 서버가 제대로 응답하지 않는 것 같아 `ping`을 던져봤다. 가만... 내가 왜 `ping`을 보내고 있지...맞다. 서버 응답이 늦어서, 해당 서버가 죽었는지 확인할 목적이었지. 그러고보니, 습관적으로 `ping`을 날리면서도 자세히 알아본 적이 없었던 것 같다.그저, 도메인이나 서버 IP로 던지고, 로그가 출력되면 "아~ 죽진 않았구만.." 정도로만 생각했다. 이참에 좀 더 자세히 알아보자. 해결책: `ping`은 네트워크 연결이 잘 되어 있는지 확인하는 목적의 명령이다.좀 어려운 말로, IP 수준을 확인하는 용도이다. `ping`을 사용해서 대상 호스트 이름 또는 IP 주소로 요청을 보낼 수 있고,이 때 `ICMP`라는 프로토콜을 이용한다...
발생일: 2013.10.04 문제: 서버 모니터링 용도의 쉘 스크립트(Bash)를 짜고 있다.`monitor.sh`을 실행하면, 서버를 띄우고 이 프로세스를 주기적으로 확인하고,프로세스가 죽은 경우 에러 처리를 하고 다시 띄우도록 할 생각이다. 이 때 자식 프로세스로 실행한 서버의 PID를 파일에 저장해두고 확인하려고 하는데,쉘 스크립트에서 자식 프로세스의 PID를 어떻게 가져올 수 있을까? 해결책: http://serverfault.com/questions/222424/bash-child-proccess-pid-how-do-you-get-it `$$` 변수로 현재 실행중인 프로세스의 아이디를 가져올 수 있고,`$!` 변수로 가장 최근에 실행한 자식 프로세스의 아이디를 가져올 수 있다고 한다. 굿. :)