오늘 1회 SW 개발자 컨퍼런스를 다녀왔습니다.
개발자 컨퍼런스라니...매우 끌려서 가게 되었습니다. (사실...flexcomponent카페에서도 세미나를 했는데, 친구가 사전등록을 못해서-_- 이곳으로....-_-)

 우선 갔더니 안철수아저씨가 기조연설을 하고 계셨습니다. 실제로 보는 건 처음인 것 같군요. 초딩 때 부터 알고 지내온 v3를 만든 사람이 저 사람이라니...라는 생각에 신기하게 연설을 듣고 있었습니다.
이분 말 너무 잘 하시는데요? 한번 들으면 빠져듭니다-_-; 우선 소프트웨어에 대한 가치에 대해서 얘기를 하시더군요. 소프트웨어는 돈 받을 가치가 있다! ^^
 그리고, 우리나라 개발자 현실에 대해서 너무 잘 꼬집으셨는데요. 우리나라는 개발자가 관리직보다 낮다는 고정관념의 사로 잡혀 어느정도 개발이 끝나면 관리직으로 간다고 합니다. 이래서 우리나라는 전문성 확보에 힘든 구조를 지니고 있다고 하네요. 제가 들은 바로는 개발자하다가 나이 먹으면 닭집차리는 걸로 알고있는데-_-; 외국은 백발의 기술자, 아키텍처들이 있다는 것은 참 부러운 일입니다 ^^
 참 좋은 말씀을 많이 해주셨어요. 열정을 가지고 일에 임하라고 말씀해주셨으며, 전망이나 안정 다 좋지만, 자기가 하는 일에 재미가 중요하다고 하네요. 전 이 일이 재미있어서 다행이네요(언제까지 그럴지..-_-).
 다 하는 얘기가 당연한 얘기인 것 같지만, 중요한 것이었습니다. 자기가 개발하는 코드에 혼을 담으라는 말, 커뮤니케이션 능력을 키우라는 말(커뮤니케이션이 안되면 실력이100이여도 빵점짜리 개발자! 일하면서 느낀건데 커뮤니케이션은 정말 중요해요^^), 영어공부도 꼭 하라는 말(영어는 언제어디서나 괴롭히죠~ ^^) 등의 좋은 말씀을 많이 해주셨습니다. 어떻게 저렇게 귀에 쏙쏙 들어오게 얘기하는지 대단합니다^^

자바 챔피언인 양수열님의 축사가 이어졌구요.
그 다음 시간에는 4분의 전문가가 나오셔서 자기 생각을 발표한 건지 뭐한 건지는 잘 모르겠지만, 개발자의 현재와 미래라는 주제로 발표를 하셨습니다. 고덕환, 백용규, 옥상훈, 허광남 이렇게 4분이군요. 개발자들의 가야할 방향을 잡아주는 좋은 얘기를 많이 하셨구요^^ 그냥 열심히 하라는 얘기로 들렸어요^^

그리고 점심시간이 다가왔습니다. 밥을 공짜로 주더라구요^^ 우와 밥이다~ 메뉴는 새싹비빔밥이었습니다^^ 잘 먹었습니다~

그리고 돌아오니 오라클부스에서 이벤트를 하더라구요. 2개의 플래쉬게임을 통과하면 4가지 상품 중 하나를 골라서 가져가는 이벤트를 하고 있었습니다. 오 해보자~ 라는 생각에 첫번째 게임! 총 쏴서 'SOA'라는 알파벳을 맞추면 됩니다. 첫번째 게임은 무난하게 통과했습니다만, 두번째 짝찟기퍼즐하는 건데....너무 긴장해서....실패했습니다 ㅠ
돌아오니 첫번째 세션이 시작되었습니다 ^^

옥상훈님의 SW의 새로운 패러다임:위젯 이라는 주제로 발표를 하셨습니다.
여러가지 위젯의 종류와 예를 보여주며 자신이 만든 위젯은 구글에 있으니 설치하라는 말씀을 하셨습니다-_-; 몰랐는데, 야후도 네이버데스크탑처럼 그런게 있는 듯 하네요. 최근 모니터가 커지면서 이런 위젯이 발달한 것 같은데요. 덤으로 adobe AIR에 대해서도 잠깐 설명하고 가셨네요 ^^

