2013-05-01

mysql information_schema 이용하여 sql 문 일부를 생성하자.

일일이 타이핑 하기 귀찮으니...
select concat('r.',COLUMN_NAME,' = i.', COLUMN_NAME,',') FROM information_schema.columns where TABLE_NAME = 'USER';

@OneToOne @MapsId

@Entity
public class User extends BaseModel {
    @OneToOne(optional=false)
    @PrimaryKeyJoinColumn
    private UserExt userExt;
}

@Entity
public class UserExt extends BaseModel {
//    @Id Long id; // 이건 BaseModel에 정의되어 있음. 
    @MapsId
    @OneToOne
    @JoinColumn(name = "id")
    @PrimaryKeyJoinColumn
    @ForeignKey(name="fk_UserExt_User") // 이건 안먹더라.
    private User user;
...
}

그나저나 @OneToOne 매핑은 어렵구나. 1+n 문제 해결이 쉽지 않아.

2013-04-25

이제 나도 늙었나보다. 생각이 치밀하지가 못해. 자꾸 무언가 빠뜨린다. 버그도 많이 생기고.

2013-04-14

Mocks Aren't Stubs

Martin Fowler의 Mocks Aren’t Stubs이라는 글이 있는데, 제가 이 글을 3년 전 쯤에 심심풀이 삼아 번역을 했었습니다. 그냥 재미삼아 했고 구글 사이트에 올렸죠. 그 때는 테스팅에 대해 공부 좀 해 볼 요량으로 그런건데 여전히 TDD는 잘 못합니다. 그런데 며칠전 정상혁님이 이 번역글을 원문 글에 한국어 번역으로 링크를 추가하는게 어떠냐고 메일로 제안을 해 주셨어요. fowler에게 메일로 보내면 해 줄거라면서. 헤헤헤. 그래서 요청을 하려고 fowler의 메일 주소를 찾았는데, 못찾아서 페이스북 담벼락에 요청글을 남겼죠. 하지만 며칠이 지나도 답변은 없고… 그래서 메일을 다시 보냈더니 10분만에 응답! 링크 추가 완료. 진작에 메일을 보낼 걸… 페이스북은 자세히 안보는 모양입니다. About me 링크를 자세히 읽어 보는건데… 어쨌든 나름 유명한 아티클에 제 번역 글이 링크가 걸려서 좀 뿌듯해 지는 중입니다.

2013-04-12

컴퓨터 신간

컴퓨터신간 2013-04-12 - [스크럼으로 소프트웨어 제품 관리하기] 포함 4종

스크럼으로 소프트웨어 제품 관리하기
로만 피클러 지음, 박현철.류미경 옮김 / 에이콘출판 / 2013년 04월
소셜게임 디자인의 법칙 - 수익창출을 위한 전략과 기법
팀 필즈 & 브랜드 코튼 지음, 김호연 외 옮김 / 비제이퍼블릭 / 2013년 04월
프로 Git - 그림으로 이해하는 Git의 작동 원리와 사용법
스캇 샤콘 지음, 박창우 외 옮김, 숀 피어스 기술 리뷰어 / 인사이트 / 2013년 04월
아마존 웹 서비스 완벽 활용법 - 365일 24시간 끄떡없는 웹 사이트 구축과 운영
제프 바 지음, 최용호 옮김 / 위키북스 / 2013년 04월


http://blog.aladin.co.kr/755686115/6303625
at April 12, 2013 at 02:38PM

2013-04-09

Ubuntu에서 Phantomjs 설치

jasper report를 이용하여 pdf를 만들고 있는데, 아무리 생각해도 이건 아니다 싶다. 별로 예쁘지도 않고, 값 넣는 것도 힘들고.


jspdf를 쓸 수 있을까 했는데, 이건 한글 처리에 문제가 있는 것 같다.


google service를 이용하는 방법은 어떨까? google docs 문서를 generate 하고 이것으로 pdf를 대신하는거지. 만들어진 도큐먼트를 pdf export 하면 되니까. 될까? … 하지만 이것 역시 귀찮아서 포기.


한참을 생각하다가 딱! phantomjs !


pdf 생성 요청에 대해 프로세스를 fork해야 한다는 점이 맘에 걸리지만 한 번 시도해보자.


