2015년 2월 8일 일요일

crontab 사용시 주의사항

오늘 crontab으로 DB 백업 설정을 하다가
이 문제로 삽질을 해서 간단하게 정리해보았다.

내가 작성한 스크립트는 간단하게

mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql

이렇게 되어있었다.
당연히 스크립트를 그냥 실행했을때는 잘 동작하였고

매일 새벽 1시에 돌게 하려고 crontab에 아래와 같이 등록하였다.

00 01 * * * /Users/mickey/projects/screencast/backup.sh

그런데 나중에 확인해보니 백업 파일 사이즈가 전부 0 이었다!!
당황스러워서 이것저것 구글링을 해보면서 삽질을 하다가
stackoverflow에서 힌트를 찾았다.

http://stackoverflow.com/questions/4995689/mysqldump-creates-empty-file-when-run-via-cron-on-linux

이걸 보면 스크립트 뒤에 2>&1 이걸 붙여서 로그를 확인해보라고 되어있었다.
역시 에러가 날땐 로그를 확인해봐야 하는데 나는 그냥 삽질만 하고 있었다...
그래서 위의 스크립트를 수정해서

mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql 2>&1

이렇게 하고 돌렸더니 백업 파일에 에러 로그가 나왔다.
mysqldump 파일을 못찾는다는 에러였다.

그냥 bash 에서는 path에 설정이 되어 있어서
잘 동작하였지만 crontab으로 돌릴때는 path 설정이 안 먹히는것 같다.
그래서 아래와 같이 full path로 수정하니 잘 동작하였다.

/usr/local/bin/mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql

오늘의 교훈은..

1. 에러가 날땐 로그를 잘 확인하자.
2. crontab으로 돌릴때 안전하게 full path를 다 써주자.

2015년 2월 7일 토요일

웹기반 프리젠테이션 툴 reveal.js editor 소개

요즘 발표자료를 작성할때 뭘로 만들까 고민을 하다가 reveal.js를 쓰기로 했다.
파워포인트로 작성하면 회사에서는 암호화 돼서 공유하기도 않좋고
웹에서 바로 보여주기도 힘들어서 괜찮은 웹기반 툴을 찾고 있었다.

reveal.js를 사용한 온라인 에디팅 사이트도 있는데
http://slides.com/ 이다.
정말 깔끔하게 잘 만들어진 사이트라서 좋았는데
회사에서 이 사이트를 또 막아버렸다.

github에서 찾아보니 설치형으로 만들어진 에디터가 있다.
https://github.com/sunu/reveal-editor
일단 star를 하나 주고 한번 사용해보기로 했다.

로컬에 깔아서 실행해보니
아직 reveal.js의 모든 기능을 다 지원 하는것 같지는 않지만
간단하게 작성하기에는 충분한 것 같다.
앞으로 회사에서는 이걸 사용해야겠다.
필요한 기능이 있으면 공부할 겸 추가해봐도 좋을것 같다.


2015년 2월 2일 월요일

윈도우용 vim 사용시 클립보드로 복사하기

윈도우에서도 간단한 텍스트 에디터로 gVim을 설치해서 사용하고 있었는데
이게 yy 같은 명령어를 사용해서 한줄 복사해도
윈도우 클립보드에 들어가지는 않아서 불편했었다.

검색을 해보니 설정파일에 아래와 같이 추가하니 잘 동작한다.

set clipboard=unnamed

Discover Meteor 를 다 읽고 느낀점

처음에는 meteor가 단순히 프로토타입 용도로만 쓸만 할거라고 생각 했었는데
이 책을 다보고 나서는 생각이 바뀌었다.
충분히 production 환경에서도 쓸 수 있을것 같다.

특징들을 간단히 정리해 보면

1. Client side mongo db

가장 큰 특징은 client side에도  mongo db(mini mongo)가 떠 있어서
데이터가 서버와 동기화 된다는 것이다.
따로 서버와 데이터를 주고 받는 로직이 필요 없기 때문에
처음에 프로토타이핑 할때 굉장히 편하다.
하지만 데이터가 커지면 어떻게 하나 했는데
책에 보면 publication, subscription 모델을 이용해서 해결한다.

2. Reactivity

그리고 맘에 드는 부분중에 하나는 Reactivity(반응성) 이다.
이게 미티어에서 잘 제공해주는 것중의 하나인데
데이터가 변경되면 화면에 리프레쉬 없이 바로바로 반영을 해준다.

3. Template

화면을 템플릿 단위로 분할하여 코드가 굉장히 깔끔해진다.
템플릿은 보통 html 과 js 파일로 구성한다.

4. 대기시간 보정(Latency Compensation)

이게 처음에 봤을때 좀 신기한 부분이었는데
데이터의 변경이 있을때 클라이언트에서는 일단 바로 반영하고
나중에 서버의 결과를 받아서 업데이트 하는 방식이다.
이렇게 해서 웹앱의 반응성을 끌어올릴수 있다.

5. 패키지 시스템