또 다시 쉬는시간! 오라클부스에서 실패한 게임을 다시 시도하기 위해-_-; 오라클부스로 갔습니다. 한번 해본 경험이 있어서 이번에는 무난하게 두 게임을 성공시켰습니다-_-; 4가지 중 하나 골라야하는데, 한개는 엄청 큰 가방, 한개는 아이스팩같은 거, 두개는 포장되어있는데, 한개는 볼펜인 듯 했습니다. 사람들이 골라갈 때 다들 가방을 골라갔는데, 저는 아무도 안 집어가는 포장된 알 수 없는 물체를 가져왔습니다. 뜯어보니 카드지갑이였네요-_-; 암튼 득템~
사용자 삽입 이미지
사용자 삽입 이미지

두번째 세션입니다! 허광남님의 개발팀 협업 프로세스와 오픈소스라는 주제로 발표하셨습니다.
항상 재미있는 발표 감사해요~ 허광남님 강연은 벌써 4번째인 듯 합니다 ^^ 항상 재미있어요^^ 여러 오픈 소스를 소개하시고, 주제가 바뀌었는지 개발자들의 현실과 이상에 대해서 발표를 하셨는데, 공감된 부분이 참 많았네요^^
그리고, 좋은 정보가 있으면 다른 사람을 설득시키기 위해 쇼를 하라고 하셨는데요. 저도 공감하는 게 변화를 싫어하는 사람들이 많이 있습니다. 그런 사람들에게 이런 방법이 더 좋다 라는 것을 소개하기 위해서는 그 사람을 설득 시키기 위한 쇼를 해야하는 것이 맞다고 봅니다^^ 그렇지 않고 평범하게 얘기를 한다면 '그냥 잘 돌아가는데 그냥 하지?' 라고 할 것입니다. 참고로 회사에서 아직도 SVN을 안 씁니다만-_-;(show를 해야겠군요-_-)

세번째 세션입니다! ALM - 일정관리, 개발, 빌드에서 테스트까지 자동화
에자일인 것 같습니다...예전에 스프링 세미나를 갔을 때 박재성씨가 얘기한 내용과 매우 흡사하네요^^
소스 형상관리는 SVN으로 하고, ANT를 통해 빌드를 하고, TRAC이나 JIRA를 통해 이슈관리를 하고, CI툴을 이용해 프로젝트를 관리하고, JUNIT을 이용해 테스트를 하고 등등 이런 식의 얘기를 박재성씨가 그 때 했는데, 이번에도 비슷하네요. 조병욱님도 박재성씨와 같이 마지막에 같은 얘기를 했는데요. 이걸 한번에 적용하려고 하지말고, 차근차근 적용을 해 나가라라고 하셨습니다. 그렇습니다. 우선 처음 접하는 사람은 뭔소리인가 합니다.
저도 SVN만 처음 접했을 때도 좀 어려웠거든요. 근데, 조금씩 적용해서 사용하다보면 어느정도 알게 됩니다. 저도 이제 겨우 이슈관리시스템을 좀 이해하고 그랬습니다만, 아직 헛슨(HUDSON)으로 하는 삽질은 끝나지 않았습니다ㅠㅠ 암튼 유용한 강의 감사했어요~ ^^

마지막 세션입니다! 제가 솔라리스에 좀 관심이 있어서 두번째 세션 오픈솔라리스를 선택했는데요. 오픈솔라리스에 대한 설명을 했는데, 역시나 잘 모르겠군요-_-; 버추얼박스로 오픈솔라리스를 설치를 해봤습니다만, 역시나 다룰줄도 모르고, 이걸로 뭘할 수 있나라는 것도 잘 몰랐던 기억이 나는데요. 오늘 이것저것 설명해주셨는데, 역시나 그래도 모르겠더군요-_-; 솔라리스는 좀 더 내공이 필요할 것 같습니다-_-; 이 오픈솔라리스도 우분투처럼 인터넷에서 다운받아서 자동으로 프로그램 설치되는 게 되는 모양이더군요 ^^ 그건 좋아요~ ^^ 프로그램 설치는 손쉽게~^^

아.....다섯번째 세션이 남았는데, 이건 그냥 잤어요-_-; 졸려서-_-;

마지막 경품 추첨을 하고, 끝났네요. 당첨은 당연히 안됐구요 ^^
사진은 사진기를 안가져가서 찍은 게 없네요-_-;
가서 받은 것 리스트라도 아래에서-_-;
사용자 삽입 이미지