$ sudo apt-get install phantomjs
$ phantomjs --version
[WARNING] phantomjs: cannot connect to X server.

1.4버전까지는 X server가 필요하단다. 1.5부터 pure headless라고. 할 수 없다. 직접 설치.


$ wget https://phantomjs.googlecode.com/files/phantomjs-1.9.0-linux-x86_64.tar.bz2
$ sudo tar xjf phantomjs-1.9.0-linux-x86_64.tar.bz2
$ sudo ln -s /your/phantomjs-install/bin/phantomjs /usr/bin/phantomjs
$ phantomjs -v
1.9.0

나는 A4 사이즈 pdf생성을 위해 examples의 rasterize.js 파일을 참고했다.


$ phantomjs rasterize.js http://naver.com naver.pdf A4

한글이 표시안되더라. 글꼴을 설치하자.


$ sudo apt-get install ttf-nanum ttf-nanum-extra
$ sudo apt-get install ttf-mscorefonts-installer

여전히 돋움 같은 글꼴은 안나온다. 이것도 설치해주면 나오겠지.


이상 설치 끝.


그 다음엔 이놈을 java web app에서 이용하려면 Process를 띄워야 하는데 이 주제는 다음 기회에…


update: 한글 문제 때문에 고생 좀 했다. 내가 pdf로 보여주려는 웹페이지는 나눔글꼴을 사용하고 있었는데, 이게 내 개발환경(맥)에서는 pdf에서 제대로 한글이 나온다. 하지만 우분투 서버에서는 나눔글꼴이 안나오고 다른 한글 글꼴이 선택되더라. 그래서 pdf페이지가 예쁘지 않고 … 그나마 다른 우분투 서버는 대체 한글 글꼴도 없으면 네모로 출력. 뭐가 문제일까 한참을 삽질 좀 했더니, 문제는 css에서 NanumGothic이나 ’Nanum Gothic’은 안먹고 ’나눔고딕’이라고 해야 한글이 제대로 나온다. 즉


body {
    font-family: '나눔고딕' !important;
}

헐… phantomjs가 QT 기반인 것 같은데, 나는 QT를 잘 모를 뿐이고…

2013-04-04

Reverse proxy 환경에서 tomcat access log의 IP를 X-Forwarded-For로 변경.

tomcat 앞단에 reverse proxy가 있다면, tomcat access log를 볼 때, host부분이 proxy의 IP로 나온다. 우리는 X-Forwarded-For헤더의 값을 나오게 하고 싶다.


아래와 같이 한다.


<!-- 아래 Valve를 추가 -->
<Valve className="org.apache.catalina.valves.RemoteIpValve" />
<!-- AccessLogValve를 아래와 같이 수정 -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{X-Forwarded-For}i %h %l %u %t &quot;%r&quot; %s %b %{User-Agent}i" />

tmux 기초

설치


$ brew install tmux # os x
$ sudo apt-get install tmux # ubuntu

$ tmux -V # version

session 만들기


$ tmux new -s basic # 이름 있는 세션

Detaching and Attaching Sessions


Ctrl-b is for tmux command.


CTRL-b, d # detach
$ tmux ls # list-sessions
$ tmux attach -t [session]
$ tmux kill-session -t basic

Working with Windows


$ tmux new -s prd -n log # 첫째 윈도우 이름을 'log'로 함.
Ctrl-b, c # 새 윈도우 생성
Ctrl-b, , # 윈도우 이름 변경.
Ctrl-b, n # 다음 윈도우로 이동
Ctrl-b, p # 이전 윈도우로 이동
Ctrl-b, 숫자 # 0부터 시작하여 지정된 숫자의 윈도우로 이동
Ctrl-b, f # 윈도우 찾기
Ctrl-b, w # 윈도우 선택하여 이동

Working with Panes


Ctrl-b, % # 새 패인 생성. new column
Ctrl-b, " # 새 패인 생성. new row
Ctrl-b, o # 패인간 이동.
Ctrl-b, <space> # 기본 레이아웃 사이클.
# 기본 레이아웃: even-horizontal, even-vertical, main-horizontal, main-vertical, tiles

Command mode


Ctrl-b, : # command mode

Scrolling Through Output with Copy Mode


