Archive for 2월, 2013

[책] 프로그래머로 산다는 것 / 유석문 외 / 로드북 / 2012

2013/02/05

동세대 (그리고 몇몇은 개인적으로도 알고 있는..) 개발자들의 삶을 독자로서 엿볼수 있었던 책.

물론.. 각 작가들이 쓴 글 스타일이 뭔가 일관성이 떨어지는 점은 다소 흠인데,
출판사가 방향을 하나로 잡았더라면 더 좋았을거 같다.

좀더 다양한 분야의 여러 사람들이 참여했다면 더 흥미롭지 않았을까 싶기는 하다. (분야가 너무 한정적이었다.)

읽다보면 역시나하는 감이 오는데
인생에 괜찮은 멘토 하나 정도는 있어야 좋다는거.
어릴때(?) 고생한 경험이 다 뼈가되고 살이 되더라는거.
자기 개발에 대한 노력은 부단히 하라는거 (영어든, 자격증이든, 기술이든 )

뭐 익히 아는 이야기.
(드라마가 재밌는건 그 익히 아는 이야기를 어떻게 재밌게 풀었느냐인데, 구성 측면에서 그닥 인기를 얻기는 힘들듯. )

글쓴이들이 어느덧 내 또래가 되어버리다 보니
‘내가 만약 여기에 글을 싣게 된다면?’ 같은 쓸데 없는 상상을 해보았다.

그럼 지금이 뭔가 내 인생을 돌아볼만한 때인가?
아니면 남들이 와~ 할만한 업적(?) 또는 유명세를 얻었는가?
뭔가 쓸만한, 기억에 남는 일화나 경험이 있는가?
지금 일에 만족하는가?
없네 쯧.

개인적으로 좌변기에 앉아 다리털을 내보이며 휴지통 위의 노트북을 두드리려는 듯한 겉표지는 좀 아니다.
어쨌거나 동시대 프로그래머를 대표한다는 이미지인데, 이건 뭐….
(게다가 소수…의 O-Duck 들은 뭔가 다른 상상을 하고 있을지도 모른다.)

java에서 groovy sql 사용하기

2013/02/04

왜 : 신입사원이 JDBC 프로그래밍 문서를 보고 있는게 왠지 마음이 안좋았다.

미션 : SQL 처리를 좀더 쉽게, JNDI 사용도 가능하게…

ibatis나 hibernate 등 별도의 framework을 사용하면 좋긴한데,
모르는 라이브러리들은 왜이리 산처럼 쌓이는건지?, 그리고 framework 환경 구성하고, 학습하는데도 좀 시간이…

이런 부담을 포기하면, 자바 개발자들은 순수한(?) JDBC 프로그래밍의 세계로 들어가야 합니다.
물론… 기본으로 돌아가는 것의 중요함을 모르는 바는 아니지만, 게으름의 충동이…

그래서 groovy.sql.Sql 의 힘을 써보기로 했습니다.
(아예 groovy를 쓰면 더 좋겠으나 이건 ‘영어가 편하니 영어로 대화하자’ 라고 말하는 격.. )

어쨌거나, Sql 클래스에는 여러가지 메소드를 제공하지만 Closure 를 사용하는 것은 익숙한 java 개발 방식이 아니므로
여기서는 제외.

1. 필요 라이브러리
Sql library : grooyv-all-*.jar
vendor jdbc library : ojdbc*(oracle) 또는 mysql* 같은 벤더가 제공하는 jdbc library
vendor jndi library : clientcontainer.jar(jeus) 같은 벤더가 제공하는 client에서 jndi 접속용 library

2. 파일 소스
import groovy.sql.GroovyRowResult;
import groovy.sql.Sql;
import java.sql.SQLException;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class SqlToy {
public static void main(String[] args) throws Exception {
// jdbc 직접 연결
Sql sql = Sql.newInstance(“jdbc:oracle:thin:@localhost:1521:XE”, “system”, “**”, “oracle.jdbc.OracleDriver”);
// jndi 사용 연결
///// Sql sql = new Sql(lookup(“yourDS”));

// select example
String query = “select * from board where name = ?”;
for(GroovyRowResult row : sql.rows(query, new Object[]{“smpl”})){
System.out.println(row.get(“description”) );
}

// update example
sql.executeUpdate(“update board set comment = ? where name=? “, new Object[]{“comment”,”smpl”});

// select 1 row example
GroovyRowResult result = sql.firstRow(“select comment from board where name = ? and comment= ?”,
new Object[]{name,”comment”});
System.out.println(“selected comment = ” + result.get(“comment”));

sql.close();
}
// jeus jndi lookup
static DataSource lookup(String jndiname) throws Exception{
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, “jeus.jndi.JEUSContextFactory”);
env.put(Context.URL_PKG_PREFIXES, “jeus.jndi.jns.url”);
env.put(Context.PROVIDER_URL, “127.0.0.1:9736”);
Context ctx = new InitialContext(env);
return (DataSource)ctx.lookup(jndiname);
}
}