원반인 것 같습니다만? 어디다 쓰는거죠?-_-;

사용자 삽입 이미지

이건 저번 JCO때 받았는데 또 주네-_-;

사용자 삽입 이미지

고급스러운 볼펜입니다만, ORACLE을 저렇게 붙이니...오라클이 명품펜 상표같습니다-_-;

사용자 삽입 이미지

마우스패드와 jco때 주다 남은 걸로 추정되는 볼펜-_-과 액정클리너 핸드폰 줄입니다.

사용자 삽입 이미지

아이티투데이 10월호랑 소프트웨어기업 ceo성장 스토리를 담은 책입니다.

PS. 우와.....오라클에서 상품 뭐이리 많이줘-_-; 갑부기업은 틀리네-_-;
 
Posted by 머드초보
,
 
이 망할 놈의 오라클은 LIMIT이 지원되지 않습니다.
LIMIT이 얼마나 편한데!!!
오라클에서 LIMIT과 같은 기능이 필요했습니다.

ROWNUM이라는 것을 알게 되었는데, SELECT를 하게 된 결과에 자동으로 처음부터 끝까지 1부터 숫자를 매겨주는 듯했습니다. 아, 그래서 만약에 10번째꺼부터 20번째꺼를 추출해봐야지 라고 이런 쿼리를 날려봤습니다.

[code]SELECT * FROM BIZLIST WHERE ROWNUM >= 10 AND ROWNUM <= 20[/code]
이렇게 하니까 아무것도 안나오더라구요.
이게 안돌아가는 이유는 ROWNUM이라는 놈이 가상 칼럼이랍니다. 그래서 만약 칼럼이 SELECT될 때 10개가 출력되야하는 상황이라면 첫번째꺼 출력하고 ROWNUM을 붙이고, 두번째꺼 출력하고 ROWNUM을 붙이고, 그러다보니 저 조건에 맞지 않게 됩니다.

첫번째 출력될 놈은 ROWNUM이 1인데, 저 조건에 부합하지 않습니다. 그래서 출력이 안되고, 10번째 출력될 놈도 출력하려고 보니 다 조건에 맞지않아요. 그러다보니 차례대로 다 안나옵니다-_-;

즉 조건에 부합한 놈이 출력되고 난다음에 ROWNUM을 붙여줍니다.
그래서 ROWNUM이 10을 1로 바꿔버리면 ROWNUM이 1인놈부터 20개까지는 출력이 되는것이죠.

제가 설명을 좀 못하니 여기를 참조 하세요 ^^
http://www.oracle.com/technology/global/kr/oramag/oracle/06-sep/o56asktom.html

저걸 악(?) 이용하면 LIMIT처럼 구현할 수 있습니다-_-;
[code]SELECT * FROM (SELECT ROWNUM RNUM, BIZLIST.* FROM BIZLIST WHERE STATUS = 'A') A
WHERE A.RNUM BETWEEN 10 AND 20[/code]
쿼리를 잘 보시면 A테이블을 서브쿼리를 날려서 만들어줍니다. 즉 우리가 10~20까지 추출해야할 데이터를 다 추출해서 A라는 테이블을 만듭니다. 여기서 A테이블을 보면 ROWNUM도 칼럼에 추가를 시킵니다. RNUM이라는 이름으로!
그다음 이 추출된 모든 것이 보면 ROWNUM도 다 붙어있습니다. 그래서 이걸 다시 SELECT해서 RNUM이 10과 20사이인 것을 추출하게 하면 되는것이죠.
A테이블에서 WHERE절은 원하는 조건이니 없어도 되는 것이고-_-;
별 것도 아닌데 거창하게 써 놓은 이유는 제가 이것 때문에 반나절을 고생해서 입니다-_-;
아놔....ㅠㅠ

 
Posted by 머드초보
,
 
기존에 Golden32나 Toad for Oracle을 썼었습니다.
그런데 오라클사에서도 자기들만의 GUI Tools같은 것을 만들었을 것이라는 생각에 찾아보니 Oracle SQL Developer라는 놈이 있더군요.

MySQL에서 제공하는 MySQL Administrator, MySQL Query Browser가 있는데, 자사에서 만드니 더 잘 만드는 것같아요. 뭐 단점이라면 포트가 막혀있는 곳에 접속이 안되는거?-_-; 그럴 땐 phpmyadmin을....-_-;

