발생일: 2015.10.21 키워드: react server rendering, 리액트 서버 렌더링, ReactDOMServer, ReactDOM, ReactDOMServer.renderToString 문제: 리액트 서버 렌더링을 구현해보려고 한다. 해결책: 먼저 전반적인 플로우에 대한 개념을 이해하면, 나머지를 적용하기 더 쉬울 것이다. S-1. 서버에 요청이 오면 클라이언트에 내려줄 데이터를 준비한 후, (A) S-2. React 컴포넌트를 사용해 HTML 문자열로 변환해둔다. (B) S-3. 클라이언트에는 데이터 (A)와 HTML 페이지 (B)를 함께 응답한다. C-1. 클라이언트에서는 응답받은 HTML을 출력하고, (B) C-2. 기존과 동일하게 리액트 컴포넌트를 시작하는데, C-3. 서버에서 내..
발생일: 2015.09.30 키워드: backbone, 백본, react, 리액트, backbone to react 문제: 우리 프로젝트는 백본을 기반해 자체 제작한 프레임워크를 사용하고 있다. 프로젝트를 처음 시작한 때는 2년 전이었고, 당시에 백본은 안정화되기도 했고 트렌드에도 전혀 뒤쳐지지 않은 기술이었다. 최근에는 (백본은 여전히 안정적이지만) 트렌드가 많이 변했다. 리액트가 등장하면서, Virtual DOM 개념으로 MVVM 에서 단일 플로우를 갖는 방향으로 패러다임도 변경되었다고 생각했다. 우리 프로젝트도 리액트로 전환해야 할까... 고민이다. 해결책: 우리 프로젝트는 규모도 있고, 안정화 단계에 들어가서 서비스 중인 상태이다. 개인적으론 코드 품질도 좋은 편이라 생각하고, 거의 대부분의 코드..
발생일: 2015.10.19 키워드: xargs, 파라미터, 중간 문제: 디렉토리에서 특정 확장자를 가진 파일을 찾아 특정 폴더로 복사하려고 한다. find 와 xargs 명령으로 간단히 처리할 수 있을 것 같은데, xargs 명령 중간에 넣어야 할 것 같다. 어떻게 하면 될까? 해결책: xargs 명령의 파라미터를 중간에 넣고 싶을 때엔, 아래처럼 구분문자열을 정의하고 커맨드 내에서 구분문자열을 사용하면 된다. xargs -I [구분문자열] 커맨드 예를 들어, 위의 문제에서 구분자를 '%'로 사용한다고 가정하면, 아래와 같이 처리할 수 있다. $ find . -name *.js | xargs -I % cp % ./dist 다른 구분자를 사용자를 사용하고 싶다면 -l 옵션에서 변경하면 된다. 예를 들어,..
발생일: 2015.07.08 키워드: rnu, relative number, 상대적 번호, 라인 번호, line number 문제: Vim 에서 라인 넘버를 상대적으로 보고 싶다. 해결책: 아래 명령으로 상대적인 라인 넘버를 활성화할 수 있다. :set rnu (2016.02.28 추가)Xcode의 XVim 에선 rnu 로는 설정되지 않는다.Xvim 에선 아래 명령으로 설정할 수 있다. :set relativenumber또는:set rn 토론: 라인 넘버가 현재 라인을 0으로 위/아래로 확장되어 있는 건 이동이나 삭제에 편하다. 예: 5j, 5k, d5d, y10y 파일 내의 특정 라인으로 이동해야 한다면, :[N] 명령(예: :40)으로 이동할 수 있다. 참고: http://jeffkreeftmeije..
발생일: 2015.10.29 키워드: heapq, heapq.nlargest, heapq.nsmallest 문제: 컬렉션 내부에서 가장 크거나 작은 N개의 아이템을 찾으려고 한다. 해결책: import heapq nums = [1, 8, 3, -5, 4, 99, -4, 0] # heapq 모듈에 이 용도에 적합한 nlargest()와 nsmallest() 함수가 있다. # - heapq.nlargest(n, iterable, key=None) # - heapq.nsmallest(n, iterable, key=None) print(heapq.nlargest(3, nums)) #-> [99, 8, 4] print(heapq.nsmallest(3, nums)) #-> [-5, -4, 0] # 좀 더 복잡한 구..
발생일: 2015.10.22 키워드: collections.deque, deque 문제: 순환이나 프로세싱 중 마지막으로 발견한 N개의 아이템 유지하고 싶다. 해결책: # 이런 목적으론 collection.deque 가 가장 적합한다. # deque는 큐 구조체가 필요할 때 사용할 수 있다. # deque(maxlen=N)으로 고정 크기 큐를 생성할 수 있으며, # 큐가 찬 상태에서 새 아이템을 넣으면 첫 아이템이 자동으로 삭제된다. from collections import deque q = deque(maxlen=3) q.append(1) q.append(2) q.append(3) print(q) #-> deque([1, 2, 3], maxlen=3) q.append(4) print(q) #-> de..
발생일: 2015.10.22 키워드: splat operator, 스플랫, 언패킹, unpacking, 튜플 나누기, 배열 나누기, 문자열 나누기 문제: N개의 요소를 가진 튜플이나 시퀀스를 N개나 그 이하의 요소로 나누려고 한다. 해결책: # 아래와 같이 좌측에 여러 개의 변수를 선언하는 방법으로 언패킹할 수 있다. p = (4, 5) x, y = p print(x) #-> 4 print(y) #-> 5 # 언패킹은 튜플이나 리스트 뿐 아니라 순환 가능한 모든 객체에 적용할 수 있다. # 여기엔 문자열, 파일, 이터레이터, 제너레이터가 포함된다. s = 'Hello' a, b, c, d, e = s print(a) #-> 'H' print(b) #-> 'e' print(c) #-> 'l' print(d..
발생일: 2015.10.21 키워드: python, pyenv, python version manager, 파이썬 버전 매니저, 엘 캐피탄, el capitan 문제: OS X 엘 캐피탄에서 파이썬 버전 매니저로 새 버전을 설치하려고 한다. 해결책: pyenv - https://github.com/yyuu/pyenv - rbenv 를 포크해서 만든 파이썬 버전 매니저 brew 로 pyenv 를 설치하고, 새 버전의 파이썬(여기서는 3.5.0)을 설치하면 된다. $ brew updqte $ brew install pyenv $ pyenv install 3.5.0 잘 풀리지 않는다면, - 엘 캐피탄에서 brew 를 설치할 때 권한 이슈 - 엘 캐피탄에서 SIP (System Integrity Protecti..
발생일: 2015.03.15 키워드: nginx, error page 문제: nginx 에서 html 페이지를 에러 페이지로 설정하고, 인터널로 해당 룰을 처리하려고 한다. error_page 404 404.html; ... location ~* "^\w+\.html$” { internal; … } 위와 같이 룰을 설정했는데 의도한 대로 라우팅되지 않는다. 왜일까... 해결책: error_page 404 404.html; 위와 같이 처리할 경우, 404 에러가 발생하면, `404.html`이 아니라, `/404.html`로 라우팅된다. error_page 디렉티브의 기준 경로가 루트 (/)인 모양이다. 헷갈리지 않게 아래와 같이 룰을 수정했다. error_page 404 /404.html; ... loc..
발생일: 2015.08.06 키워드: state, status 문제: 상태를 나타내는 변수를 설정할 때 항상 state 와 status 중 어떤 걸로 할 지 헷갈린다. @_@ 정확히 어떤 차이가 있을까? 해결책: http://englishsamsam.tistory.com/164 일반적으로 '상태'를 나타낼 땐, state 와 status 를 혼용할 수 있는데, - 경과의 의미를 갖거나(예: 주문 상태), - 이미 정해져있는 특정 상태 중의 하나를 나타낼 땐 status를 쓴다. 예를 들어, 결제 프로세스 등과 같은 상태를 표시할 땐 (결제 단계가 있을 테니) status 를 쓰면 될 테고, 엘리먼트의 상태(visibility, class 등)을 업데이트할 때엔 state 를 쓰면 될 것 같다.