Ctrl-b, [ # copy mode. 'Enter' to escape.
그런 다음 <space> and <Enter> # 복사할 텍스트의 시작과 끝 지정.
Ctrl-b, ] # 붙여 넣기.
# ~/.tmux.conf에 
setw -g mode-keys vi # 커서 이동하기 위해 vi키를 사용.

access log를 tail할 때 필요한 것만 보기

$ tail -f /home/apps/tomcat/logs/localhost_access_log.`date +%Y-%m-%d`.txt | grep -Ev "패턴1|패턴2|"

2013-04-03

컴퓨터 신간

지탱하는 기술 - [모바게를 지탱하는 기술 - 모바일 게임 플랫폼,] 포함 8종 XXX를 지탱하는 기술 시리즈를 모아 보았어요.

모바게를 지탱하는 기술 - 모바일 게임 플랫폼,
DeNA(디엔에이) 지음, 정인식 옮김 / 제이펍 / 2013년 03월
서버/인프라를 지탱하는 기술 - 24시간 365일
이토 나오야 외 지음, 진명조 옮김 / 제이펍 / 2009년 04월
웹 개발자를 위한 웹을 지탱하는 기술 - HTTP, URI, HTML 그리고 REST
야마모토 요헤이 지음, 김성훈 옮김, 권정혁 감수 / 멘토르 / 2011년 05월
프로세서를 지탱하는 기술 - 끝없이 스피드를 추구하는 세계
안도 히사 지음, 진명조 옮김 / 제이펍 / 2011년 11월
대규모 서비스를 지탱하는 기술 - 웹 개발자를 위한
다나카 신지 & 이토 나오야 지음, 진명조 옮김 / 제이펍 / 2011년 02월
구글을 지탱하는 기술
니시다 케이스케 지음, 김성훈 옮김, 전병국 감수 / 멘토르 / 2008년 12월
데이터베이스를 지탱하는 기술 - 웹 프로그래머를 위한
마쯔노부 요시노리 지음, 정인식 옮김 / 제이펍 / 2012년 11월
온라인 게임을 지탱하는 기술
나카지마 켄고 지음, 김상우 옮김 / 위키북스 / 2012년 06월


http://blog.aladin.co.kr/755686115/6280921
at April 03, 2013 at 03:12PM

2013-04-01

컴퓨터 신간

컴퓨터신간 2013-04-01 - [하이브 완벽 가이드 - 하둡을 이용한 SQL 기반 빅데이터 분석 도구] 포함 12종

하이브 완벽 가이드 - 하둡을 이용한 SQL 기반 빅데이터 분석 도구
에드워드 카프리올로 외 지음, 오세봉 외 옮김 / 한빛미디어 / 2013년 04월
헤드 퍼스트 데이터 분석 Head First Data Analysis - 하둡을 이용한 SQL 기반 빅데이터 분석 도구
마이클 밀튼 지음, 김경태 옮김 / 한빛미디어 / 2013년 04월
서버 부하분산 입문 - 따라하며 배우는
미야타 히로시 지음, 김완섭 옮김 / 제이펍 / 2013년 04월
트위터 부트스트랩 - 디자이너도 놀라워할 매끈하고 직관적인 웹 사이트 제작의 비밀
김덕기 지음 / 위키북스 / 2013년 04월
구글 애널리틱스 - 웹 로그 분석의 시작과 끝, 개정판
브라이언 클리프튼 지음, 이세현.박종채 옮김 / 에이콘출판 / 2013년 03월
게임 엔진 아키텍처
제이슨 그레고리 지음, 박상희 옮김 / 에이콘출판 / 2013년 03월
코딩 호러의 이펙티브 프로그래밍 - 스택 오버플로우 공동 창립자가 알려주는 소프트웨어 개발의 비밀
제프 앳우드 지음, 임백준 옮김 / 위키북스 / 2013년 03월
프로페셔널 Node.js - 한 권으로 끝내는 노드제이에스 프로그래밍
페드로 테세이라 지음, 유윤선 옮김 / 위키북스 / 2013년 03월
세븐 데이터베이스 - 만들면서 파악하는 NoSQL
에릭 레드몬드 & 짐 R. 윌슨 지음, 심재철 옮김 / 제이펍 / 2013년 03월
반응형 웹디자인 - 어비가 들려주는 생생한 반응형 웹디자인 노하우
송태민 지음 / 위키북스 / 2013년 03월

[상품더보기]

