발생일: 2018.09.01 키워드: JetBrains DataGrip, 단축키, shortcut 문제: 얼마 전부터 데이터베이스 IDE로 젯브레인의 데이터 그립을 사용하고 있다. 1년 결제 시 연간 $199, 3년 결제 시 연간 $119로 매우 비싸지만... 여러 디비를 한 번에 쓸 수 있다는 장점이 있어 바꿨다. 사용해보고 몇 가지 자주 사용하는 팁을 기록해둔다. 해결책: * 팁 내에서 RMB는 오른쪽 마우스(Right Mouse Button)를 의미 특정 테이블 하나를 빠르게 조회하기 - Cmd + O -> 테이블명 입력 -> 에 where 절 검색 - 기본 필터 단축키가 복잡하다. 난, Cmd + Shift + F 로 변경해두고 사용하고 있는데 편하다! Row/Column 전환하기 - 테이블에 여..
발생일: 2018.09.22 키워드: Jupyter Notebook, 주피터 노트북, 한글 폰트, 한글 깨질 때, font_manager, fontManager, seaborn, custom font, 나눔고딕, Nanum Gothic, AppleGothic, Mac OS X, set matplotlib font directory 문제: 주피터 노트북에서 Matplotlib 이나 Seaborn 으로 차트를 그릴 때 한글이 깨지는 문제가 있다. 이상한 건, 기존엔 잘 그려지다가 갑자기 안된다는 것이다. 폰트 설정도 하고, rcParam도 설정하고, 캐시도 날려보고, 무려 재부팅도 했는데 안된다... 왜 그럴까? 해결책: Matplotlib 모듈이 내 맥의 폰트 디렉토리를 제대로 찾지 못하는 것 같다. 정확..
발생일: 2018.09.22 키워드: pandas, stack, unstack, split array to multiple rows 문제: df = pd.DataFrame({'foo': ['a,b,c,d,e', 'd,e,f', 'h,i']}) df 위와 같이 한 셀에 들어있는 문자열을 컴마로 구분해서 한 글자씩 여러 행으로 나누고 싶다. 해결책: 문자열을 split 해 각 행을 여러 컬럼으로 나눈 후 병합하는 방법으로 구현할 수 있다. 먼저, 각 foo 컬럼의 문자열을 배열로 나눈다. split = df.foo.str.split(',') split 각 배열이 Series를 리턴하게 apply를 적용하면, Series -> DataFrame으로 변환할 수 있다. split = split.apply(lamb..
발생일: 2018.08.28 키워드: max_execution_time, slow query, cpu 100% of database 문제: 실수로 실행 시간이 아주 긴 쿼리가 운영 중인 서비스에서 실행됐다. 서버에서 맺은 커넥션은 타임아웃이 걸려있어서 문제 없이 끊겼는데, MySQL 서버의 CPU는 여전히 100%다. 디비 서버의 모든 커넥션을 끊은 후에도 한동안 CPU가 100%로 유지되더라. 문제가 뭘까. 해결책: 문제의 쿼리는 SELECT 구문으로 무려 80초나 걸리는 것이었는데, 커넥션이 끊긴 이후에도 해당 쿼리는 계속 실행된 게 원인으로 보인다. 동일 쿼리가 여러 번 실행됐을 거고, 이런 이유로 CPU가 계속 100%가 되었던 것으로 추측된다. 커넥션 타임아웃(connet_timeout)을 설정..
발생일: 2018.07.26 키워드: fulltext index, use index, match against 문제: FULLTEXT 인덱스를 적용해 둔 테이블에서 날짜와 주소로 조회하려고 한다. 테이블 크기는 약 1800만 행 정도이고, 컬럼과 인덱스 정보는 아래와 같다. employee: 약 1800만 행 - address: 주소 - join_date: 입사일 인덱스: - address: FULLTEXT index - join_date: index 주소와 날짜로 검색하기 위해 아래와 같이 조회했는데,.. 엄~청 느리다. SELECT * FROM employee WHERE MATCH(address) AGAINST('+서울' IN BOOLEAN MODE) -- (A) AND join_date >= '${..
발생일: 2018.09.20 키워드: reverse, array, iOS, macOS, safari, javascript array bug 문제: 옆자리 C가 사파리 12버전에서 Array.prototype.reverse() 버그가 발견됐다며 클리앙의 포스트를 공유해줬다. https://www.clien.net/service/board/news/12614248?po=0&od=T31&sk=&sv=&category=&groupCd=&articlePeriod=default&pt=0 배열을 선언하고 reverse()를 호출한 후에, 페이지를 새로고침 했을 때 해당 변수의 배열이 reverse() 된 체 남아있는 버그다. 에이 설마. 이런 빅버그가... 해결책: 오잉잉. 버그가 맞다. 클리앙 글에 참조되어 있는 ..
발생일: 2018.09.19 키워드: json, object, Map 문제: 배치 작업에서 약 천만 행의 데이터를 로드에 객체의 프로퍼티로 할당하는 작업을 진행하고 있었다. 대략 다음과 같이 DB에서 데이터를 읽어와 메모리에 할당하는 간단한 작업이다. readFromDatabase().then((result) => { const map = {}; const list = []; result.forEach((item) => { map[item.id] = item.value; // (A) list.push(item); // (B) }); }); 헌데, 특정 시점(문제가 발생했던 데이터의 경우 약 700만 라인 즈음)부터 (A) 부분의 작업이 1초 이상 걸린다. 하지만 배열에 추가하는 (B) 코드는 아무 문제가..
발생일: 2018.07.27 키워드: Chalse Proxy, iOS, proxy, 찰스 프록시, iOS proxy auto configuration 문제: 맥에서 HTTP 프록싱 도구로 찰스 프록시를 사용하고 있다. 패킷 디버깅이 필요할 때마다 와이파이 설정에서 프록시를 수동으로 연결하고 있는데 귀찮고 번거롭다. 자동으로 연결할 수 없을까? 해결책: iOS는 프록시 설정에 자동 옵션이 있다. 프록시를 설정할 때 수동으로 설정해서 IP와 포트를 지정하는 대신, 자동 옵션을 선택한다. 설정 > Wi-Fi > 프록시 구성 > 자동 URL을 입력칸에 아래와 같은 형태의 주소를 넣는다. https://chls.pro/X.X.X.X:XXXX.pac X.X.X.X:XXXX 는 본인 아이피:포트이다. (예: 192...
발생일: 2017.01.09 키워드: Readline, WriteStream, ReadStream, highWaterMark 문제: 한 행에 JSON 포맷의 데이터를 포함한 파일을 CSV 파일로 변환하려고 한다. 파일 사이즈가 커서 readline을 사용해 스트림으로 읽어 변환 후 다시 스트림으로 쓸 생각이다. WriteStream에 'drain' 이벤트가 있던데, 정확히 어떤 이벤트일까? 해결책: highWaterMark(내부 버퍼에 저장할 최대 바이트)에 지정한 값보다 큰 버퍼를 쓰려고 할 땐, write()가 false를 리턴한다. 스트림이 빠져나가는 동안 write()를 호출하면, 청크가 버퍼링되고 false가 리턴된다. 현재 버퍼링된 모든 청크가 빠져나가면 'drain' 이벤트가 발생한다. wr..
발생일: 2017.01.07 키워드: Microsoft Matchbox Recommender, Matchbox Recommendation, Recommendation system, 마이크로소프트 매치박스, Azure Machine Learning Studio, 애저 머신러닝 스튜디오, 매치박스 알고리즘, 추천 알고리즘 문제: Matchbox Recommender는 MS Azure의 머신러닝 스튜디오에서 제공하는 추천 시스템이다. 이번에 MS의 제품을 활용해 추천 시스템을 구축하기 전에 정리한 내용이다. 해결책: 추천 시스템은 한 개 이상의 아이템이나 유저를 추천해주는 시스템. 두 가지 접근 방식이 있다. 하나는 content-based, 다른 하나는 collaborative filtering conten..