http://www.oracle.com/technology/software/products/sql/index.html
이곳에서 받을 수 있습니다.

뭐 암튼, 오라클에서 제공하는 SQL Developer라는 놈을 설치해봅시다.
설치랄 것도 없습니다. 그냥 압축풀고 실행하면 됩니다-_-;
JAVA로 만들어져서 JDK가 설치된 피씨거나, JDK가 포함된 버전을 받아서 실행하면 됩니다.

전 JDK가 있어서 없는 버전을 받았습니다. 그러면 처음 실행할 때 java.exe파일이 어디에 있냐고 물어봅니다. 가볍게 설치된 경로를 선택해서 java.exe파일을 선택해줍니다.

File -> New -> Database Connection 하고, 설정에 입력값들이 있는데 맞게 입력합니다.
Username, Password, Hostname, Port 뭐 이런거 입력하고, Save하고, Connect하면 접속이 됩니다.

사용하면서 느낀건데...뭔가 굉장히 불안정해요-_-;
30만건데이터를 파일로 추출하려고 하는데 메모리가 딸려서 다운이 되버렸어요.
지금은 또 그냥 알 수 없이 다운이 됐네요.
아직 좀 더 개선이 필요한 듯 합니다.

가장 맘에 드는 건 sql쿼리 만들 때 개발자들이 좋아라하는 Ctrl + Space를 지원합니다-_-;
사용자 삽입 이미지
또 뭐가 좋은지 확인해봐야지-_-;
 
Posted by 머드초보
,
 
Toad나 GOLDEN32를 사용하기 위해서는 오라클 클라이언트를 설치해야하는데 이걸 설치하고 GOLDEN32로 접속해서 쿼리를 날려서 검색하면 한글이 나와야 하는 부분이 ???로 나오게 됩니다.

사용자 삽입 이미지

원래 2008년 7월 12일 이라고 나와야하는데-_-; 안 나옵니다.
이게 서버쪽 케릭터셋이랑 클라이언트 케릭터셋이 안맞아서 그런데요. 서버는 한글이 된다면 KOREAN_KOREA.KO16KSC5601이걸로 되어있을껍니다-_-; 저도 오라클은 잘 모르지만 이게 맞는 것 같습니다.
그래서 클라이언트쪽에도 맞춰줘야합니다.

윈도우에 설치하셨다면 NLS_LANG을 추가하면 됩니다. 어디다가 하냐면 레지스트리에다가 합니다.
시작 -> 실행 -> regedit 실행

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
여기로 찾아가서 ORACLE에 오른쪽 버튼 누르고, 새로만들기 -> 문자열값 하고
NLS_LANG이라고 씁시다.
더블클릭해서 값을 KOREAN_KOREA.KO16KSC5601이라고 합시다.

시도는 안해봤는데 환경변수로 지정해도 될 듯 합니다.
NLS_LANG=KOREAN_KOREA.KO16KSC5601



사용자 삽입 이미지
오....한글이 나와요!!!!


 
Posted by 머드초보
,
 
오라클 10G R2부터 TDE라는 기능을 제공합니다.
(참고로 Enterprise 이상의 버전에서만 됩니다. Oracle XE를 설치했는데 안되서 삽질했었습니다-_-)

말그대로 Transparent(투명한) Database Encryption(데이터베이스 암호화) 입니다-_-;
투명하다는 얘기는 암호화가 투명하게 되었다는 얘기인데요.
암호화가 되어서 DATABASE에 저장이 되지만, 암호화가 됐는지 확인 하는 방법은 며느리도 모릅니다.
해당 계정의 사용자는 데이터를 다 볼 수 있어야하니깐요 ^^
데이터베이스를 도난당했을 때 해당계정의 비밀번호를 모르는 이상 데이터베이스를 확인 할 수 없는 것 같습니다.
즉, SQL Injection같이 Application 단에서 발생하는 해킹은....소용없다는 얘기죠.

장점이 있다면 어플리케이션을 변경하지 않아도, 데이터베이스를 암호화 할 수 있습니다.

어쨌든 암호화가 필요해서 체험해봤습니다.
우선 ORACLE 10g이 필요하죠.

