발생일: 2013.05.29 문제: Jasmine 으로 테스트 작성 시, Spy 로 쉽게 목 객체를 만들 수 있다고 한다.자세히 알아보자. 해결책: http://pivotal.github.io/jasmine/#section-Spies spyOn(obj, methodName); 으로 특정 객체의 메서드를 목으로 만들 수 있다. spyOn(foo, 'setBar'); expect(foo.setBar).toHaveBeenCalled(); .toHaveBeenCalled();.toHaveBeenCalledWith('foo', 'bar'); foo.setBar.calls; // 호출 정보를 담아둔다. 각 호출의 전달 인자를 배열에 담고 있다..mostRecentCall; // 가장 최근의 호출.mostRecent..
발생일: 2013.05.31 문제: 노드를 사용하는 개인 프로젝트에 테스팅 도구로,BDD 테스트 프레임워크인 자스민(Jasmine)을 사용하고 있다. 다른 건 괜찮은데 비동기 테스트 부분이 잘 이해가 안된다.어떻게 하면 될까? 해결책: 아래처럼 `runs`와 `waitsFor`를 활용한다. describe('', function () { it('', function () { runs(function () { // 비동기 테스트가 필요한 코드를 작성한다. }); waitsFor(function () { // 이 함수가 true를 리턴할 때까지 테스트한다. // 즉, 이 함수는 반복해서 계속 호출된다. }, '시간이 만료된 경우', 1000); runs(function () { // waitsFor의 함수가..
발생일: 2013.05.28 문제: WebSocket Protocol 스펙을 보며 정리했던 메모 해결책: WebSocket Protocol Specification http://tools.ietf.org/html/rfc6455 개요 동일 근원 정책 아래에서 제공한다. 80/443 포트를 이용하는 HTTP 아래에서 동작하는 방식으로 설계했지만, 디자인 자체가 여기에 제한되어 있는 것은 아니다. 미래에는 비슷한 핸드쉐이크 방식으로 여러 포트에서 사용할 수도 있을 것이다. 프로토콜 개요 프로토콜은 핸드쉐이크와 데이터 전송으로 나뉜다. 클라이언트의 핸드쉐이크 GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec..
발생일: 2013.05.28 문제: WebSocket API 스펙을 보며 정리했던 메모 해결책: WebSocket API Specification http://www.w3.org/TR/websockets/ bufferedAmount send()로 추가한 데이터 중 아직 전송되지 않고 버퍼된 양 binaryType 개발자가 데이터를 어떤 방식으로 사용할 지 결정할 수 있게 한다. 기본 생성되면 "blob"로 저장되며, "blob" 또는 "arraybuffer" 중 선택할 수 있다. "blob"이면 파일에 저장하는 게 낫고, "arraybuffer"면 메모리에 쓰는 게 낫다. send(data) if data is a string 데이터를 유니코드 텍스트로 변환한다. 에러가 발생하지 않았다면, buffere..
발생일: 2013.05.28 문제: 웹소켓으로 채팅을 구현하는 것과 관련해 정리해뒀던 메모 해결책: 예전에 구글 톡은 어떻게 사용하고 있었나? https://developers.google.com/talk/ XMPP 프로토콜을 사용하고 있었는데, 이번에 행아웃으로 통합하면서 XMPP를 제공하지 않음. 구글톡이나 행아웃은 websocket을 쓰고 있나? https://plus.google.com/104401121686781166984/posts/Wc4vKDmmqEZ 구글 챗에서는 쓰고 있지 않다. 대신, 채널이란 개념을 쓰고 있다. WebSocket http://www.websocket.org/quantum.html 여기에 오버뷰가 잘 정리되어 있다. 이전에는 폴링, 롱폴링, 스트리밍이 있었다. - 폴링:..
발생일: 2013.05.14 문제: 개인 프로젝트에서 서버를 담당하고 있는데, 앱 개발자분이 HMAC을 적용하자고 한다. HMAC은 Hash-based Message Authentication Code의 약자이다.우리 말로 하면 '해시 기반 메세지 인증 코드' 정도.여기서 의미하는 '해시 기반'이라는 게 뭘 의미하는 걸까. 덧) 지금은 `메시지 기반 인증 코드`라는 개념이 쉽게 이해되는데,처음 이 용어를 들었던 때엔 잘 이해되지 않았던 것 같다.메모해둔 내용이 꽤나 장황하지만, 그래도 누군가에겐 도움이 될 것 같아 옮겨둔다. 해결책: Hashing 키에서 주소로의 변환(key-to-address transformation). 다른 검색 방법처럼 키값을 비교하면서 찾는 것이 아니라, 키값에 어떤 연산을 시..
발생일: 2013.04.19 문제: 어떤 면접에 base64 인코더를 구현하라는 문제가 나왔다는 얘기를 듣고,자바스크립트로 구현하는 걸 찾아봤다. 해결책: 아래 링크의 우리말 설명 굉장히 좋다.http://dakuo.tistory.com/entry/base64-%EC%9D%B8%EC%BD%94%EB%94%A9-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 코드 예제. 아주 좋다.http://www.webtoolkit.info/javascript-base64.html 구현해본 코드 function b64(s) { var key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var i = 0, len = s...
발생일: 2013.04.18 문제: 수 개월 전에 아래 링크의 글을 보고 정리했던 내용이다.http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/ 노트를 정리하다 다시 읽어보니 꽤 괜찮은 내용인 것 같아 옮겨둔다. 해결책: 소켓의 종류 중 주요한 두 가지가 있는데, 하나는 TCP이고 다른 하나는 UDP이다. TCP/IP에서 TCPs는 transmission control protocol 의 약자이고, IP는 internet protocol 을 의미한다. TCP 소켓은 신뢰할 수 있는 프로토콜이다.두 머신에서 데이터를 주고 받을 때, 파일에 쓰는 것처럼 한 쪽에서 쓰고 다른 쪽에서 읽을 수 있다.연결은 신뢰할 수 있고 순차적이다.즉, 한 ..
발생일: 2013.07.18 문제: 팀에서 한 주마다 가볍게 기술 관련 미팅을 진행하는데, 이번 주는 내가 발표하는 차례였다. 발표 주제는 '자바스크립트 템플릿 엔진'이었다.간단한 템플릿 엔진을 슈도 코드로 만들어보면서,클라이언트에서의 템플릿 처리 과정의 발전 모습과 큰 그림을 이해하도록 하는 데 중점을 뒀다. 그동안 네이버의 여러 서비스를 개발하면서 템플릿 처리를 위해 고민해왔던 과정을,최대한 쉽고 간단하게 설명하려고 노력했다.발표는 20분 정도였는데, 준비하는덴 열 시간이 넘게 걸린 것 같다. -_-; 나름 반응도 괜찮아서 기분이 좋았다.^^슬라이드를 함께 옮겨둔다. 해결책: JavaSript Template Engine from Ohgyun Ahn
발생일: 2013.07.11 키워드: nginx, https, ssl, 자가서명 인증서, localhost ssl, localhost https, nginx https, 로컬 ssl, ssl_certificate, ERR_CERT_COMMON_NAME_INVALID 문제: 노드로 https 서버를 띄우려는데, key.pem 과 cert.pem 이 필요하다고 한다. 지금은 프로토타이핑 용도라 테스트용 인증서만 있으면 된다.위 두 파일이 의미하는 것과, HTTPS의 인증 과정, 테스트용 인증서를 만드는 방법이 궁금하다. 해결책: SSL은 TCP/IP를 사용하는 두 개의 통신 애플리케이션 간 프라이버시와 무결성을 제공하는 프로토콜. RSA 알고리즘을 암호 키 교환 및 디지털 서명에 사용한다. 디지털 인증서 디..