meteor 에서 제공해주는 패키지도 편리하게 사용할 수 있도록 잘 해놓았고
https://atmospherejs.com/ 이 사이트에 들어가면
다른 개발자들이 제공해주는 다양한 패키지들을 이용할 수 있다.
무엇보다도 패키지를 가져다 사용하는게 정말 코드 한줄만 추가하면 되는 방식이라 편하다.

6. 결론

일단 meteor로 개발을 하면 재미있다.
코드 변경사항이 웹브라우저를 리프레쉬 할 필요없이 바로바로 반영되며
데이터의 변경사항도 화면에 바로바로 반영된다.
자기가 구상 서비스를 프로토타이핑 해보고 싶을때는 정말 좋을것 같고
production도 불가능하지 않다는 생각이 든다.
물론 나중에가면 scale out 방안 같은걸 고민해 봐야겠지만..
처음에 외부 자바스크립트 라이브러리를 추가하는 것때문에 좀 고생을 했었는데
그건 http://yms9654.blogspot.kr/2015/01/meteor-javascript-library.html 여기에 간단히 정리를 했다.
책도 한글판이 온라인에 공개되어 있다.
http://kr.discovermeteor.com/

2015년 1월 29일 목요일

git repository 에서 키워드 검색하는 루비 스크립트

오늘 git repository 전체에서 키워드 검색을 할 필요가 생겨서 루비로 스크립트를 작성해보았다.
git log 명령어에 생각보다 다양한 옵션이 많아서 그걸 사용했다.
  • --no-pager 는 git log가 기본으로 more 처럼 동작하기 때문에 추가했고
  • --since는 기간을 설정할 수 있고
  • -G를 사용하면 커밋한 코드에서 검색할 수 있다.
  • -- 옵션 뒤에 파일 타입을 정의 한다.
gitlab 서버에서 동작하는 스크립트이며 모든 네임스페이스와 프로젝트를 검색한다.
아래 코드는 'upload'라는 키워드로 java 파일에서 검색하는 예제.

2015년 1월 28일 수요일

Meteor 에서 외부 javascript library를 추가하는 방법

이것 때문에 삽질을 많이해서 정리를 한번 해보았다.

1. <head> 안에 들어가는 js 인 경우

보통은 client/lib 안에 넣으면 되고 global 변수를 사용하는 경우는 client/lib/compatibility 에 넣으면 된다고 함.

2. html이 다 로드 되고 나서 불러야 하는 경우

먼저 external-file-loader를 추가한다.

$ meteor add mrt:external-file-loader

main.js 같은 곳에 아래 코드를 추가

3. 마지막으로 특정 페이지에서만 필요한 경우

이 경우 일단 router 설정이 되어 있어야 한다.

wait-on-lib를 추가

$ meteor add manuelschoebel:wait-on-lib

router.js 수정

putty 에서 생성한 키파일로 ssh 로그인 안될때

putty와 openssh에서 사용하는 public key 포맷이 약간 달라서 생기는 문제인것 같다.

putty에서 생성한 public key는

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20141215"
AAAAB3NzaC1yc2EAAAABJQAAAQEApY5pbRYtPoHQ1F8WzOWIz3DB+ki3oU2gXssc
9+W5K/4SQnduNZjoAI07MmLLUYhrDaypHkU3Xc/td7VwRnhjy8bSfevx1fXrGNBS
rSVQc37svHTGBXLIM9hcnP6i7xudvK870PnDzom3NeDYi0v8iIywzn8GSvt0d+1R
KxiqW63WnPTOnP2j/4yipeqcTVIOvSWZi/pbnry9HoKugoP1BH2/zQH5GbpM/n3+
DUeZarbs5btT1v3aSmNlyk+XKY9AZM5SPCKTkbM04EbvcwBeY+z9EWdh2zyok1zh
ACegGM2k+BBB5lCFst503DNNylpAhCroPeS8Icmu3SFO/D4wZQ==
---- END SSH2 PUBLIC KEY ----

이런식으로 생성되는데
이걸 그대로 서버에 저장하고 ssh 로그인 하려고 하면 Server refused our key 이런 메세지가 나오면서 자동 로그인이 안된다.

해결방법은 아래와 같은 포맷으로 변경해서 저장하면 된다.

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEApY5pbRYtPoHQ1F8WzOWIz3DB+ki3oU2gXssc9+W5K/4SQnduNZjoAI07MmLLUYhrDaypHkU3Xc/td7VwRnhjy8bSfevx1fXrGNBSrSVQc37svHTGBXLIM9hcnP6i7xudvK870PnDzom3NeDYi0v8iIywzn8GSvt0d+1RKxiqW63WnPTOnP2j/4yipeqcTVIOvSWZi/pbnry9HoKugoP1BH2/zQH5GbpM/n3+DUeZarbs5btT1v3aSmNlyk+XKY9AZM5SPCKTkbM04EbvcwBeY+z9EWdh2zyok1zhACegGM2k+BBB5lCFst503DNNylpAhCroPeS8Icmu3SFO/D4wZQ==

앞에 ssh-rsa 를 붙이고 키파일 내용을 한줄로 만들어야 한다.
만약 이렇게 변경해도 같은 에러 메세지가 나온다면

$ chmod 600 authorized_keys