전자지갑을 생성해야합니다.
cd $ORACLE_HOME/network/admin
sqlnet.ora파일을 편집해서 아래와 같은 내용을 넣습니다.
ENCRYPTION_WALLET_LOCATION=
  (SOURCE=(METHOD=FILE)(METHOD_DATA=
   (DIRECTORY=/export/home/oracle/oracle/product/10.2.0/db_2/)))

전자지갑 저장소를 설정하는 듯하네요.

이제 오라클에 접속해봅시다.
-bash-3.00$ sqlplus /nolog

SQL*Plus: Release 10.2.0.2.0 - Production on Wed Jul 16 16:57:08 2008

Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.

SQL> connect / as sysdba
Connected.
SQL> alter system set key identified by "welcome1";

System altered.

SQL>

이게 마스터키를 생성하는 부분인데요. 마스터키는 단 한번만 생성되어야 한다고 합니다. 다시 생성하게 되면 기존에 암호화 되어있던 데이터를 다시 암호화 해야한다는군요. 무슨 얘기지-_-;

저거대로 따라할라니까 힘들어서-_-; 그냥 insert해서 로그에 안찍히는 것만 보여주도록 해봅시다-_-;
Oracle LogMiner라는 놈을 이용해서 로그를 볼 수 있는데 이놈은 암호화된 데이터를 지원하지 않습니다. 그래서 암호화된 데이터는 보여지지가 않습니다.

테이블을 생성해봅시다.

connect oe/oe
create table cust_payment_info 
(first_name varchar2(11),
last_name varchar2(10),
order_number number(5),
credit_card_number varchar2(16) ENCRYPT NO SALT,
active_card varchar2(3));

Table created.
자세히 보면 credit_card_number 부분에만 ENCRYPT NO SALT라는 것을 적용했네요.
이렇게 해버리면 테이블 구조만 바꾸면서 암호화를 할 수 있습니다. 이미 만들어진 어플리케이션은 손대지 않아도 됩니다. 8i에서 제공하는 방법이 찾아보니까 있었는데 그건 키테이블을 따로 만들어서 데이터를 암호화시킨 상태에서 저장해버립니다. 나중에 데이터를 가져올 때 복호화 하고 그런식으로 하더라구요. 그거나 이거나 암호화해서 저장되는 법은 똑같습니다.

데이터를 insert해봅시다.
예제에는 조낸 많이 삽입하는데 조낸 귀찮으니까 1개만 삽입해봅시다-_-;
SQL> insert into cust_payment_info values
  2    ('Jon', 'Oldfield', 10001, '5446959708812985','YES');

1 row created.

SQL>

또 예제에서는 뭔가 삽질을 하는데 귀찮으니까 바로 로그확인에 들어갑시다-_-;
oradata에 있는 redo01~3으로 설정해주어야합니다.
SQL> connect / as sysdba;
Connected.
SQL> alter database add supplemental log data;

Database altered.

SQL> REM select member as LOG_FILE_LOCATION from v$logfile;
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/export/home/oracle/oradata/orcl/redo03.log', DBMS_LOGMNR.NEW);

PL/SQL procedure successfully completed.

SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/export/home/oracle/oradata/orcl/redo02.log', DBMS_LOGMNR.ADDFILE);

PL/SQL procedure successfully completed.

SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/export/home/oracle/oradata/orcl/redo01.log', DBMS_LOGMNR.ADDFILE);

PL/SQL procedure successfully completed.

SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR (options => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.COMMITTED_DATA_ONLY);

PL/SQL procedure successfully completed.

SQL> select sql_redo from v$logmnr_contents where
  2  table_name = 'CUST_PAYMENT_INFO' and operation='INSERT';

SQL_REDO
--------------------------------------------------------------------------------
insert into "OE"."CUST_PAYMENT_INFO"("FIRST_NAME","LAST_NAME","ORDER_NUMBER","CR
EDIT_CARD_NUMBER","ACTIVE_CARD") values ('Jon','Oldfield','10001',Unsupported Ty
pe,'YES');


SQL>

결과에 암호화된 칼럼은 Unsupported Type이라고 뜨는군요.
잘은 모르지만 암호화가 된 듯 합니다.

암튼 손쉽게 암호화 할 수 있게 해놨군요.
어플리케이션에 손대지 않는 방법을 찾다가 이짓까지 삽질해보는군요.
 
Posted by 머드초보
,