발생일: 2015.09.21 키워드: JavaScript Style Guide, JavaScript Convention, 자바스크립트 스타일 가이드, 자바스크립트 컨벤션 내용: React 가이드를 보다보니 기본적인 스타일은 Airbnb 의 스타일을 따른다고 되어 있다. https://github.com/airbnb/javascript 우리 프로젝트는 구글의 스타일 가이드를 참조해 가이드를 작성해뒀었는데, 에어비앤비의 스타일을 보니 생각했던 범위보다 훨씬 상세하게 가이드를 정리해뒀다. 몇 가지 동의하기 어려운 (이라기 보단 적용하기 싫은 이라고 하는 게 좋겠다) 가이드도 있었고. ㅎㅎ 아래 목록은 가이드 중에 기존 우리가 사용하던 가이드와 다른 몇 가지이다. - 함수를 정의할 땐, 표현식 (function..
발생일: 2015.09.15 키워드: 서브라임 텍스트, Sublime Text, Vintage Mode, Vintageous 문제: 나는 서브라임 텍스트에 빈티지 모드에 Vintageous 플러그인을 설치해서 Vim 커맨드를 사용하고 있다. 헌데, 빈티지 모드로 진입하면 키를 누르고 있어도 키가 반복되지 않는다. 예를 들어, J 키를 누르고 있어도 키가 반복되지 않고 한 라인만 이동한다. 늘 불편하다고 생각하고 있었는데, 이번에 키보드를 바꾸면서 더 불편해졌다.-_-; 해결할 수 있는 방법이 있을까? 해결책: Vintageous 위키에 해결 방법이 있었다. 이 문제는 OS X Lion 이후 버전부터 발생한 문제이고, 터미널에서 아래 명령을 실행하면 해결할 수 있다. $ defaults write com...
발생일: 2015.07.07 키워드: nginx, 엔진엑스, if, rewrite, last, return, if directive, if 디렉티브, if is eval 문제: nginx 위키에서는 if 디렉티브의 동작이 일관적이지 않고, 요청 케이스마다 동작하는 것이 다를 수도 있기 때문에 가능하면 사용하지 않기를 추천하고 있다. (nginx 위키: If is eval) 위키에서는, `location` 블럭의 `if`에서는 `return`과 `last` 플래그가 붙은 `rewrite`만 안전하다고 설명한다. - return ...; - rewrite ... last; (`rewrite`의 `last` 플래그는 rewrite 직후 현재 블럭의 프로세싱을 종료한다. nginx rewrite 플래그의 차이점..
발생일: 2015.06.17 키워드: Finder, 파인더, 파인더 행, 권한 초기화, permissions reset, repair disk permissions, finder freeze, yosemite, 요세미티 문제: 요세미티 업데이트 이후에 파인더가 제대로 동작하지 않는다. 파일을 열거나 클릭할 경우에 행 걸린 채로 로딩 아이콘만 나오고 죽어버린다. 동일한 파일을 커맨드라인에서 열면 잘 열린다. 음... 어떻게 해결하지... 해결책: 이것 저것 검색해서 초기화해봤으나 잘 되지 않더라. 그러다가 건너편 D가 권한 리셋으로 해결할 수 있다고 알려줬다. 아래 이미지에서 처럼, `Macintosh HD > Repair Disk Permissions`를 클릭하면 해결된다! 오우!!
발생일: 2015.07.06 키워드: github, 깃헙, 깃허브, PR, Pull Request 문제: 우리 프로젝트에서는 모든 피처를 `feature/XXX` 브랜치로 작업하고, 작업이 완료되면 develop에 머지하는 Pull Request 를 올려 리뷰 후 머지하는 프로세스를 갖고 있다. 기존엔 모든 멤버가 리뷰하고 동의해야 PR을 머지하는 방식이었는데, 멤버가 많아지면서부턴 몇몇의 동의로도 머지되곤 한다. 게다가 최근엔 배포 주기가 빨라져서, 놓치는 PR이 더 많아지게 됐다. 이럴 땐 Pull Request 페이지에서, Closed & Merge 된 이슈를 조회하곤 하는데, PR 페이지의 기본 정렬이 생성일 순이어서 매번 업데이트 순으로 변경해 정렬하곤 했다. 나도 모르게 동일한 걸 반복하고 있..
발생일: 2015.07.01 키워드: 캐시, cache, cache revalidate, max-age, expires, no-cache, pragma, 304 Not Modified, from cache, if-modified-since, cache-control, disable cache 문제: 동일한 도메인에서 동일한 캐시 응답을 갖는 두 개의 리소스 A, B가 있다. 두 리소스 모두 최대한 캐시되도록 설정하고 있는데 (max-age 와 expires 응답 헤더를 큰 값으로 설정), 페이지를 새로고침했을 때(Cmd + R), 다음 요청에서의 캐시 동작이 다르다. 리소스 A는 예상했던 대로, 일단 요청을 보내고 304 Not Modified 를 응답받는다. 헌데, 리소스 B는 로컬에 캐시된 것(fro..
발생일: 2014.05.13 키워드: nginx, server_name, http_host, host 내용: nginx 에서 서버 관련 변수 중에 헷갈리는 몇 가지가 있어 정리해둔다. $http_host: HTTP Request 의 Host 헤더값 $host - Host 헤더가 없다면, server_name - Host 헤더를 사용하되, 포트값은 제외하고 모두 소문자로 표시 $server_name: 해당 서버 블럭의 이름 $hostname: nginx가 구동되는 머신 이름
발생일: 2015.06.03 키워드: React, 리액트, important 문제: React 에서 `!important`가 포함된 스타일을 적용하려고 한다. 대략 아래와 같은 코드이다. render() { var style = `{this.props.height} !important`; return ( ); } 헌데, 스타일 적용은 되는데, 변경된 이후에 업데이트가 되지 않는다. 왜일까? 해결책: 확인해보니, React 라이브러리에서 `!important` 를 설정하는 것까진 지원하고 있지만, 해당 속성을 업데이트하진 않고 있다고 한다. 페이스북 내에서도 이 속성을 설정할 지 말지에 대해 논쟁이 있는 것으로 보이고, 2015년 6월 현재 아직 이슈가 해결되지 않은 상태이다. https://github...
발생일: 2015.06.05 키워드: less 문제: 엘리먼트의 높이에 따라 `height100px`, `height200px`과 같은 식으로 클래스를 할당하려고 한다. 정상적인 경우엔 이런 클래스를 만들지 않겠지만, 몇 가지 이슈 때문에 우회하는 방법을 선택했다. 여튼, 예를 들어, 100px 부터 2000px 까지 20px 단위로 클래스를 생성할 생각이다. less 를 쓰고 있는데, 동적으로 클래스명을 할당하면 작성하기 편할 것 같다. 클래스명도 변수를 이용해서 동적으로 생성할 수 있나? 해결책: 클래스명에 `@{변수명}` 형태로 할당하면 된다. 아래 코드처럼 mixin 을 생성해서, 재귀호출하는 식으로 처리했다. // Mixin: 높이가 2000이 될 때까지 클래스를 생성한다. .makeHeight..
발생일: 2015.05.15 키워드: sublime text, 서브라임 테스트 문제: 난 에디터로 서브라임 텍스트를 쓰고 있고, Vim이 좋아서 Vintage 옵션을 켜두고 Vim 명령으로 사용하고 있다. 모든 Vim 명령을 지원하진 않지만, 웬만한 기능들은 서브라임 텍스트에서도 거의 동일하게 동작한다. 헌데 `Cmd + Shift + F`로 전체 파일을 검색하고 난 뒤, 특정 검색 결과로 이동하려고 할 땐 키보드로 이동할 수가 없다.... 불편해.... 검색 결과 라인으로 이동해서 엔터쳤을 때 바로 그 파일을 열 수 있는 방법 없을까? 해결책: 이미 그런 단축키가 있긴 하다. `Ctrl + Shift + F4`인데... 맥용 블루투스 키보드에선 이 키를 입력하기 너무 번거롭다. 이 외에도 `Bettfe..