'日常茶飯事'에 해당되는 글 601건
- 2009.05.18 동작하지 않는 메뉴
- 2009.05.18 Excel에서 데이터 정렬/필터링하기
- 2009.05.17 HP-UX Operating System Release History
- 2009.05.17 유닉스 환경변수 설정
- 2009.05.17 MSXML 확인
- 2009.05.17 [비교] 반복문 - foreach, for~in
- 2009.05.15 Eclipse - Maven Project를 Dynamic Web Project로 만들기
- 2009.05.14 OpenVPN
- 2009.05.14 Eclipse에서 Checkout Projects from SVN이 보이지 않는다.
- 2009.05.13 일련번호중 비어 있는 값 찾아내기
- 2009.05.11 Microsoft SQL Server JDBC Driver
- 2009.05.11 MySQL JDBC Driver
- 2009.05.11 오라클 에러 모음
- 2009.05.08 행 만들기
- 2009.05.08 다른 플랫폼과 사용자정보 연동하기
- 2009.05.07 유무를 판단하는 여러 방법
- 2009.05.06 데이터 연동
- 2009.05.06 JSTL - fmt
- 2009.05.05 웹개발을 위한 IE 설정
- 2009.05.05 JDBC Code Template - 프로시저
- 2009.05.05 스크럼 - 팀의 생산성을 극대화시키는 애자일 방법론
- 2009.05.04 [IBM dWs] Ajax에서 XML 처리하기
- 2009.05.02 Subversion 명령어
- 2009.05.01 특정 경로를 통해서 접근하는 경우의 화면 처리
- 2009.04.30 자바스크립트 함수
- 2009.04.29 JDBC Code Template
- 2009.04.28 [비교] UPDATE
- 2009.04.27 임시 테이블
- 2009.04.27 소계, 합계 처리
- 2009.04.23 프로젝트 단상 - 끝나지 않는 프로젝트
- 동작하지 않는 메뉴
- 日常茶飯事
- 2009. 5. 18. 12:59
FF로 Q사 사이트를 방문해서 메뉴를 눌러도 화면이 변경되지 않는다.
IE에서는 제대로 동작한다.
음... 소스를 보자.
대충 이렇다.
lnk를 직접 참조하고 있다. IE에서만 가능. 그래서 document.getElementById() 를 사용하라고 나온다.
그리고 anchor 태그에 클릭이벤트를 발생시켰다. 함수가 아니라고 나옴.
이렇게 구현하는 것이 어떨까?
=-=> 근데 굳이 이렇게 할 이유가...http://www.plyfly.net/76 봐봐
IE에서는 제대로 동작한다.
음... 소스를 보자.
대충 이렇다.
lnk를 직접 참조하고 있다. IE에서만 가능. 그래서 document.getElementById() 를 사용하라고 나온다.
그리고 anchor 태그에 클릭이벤트를 발생시켰다. 함수가 아니라고 나옴.
이렇게 구현하는 것이 어떨까?
=-=> 근데 굳이 이렇게 할 이유가...http://www.plyfly.net/76 봐봐
- Excel에서 데이터 정렬/필터링하기
- 日常茶飯事
- 2009. 5. 18. 02:19
- HP-UX Operating System Release History
- 日常茶飯事
- 2009. 5. 17. 19:04
http://www.hp.com/softwarereleases/releases-media2/history/slide2.html
Q사 : uname -r
B.11.23
=-=> 이거 다른 곳에 한꺼번에 정리할 곳이 없나?
- 유닉스 환경변수 설정
- 日常茶飯事
- 2009. 5. 17. 18:28
/etc/profile 이 적용된 후에 USER_HOME/.profile 이 적용된다.
root 사용자는 /.profile 이 사용된다.
profile 수정후에 로그아웃을 하고 다시 로그인하면 적용되지만 다음 명령으로 바로 적용이 가능하다.
[todo] profile 은 어떤 쉘에서 사용가능? Command Line Interface 와도...
root 사용자는 /.profile 이 사용된다.
profile 수정후에 로그아웃을 하고 다시 로그인하면 적용되지만 다음 명령으로 바로 적용이 가능하다.
# source /etc/profile //Linux
# . /etc/profile //Unix
# . /etc/profile //Unix
[todo] profile 은 어떤 쉘에서 사용가능? Command Line Interface 와도...
profile 바로 적용하기
source .profile, ./.profile 둘다 안됨...1구매에서
<script type="text/javascript">
var vers = ["MSXML.DOMDocument", "MSXML2.DOMDocument"
, "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument.4.0"
, "MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.6.0"
, "MSXML2.DOMDocument.7.0", "MSXML2.DOMDocument.8.0"];
for(var s in vers){
try{
new ActiveXObject(vers[s]);
document.write(vers[s] + " : Success <br />");
}catch(e){
document.write(vers[s] + " : <span style='color:red;'>Fail</span> <br />");
}
}</script>
Microsoft XML 파서(MSXML)의 버전 목록
- IE 추가 기능 사용/사용 안함
- 추가 기능 관리는 인터넷 옵션 - 프로그램 에서도 관리가능함.
- Internet Explorer를 사용하는 MSXML 버전을 확인하는 방법
IE에서 사용하는 MSXML 버전을 Filemon을 이용해서 확인하는 방법이다.
- [비교] 반복문 - foreach, for~in
- 日常茶飯事
- 2009. 5. 17. 15:22
Java
for (String s : arr) {
System.out.println("s=" + s);
}
람다?
Javascrpt
var person = {fname:"John", lname:"Doe", age:25};
for(x in person){
txt = txt + ", " + person[x];
}
for (variable in [object | array]) {
statements
}
--
var arr = ["pantarei", "siliuse", "mir"];
for(var i = 0 ; i < arr.length ; i++){ alert(arr[i]); }
for(var i in arr){ alert(arr[i]); }
Python
languages = ['Java', 'Python', 'C']
for language in languages:
print(language)
}
PHP
foreach($customers as $customer){
echo $customer;
}
Perl
여기도 추가
foreach my $string ( @array ) {
print $string;
}
JSTL
<c:forEach>
Shell
$ for i in 1 2 3
> do
> echo $i
> done
1
2
3
$ for i in 1 2 3; do echo $i; done
1
2
3
$ for n in `find /etc -size 0`; do echo `ls -l $n`; done //xargs를 쓰는게 좋지
awk
Windows Command
> for %a in (1 2 3) do @echo %a
Oracle
- Eclipse - Maven Project를 Dynamic Web Project로 만들기
- 日常茶飯事
- 2009. 5. 15. 07:09
SVN에서 소스를 받는데 Maven Project여서 몇가지 수정했다.
- 또는 Dynamic Web Project 생성시 Content Directory 와 Java Source Directory 위치를 잡아준다.
프로젝트 생성전 저장소를 항상 확인해 둘 것.
- Java Build Path - Source 에서 PROJECT/src/main/java 를 추가하고 기존 소스경로는 삭제한다.(기존 소스경로 src/를 먼저 삭제해야 할수도 있다.) 1
- PROJECT/.settings/org.eclipse.wst.common.component 수정
/WebContent 를 /src/main/webapp 로 변경한다.
프로젝트 생성전 저장소를 항상 확인해 둘 것.
- 2011-08-22 추가 [본문으로]
- 설치는 간단
- 서버가 될 장비에서 키 생성
- Configuration - server.ovpn
- Configuration - client.ovpn
- Run
OpenVPN 서버가 방화벽 내부에 들어 있을 경우 UDP/1194 번을 열어 주어야 한다.
- server 측 추가적인 설정
- client 측 추가적인 설정
- 참고
- 서버가 될 장비에서 키 생성
- C:\Program Files\OpenVPN\easy-rsa\openssl.cnf.sample 을 복사해서 openssl.cnf 로 파일명을 바꾼다.
- C:\Program Files\OpenVPN\easy-rsa\vars.bat.sample 을 복사해서 vars.bat 로 파일명을 바꾼다. KEY_* 관련 변수를 설정한다.
- C:\Program Files\OpenVPN\sample-config\server.ovpn 을 복사해서 C:\Program Files\OpenVPN\config\server.ovpn 에 둔다. 클라이언트는 client.ovpn 파일을 사용한다.
- C:\Program Files\OpenVPN\easy-rsa> vars
C:\Program Files\OpenVPN\easy-rsa> clean-all
C:\Program Files\OpenVPN\easy-rsa> build-ca //keys 디렉토리 아래에 ca.crt 와 ca.key 생성된다.
C:\Program Files\OpenVPN\easy-rsa> build-key-server server //Common Name 을 물어 오면 server 를 입력한다. server.crt 와 server.key 가 생성된다.
C:\Program Files\OpenVPN\easy-rsa> build-dh //dh1024.pem 가 생성된다. - //클라이언트에서 사용할 열쇠들을 생성시켜야 하는데 이는 서버에서 (또는 ca.key 가 있는 서버에서) 만든다.혼선을 피하기 위해 Country Name 과 Common Name 을 제외하고는 동일한 이름으로 한다.
C:\Program Files\OpenVPN\easy-rsa> build-key openvpn1 //Common Name 은 openvpn1 을 입력한다. 각각 클라이언트마다 서로 다른 Common Name 을 주어야 한다.
- Configuration - server.ovpn
//../easy-rsa/keys/ca.crt 나 "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt" 처럼 파일 위치만 정확하게 넣어주면 된다.
ca ca.crt //*.ovpn 파일과 같은 디렉토리에 있는 경우
cert server.crt
key server.key
...
dh "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\dh1024.pem"
ca ca.crt //*.ovpn 파일과 같은 디렉토리에 있는 경우
cert server.crt
key server.key
...
dh "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\dh1024.pem"
- Configuration - client.ovpn
remote 10.20.30.123 1194
...
ca ca.crt
cert openvpn1.crt
key openvpn1.key
...
ca ca.crt
cert openvpn1.crt
key openvpn1.key
- Run
OpenVPN 서버가 방화벽 내부에 들어 있을 경우 UDP/1194 번을 열어 주어야 한다.
Mon Jul 20 07:32:41 2009 11.22.33.44:16959 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Mon Jul 20 07:32:41 2009 11.22.33.44:16959 [xxxx_test] Peer Connection Initiated with 11.22.33.44:16959
Mon Jul 20 07:32:41 2009 xxxx_test/11.22.33.44:16959 MULTI: Learn: 10.8.0.10 -> xxxx_test/11.22.33.44:16959
Mon Jul 20 07:32:41 2009 xxxx_test/11.22.33.44:16959 MULTI: primary virtual IP for xxxx_test/11.22.33.44:16959: 10.8.0.10
Mon Jul 20 07:32:42 2009 xxxx_test/11.22.33.44:16959 PUSH: Received control message: 'PUSH_REQUEST'
Mon Jul 20 07:32:42 2009 xxxx_test/11.22.33.44:16959 SENT CONTROL [xxxx_test]: 'PUSH_REPLY,route 10.8.0.1,ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9' (status=1)
Mon Jul 20 07:32:41 2009 11.22.33.44:16959 [xxxx_test] Peer Connection Initiated with 11.22.33.44:16959
Mon Jul 20 07:32:41 2009 xxxx_test/11.22.33.44:16959 MULTI: Learn: 10.8.0.10 -> xxxx_test/11.22.33.44:16959
Mon Jul 20 07:32:41 2009 xxxx_test/11.22.33.44:16959 MULTI: primary virtual IP for xxxx_test/11.22.33.44:16959: 10.8.0.10
Mon Jul 20 07:32:42 2009 xxxx_test/11.22.33.44:16959 PUSH: Received control message: 'PUSH_REQUEST'
Mon Jul 20 07:32:42 2009 xxxx_test/11.22.33.44:16959 SENT CONTROL [xxxx_test]: 'PUSH_REPLY,route 10.8.0.1,ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9' (status=1)
- server 측 추가적인 설정
- client-to-client : 서버에 접속된 다른 클라이언트를 볼 수 있게 한다.
10.8.0.1 과 10.8.0.10 은 연결 가능, 10.8.0.1 과 10.8.0.12 은 연결 가능, 하지만 10.8.0.10 과 10.8.0.12 는 연결할 수 없다.
이 옵션을 사용하면 가능해진다. - duplicate-cn : 같은 키를 가진 클라이언트의 접속을 허용한다.
openvpn1 키를 가진 클라이언트가 다른 곳에서 접속하면 연결이 끊어진다. - server 항목은 잘 안됨(192.168.0.0 으로 routing 을 추가했는데 cpu 사용량이 100을 채우네.) hp 가 192.168.0.0 에 속해 있어서 그런지....
- client 측 추가적인 설정
- resolv-retry : infinite 로 설정되어 있으면 계속 접속 시도를 하므로 서버를 나중에 실행시켜도 접속된다.
- 참고
- OpenVPN GUI for Windows
- http://www.openvpn.net
- http://wiki.kldp.org/wiki.php/OpenVPN
- http://www.ionthenet.co.kr/newspaper/view.php?idx=11247&fhead_x=0&fhead_y=0
- OpenVPN설치기
- OpenVPN으로 제약없는 네트워크 사용을...
- OpenVPN 구현하기
- Eclipse에서 Checkout Projects from SVN이 보이지 않는다.
- 日常茶飯事
- 2009. 5. 14. 14:30
New Project에서 Checkout Projects from SVN이 보이지 않는다.
왜지?
Subclipse 기능은 문제없이 사용하고 있음.
플러그인이 문제가 있나해서 플러그인을 확인해 봄.
Subclipse 는 아이콘이 깨진 형태임.
이걸 보면 플러그인에 문제가 있나 했다.
서명여부임. 바부.
SVN Repository Exploring 퍼스펙티브에서 Checkout 하면 되기는 함.
왜지?
Subclipse 기능은 문제없이 사용하고 있음.
플러그인이 문제가 있나해서 플러그인을 확인해 봄.
Subclipse 는 아이콘이 깨진 형태임.
이걸 보면 플러그인에 문제가 있나 했다.
서명여부임. 바부.
SVN Repository Exploring 퍼스펙티브에서 Checkout 하면 되기는 함.
- 일련번호중 비어 있는 값 찾아내기
- 日常茶飯事
- 2009. 5. 13. 03:07
시퀀스나 최대값으로 일련번호를 매기는 경우 중간에 값이 비는 경우가 있다.
중간에 비어 있는 값을 찾아내는 방법
- http://www.oracleclub.com/article/25103
=-=> ^= 는 ...?
중간에 비어 있는 값을 찾아내는 방법
- http://www.oracleclub.com/article/25103
=-=> ^= 는 ...?
- Microsoft SQL Server JDBC Driver
- 日常茶飯事
- 2009. 5. 11. 12:29
2008을 지원한다기 보다 jdbc 4.0을 지원하는 거다.
SQL Server JDBC Driver 2.0 Documentation
http://msdn.microsoft.com/ko-kr/library/bb418447%28v=SQL.10%29.aspx
JDBC 드라이버 시스템 요구 사항
http://msdn.microsoft.com/ko-kr/library/ms378422%28v=SQL.100%29.aspx
- MS Driver
- jTDS
SQL Server JDBC Driver 2.0 Documentation
http://msdn.microsoft.com/ko-kr/library/bb418447%28v=SQL.10%29.aspx
JDBC 드라이버 시스템 요구 사항
http://msdn.microsoft.com/ko-kr/library/ms378422%28v=SQL.100%29.aspx
- MS Driver
- 2008 지원 드라이버 : http://msdn.microsoft.com/ko-kr/library/dd903047%28SQL.10%29.aspx
- sqljdbc4.jar
- http://www.microsoft.com/downloads/results.aspx?pocId=&freetext=JDBC&DisplayLang=ko
- com.microsoft.sqlserver.jdbc.SQLServerDriver
- jdbc:sqlserver://ADDRESS:1433;databaseName=DB_NAME;
- sqljdbc.jar(1.2.2828.100 - 570KB, 1.1.1501.101 - 248KB, 1.0.809.102 - 227KB)
- 참고 http://msdn.microsoft.com/ko-kr/library/bb418445(SQL.10).aspx
- 이 드라이버는 아마도 SQL Server 2000 드라이버.
- com.microsoft.jdbc.sqlserver.SQLServerDriver
- jdbc:microsoft:sqlserver://ADDRESS:1433
- mssqlserver.jar 와 com/microsoft/jdbc/base/BaseDriver 을 필요로 한다.
- jTDS
- http://jtds.sourceforge.net
- net.sourceforge.jtds.jdbc.Driver
- jdbc:jtds:sqlserver://ADDRESS:1433/DB_NAME
- jtds-1.2.2.jar
- TEXT 컬럼 처리 가능
=-=> ms 드라이버는 text 컬럼처리 안되는게 있을거야.
- Windows 통합인증을 사용할 때는 sqljdbc_auth.dll이 필요 ==???
- MySQL JDBC Driver
- 日常茶飯事
- 2009. 5. 11. 12:23
- MySQL Connector/J
- MySQL Connectors
- com.mysql.jdbc.Driver
- jdbc:mysql://ADDRESS/DB_NAME?Unicode=true&characterEncoding=EUC_KR
- mysql-connector-java-5.1.0-bin.jar(554KB)
- 다른 플랫폼과 사용자정보 연동하기
- 日常茶飯事
- 2009. 5. 8. 02:22
L사 시스템에서는 B시스템(닷넷 시스템)을 통해서 T시스템으로 사용자가 들어오게 된다.
시스템 연동할때 보안상 MD5 값을 추가하려고 했지만 닷넷 시스템 기획자가 거부함.
T시스템에서는 필터를 통해서 사용자 세션을 생성함.
- 쿠키를 사용해서 공유하면 어땠을까?(=-=>)
시스템 연동할때 보안상 MD5 값을 추가하려고 했지만 닷넷 시스템 기획자가 거부함.
T시스템에서는 필터를 통해서 사용자 세션을 생성함.
user(session) | user_id(parameter) | 상황 |
有 | 有 | B시스템을 통해서 들어오는 경우 1. 처음이 아닌 경우 2. 다른 아이디로 로그인한 경우 : B시스템에서 로그아웃을 하는 경우 T시스템도 로그아웃이 되면 되는데 그렇지 않으면 이런 경우가 충분히 발생할 수 있다. 실제로 B시스템에서 이런 기능을 구현해 주지 않음. |
有 | 無 | T시스템내에서 이동하는 경우 |
無 | 有 | B시스템을 통해서 처음 들어오는 경우 |
無 | 無 | T시스템에서 세션이 끊긴 경우 |
- 쿠키를 사용해서 공유하면 어땠을까?(=-=>)
- 유무를 판단하는 여러 방법
- 日常茶飯事
- 2009. 5. 7. 14:52
금액이 있으면 일수에 포함되고 금액이 없으면 일수에 포함하지 않는 경우
- http://oracleclub.com/article/25003
금액이 -인 경우도 고려해야 함. sign은 -1000이면 -1을 반환함.
금액이 -인 경우도 고려해야 함. sign은 -1000이면 -1을 반환함.
==따지고 보면 sign이라는 함수는
case when amt > 0 then 1
when amt < 0 then -1
else 0 end ==>이걸 구현한 거다. 이런 실생활에 도움이 되는 수학...
전사시스템이나 포털시스템은 규모가 크고 데이터 연동이 많이 된다.
서로 간에 데이터가 공유되는데, 이에 대해서 전체적으로 파악을 하고 있어야 한다.
Z사 포털시스템에서 전자계약시스템만 하더라도 다른 메뉴와 유기적으로 연동되는게 부족하다.
C시스템을 포털시스템으로 이관하는 작업을 진행하면서 공유되어야 하는 데이터에 대해서 고민없이 진행했다.
C시스템은 기업정보를 환경설정파일에서 가져오는 다른 메뉴에서는 데이터베이스에서 가져온다.
이런 부분에 대한 고민도 없이 진행했다.
- JSTL - fmt
- 日常茶飯事
- 2009. 5. 6. 00:49
<fmt:formatNumber value="12345" pattern=".#"/> //12345.0
<fmt:formatNumber value="12345" pattern=".0"/> //12345.0
<fmt:formatNumber value="12345.6789" type="number" pattern="#.#####"/> //12,345.6789
<fmt:formatNumber value="12345.67890" type="number" pattern="#.#####"/> //12,345.6789
<fmt:formatNumber value="12345.67890" type="number" pattern="#.00000"/> //12,345.67890
- 웹개발을 위한 IE 설정
- 日常茶飯事
- 2009. 5. 5. 23:20
- JDBC Code Template - 프로시저
- 日常茶飯事
- 2009. 5. 5. 15:57
CallableStatement cs = null; try{ cs = con.prepareCall("{ ? = call sp_test(?,?,?) }"); int idx = 0; cs.registerOutParameter(++idx, Types.INTEGER); cs.setString(++idx, COL_1); cs.setString(++idx, COL_2); cs.setString(++idx, COL_3); cs.execute(); int result = cs.getInt(1); if(result == -1){ //check error throw new SQLException("result is -1"); //=-=> 좀 더 정형화된 다른 예외를 만들어야... } return result; }catch(Exception e){ throw new RuntimeSQLException(e, primaryKey); }finally{ if(cs != null){ try{ cs.close(); }catch(Exception ignored){ } } }
- 스크럼 - 팀의 생산성을 극대화시키는 애자일 방법론
- 日常茶飯事
- 2009. 5. 5. 15:18
- [IBM dWs] Ajax에서 XML 처리하기
- 日常茶飯事
- 2009. 5. 4. 19:32
웹에서 XML 자료를 가져온 후 파이프라인을 거쳐 원하는 정보를 정해진 형식으로 추출해서 출력하는 여러 방법을 보여준다.
Ajax에서 XML 처리하기, Part 1: 네 가지 방법
Ajax에서 XML 처리하기, Part 2: Ajax와 XSLT를 이용하는 방법 두 가지
이 글에서는 간단한 Ajax 라이브러리를 만들어 사용한다.(ajax-simple.js)
미국립 기상청(NWS) 사이트에서 날씨 정보를 가져온다.
접근 방법 1. DOM 트리 탐색
웹프록시를 거쳐서 데이터를 가져온 뒤 브라우저가 DOM에서 값을 추출해서 보여준다.
- Ajax 의 XMLHttpRequest 객체는 같은 도메인으로만 요청이 가능한데 이를 해결하기 위해 웹 프록시를 사용한다.
웹 프록시는 한 서버로 보낸 요청을 다른 서버로 전달하는 방법이다.
아파치 웹 서버에서 프록시는 ProxyPass 규칙으로 구현한다.(웹 서버 구성을 바꿀 권한이 있어야 하겠지)
- DOM에서 값을 추출하기
접근 방식 2: 서버쪽 XSLT
서버에서 데이터를 가져온 뒤 XSLT 를 사용하여 XML 을 HTML 로 변환한 다음, HTML 코드를 브라우저로 전송한다.
- 리눅스에 있는 xsltproc 이라는 명령행 XSLT 프로세서를 이용한다.
Perl 스크립트로 xsltproc, wget 을 사용해서 파이프라인 구성 =-=> wget 은 자바 URLConnection 으로 가능하지 않나?
접근 방식 3: 클라이언트쪽 XSLT
웹프록시를 거쳐 데이터를 가져온 뒤 브라우저에서 XSLT 변환을 해서 보여준다.
- 인터넷 익스플로러, 파이어폭스, 오페라 등 주요 브라우저는 모두 나름대로 XSLT 처리를 지원한다.
파이어폭스와 오페라는 XSLTProcessor 객체를 제공한다. 인터넷 익스플로러는 문서 모델을 확장하여 XSLT 처리를 지원한다.
접근 방식 4: JSON과 동적 script 태그
야후 파이프를 거쳐 데이터를 가져온 뒤 브라우저에서 보여준다.
- Ajax 동일 도메인 제약 문제(same domain problem) 해결하기
(아파치 ProxyPass 규칙을 설정하는 등) 웹 서버 구성을 변경
다른 서버의 데이터를 긁어오는 서버 스크립트를 작성
야후 파이프(Yahoo! Pipes) 같은 외부 서비스 이용(여기에는 script tag hack 같은 기법이 추가된다.)
- script 태그를 동적으로 생성하기
페이지를 읽은 후에 자바스크립트 코드를 읽어들인다. =-=> onload 에 두면 안되나?
- JSON
Ajax에서 XML 처리하기, Part 1: 네 가지 방법
Ajax에서 XML 처리하기, Part 2: Ajax와 XSLT를 이용하는 방법 두 가지
Ajax에서 XML 처리하기, Part 2- Ajax와 XSLT를 이용하는 방법 두 가지.pdf
Ajax에서 XML 처리하기, Part 3: JSON을 사용하고 프록시 피하기
이 글에서는 간단한 Ajax 라이브러리를 만들어 사용한다.(ajax-simple.js)
미국립 기상청(NWS) 사이트에서 날씨 정보를 가져온다.
접근 방법 1. DOM 트리 탐색
웹프록시를 거쳐서 데이터를 가져온 뒤 브라우저가 DOM에서 값을 추출해서 보여준다.
- Ajax 의 XMLHttpRequest 객체는 같은 도메인으로만 요청이 가능한데 이를 해결하기 위해 웹 프록시를 사용한다.
웹 프록시는 한 서버로 보낸 요청을 다른 서버로 전달하는 방법이다.
아파치 웹 서버에서 프록시는 ProxyPass 규칙으로 구현한다.(웹 서버 구성을 바꿀 권한이 있어야 하겠지)
- DOM에서 값을 추출하기
접근 방식 2: 서버쪽 XSLT
서버에서 데이터를 가져온 뒤 XSLT 를 사용하여 XML 을 HTML 로 변환한 다음, HTML 코드를 브라우저로 전송한다.
- 리눅스에 있는 xsltproc 이라는 명령행 XSLT 프로세서를 이용한다.
Perl 스크립트로 xsltproc, wget 을 사용해서 파이프라인 구성 =-=> wget 은 자바 URLConnection 으로 가능하지 않나?
접근 방식 3: 클라이언트쪽 XSLT
웹프록시를 거쳐 데이터를 가져온 뒤 브라우저에서 XSLT 변환을 해서 보여준다.
- 인터넷 익스플로러, 파이어폭스, 오페라 등 주요 브라우저는 모두 나름대로 XSLT 처리를 지원한다.
파이어폭스와 오페라는 XSLTProcessor 객체를 제공한다. 인터넷 익스플로러는 문서 모델을 확장하여 XSLT 처리를 지원한다.
접근 방식 4: JSON과 동적 script 태그
야후 파이프를 거쳐 데이터를 가져온 뒤 브라우저에서 보여준다.
- Ajax 동일 도메인 제약 문제(same domain problem) 해결하기
(아파치 ProxyPass 규칙을 설정하는 등) 웹 서버 구성을 변경
다른 서버의 데이터를 긁어오는 서버 스크립트를 작성
야후 파이프(Yahoo! Pipes) 같은 외부 서비스 이용(여기에는 script tag hack 같은 기법이 추가된다.)
- script 태그를 동적으로 생성하기
페이지를 읽은 후에 자바스크립트 코드를 읽어들인다. =-=> onload 에 두면 안되나?
- JSON
- Subversion 명령어
- 日常茶飯事
- 2009. 5. 2. 08:49
요즘 Unix 에서 svn 명령어를 사용할 일이 있어서 정리해 본다.
$ svn status //항상 확인할 것. 로컬 작업본의 변경 상태를 보여준다.
? WEB-INF/classes
M index.jsp
M index.html
$ svn status - u //서버 저장소의 변경 상태를 보여준다.
$ svn status board
$ svn co http://SVN_SERVER:8080/svn/repos/trunk/SSO
A SSO/prod
A SSO/prod/verify.sso
$ svn update
$ svn update board/
U board/view.jsp
업데이트 된 리비전 81.
$ svn update main/notice.jsp //특정 파일만 업데이트하기
$ svn commit -m "" test/welcome.html //=-=> 문법 맞나?
$ svn update
무시함 '.' //권한이 없는 사용자인 경우였음. root 로 하면 된다.
$ svn log number.txt
$ svn diff number.txt //작업본(working copy)의 변경 내용을 볼 때
$ svn diff -r HEAD number.txt //저장소와 작업본을 비교
? WEB-INF/classes
M index.jsp
M index.html
$ svn status - u //서버 저장소의 변경 상태를 보여준다.
$ svn status board
$ svn co http://SVN_SERVER:8080/svn/repos/trunk/SSO
A SSO/prod
A SSO/prod/verify.sso
$ svn update
$ svn update board/
U board/view.jsp
업데이트 된 리비전 81.
$ svn update main/notice.jsp //특정 파일만 업데이트하기
$ svn commit -m "" test/welcome.html //=-=> 문법 맞나?
$ svn update
무시함 '.' //권한이 없는 사용자인 경우였음. root 로 하면 된다.
$ svn log number.txt
$ svn diff number.txt //작업본(working copy)의 변경 내용을 볼 때
$ svn diff -r HEAD number.txt //저장소와 작업본을 비교
- 특정 경로를 통해서 접근하는 경우의 화면 처리
- 日常茶飯事
- 2009. 5. 1. 10:30
특정 경로를 통해서 들어오는 경우 브라우저 위치를 지정해 준다.
- 요청을 처음 처리하는 컨트롤러에서 특정 경로를 통해서 들어오는 경우를 찾아서 적절한 값을 넘겨 받을 수도 있다.
그러나 뷰에 대한 처리를 정의하는 것이므로 화면단에서 처리하는 것이 적절하다.
- 요청을 처음 처리하는 컨트롤러에서 특정 경로를 통해서 들어오는 경우를 찾아서 적절한 값을 넘겨 받을 수도 있다.
그러나 뷰에 대한 처리를 정의하는 것이므로 화면단에서 처리하는 것이 적절하다.
- JDBC Code Template
- 日常茶飯事
- 2009. 4. 29. 03:47
PreparedStatement ps = null; try{ ps = con.prepareStatement(QUERY); int idx = 0; ps.setString(++idx, COL_1); ... ps.setString(++idx, COL_N); return ps.executeUpdate(); }catch(Exception e){ throw new RuntimeSQLException(e, primaryKey); }finally{ if(ps != null){ try{ ps.close(); }catch(Exception ignored){ } }
Connection con = null; PrepareStatement ps = null; try{ ps = con.prepareStatement(QUERY); int idx = 0; ps.setString(++idx, COL_1); ... ps.setString(++idx, COL_N); int affectedRow = ps.executeUpdate(); if(affectedRow != 1){ throw new RuntimeSQLException(" expected : 1, result : " + affectedRow , primaryKey); //=-=> 정형화... } con.commit(); }catch(Exception e){ con.rollback(); throw new RuntimeSQLException(e, primaryKey); }finally{ if(ps != null){ try{ ps.close(); }catch(Exception ignored){ } if(con != null){ try{ con.close(); }catch(Exception ignored){ } }
- [비교] UPDATE
- 日常茶飯事
- 2009. 4. 28. 23:10
- 프로젝트 단상 - 끝나지 않는 프로젝트
- 日常茶飯事
- 2009. 4. 23. 22:32
서비스 개시일이 계속 연기됩니다.
업체는 계속 바뀝니다.
프로젝트를 발주한 업체는 프로젝트를 총괄하던 담당자에게 책임을 묻고 바꿉니다.
그래도 프로젝트는 끝나지 않습니다.
요구사항을 분석하기도 전에 개발을 하고 현업들이 이것저것 기능을 요구합니다.
이 기능들을 수용하려고 하나 둘 바꾸다 보면 관련된 프로그램 여기저기를 손봐야 합니다.
그러다보면 변경되면 안되는 프로그램 기반까지 흔들리게 됩니다.
해당 업무에 대한 경험이 없는 업체가 들어와서 현업의 요구사항을 제대로 반영하지 못합니다.
경험이 없다고 해도 적절한 분석을 통한 설계가 이루어져야 하는데 업무를 잘 알지 못하니 변덕스러운 현업에 끌려 다니게 됩니다.
프로젝트가 연기된지 몇 개월이 지났는데도 기초 코드를 수정해야 하는 일이 발생합니다.
난감하죠.
게다가 발주처의 프로젝트 책임자의 의견을 무조건 따라야 한다는 독소조항도 있습니다.
어떻게 해야 하나요?
이런 경우 일정 부분의 손실을 안고서라도 프로젝트를 포기하는게 좋을듯 싶습니다.
빨리 결정을 내릴수록 좋겠죠.
시간이 지나면 손실은 더 커질테니깐요.
다시 처음부터 제대로 시작하면 좋겠지만 그러기에는 서로가 너무 부담이 됩니다.
포기라는 건 좋지 않지만 빠른 결정이 필요한 시점이죠.
앞으로의 행보가 궁금합니다.
이 기능들을 수용하려고 하나 둘 바꾸다 보면 관련된 프로그램 여기저기를 손봐야 합니다.
그러다보면 변경되면 안되는 프로그램 기반까지 흔들리게 됩니다.
해당 업무에 대한 경험이 없는 업체가 들어와서 현업의 요구사항을 제대로 반영하지 못합니다.
경험이 없다고 해도 적절한 분석을 통한 설계가 이루어져야 하는데 업무를 잘 알지 못하니 변덕스러운 현업에 끌려 다니게 됩니다.
프로젝트가 연기된지 몇 개월이 지났는데도 기초 코드를 수정해야 하는 일이 발생합니다.
난감하죠.
게다가 발주처의 프로젝트 책임자의 의견을 무조건 따라야 한다는 독소조항도 있습니다.
어떻게 해야 하나요?
이런 경우 일정 부분의 손실을 안고서라도 프로젝트를 포기하는게 좋을듯 싶습니다.
빨리 결정을 내릴수록 좋겠죠.
시간이 지나면 손실은 더 커질테니깐요.
다시 처음부터 제대로 시작하면 좋겠지만 그러기에는 서로가 너무 부담이 됩니다.
포기라는 건 좋지 않지만 빠른 결정이 필요한 시점이죠.
앞으로의 행보가 궁금합니다.
Recent comment