발생일: 2012.10.29 문제: 최근, 팀에 새로운 분들이 많아지면서, 팀 내 코드 리뷰 미팅도 부쩍 많아졌다. 우리 팀에서는 주로 아래와 같은 방법으로 코드 리뷰를 진행한다. 1. 리뷰받을 사람이 미팅을 요청하고, 시간이 되는 사람들이 참석한다. 2. 회의실에 모여서, 리뷰받는 사람이 작성한 코드에 대해 설명한다. 3. 설명 중간 중간 참가한 사람들이 해당 코드에 대해 질문하고 의견을 준다. 이렇게 하는 방식은 "여러 사람들의 의견을 들어볼 수 있다"는 게 가장 큰 장점인 것 같다. 하지만, 리뷰에 참여한 사람이 많다보니, - 리뷰가 코드에 대한 논쟁으로 진행되거나, - 컨벤션 지적질이 되거나, - 아무 말도 안하는 사람도 생기게 되고, - "잠깐 잠깐 저기요. 아뇨. 아래아래. 아 거기." 이런 ..
발생일: 2012.10.27 문제: 정말 오랜만에 한가한 주말이다.오후부터, 한참을 미뤄뒀던 네이버 영어사전 크롬 익스텐션 리팩토링 작업을 시작했다. 처음 만들었을 때엔 의존성을 해결하기 위해 직접 프레임워크를 만들었었는데,문서도 없고 내멋대로 만든 거라 다른 개발자들이 참여하기도 어려운 것 같았다. 그래서 이번엔 RequireJS를 사용해보려고 한다. 백그라운드 코드부터 작업하기 시작했고, 아무 매끄럽게 잘 적용할 수 있었다.헌데, 컨텐트 스크립트에 적용하려고 하니 좀 문제가 있다. 먼저, 보안 이슈 때문에 파일이 로드되지 않았고,다음엔 스크립트를 로드해와도 제대로 로드되지 않았다. 어떻게 해결하면 될까? 해결책: 컨텐트 스크립트에서 RequireJS를 사용하는 데엔 두 가지 문제가 있었다. 1. 익스..
발생일: 2012.10.17 문제: 조만간 진행할 미니 프로젝트에서 node.js를 사용하기로 했다. node.js는 어깨 너머로 보기만 했지, 실제로 사용해본 적은 없었다. 이참에 연습도 할 겸,얼마 전 만든 라이브러리의 새 버전 배포 알람 메일링 배치 파일을 node.js 로 만들어봤다. 아래는 작업하면서 메모해둔 내용을 정리한 것이다. 해결책: 시작하기, 완전 초보 가이드 http://nodeguide.com/beginner.html 오래된 버전이지만, 기본적인 개념에 대해 명료하게 설명한다. 유용한 라이브러리나 모듈을 가져다 쓰려면? https://npmjs.org/ Node Package Manager에서 가져온다. npm 간단 사용법 http://howtonode.org/introduction..
발생일: 2012.10.11 문제: 예전에 '저자 워크숍'이라는 방식에 대해 깊은 인상을 받고, 블로그에 포스팅 한 적이 있었다.(이전 포스트 보러가기) 2012년 7월 경,마침 학교 동아리에 행사가 있었는데,진행 방법에 의견을 낼 수 있는 위치에 있어서, 과감하게 이 방식으로 진행을 시도해봤다. 지금은 10월이라 꽤 시간이 지났지만,당시 메모해뒀던 걸 바탕으로 여러가지 느꼈던 것들을 기록해두려고 한다. 해결책: 원래 어떤 모임이었나? 내가 속해있는 동아리는 창업 동아리이다.동아리에 신규 회원이 들어오면 그 회원은 '수습회원'이 되는데,정회원이 되려면 학기가 끝날 무렵에 '사업계획서'를 작성해 일종의 '심사'를 받아야 한다. 이번 행사가 바로 수습회원이 정회원이 되는 '수습회원 워크숍'이었고,난 심사위원..
발생일: 2012.07.05 문제: 낼 모레(7/7), NHN에서 주최하는 헬로월드 오픈 세미나에 스피커로 나간다. Raphael.js로 차트 만들었던 경험을 공유하려고 하는데,발표 내용 중에 파이차트에 투명 그라데이션을 적용하는 방법에 대한 것이 있다. 헌데, 용어가 좀 헷갈린다.커뮤니케이션할 때 디자이너는 대체로 '그라데이션'이라는 용어를 썼고, 난 주로 '그래디언트'를 사용했다. 사실 작업하면서 의미 전달이 안돼 불편한 적은 없었는데,인쇄용 자료를 만들려고 하니 왠지 신경쓰이고 궁금해졌다. 그라데이션(Gradation)과 그래디언트(Gradient)의 정확한 차이가 뭘까? 해결책: 사전적 정의로 구분하는 건 오히려 더 헷갈리더라. 큼직하게, 그라데이션: 인지적 관점 그래디언트: 기술적 관점 이라고 ..
발생일: 2012.05.08 문제: 배열 데이터를 잘라서 처리하는 로직을 구현해야 했다. 아래와 같이 짧은 코드를 구현했는데,크롬에서는 잘 동작하지만 IE8 이하에서 제대로 동작하지 않는 걸 발견했다. var a = [1, 2, 3, 4, 5]; var result = a.slice(1); 이상하다. 특별히 문제될 부분이 없는데...왜 이런 걸까... 해결책: 음메.slice를 splice로 잘못 썼던 게 문제였다... -_-; splice는 배열에서 특정 인덱스의 아이템을 추가하거나 삭제하는 메서드이고,아래와 같은 형태로 호출한다. splice(index, howmany, itemToAdd, itemToAdd, ...) 표준에는 두 번째 파라미터인 howmany 값이 필수라고 정의해뒀지만,만약 이 값을..
발생일: 2012.04.25 문제: 그냥 오늘 테스트 코드를 짜다가 불쑥 생각해낸, 랜덤 컬러를 생성하는 간단한 코드~짧고 간단해서, 종종 쓰면 편할 것 같아 메모해둔다. 해결책: 코드는 아래, 간단하다~ Math.random().toString(16).replace(/.*(\w{3})/, '#$1'); 랜덤값을 생성해 16진수로 출력한 후,대상 문자열에서 숫자 3개를 찾아 '#fff' 형태의 값을 뽑아온다. 요곤 축약형 hex code를 찾아내는 코드지만,요래저래 활용하면 RGB 값도 한 방에 뽑아올 수 있을 듯 하다. 여튼, 테스트 용도로 적격인 코드.^^
발생일: 2012.04.04 문제: 북마크를 크롬에서 동기화해서 사용하고 있는데,요고,.. 북마크를 단축키로 실행할 수가 없다. chrome://bookmarks 페이지가 있어서 검색은 되긴 하지만, 이 역시 썩 능률적이지 않다. 좀 더 엘레강스한 방법이 없을깡~~ 해결책: 역시나~~주소창에서 옴니박스로 북마크를 실행할 수 있는 익스테션이 여럿 있다. 그 중 괜찮은 건, - Quickmarks : http://goo.gl/XiSpY - Bookmark Search: http://goo.gl/1Q9uB 두 개 큰 차이 없지만, Quickmarks가 더 숏컷이 간단해서 요골 선택해서 쓰고 있다~편하다! - 검색 아이디어를 얻은 포스트: http://nestordave.com/2010/06/16/how-to-..
발생일: 2012.03.26 문제: 모바일에서 css 파일을 동적 로딩하고, 로드가 완료되면 특정 작업을 진행하려고 한다. 일전에 동적 로딩 모듈을 만들어봤던 기억으로는, 웹킷 계열은 태그에 onload를 지원하지 않아서 단순히 특정 시간 후에 load 이벤트가 발생하게 작성했었다. 다른 몇몇 라이브러리도 그렇게 했던 걸로 기억하고.... 뭔가 더 좋은 방법이 없을까? 해결책: 좀 검색해보니 웹킷 계열일 경우, 타이머로 document.styleSheets의 length를 체크하는 방법으로 로드 여부를 확인하고 있다. 하지만, 페이지 내 다른 모듈에서 css 파일을 동적 로드하는 경우도 발생할 수 있으니, length 체크만으론 부족해보인다. 좀 더 꼼꼼하게 처리하자면, styleSheets 객체 내 h..
발생일: 2012.03.22 문제: 요새 진행하는 프로젝트에서는 배포 시점에서 스크립트를 압축하지 않고, 압축 툴로 배포할 파일을 미리 만들어두는 방식을 사용하고 있다. 사용하고 있는 압축 툴은 매번 같은 이름의 새 파일을 생성하는데, 아주 가끔 이렇게 새로 만든 파일이 SVN에서 충돌을 일으키는 경우가 있었다. 일단, 커밋하려고 하면 아래 메세지가 출력된다. svn: PROPFIND request failed on ... 더 이상한 건, Repository view에서 해당 파일을 열려고 해도 열리지 않고, 리프레시를 시도해도 바뀌지 않는다. 원인이 뭘까? 해결책: PC를 재부팅해보기도 하고, 프로젝트를 새로 체크아웃 받기도 해보고, 다른 개발자가 리파지터리에서 삭제했다가 새 파일을 추가하고 다시 해보..