"맡은일에대한 보람(?), 그리고 하고싶은일을 한다는 약간의 즐거움(?)이
일과 병행될때 시너지 효과가 가장 클텐데...
하긴 말처럼 쉽진 않겠죠.... "
-->
저의 경우엔 회사에서 항상 두가지 일을 함께 함니다. 첫 째는 윗사람이 시키는
일상적인 업무입니다. 유지보수나 신규화면 개발이나 어차피 잼없는 일을 합니다.
그리고 또 하나는 저만의 프로젝트가 있습니다. ㅋㅋ( 매뚜기 프로그래머들의
노하우 쯤될까요 ㅎㅎ ) 잼있고 흥미있으며 엄무에 도움이 되는 것들을.
이런 것들을 하기전에 몇가지 준비가 필요합니다.
0 번 째. 내가 사용해야 하는 언어의 개발환경 구성하기
디버거를 포함한 소스 편집기( IDE ) 정도는 준비해야 합니다. 특히 디버거는
어떤 경우에도 준비하세요. 단순 벌래잡는 도구가 아닙니다. 사용하는 언어의
속 마음을 읽을수 있으며, 운영체제나 개발 환경을 이해할 수 있는 창구입니다.
java 를 작성한다면, eclipse 개발환경은 최소한 구성해야 합니다.
이제, 자신만의 프로젝트를 위한 최소한의 환경이 완성되었다면 슬슬 작업을
시작할 수 있습니다. ㅋ
첫 째. 유지보수에 필요한 자기만의 툴을 작성합니다.
시간이 많이 걸리고 난위도가 높지만 몇 일이고 몇 주고 혼자 숨어서 개발이 완료되면
그 업무에 대해서 엄청게 효율이 증가 됩니다. 여기서 약간의 팁이 필요한데요,
개발후 업무 일처리 시간은 이전 처럼 유지해야 합니다( -.-;; ).
그래야 시간에 여유가 더 많이 생기고 새로운 나만의 프로젝트를 다시 시작하기 쉽습니다.
( 이렇게 자신의 프로젝트를 하다보면 스킬 향상이 많이됩니다. 외적으로는 업무를 잘하는
사원으로 인정받고 내적으론 일에대한 무력함이 없어집니다. 자신의 화두와 같죠.
편한툴을 만들자 ~~~~ ㅋㅋ)
둘 째. 소스를 효과적으로 작성할 수 있는 팁들을 잘 수집하고 관리해야 합니다.
특히 유지보수는 프로그램 코딩이 읽기에 깨끗해야 나중에 다시 손질할 때 편합니다.
변수명, 띄어쓰기, 줄 맞추기, 주석 등을 깔끔하게 처리하는 습관을 가지면 자기가
작성한 소스를 나중에 볼 때 한 눈에 들어 옵니다.
셋 째. 소스이력관리를 위해 버전관리 툴을 개인적으로 사용해야 합니다.
cvs( wincvs 추천 )으로 자신이 작성한 소스를 관리하세요. 소스를 서버에서
관리하더라도 자신이 수정하고 개발환 소스는 cvs 로 별도로 관리하세요. 여기에는
특별한 저만의 이유가 있습니다.
첫째 에서 셋째에 대한 실제 예제를 보여 드리면( 저의 노하우를 알려드립니다 ㅋ )
첫 째 자신만의 개발툴 :
jsp 프로그램중에 비지니스 처리 부분에서는 대부분 SQL 문이 포함됩니다. 예를 들어
SQL 구문이 아래 [ 보기 1 ]와 같다고 하면( SQL 모양이 의도적입니다. 설명을위해 )
---------------------------------------
select col_1, col_2, col_3,
col_4, col_5, col_6
from tb_test
where col_2 = 'cod01' or
col_1 = 'key01'
--------------------------------------
[ 보기 1 ]
이런 SQL 을 informix/oracle DB SQL Tool 에서 실제 동작 여부를 테스트합니다.
그리고 이렇게 실행이 확인된 SQL 구문은 jsp 내에서 문자열로 하드코딩 됩니다.
( 물론 대부분의 SQL 이 [ 보기 1 ] 보다는 엄청 복잡하고 난해합니다. 심지어 그 line
수가 100 라인이 넘는 경우도 많습니다. union 으로 계속 연결되는 경우에 .. )
jsp 에서 다음 [ 보기 2 ] 처럼 sql 문자 변수로 저장해서 사용하게 됩니다.
----------------------------------------------------
sql = "select col_1, col_2, col_3,";
sql += "col_4, col_5, col_6";
sql += "from tb_test";
sql += "where col_2 = 'cod01' or";
sql += "col_1 = 'key01'"
----------------------------------------------------
[ 보기 2 ]
[ 보기 2 ] 의 sql 변수 내용을 실행하면 SQL 구문 오류가 납니다. 왜냐 하면 문자
열이 더해지면서
" ... col_6from tb_testwhere ... orcol_1 ... "
이렇게 공백처리에 오류가 있기 때문입니다. 뿐만 아니라 변수 sql 문자열 처리
과정에도 " 의 쌍이 누락되거나, 또는 " ' 이렇게 더블/싱글 이 함께 사용되거나
하는 자잘한 버그들이 발생됩니다.
이런 사소한 오류 때문에 디버깅을 한다면 ""엄청난"" 시간 손실이 옵니다.
이런 SQL 문을 안전하게 주석처리하는 웹 프로그램은 간단히 작성할 수 있습니다.
textarea 에서 [ 보기 1 ]의 SQL 문장을 입력받아 enter 뒤에 공백처리가된 sql 문자열을
document 에 출력하면됩니다( javascript replace 명령 한 줄이면 처리됩니다 ).
이렇게 간단히 html과 javascritp 로 작성되지만 그 효과는 기대이상입니다.
최종 결과로 enter 코드 뒤에 공백이 추가된 sql 문자열 이 다음 처럼 생성됩니다.
-----------------------------------------------------
sql = "select col_1, col_2, col_3, ";
sql += "col_4, col_5, col_6 ";
sql += "from tb_test ";
sql += "where col_2 = 'cod01' or ";
sql += "col_1 = 'key01' ";
-----------------------------------------------------
[ 보기 3 ]
이런게 자신의 개발툴입니다. 개발 툴이라 해서 거창하거나 멋있어야 하는 법은
없습니다. 첨에는 간단한 툴을 만들지만 시간이 지나면 상당히 강력한 툴도
개발하게 됩니다( 소스 생성기 처럼 ㅋㅋ ). 또 한 예로 단순 javascritp 명령어나
정규식 결과를 바로 확인 할 수 있는 웹 프로그램이 유명 개발자 자료실에
널려있습니다. 자기환경에 맞게 수정해서 사용 하싶시요. 좋은 도구가 됩니다.
단순한 도구가아닌 자신의 동반자가 됩니다. 헤헤. 수십라인의 SQL 을 버튼하나로
jsp sql 문장으로 만드어 사용하는 기분이란 ..
둘 째 효과적인 소스코딩 :
사실 저처럼 프로그램 코딩을 전문적으로 하는 사람은 코드 하나 하나에 신경을
쓰게됩니다. 유지보수 측면에서 최대한 손쉽게 처리될수 있게요. 하지만 그것이
쉬운 작업은 아닙니다. 이런 주제를 다룬 책들도 있는 것을 보면 가볍게 다룰
것은 아닙니다.
"첫 째 자신만의 개발툴 "에서 소개된 sql 변수로 작성된 jsp 소스는 "절대"
하지말아야 하는 소스의 표본입니다( 버그로인한 시간 잡아먹는 하마입니다 )
만일 [ 보기 3 ] 의 sql 문자열에 오류가 생겨 println 으로 출력한다면 다음 처럼
한줄로 죽~ 출력됩니다( 읽기 편하심니까 ㅋ ).
select col_1, col_2, col_3, col_4, col_5, col_6 from tb_test where col_2 = 'cod01' or col_1 = 'key01'
몇 십줄에서 100 라인이 넘는 sql 이 이렇게 출력되면 SQL 문장의 오류를 찾는건
절대 쉽지않습니다. 이 뿐만 아니라 SQL 구문은 요구사항에 의해 언제든 변경될 수
있습니다.
[ 보기3 ]에서 두 번째 줄이 필요 없게?榮摸?, 주석처리나 삭제를 하고 첫 번째 줄 끝의
Column 구분자 , 을 삭제해 줘야 합니다. 별거 아닌것 같지만 콤마 삭제가 눈에 들어오지
않아서 애를 먹이는 경우도 있습니다.
따라서, JSP 내에서 SQL 문자열 코딩은 좀더 다루기 쉽게 다음 처럼 작성 합니다.
-----------------------------------------------------------------
sql = "\n select col_1, col_2, col_3 ";
sql += "\n, col_4, col_5, col_6 "; // 주 1)
sql += "\n from tb_test "; // tb_test : 설명
sql += "\n where col_2 = 'cod01' "; // cod01 : 설명
sql += "\n or col_1 = 'key01' "; // key01 : 설명
|+-|--|-+-|<------------+--------------->|----|<---+--------->|
| | | |
| | +---> 4) SQL 구문 +--> 5)SQL
| +--> 3) EOL과 column 구분자 조건 설명
+--> 2) 변수
-----------------------------------------------------------------
[ 보기 4 ] * 위 소스 형태는 코딩의 내공이 높은 스승님의 스타일 입니다 ㅋ
SQL 문자열이 무슨 코볼도 아니구( ㅋㅋ ) 비웃을수 있지만 이 방법은 수많은 개발자
들의 노력의 산물임을 보면 왜 저렇게 사용되는지 분석해 볼 가치가 있습니다.
우선 "3) EOL과 column 구분자" 부분의 EOL ( \n : End of Line ) 처리를 SQL 문자열
앞에 삽입한 것은 맨 뒷쪽에 추가되는 것 보다 코딩과 출력에 편합니다. 이렇게 각 줄에
EOL 처리를 하면 sql 변수를 println 으로 출력하여 실제 완성된 SQL 구문을 확인할 때
명확하게 해석됩니다.
한 줄로 죽~ 출력되는 것 보다는 SQL 구문 오류 검사에 훨씬 효율적입니다.
또 한 SQL 오류검사만을 위한 것이아니라 간혹 이전에 작성된 SQL 구문이 필요한 경우가
많습니다. SQL 자체가 실제 업무의 내용을 포함하기 한번 작성된 SQL 은 항상 재사용이
됩니다. 즉, println 으로 출력된 SQL 문장을 복사해서 재사용하기 편합니다.
그리고 "주 1)"로 포기된 두 번째 줄은 \n, 처럼 컬럼 구분자 콤마( , )가 포함되있습니다.
왜 ?.. 그것은 두 번째 라인이 주석 처리되거나 이동될 때 다른 select 절에
영향을 주지 않기 위해서 입니다. 즉, 두번째 라인을 다음처 럼 주석처리할 경우
//sql += "\n, col_4, col_5, col_6 "; // 주 1)
sql 변수에서 생성된 SQL 구분은 정상적으로 실행됩니다. 단순 주석처리하면서 SQL
문장에 문제가 생긴 것은 아닌가 확인해야 하는 수고를 덜 수 있습니다.
5 번째 라인의 or 명령도 컬럼 구분자 콤마( , ) 의 작성과 같은 이유로 4 번째 맨 줄뒤가
아닌 5 번째 줄 앞에 놓이게 했습니다.
"4) SQL 구문" 처럼 작성된 SQL 구문은 "블럭 복사"를 하여 손쉽게 복사하여 사용할 수
있으며 SQL 구문이 어떤 내용인지 한 눈에 식별됩니다. 즉, println 을 해서 SQL 구문을
일일이 확인하지 않아도 jsp 소스 편집상에서 한 눈에 확인이 됩니다.
[ 보기 2 ], [보기 3 ] 나 [보기 4 ]은 모두 같은 SQL 구문이지만 [보기 4 ] 만 읽기에
편합니다.
"5) SQL 조건 설명"은 각 SQL 의 조건절이나 설명이 필요한 line 에 주석을 첨가한
모습입니다. 몇 주 또는 몇 달 뒤에 다시 보게 될 때 주석을 첨가한 자신에게 감사하게
됩겁니다.
그렇다면, 모든 sql 문자열 작업을 이렇게 할수 있겠습니까 ?. 현실적으로 힘듭니다.
그래서 첫 번째 소개한 것 처럼 정형화된 sql 형식에 맞게 출력되는 ?? 프로그램 툴을
자신이 직접 개발하게 됩니다. 모양에 상관없이 실행만 되면 그 효용 가치는 매우 큼니
다. 더욱이 SQL 문장이 길고 난해할 수록 그 진가를 발휘합니다.
무림 고수들의 SQL 작성과 과련된 코딩 기술이 생각보다 많습니다. 코딩의 달인들이
어떻게 작업한는지 좀더 기술적인 부분을 소개하겠습니다.
대부분의 업무용 SQL 은 위에서 작성된 [ 보기 1~3 ] 처럼 단순하지 않습니다. 다양한
조건에 맞게 출력되기 위하여 SQL 의 where 절이 유동성있게 만들어저야 하기 때문
입니다.
다음 예가 이런 where 절의 모습입니다.
-----------------------------------------------------------------
String cod = request.getParameter("cod")
String key = request.getParameter("key")
sql = "\n select col_1, col_2, col_3 ";
sql += "\n, col_4, col_5, col_6 ";
sql += "\n from tb_test ";
sql += "\n where col_2 = '" + cod + "' "; // 1)
if( key.equal("Y") {
sql += "\n or col_1 = 'key01' "; // 2)
}
-----------------------------------------------------------------
[ 보기 5 ]
SQL 구문에서 where 조건의 col_2 값이 가변적일 경우 즉, 다른 web page 에서
parameter 로 넘오온 값이 사용될 때 1) 처럼 문자열을 더하도록 작성되야 합니다.
col_2 조건의 문자열 '' 처리가 한 눈에 들어옴니까 ?
그리고 SQL 구문 "or col_1 = 'key01'" 은 jsp 의 parameter 로 넘어온 key 값이
"Y" 인 경우에 만 사용되기 때문에 2)와 같이 if 문이 사용되었습니다.( 실제 이런 형태의
조건 절이 상당히 많습니다 )
이제 현실적으로 본다면, 조건절이 저렇게 간단한 경우는 거의 없습니다. 대부분 여러
테이블이 복잡한 조인관계로 작성되고 where 조건 역시 난해하게 작성됩니다. 각각의
조건에 [보기 5 ] 처럼 문자열을 더하거나 if 조건이 사용되어 유지보수를 힘게하는
경우가 많습니다.
jsp 소스상에서 SQL 구문의 문자열 '' 이 맞게 되었는지 또는 if 로 복잡하게 작성된
SQL 구문이 실제 정상적으로 생성되었는지 확신하기 어렵기 때문에 println 함수로
sql 변수를 출력하여 실제 생성된 sql 을 검사하게됩니다.
보통 몇번이나 확인하게 될 까요. 저의 경험상 지겹게 하게됩니다.
이런 SQL 작성은 "절대" 피해야할 소스의 표본중에서 *대표*급니다. ㅋㅋㅋㅋ
아래 sql 작성에 사용된 tip 은 sql 문자열 생성을 간결하게 처리하는 방법을 보여주는
교과서적인 내용입니다
-----------------------------------------------------------------
String cod = request.getParameter("cod")
String key = request.getParameter("key")
sql = "\n select col_1, col_2, col_3 ";
sql += "\n, col_4, col_5, col_6 ";
sql += "\n from tb_test ";
sql += "\n where col_2 = ':col_2:' "; // 1)
sql += "\n or col_1 = decode(':col_1:', 'Y', 'key01', col_1 ) "; // 2)
sql = sql.replaceAll( ":col_2:", cod );
sql = sql.replaceAll( ":col_1:", key );
-----------------------------------------------------------------
[ 보기 6 ]
좀 생소하게 보이십니까. ㅎㅎ
where 절을 조건에 맞게 구성하기 위하여 jsp 의 제어명령인 if 나 문자열 더하기가 사용
되지 않았습니다. SQL decode 와 문자열 치환 replaceAll 로 간단히 해결됩니다.
( replaceAll 은 java 1.4 이상 버전으로 1.3 버전대를 사용하는 분은 1.4 소스
String.replaceAll 을 복사해서 사용하시면 됩니다 )
1) 의 설명은 그다지 필요 없네요. 그냥 parameter 로 넘오온 cod 변수의 값을 문자열
치환함수로 치환한 겁니다. 별거 아닌것 같지만 SQL 문자열 '' 의 사용이 한 눈에 식별
되므로 구문 오류가 현저히 줄어들게 됩니다.
그리고 2) 번 decode 사용은 좀 설명이 필요하겠네요.
변수 key 값이 'Y' 인 경우 SQL decode 명령에 의해서
--------------------------------------------
col_1 = decode('Y', 'Y', 'key01', col_1 )
-> 실제 동작
col_1 = 'key01'
--------------------------------------------
[ 보기 7 ]
으로 실행됩니다. 또한 변수 key 값이 'Y' 가 아닌 경우 col_2 = col_2 로 조건절에
아무런 영향을 주지 않습니다.
--------------------------------------------
col_1 = decode('', 'Y', 'key01', col_1 )
-> 실제 동작
col_1 = col_1
--------------------------------------------
[ 보기 8 ]
처음에는 decode 사용이 jsp if 보다 더 복잡하게 보일수 있습니다. 하지만 SQL 문이
복잡한 경우 if 문을 사용한 경우와 decode/replaceAll 을 사용한 경우와 비교하면 그
효과가 확연히 들어나게 됩니다. 실제 decode 구분이 눈에 익숙해지면 전체가 한 단어
처럼 인식되므로 전체 SQL 구문해독이 상대적으로 쉬워집니다.
제가 이 방법을 SQL의 절대 고수인 저의 스승에게 전수 받은날 전 한동안 어리석었던
저의 삶을 돌아보게 되었습니다( 스승왈 나도 배운거다 . ㅋㅋ )
이 벙법은 온갖 다양한 응용이 가능합니다.
web 화면에서 combo box 로 넘오는 parameter 처리서 부터 like 구문 처리, 숫자, 문자
처리 그야 말로 SQL 구문 생성의 마법과도 같은 코딩 기술입니다( 오라클, 인포믹스,
MS SQL, 사이베이스 decode 구문을 지원하는 모든 DB에 적용됩니다 )
DB 측면에서 설명을 잠깐 하면,
간혹 개발자 분들이 2) 에서 작성된 decode 구문이 SQL 문법상 편법이며 바람직하지
않다고 또는 replace 명령이 여러번 사용되는 것역시 좋지 않다고 질문하는 경우가
있습니다. 음...
과연 그럴까요.
이 설명은 DB index에 관련과 연관이 있습니다. 결론적으로 decode 구문은 SQL 실행에
긍정적인 효과를 만들며 부정적인 효과는 거의 없으며 편법도 아님니다.
그렇다면 뭐가 긍정적인 효과를 가저올까요.
저의 SQL 절대 고수인 스승왈 ~
"만일 index 가 col_1, col_2 두 컬럼으로 작성되었을 경우 col_1 의 조건이 없다면
[ 보기 5 ] 로 생성된 SQL 의 col_2 는 index 를 사용하지 못하는 반면 [ 보기 6 ] 으로
작성된 SQL 의 경우 col_1 = col_1 조건으로 인해 col_2 가 index 를 사용하게 되므로
SQL 실행 결과가 더 효과적이다( 시너지효과라고 할까요 ㅋㅋ ).
이 방법은 DBA 들이 SQL 성능향상을 할 때 간혹 사용되는 기술인데 이것이 프로그래머
의 sql 변수 작성에 응용되었구나.
아마도 최초 작성자는 DB Enginer 이거나 내공이 높은 무림 고수 프로그래머임에 틀입없다. !! "
(제 스승의 내공은 ㅎㅎ)
실제, decode 를 사용한 SQL 조건절 생성은 비지니스 로직 처리를 하는 jsp 프로그램
(java, 서버 db 관련 프로그램등 ) 에서 재미나는 역활을 합니다.
decode 방법을 사용하면 거미줄처럼 복잡하게 얽인 SQL 생성 문자열이 한 눈에 해석이
됩니다. 그리고, replace 가 여러번 사용되서 비효율적이라는 것은 나무는 보지만 숲을
보지 못하는 것과 같습니다. replace 때문에 전체 퍼퍼먼스가 떨어질까요 ? ㅎㅎ
이제 마지막으로 SQL과 관련된 팁을 한 개 더 소개하겠습니다. 이 팁은 순수한 저의
생각으로 작성된 팁입니다. 헤헤
"스승왈 너두 하산할때가 되었느냐 ? 꺅 아니옵니다 ㅋㅋ"
[ 보기 6 ] 프로그램을 보면, sql 문자열 작성에서 사용되는 변수들인 cod, key 는
String 변수로 선언되고 그 값은 HttpServletRequest.getParameter 함수로 얻게
됩니다. 그렇다면, SQL 조건에 사용되는 변수가 많~~ 다면 ??
바로, 이렇게 됩니다.
( jsp 에서 처리는 )
-------------------------------------------------------
String cod1 = request.getParameter("cod1")
String cod2 = request.getParameter("cod2")
String cod3 = request.getParameter("cod3")
String cod4 = request.getParameter("cod4")
String cod5 = request.getParameter("cod5")
String cod6 = request.getParameter("cod6")
String key1 = request.getParameter("key1")
String key2 = request.getParameter("key2")
String key3 = request.getParameter("key3")
System.out.println( "cod1 " + cod1 );
System.out.println( "cod2 " + cod2 );
System.out.println( "cod3 " + cod3 );
System.out.println( "cod4 " + cod4 );
System.out.println( "cod5 " + cod5 );
System.out.println( "cod6 " + cod6 );
System.out.println( "key1 " + key1 );
System.out.println( "key2 " + key2 );
System.out.println( "key3 " + key3 );
-------------------------------------------------------
[ 보기 9 ]
9 개의 String 변수가 선어되고, 단순히 값이 잘 넘어오는지 확인하기 위해서
println 문장을 9 번 사용했습니다.
과장이 심하다고 말할수 있지만, 최악의 경우 저렇게 전체 parameter 값들을 확인
해야할 경우가 있습니다.
그렇다면, 이렇게 수 많은 변수와 출력문 그리고 값들의 null 여부 검사등을 줄줄이
나열하여 작성하면 jsp 소스에는 불필요한 코드로 넘치게된다.
그렇다면 jsp web page 가 넘긴 parameter을 어떻게 처리해야 효과적일 까요.
넘어온 parameter 들을 Hashtable 넣어서 ( 동적 object array 라고 생각하면 ) 단,
하나의 변수로 관리하면 됩니다( 벌써 이해를 하셨나요 ㅎㅎ )
다음 소스를 보면,
-----------------------------------------------------------------
<%@ page import="java.util.Enumeration" %>
<%
Hashtable hpam = new Hashtable(); //1)
Enumeration penums;
String name = "";
String value = "";
for( penums = request.getParameterNames() ; penums.hasMoreElements() ; ) {
name = penums.nextElement().toString();
value = (value=request.getParameter( name ))==null ? "" : value;
hpam.put( name.trim(), new String(value.trim()) );
System.out.println( "test.jsp - name : " + name + ", value : " + value);//11)
} //12)
sql = "\n select col_1, col_2, col_3 ";
sql += "\n, col_4, col_5, col_6 ";
sql += "\n from tb_test ";
sql += "\n where col_2 = ':col_2:' ";
sql += "\n or col_1 = decode(':col_1:', 'Y', 'key01', col_1 ) ";
sql = sql.replaceAll( ":col_2:", (String)hpam.get("cod") );
sql = sql.replaceAll( ":col_1:", (String)hpam.get("key") );
%>
-----------------------------------------------------------------
[ 보기 10 ]
[ 보기 9 ] 보더 더 복잡해졌다고 생각하십니까 ? 헤헤.
새로인 추가된 부분은 1) ~ 12) 라인들로 web page 에서 얻은 parameter 을 hparams
해쉬 테이블에 넣습니다( 단순히 배열에 넣어두었다고 생각해도됩니다 )
11) 라인에 넘어온 parameter 전부를 print 함으로써 어떤 변수와 값이 들어왔는지
""항상"" 자동으로 ""확인""이 가능합니다. [ 보기 9 ] 에서 장황하게 나열된 println 문이
모두 필요없게 되었습니다.( 라인 1~12 에 신경쓰지 않아도 됩니다. 그냥 변수 hpam 만
사용하면 됩니다. )
또한, 9 개의 String 변수를 일일이 나열하여 선언하고 getParameter 함수로 그들의
값을 설정하지 않아도 됩니다. 심지어는 몇개의 parameter 가 넘어오는지
신경 쓰지 않아도 됩니다. ㅋㅋ
이제 할 일은 (String)hpam.get("cod") 처럼 해쉬 테이블에 자동으로 넣어둔 parameter
의 값을 로 꺼내서 사용하기만 하면 됩니다( 실제 cod 변수가 (String)hpam.get("cod")로
변경된 것 이외에는 별다른 변화가 없습니다. 더구나 sql 변수는 전혀 수정되지 않았습니다)
[ 보기 10 ] 의 형태는 제가 실제로 즐겨 쓰는 형식이고 모든 SQL 처리를 하는 jsp 소스에
적요되어 사용중인 형태입니다. 이제 감이 옵니까. 아니면 벌써 이렇게 작업을 하고
계셨습니까 ? OTL
( 저같은 경우 개발이나 디버그시에는 파라메터 해쉬처리 부분 1) ~ 12) 부분을 jsp
첫 부분에 복사해 넣고 web page에서 넘어오는 모든 parameter 들을 항상 감시한다.
그냥 자동 출력되는 것들을 감시합니다. 어떤 놈들이 넘어오는지 노려보면서 ㅋㅋ )
팁 : col_2 가 like 구문인 경우 소스
-----------------------------------------------------------------
sql += "\n where col_2 like decode(':col_2:','%%','%', ':col_2:') ";
sql = sql.replace( ":col_2:", "%"+(String)hpam.get("col_2")+"%" );
-----------------------------------------------------------------
* col_2 가 사용되지 않는다면 즉, "" 면 col2 like % 구문이 되어 col_2 = col2
처럼 조건대상이 전체가 되므로 무시됩니다.
흠, 쓰다보니 또 다시 무자게 길어?? 네요.
세번째 설명은 과감히 생략하겠나이다. -.-;;;
cvs 사용은 단순 백업용 프로그램이기 보다는 프로젝트를 관리하는 하나의 필수품
입니다. 다만 그 사용이 복잡하고 힘들지만 wincvs 에서 쉽게 사용이 가능하고
Eclipse 와 연결하면 ( wincvs 와 eclipse 연결도 바로됩니다 ) 웹 프로젝트 단위로
소스관리가 됩니다.
생략하려던 이야기를 하기로 맘먹었습니다 ㅋㅋ
별다은 이야기는 아닙니다. 저는 보통 소스를 작성할 때 많은 설명을 주석으로 달아놓습
니다. 하지만 소스가 저 개인의 것이 아니며 운영하는 모든 사람들이 보는 것이기 때문에
사소한 것 까지 모두 설명하기 어렵습니다. 개인적인 내용은 오히려 보는 사람들에게
혼란을 줄 수도 있기 때문입니다.
그래서 저 자신만을 위한 cvs 를 사용합니다. 자세한 주석처리와 설명 팀들과 테스트된
소스들 이런 저런 것들이 포함된 소스들은 별도의 cvs로 기록됩니다. 그리고 제 PC 에서
테스트 완료된 소스는 잘 다듬고 정리하여 서버로 옮김니다. 결국 제 cvs 저장소에는
두 가지 버전이 항상 남게됩니다. 저만을 위한 소스와 배포용(작업이완료된) 소스 이렇게
요. 몇 주고 몇 달이고 지난 후에 다시 그 소스를 유지보수 할 때에는 이전에 cvs 에 저장된
소스를 항상 꺼내서 비교합니다.
다른 사람이 어디를 수정했는지 그리고 그 때 제가 어떤 작업을 했는지.. 헤헤헤
번거로운 단점도 있지만 빠른 일처리를 위해서는 이런 방법도 좋습니다. 옛날의 기억이
새록 새록 떠오르거든요. 제가 퇴근하기 전에 하는 마지막 일은 cvs root 를 제 USB
저장소에 백업하는 작업입니다. 몇 일, 몇 주 작업한 소스를 날려본 분이라면 백업의
소중함을 누구보다 더 잘아실겁니다.
마지막으로 제가 즐겨 사용하는 툴을 ( 본인 사용위주로 설명) 소개할 까 합니다.
이들 툴들은 항상 사용되는 것은 아니고 프로젝트 별로 각각 설정을 하면서 상황에
맞게 조합되어 사용됩니다.
( 대부분 FSF 자유소프트 들이고 간혹 라이센스 등록이 있지만 강제적이지 않는 것들만
사용합니다. 상용 프로그램은 아쉽지만 ㅋㅋㅋ )
주 : 아래 나열된 프로그램을 모두 설치하려는 뜻은 아님니다. 설치 만 하더라도
많은 시간이 걸리며 설치 한 후에 잘 동작한다는 어떤 보장도 없습니다. 한 예로
cygwin 설치는 일반 linux 설치 처럼 쉽지 않습니다. 서버의 환경 설정을 직접 수작
업으로 모두 해 줘야 하기 때문입니다.
따라서, jsp, java 에만 관심이 있다면, Apache tomcat, eclipse, mysql등 최소한
동작에 필요한 것 만 설치하세요.
* 가상 머신과 unix/mingw 환경
vmware : http://www.vm-ware.co.kr/download/ ( 상용 프로그램 )
가상 머신 설치 프로그램 ( PC 에서 linux, windows 등 별도의 O.S. 를
동시에 실행할 수 있게 해준다. Client/Server 프로그램 작성시 또는
프로그램의 치명적인 실행오류로 O.S. 가 빈번히 죽을때 가상머신에서
실행하고 디버깅을 위해 주로 사용된다. 기본 PC 메모리 2 G 이상 )
cygwin : http://www.cygwin.com/
windows 에서 posix(unix) 개발환경
표준 unix 환경을 지원하므로 서버 프로그램 작성시 해당 Library 만
지원되면 실제 서버에서 test 할 필요없이 pc 에서 cygwin 환경에서 거의
모든 test 가 가능하다. 단, unix 환경에 익숙 하지 않은 경우 환경설정
에서 부터 어려움이 생기고 한글지원등 어려운부분도 있다.
cygwin 은 단순 tool 아닌 unix 개발환경울 지원하기 위함이 목적이다.
단순히 gcc가 제공되는 것이아니라 Xwinows 가 컴파일 되어 실행되고 수백개
의 unix 명령들이 제공되며 완벽한 posix 개발환경이 제공된다. 즉, 소프트
개발만을 위한 다면 별도의 UNIX 서버가 필요없다.
mingw : http://www.mingw.org/
ms winows program을 위한 gnu gcc ( 부분적인 com 지원 )
msys : http://www.mingw.org/
mingw 환경을 지원하기 위한 환경으로 cygwin 의 windows 버전.
cygwin 의 명령중 일부분을 mingw ( windows gcc ) 개발환경을 지원한다.
기본 unix 명령들이 dos 프로그램과 잘 어울려셔 실행된다.
dev-cpp : 홈피: http://www.bloodshed.net/dev/devcpp.html
다운: http://prdownloads.sourceforge.net/dev-cpp/devcpp-4.9.9.2_setup.exe
mingw 용 IDE. Dev-Cpp에는 gdb가 포함되어 실시간 디버깅이 됩니다.
세련된 화면과 mingw 로 작성된 실행파일 자체는 그 어떤 라이센스 제약
받지않는 개발자의 소유입니다. 그런 이유로 SDK 수준에서 작업하는 개발
자들에게 많이 사용됩니다. 단순히 C 언어를 공부할 경우제 제가 강력하게
추천하는 개발툴이구요. 무엇보다도 gcc에 익숙해질수 있는 기회를 제공
합니다.
* MS 관련 Tool : 웹 작업을 주로 하므로 지금은.. ㅋ
Platform SDK 2003 : http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
Windows MS SDK ( MS VC 1.0 초창기때 부터 지원되는 SDK )
VC Tool Kit 2003 : http://ftp.iinet.net.au/pub/microsoft/vctoolkit/
무료 MS C/CPP 컴파일러 ( MS 에서 mingw 에 대응하기 위해 2003 년도에 전격
무료 컴파일러 제공, 단 IDE 환경은 제외 ). 컴파일러만 제공되므로 실제 사용은
SDK 를 설치해야 되며 MFC 사용이 되지 않으므로 실제 초보자를 위한 환경은
아니다. 지금은 공식적으로 2005 Express 시리즈로 대체되었다.
Visual C++ 2005 Express : http://msdn.microsoft.com/vstudio/express/visualC/default.aspx
무료 MS VC++ 개발 툴 ( MS VC 와 같이 IDE 를 포함한 개발 패키지로
VC Tool Kit의 후속 툴 ) MSVC 보다 더 좋은 ( ? ) 개발환경을 지원한다.
MSDN 까지 포함되어 실제 전부 설치하면 3 G 정도 공간이 필요하다.
Express 시리즈는 Visual Basic, Visual C++, Visual Web, Visual C#,
Visual J#, SQL Server 등 기존에 고가에 판매되던 개발툴을 무료로
사용할수 있습니다. 그렇다고 Mingw 같이 FSF 세계의 툴들의 영향이 줄어
드는 것은 아님니다. 저같은 경우에도 MS Express 가 너무 무겁기 때문에
잘 사용하지 않거든요. 간단한 DLL 을 만들어 사용하는데 Express 까지
사용할 필요가 없기 때문입니다. Dev-CPP(Mingw) 만으로 충분하거든요
어떻든 MS 에서 무료 컴파일 그것도 완벽한 패키지를 배포할 것이라고는
사실 누구도 상상하지 못했을 껍니다. FSF 의 승리일까요. 아니며 MS ? ㅋㅋ
WinDbg : http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
windows Debugger
MS 에서 제공되는 windows debugger 이며 command 수준의 디버거로 gdb 를 연상하면
됩니다. assemble 레벨의 디버거( 진정한 윈도우 디버거 ㅋ )
Microsoft Script Editor 10.0 : MSE7
MS Office XP 에 포함된 것으로 MS JavaScript 디버거로는 최고의 성능을 발휘합니다.
대부분 MS Offic XP 설치후에 이런 툴이 있는지 조차 모르는 경우가 많습니다. ㅋ
실제 위치는 "C:\Program Files\Microsoft Office\OFFICE11\MSE7.EXE" 에 있으니 MS
Office XP 사용자라면 사용해보세요. 참고로 MS Office 설치때 이 툴이 빠진 경우가
많은데 Office XP 추가설치하시면 됩니다.
Microsoft Script Debugger : scd10en.exe ( 크기 : 669648 (654k) )
이 프로그램은 MT/2000 용 Javascript debugger 이지만 Win XP 에서도 실행됩니다.
MS Site 에서 download 하려면 windows 정품체크 합니다(-.-) 그냥 파일명으로
검색하면 링크된 곳 많이 나오니까 그냥 내려받아서 사용하시면됩니다.
사용은 MS IS 도구->인터넷 옵션 -> 고급 에서 * 스크립트 디버거 사용으로 하시면
됩니다. 주의 할 것은 원래 jscript 오류나면 자동으로 debugger 실행되서 디버거할
거냐고 묻습니다. 디버거를 하면 소스의 오류난 곳이 표시되는데 "이때" step in/out
등으로 실시간 디버깅은 되지 않습니다.( winXP 멈추는 경우가 생깁니다. ㅋ )
그냥 오류난 정확한 위치만 확인하고 종료하세요. 작고 가벼워서 그냥 켜두고 사용하기
는 편합니다. 오류 위치는 귀신같이 찾거든요 ㅋㅋ
* 웹 구축 관련 프로그램
Apache : http://www.apache.org/
웹세계에 제일 많이 알려진 Web Server. 아파치를 생각하지 않고는
그 어떤 개발도 생각할 수 없다. ㅋㅋ
Apache Tomcat : http://tomcat.apache.org/
Tomcat 5.5.9. 아피치와 함께 웹세계의 가장많이 알려진 JSP Servlet
Container. 일반적으로 자신의 PC 에 jsp, java를 공부할 목적인경우
Apache Web Server 설치없이 Tomcat 만으로도 충분하다.
log4j, ant 등 Apache Projects 에서 작성된 많은 library 들이
지원된다.
Mysql : http://dev.mysql.com/
mysql 5.1 max ( DBMS ). 웹에서 아파치와 함께 가장많이 알려진
DBMS. 작은 단위의 빠른 속도를 요구하는 환경에 최적화 되있으며
대규모 처리도 무난하다.
Mysql Front : http://www.mysqlfront.de/
mysql sql browser Version 3.2
mysql 초창기때 부터 끝임없이 지원되는 tool 로 상당히 알려진 툴
Informix : http://www-903.ibm.com/software/informix/kr/
informix 9.1( 10.0 )
Aqua Data Studio: http://www.aquafold.com/
DBMS SQL 실행 browser. 상당히 빠르로 편리하 기능들이 제공되지만 java
환경에서 실행되므로 메모리 사용이 많다. 현실적으로 informix 를 위한
SQL brower tool 들이 전무한 상테에서( 몇몇재공은되지만 .. ) 유일한
툴이다( 거의 모든 DBMS 를 지원하다 ) 프로그램이 무겁다는 것을
제외한다면 상당히 쓸모있는 툴이다.
java :
J2SE 5.0 ( J2SE 1.4.2 ) 자바 가상 머신. 관련 프로그램이 너머 많습니다.
djdec : http://www.navexpress.com/dj/
버전 3.6.6 버전을 설치하세요. 3.9.9 버전은 라이센스 요구.
java decompiler 로 상당히 성능이 좋다. 외형에 비해서 java 개발자
사이에서는 상당히 알려진 툴.
eclipse 3.1.2 : http://www.eclipse.org/downloads/
java/jsp/html/javascript 등 java 를 포함한 거의 모든 언어 개발에 사용되는
IDE. java 1.4.2 이상버전에서 사용한다. 단, 웹 개발환경이 워낙 다양하기
때문에 실제 자신의 환경에 맞게 구축하려면 많은 시행착오가 따른다.
eclipse WTR : http://download.eclipse.org/webtools/downloads/
version 1.0.2
eclipse 의 web 개발환경을 지원하는 plug-in( 예전에 개별로 제공되는 많은
plug-in 들을 하나로 묶어서 만든 package )
JSEclipse_1.5.1 : http://www.interaktonline.com/Products/Eclipse/JSEclipse/Try-Download/
eclipse 에서 javascritp 개발환경을 지원하는 plug-in
웹 개발을 한다면 필수 플러그인으로 반듯이 확장자 js 로 저장된 파일에서
자동으로 환경설정이 적용된다. ( js 파일의 언어설정을 EUC-KR 로 해야 한글
주석이 깨지지 않는다. )
메뉴 -> Windows->Preferences->General->Context Types
메뉴에서 Text 항목을 선택하고 [ Add ] 버튼으로 *.js 확장자 추가후
맨아래 Default Encoding 에 EUC-KR 을 넣고 [ update ] 버튼을 눌러
js 파일을 등록해야 한글이 깨지지 않는다.
Paint.NET 2.62 : http://www.eecs.wsu.edu/paint.net/
포토샵 같이 레이어를 지원하는 그래픽 툴. 기능이 제한적이지만 전문가 손에
사용된다면 강력한 툴이된다. ㅋ
DotNet 으로 작성되면서 MS FrameWork 2.0 함께 설치되므로 이전보다 많이
프로그램 용량이 늘어났다.
WinCvs : http://www.wincvs.org/
Windows cvs 소스 버전관리 프로그램
WinMerge : http://winmerge.org/
Windows 용 diff 프로그램으로 주로 WinCvs 와 함께 사용된다.
Python 2.4 : http://www.python.org
파이션은 WinCvs 에서 매크로 기능을 사용할때 필요하다. 파이션을 설치하지
않으면 이들 매크로를 사용하지 못하지만 Svc 기능과는 상관이 없다(옵션)
ActivePerl : 공식홈피 : http://www.perl.com/download.csp
윈도우즈용 : ftp://ftp.activestate.com/ActivePerl/Windows/5.8/
기타 :
powertoys : http://ftp.iinet.net.au/pub/microsoft/powertoys/
윈도우즈 작업을 편하게 해주는 툴. 하나씩 설치해 보고 편한 것만
사용하세요.
* 개발정보 홈피
OKJSP : http://www.okjsp.pe.kr/
데브피아 : http://www.devpia.com/
자바누리 : http://javanuri.devpia.com/main/main.jsp
디버깅의 모든것 : http://www.debuglab.com/
데이타베이스 사랑넷 : http://database.sarang.net/
PHP SCHOOL : http://www.phpschool.com/
한국펄사용자모임 : http://www.perl.or.kr/
자바 스크립트 메뉴얼: http://koxo.com/lang/js/
CSS 메뉴얼 : http://trio.co.kr/
* 외국
http://www.w3schools.com/ : www 과 관련된 40 여개의 언어에 대한 설명
http://www.codeproject.com/ : 거의 모든 언어데 대한 정보제공( 이곳에서만
기웃거려도 스킬이 상승합니다. 눈높이 교육 ㅋ )
http://www.codeguru.com/ : ㅋ
http://technet.microsoft.com/ : MS 기술정보 사이트
http://www.microsoft.com/korea/technet/default.asp
http://msdn1.microsoft.com/en-us/default.aspx
http://www.sourceforge.org/ : 오픈 소스 개발 리소스
문서 :
http://kldp.org/ : 국내 대표 gnu 관련 번역/프로젝트 사이트
http://man.kldp.org/wiki : kldp 내 linux man page 프로젝트
http://www.apache.or.kr/ : 한국 아파치 프로젝트
http://www.ietf.org/ : Internet 에 관련된 표준화된 내용의 문서
http://www.gnu.org : gnu software 의 문서
(http://www.gnu.org/home.ko.html)
http://www.gnu.org/doc/doc.html
http://www.linux.org/
문장의 말투가 매끄럽지 못함이 송그스럽나이다~~~
막쓰다보니 아니 사실은 수정을 해도 그 모양입니다 ~ ㅋ
수많은 오타를 수정했음에도 여전히 으...