http://blog.aladin.co.kr/755686115/6275602
at April 01, 2013 at 04:36PM

2013-03-27

JPA에서 @ElementCollection을 써본 적이 없는데 이거 꼭 필요한거였구나. ㅎㅎ. 여지껏 무조건 @OneToMany로만 처리했음 ㅋㅋㅋ. JPA를 기초만 가지고 쓰고 있었는데 이렇게 하나씩 알아가는 맛도 괜찮군. 역시 복잡한 기술은 일단 제일 간단한게라도 써보고, 필요할 때에 하나씩 적용하는 기쁨을 맛보는 것도 괜찮은 것 같아.

2013-03-26

parsley에서 숫자 입력 받기

parsley가 type=“number”, data-notblank=“true” 인 것은 검사를 안하네. IE8에서는 검사를 하는구나. 크롬은 안하고.


아하… data-notblank=“true”를 쓰지 말고 required를 쓰면 되는구나. 그러면 잘못된 입력(문자입력)은 html5 입장에서는 empty이기 때문에 제대로 required에서 걸리게 된다.


정리하자면 type=“number”, required라고 하면 된다.

2013-02-20

http://bit.ly/WPvAyv 난 특급 2. 그래서 얼마 주는데?

http://bit.ly/WPvAyv 난 특급 2. 그래서 얼마 주는데?

ifttt를 통해 tumblr로 갔다가 blogger로 가는 포스트입니다.

ifttt를 통해 tumblr로 갔다가 blogger로 가는 포스트입니다.

가슴 뛰는 일을 하라

가슴 뛰는 일을 하라.
신이 당신 자신에게 주는 메시지는 가슴 뛰는 일을 통해서 온다.
가슴 뛰는 일을 할 때 당신은 최고의 능력을 펼칠 수 있고, 가장 창조적이며, 가장 멋진 삶을 살 수있다.
- 다릴 앙카, 가슴 뛰는 삶을 살아라 -

2013-02-19

Ubuntu release upgrade

우분투 업그레이드할 때 사용한 명령어는 아래 있는 것이 전부. 순서대로 입력만 하면 됨.

http://lawrit.lawr.ucdavis.edu/it-help-center/how-to/upgrading-ubuntu-via-command-line 참조.

Update and upgrade your apt-get modules:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

Then begin the upgrade process:

sudo apt-get install update-manager-core
sudo do-release-upgrade

우분투 업그레이드 했다

리모트 터미널에서 하는거라 업그레이드 하면서 제대로 부팅 안되면 어쩌나 했는데, 다행히 제대로 업그레이드 되었고, 부팅도 잘 되었다. 오류 났으면 데이터센터에 전화하고 비용 물 수도 있는데 다행임.

Linux ??? 2.6.35-22-server #33-Ubuntu SMP Sun Sep 19 20:48:58 UTC 2010 x86_64 GNU/Linux
Ubuntu 10.10

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc
New release 'natty' available.
Run 'do-release-upgrade' to upgrade to it.

# natty 업그레이드 성공 !

Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-16-server x86_64)

 * Documentation:  http://www.ubuntu.com/server/doc
New release 'oneiric' available.
Run 'do-release-upgrade' to upgrade to it.

# oneiric 업그레이드 성공 !

Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-31-server x86_64)

 * Documentation:  https://help.ubuntu.com/11.10/serverguide/C
New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

# precise 업그레이드 성공 !

Welcome to Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-38-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '12.10' available.
Run 'do-release-upgrade' to upgrade to it.

이상한건 맨 마지막에 12.10버전이 있다고 메시지는 뜨는데, 해보면 'No new release found'라고 뜬다. 야이 자식아. 지금은 2013년이라구.

update> /etc/update-manager/release-upgrades 파일을 수정하면 12.10버전으로 업그레이드 할 수 있다. normal로 바꾸자.

2013-01-24

트위터 계정에 연결했더니 블로그가 트위터 타임라인으로 도배가 되었네. ㅋㅋㅋㅋ
어짜피 여기서 트윗질 할거 아니고 기록만 남기는 차원이라면 여러 트윗을 모아서 하나의 포스트로 요약해서 포스팅해주면 좋으련만. 연습 삼아 직접 만들어도 좋긴 하겠는데 내가 그럴 마음의 여유를 낼 것 같지는 않고... ㅎ