일시: 2009년 2월12일 목요일 18:00 ~ 20:00
장소: 멀티 캠퍼스 1702호
=========================================================================
18:00 ~ 18:05 세미나 소개
18:05 ~ 18:30 효과적인 테스트 코드 작성(황상철 책임 SDS)
18:30 ~ 18:40 휴식
18:40 ~ 19:05 Secure Web Application(채수민 책임 SDS)
19:05 ~ 19:15 휴식
19:15 ~ 19:40 넵튠(Neptune) 과 하둡(Hadoop) 소개 (김형준 NHN)
19:40 ~ 20:00 Q&A 및 세미나 정리
=========================================================================
이번 세미나도 알차게 준비했습니다.
NHN의 김형준 실장이 새로운 오픈소스인 넵튠과 요즘 GFS로 많은 인기를 끌고 있는 하둡에 대해 소개할 예정이며,
보안그룹의 보안 전문가인 채수민 책임이 안전하게 웹 애플리케이션을 개발하는 방법에 대해 강의합니다.
끝으로 단위 테스트를 제대로 할 수 있도록 효과적으로 테스트 코드를 작성하는 법에 대해 제가 발표를 진행합니다.
자리가 한정되어 있습니다. 참여를 원하시는 분은 황상철 책임님에게 메일로 신청해 주시면 감사하겠습니다.
알차고 재미있는 시간이 될것을 약속드리며 엔지니어링에 관심있는 분들의 많은 참여 부탁드립니다.
자바 HotSpot은 일종의 자바 가상머신의 구현으로, 자바 HotSpot VM에는 다음과 같은 자바 플랫폼을 위한 핵심 실행 엔진이 포함됩니다:
자바 바이트코드를 지원 하드웨어 플랫폼 상에서 최적화된 네이티브 기계어 코드로 변환하는 동적 컴파일러
메모리 관리 및 가비지 컬렉션 서브시스템
스레드 및 동기화
모니터링, 디버깅, 프로파일링 텔레메트리(profiling telemetry)
바이트코드 검사기(bytecode verifier)를 포함한 자바 보안 아키텍처 부분들
HotSpot은 그 자체가 “일단 한번 작성하면 어디서든 실행된다(Write Once, Run Anywhere)”라는 자바 기술의 약속을 가장 구체적으로 실현한 Java SE 플랫폼 컴포넌트라 할 수 있습니다.
개발자들은 이 코드를 통해 세계 최고 수준의 가상머신이 어떻게 구축되는지 살펴볼 수 있을 뿐 아니라, 버그 픽스, 그리고 새로운 가비지 컬렉션, 동기화, 바이트코드 컴파일러 알고리즘의 테스트, VM을 새로운 하드웨어 아키텍처와 운영체제에 이식하는 등의 작업을 수행할 수 있게 됩니다.
링크를 보면 몇몇가지 설정할 게 있으니 참조하기 바란다.
간단하게 정리하면(윈도우용)
1. bin 디렉토리를 path에 추가
2. AS_ADMIN_USER 라는 것을 환경 변수에 추가하고, 설치할때의 PC나 서버 계정을 추가한다.
서버를 다음의 명령어로 시작할 수 있다.
asadmin start-domain domain1
정상적으로 수행되었다면 다음과 같은 메시지가 나타난다.
도메인 domain1을(를) 시작합니다. 잠시 기다려 주십시오.
로그가 D:\glassfish\domains\domain1\logs\server.log(으)로 리디렉션되었습니다.
마스터 비밀번호를 입력하십시오>
출력을 D:/glassfish/domains/domain1/logs/server.log(으)로 리디렉션하는 중
도메인 domain1에서 클라이언트 요청을 받을 준비가 되었습니다. 백그라운드에서 추가
서비스를 시작하는 중입니다.
다음에서 해당 구성 및 로그를 사용하여 도메인 [domain1]이(가) [Sun Java System Ap
plication Server 9.1_02 (build b04-fcs)]을(를) 실행하는 중입니다: [D:\glassfish\
domains].
관리 콘솔은 [http://localhost:4848]에서 사용할 수 있습니다.
"asadmin" 명령에도 같은 포트 [4848]을(를) 사용합니다.
사용자 웹 응용 프로그램은 다음 URL에서 사용할 수 있습니다:
[http://localhost:8080 https://localhost:8181 ].
다음 웹 내용을 사용할 수 있습니다:
[/web1 /__wstx-services ].
표준 JMX 클라이언트(예, JConsole)는 도메인 관리를 위해 JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://smlee:8686/jmxrmi]에 연결될 수 있습니다.
도메인은 최소한 다음 포트에서 연결을 수신합니다:
[8080 8181 4848 3700 3820 3920 8686 ].
도메인이 Application Server 클러스터 및 다른 독립 실행형 인스턴스를 지원하지 않
습니다.
설치시 유의사항 서버를 수행할때 리눅스는 상관 없겠지만,
PC 이름이 한글일 경우 서버가 정상적으로 뜨지 않을 수 있다.
이 경우 domain1/logs 디렉토리의 server.log 파일에 다음과 같은 메시지가 나타난다.
com.sun.appserv.server.ServerLifecycleException
at com.sun.enterprise.admin.server.core.JmxConnectorLifecycle.onStartup(JmxConnectorLifecycle.java:153)
at com.sun.enterprise.server.ApplicationServer.onStartup(ApplicationServer.java:442)
at com.sun.enterprise.server.ondemand.OnDemandServer.onStartup(OnDemandServer.java:120)
at com.sun.enterprise.server.PEMain.run(PEMain.java:411)
at com.sun.enterprise.server.PEMain.main(PEMain.java:338)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.server.PELaunch.main(PELaunch.java:412)
Caused by: java.lang.NullPointerException
at javax.management.remote.JMXConnectorServerFactory.newJMXConnectorServer(JMXConnectorServerFactory.java:283)
at com.sun.enterprise.admin.jmx.remote.server.rmi.JmxConnectorServerDriver.startConnectorServer(JmxConnectorServerDriver.java:215)
at com.sun.enterprise.admin.server.core.JmxConnectorLifecycle.onStartup(JmxConnectorLifecycle.java:134)
... 9 more
Glassfish를 설치하고 나서 가장 황당했던것이, bin 디렉토리에 아무것도 실행파일이 없다는 것이다.
관련 문서도 눌러 보면 Glassfish에 대한 문서가 아니라, Sun Java System Application Server 에 대한 문서고... - -;
Glassfish의 압축을 푼 root 디렉토리를 보면 setup.xml과 setup-cluster.xml 두개의 파일이 존재한다.
클러스터 구성할 것이 아니라면 setup.xml을 사용하면 된다.
Ant를 이용하여 설치하기
그래서, 가장 먼저 ant를 설치해야 한다. (그런데 친절하게도 glassfish\lib\ant 디렉토리가 포함되어 있으며, 여기의 실행파일을 사용해도 된다.)
ant의 bin 디렉토리를 갖고 있는 장비의 path에 등록을 하고,
setup.xml 파일이 있는 위치에서 다음의 명령을 수행한다.
-do.copy.common:
[copy] Copying 1 file to D:\glassfish\config
do.copy.windows:
[copy] Copying 1 file to D:\glassfish\config
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\bin
[copy] Copying 1 file to D:\glassfish\updatecenter\bin
do.copy.unix:
do.copy:
get.java.home:
setup.init:
-do.tokenrep.common:
do.token.windows:
do.token.unix:
do.token.jdic.windows:
do.token.jdic.solaris-sparc:
do.token.jdic.solaris-x86:
do.token.jdic.linux:
do.token.jdic.mac:
do.token.jdic:
do.token.enable.uc:
do.token:
get.java.home:
setup.init:
do.chmod.unix:
do.chmod:
create-local-registry:
setup.reg:
[echo] Creating the service registry file..
[java] From Local service registry ..
get.java.home:
setup.init:
set.env.win:
set.env.unix:
set.env:
create.domain:
[exec] 포트 4848을(를) Admin에 대해 사용합니다.
[exec] 포트 8080을(를) HTTP Instance에 대해 사용합니다.
[exec] 포트 7676을(를) JMS에 대해 사용합니다.
[exec] 포트 3700을(를) IIOP에 대해 사용합니다.
[exec] 포트 8181을(를) HTTP_SSL에 대해 사용합니다.
[exec] 기본 포트 3820을(를) IIOP_SSL에 대해 사용합니다.
[exec] 기본 포트 3920을(를) IIOP_MUTUALAUTH에 대해 사용합니다.
[exec] 기본 포트 8686을(를) JMX_ADMIN에 대해 사용합니다.
[exec] 프로필을 사용하여 도메인을 만드는 중입니다: developer(구성 파일의 변
수 AS_ADMIN_PROFILE로에 지정)
[exec] 지정된 로켈[ko_KR]의 파일을 [D:\glassfish\lib\install\templates\loca
les\ko_KR\index.html]에서 찾지 못했습니다. 대신 기본 (en_US) index.html을 사용합
니다.
[exec] 보안 저장소 사용: JKS
[exec] 도메인 domain1이(가) 만들어졌습니다.
[exec] 이 도메인 [domain1]의 관리자 이름 [admin]에 관련된 로그인 정보를 [C:
\Documents and Settings\smlee\.asadminpass]에 성공적으로 저장했습니다.
[exec] 이 파일은 계속 보호되어야 합니다. 이 파일에 저장된 정보는 asadmin 명
령에서 이 도메인을 관리하는 데 사용됩니다.
[delete] Deleting: D:\glassfish\passfile
BUILD SUCCESSFUL
Total time: 29 seconds
D:\glassfish>
Glassfish는 J2EE 5를 따르는 오픈소스 애플리케이션 서버를 말한다. 참고로 J2EE 5 는 -JavaServer Pages(JSP) 2.1 -JavaServer Faces(JSF) 1.2 -Servlet 2.5 -Enterprise JavaBeans 3.0 -Java API for Web Services(JAX-WS) 2.0 -Java Architecture for XML Binding(JAXB) 2.0 -Web Services Metadata for the Java Platform 1.0 라는 여러 표준의 버젼을 따른다.
Glassfish 설치하기 Jar를 다운로드 했다면, jar파일이 있는 위치에서 다음의 명령어를 친다. java -Xmx256m -jar jar파일명 그러면 동의하라는 반 강제적 화면이 나타나고, 스크롤을 아래로 주루룩 내린 후 동의를 하면, 파일들의 압축이 풀릴것이다.
왜 페이지 캐시가 필요한지는 대부분 아시겠지만,
예를 들어서 간단하게 말씀드리면...
온라인 쇼핑몰에서 대분류, 중분류, 소분류로 상품의 목록이 나오고
해당 상품의 개수가 나와있다고 가정해보자.
만약 이런 페이지의 캐시를 지정하지 않았다면, 페이지를 호출할 때마다 해당 카테고리의 상품 개수를 가져오는 쿼리가 계속 수행될 것이다.
그런데 캐시를 사용한다면???
거의 HTML을 읽어오는 속도로 메모리에서 데이터를 읽어 올 수 있으므로,
해당 화면이 엄청나게 자주 불리는 초기화면이거나 include되는 화면이라면 WAS 와 DB 사용량이 현저하게 줄어들 수 있다.
추가로 I/O 도 줄어들 수 있을 것이다.
- 사진을 관리하는 프로그램인 iPhoto에는 얼굴 인식 및 분류, 새로운 형태의 슬라이드쇼.
특히나 슬라이드쇼는 아이팟 터치로 전송이 가능하다.
- 동엽상을 편집하는 iMovie는 지도 기능, 테마 기능, 스테빌라이져 기능등 여러 좋은 기능들이 포함되었다.
- KeyNote는 차트를 동적으로 보여주는 기능과 몇몇 액션이 추가되었다.
그리고 가장 좋아 보이는 것은 iPod Touch나 iPhone과 연계되는 프리젠터 기능이다.
두 기기를 프리젠테이션 용 프리젠터로 사용할 수 있고, 프리젠테이션 참조 화면을
아이팟 터치에게 전송하여 발표자가 볼 수 있도록 되어있다.
iTune Store에서 keynote 로 검색하면 그 리모트를 다운로드 받을 수 있으며,
가격은 .99 불이다.
설정하는 것도 굉장히 간단한 것으로 보인다.
그렇다면 Tomcat과 연동하려면?
nginx가 설치된 디렉토리(여기서는 C:\nginx) 의 conf 디렉토리로 이동한다.
C:\nginx\conf 의 nginx.conf 파일을 연다.
그 파일의 location 부분을 # 주석으로 막는다.
고급 개발자분들, 저보다 똑똑하신분, 심장이 너무 약하신분들은 절대로 이 글을 보지 마세요.
그런분들이 거신 별 도움 안되는 딴지는 과감히 삭제하겠습니다. ^^;
그럼 시작하겠습니다.
기본적인 이해를 돕기 위해서 용어부터...
- JDK와 JRE http://java.sun.com/
를 접속해 보세요.
(물론 영업니다. 영어에 울렁증이 있으셔도 그냥 따라가 보세요.)
상단 메뉴에 있는 Downloads를 눌러보세요. 갖다 대기만 해도 뭐 여러 목록이 나타나는데 일단 그냥 누르세요.
그림과 같은 화면이 나타날겁니다. 만약 이런 화면이 나타나지 않았다면, 웹사이트 접속부터 다시...
열나 종류가 많은데 왼쪽것만 보세요.
가장 위 부터 개발툴, Java EE, Java ME, Java SE, JavaFX,Database 가 있습니다.
개발 툴은 말 그대로 썬에서 맹글고 밀고 있는 개발 툴이 있지요.
가장 대표적인 Sun Studio와 NetBeans가 있는데, 이것들은 많은 사람들이 사용하고 있지 않은 SWING이라는걸 사용해서 맹근겁니다. 그래서 화면이 좀 우울하죠.
그렇다면 많이 쓰는 Eclipse 는? 그건 Sun에서 맹그는게 아니라 IBM이랑 여러 회사가 같이 연합해서 맹그는 겁니다.
eclipse에 대해서 자세히 알아보시려면 http://www.eclipse.org 에 들어가서 보시면 됩니다.
URL이 org 이기 때문에 말 그대로 비 영리조직입니다. 그래서 꽁짜로 나누어 주는 겁니다.
그 다음에 있는 Java EE 라는게 있죠?
여기서 EE는 Enterprise Edtion 의 약자로, PC나 클라이언트를 위한 어플리케이션이 아닌 Web이나 기업용 시스템을 개발하기 위한 환경을 제공해 줍니다. 일단 여러분은 Pass...
Java ME 는 Micro Edtion에 대한 약자로 모바일을 위한 개발 환경을 제공합니다.
근데 뭐 여러분들에겐 별 도움이 안되겠죠?
그 다음이 Java SE 입니다. 일단 딴거 먼저 설명드리고 이거에 대한 설명을 다시 드리겠습니다.
JavaFX 는 Flash (요즘은 FLEX라고 많이 알려져 있는) 나 MS의 Silverlight 와 같이 브라우져 화면에서 좀더 화려하고 예쁜 화면을 제공하는 거 라고만 생각하고 계시면 되겠습니다.
나온지 꽤 되었는데, 아직 실무에 적용하긴 거시기한 상태입니다.
Database는 JavaDB라는 Java기반의 DB(아직 이거에 대해서는 공부를 안해서 잘 모르지만 언제부턴가 JDK를 깔면 같이 깔립니다.)와 Sun이 구매해버린 mySql 을 여기서 다운로드 할 수 있습니다.
이제 Java SE를 링크에서 확장해서 가장 위에 있는 Java SE (JDK) 를 클릭해 봅시다.
여러가지 다운로드 링크가 있는데, 기본적으로 다음과 같은 것들이 있지요.
Java SE Runtime Environment.....
Java SE Development Kit .....
.....
나머지는 모르셔도 되구요.
여기서 맨 위에 있는 것이 바로 JRE 이고,
두번째 있는 것이 JDK(JSDK)
아는 분은 알겠지만,
다음달부터 지난 9년간 다니던 회사를 이직하고 다른 회사로 옮길 예정이다.
지난 11월에 입사가 확정된 이후부터 지금까지,
많은 지인들을 만나 이직에 대해 이야기를 했고, 정말 많은 것을 느꼈다.
어떤 교육을 받을때 강사가 이런 이야기를 했다.
"이 교육이 끝나면 퇴직원을 내 보아라. 그러면 당신이 얼마나 조직에서 필요한 사람인지를 알 수 있을 것이다."
그런데, 내 생각엔 그 말은 맞는 말이 아닌 것 같다.
만약 상사가 자기만을 생각하고, 자신의 조직만을 생각하는 그런 분이라면 이 말이 맞겠지만,
자기 팀원의 미래에 대해서 생각하는 그런 상사라면 이 말은 틀린것이라고 생각된다.
그렇다고, 내가 퇴사한다고 했을때 팀장님이 안잡았다는 이야기는 아니다. ^^;
평소에 알고 지내던 지인들에게 퇴사한다고 이야기했을때,
사람들의 반응은 각양각색이었다.
"잘됐네~~~"
"아쉽네~~~"
"왜 가냐?"
"돈은 많이 준대?"
"회사 위치는 어딘데?"
"뭐 이젠 그런말 들어도 아무렇지도 않네~~~"
등등...
이야기를 들은 사람들이 평소에 나에 대해서 어떻게 생각하고 있는지를 알수 있는 가장 좋은 대목이다.
어제 어찌보면 현재하는 일과 별로 상관 없이 그냥 친하게 가끔 술마시는 사람들과 한잔 했다.
그 중 내가 신입때 협력 외국계 업체에 있다가, 우리회사에 경력으로 오신 분이 한 이야기가 바로 "돈, 시간, 사람"이다.
그 분은 현재 회사에 올 때 돈, 시간, 사람 중 사람을 보고 왔다고 이야기했다.
개인적으론 여기에 일과 회사를 추가해야 한다고 생각하지만.... 여하튼...
아마 이해가 안되는 분들이 많을 꺼라고 생각한다.
"사회생활을 돈을 벌려고 하는거지, 사람 보려고 하는건가?"
근데, 여기서 사람은 이쁜 여직원, 잘생긴 직원을 이야기하는 것이 아니다.
자신의 멘토가 될만한, 자신의 롤 모델이 될만한 사람이 있는 경우를 이야기 하는 것이다.
그런데, 나의 경우는 어떤가 생각해 보았다.
돈, 시간, 사람중 난 뭘 보고 가는 것인가?
돈?
내가 받는 현재 연봉과 제시받은 연봉이 얼마나 차이나는지 아는 분들은 내가 돈보고 가는 것이 아니라는 것을 알고 있을 것이다. (현재 팀장님이 가장 반대한 부분도 이 부분이었다.)
시간?
시간은 약간 애매한데, 시간은 오히려 지금 다니는 회사가 어떻게 보면 나에게 더 많다고 생각된다. 가려는 회사에서 퇴근해서 우리집에 빨리와봤자 8시 반 정도 될테니...
오히려 와이프는 내가 집에서 보내는 시간이 더 줄어들까봐 걱정을 많이 하고 있다.
사람?
어찌보면, 지금 회사에서 지금까지 쌓아온 인맥(?)중 반 이상은 놓칠 수 있다. 다르게 생각하면, 새로 옮기는 회사에서 더 많은 사람을 만날 수 있는 기회가 될 수도 있고...
내가 옮기는 가장 큰 이유는 앞의 3가지가 아닌 일이다.
지금일이 싫다는 이야기는 아니지만, 지금 하는 일중 성능 테스트가 70%이상, 나머지가 튜닝 및 진단이다.
IT에서 성능 테스트만큼 보람되고 많은 것을 배울 수 있는 일은 그리 많지 않다고 본다.
시스템을 전반적으로 크게, 광범위하게 볼 수 있는 일 중 가장 쉬운 방법이 성능테스트라고 생각한다.
그런데 그만큼 성능테스트는 많은 스트레스를 동반한다.(뭐 스트레스 받지 않는 일이 없겠냐만은...)
여하튼, 내년부터는 튜닝일을 징하게 할 것 같다. 튜닝 말고 해야하는 일도 있겠지만...
퇴사가 1주일 앞으로 다가온 현 시점에,
"내가 정말 잘 하고 있는 짓인지?"
라는 질문에는 아직까지도 답이 안나온다.
6개월, 1년, 3년, 5년, 아니면 20년후에 지금 내가한 선택이 제대로 된 선택인지 결정이 나겠지?
58 page 밑에서 7번째 줄 :
수행이 되어야 하므로 ==> 문제되는 메소드가 수행되어야 하므로
62 page 위에서 8번째 줄 :
이 부분은 ==> 네이티브 라이브러리는
68 page changeMessage ( ) 메소드에...(이 내용은 2쇄에도 반영 안되어 있음 - -):
currentName=new StringBuffer(); 를 메소드의 윗 부분에 추가...
75 page 밑에서 4번째 줄 :
StrinbBuffer ==> StringBuffer
로 변경
107 page 하단 소스 (2 쇄에도 반영 안되어 있음):
for(...;i < treeSet2.size(); ...) ==>
for 문 윗줄에 int treeSet2Size=treeSet2.size();
for(...; i < TREESET2SIZE ; ... )
으로 변경
114 page 두번째 소스:
catch 앞에 ] ==> }
로 변경하고
가장 하단에 } 추가
137 page 밑에서 8번째 줄:
두 가지 방식으로 사용할 수 있다. 이 메소드는 매개변수를 지정해야 한다. ==> 이 메소드는 다음과 같은 두 가지 방법으로 매개변수를 지정해서 사용한다.
196 page 위에서 8번째 줄:
해당 담 감사합니다. ==> 해당 담당자는 엄중 문책하겠습니다. 감사합니다.
회사 나가기 전에 같이 일하던 사람들에게 줄 선물로...
(책 써야하는데, 이런거나 맹글고 있으니 - -)
이게 뭘 하는 거냐면,
-성능 테스트를 하거나
-시스템을 운영하거나
-WAS의 문제로 장애가 났을때
개발자의 실수로 다른 Thread에 Lock(Block)을 발생시켰을 때
어떤 프로그램에서 발생했는지를 확인할 수 있는 그런 프로그램이다.
(뭐 똑똑하신 고급 개발자 분들께선 이미 이런거 만들어서 사용하고 계실테니 Pass...)
설치의 단순화를 위해서 JSP 딸랑 하나로 만들었으며,
JSP 하나에 넣기 위해서
HTML 노가다 + CSS 노가다 + JavaScript 노가다를 병행해서 개발했다.
두가지 버젼이 있는데, 하나는 메모리 정보를 보여주는 버젼, 다른 하나는 메모리 정보를 안보여 주는 버젼이다.
혹시라도 메모리 정보를 보여주면 서버에 부하가 발생할 수 있으니....
그림을 보면 알겠지만, 만약 다른 쓰레드를 잡고 있는 범인 쓰레드에 찐하게 표시를 해 주도록 해 놓았다.
원래 엄청나게 우울한 UI 였지만, 울팀 디자이너에게 별다방 커피 한잔 사준다고 꼬셔서 화면도 약간 이쁘게 포장했다.
이 프로그램을 왜 만들었냐면,
지난주 금요일에 성능 테스트를 하는데, XXXXXXXX 라는 프레임웍에서 사용하는 한 프로그램의 메소드에
Synchronized라는 블록을 써서 해당 메소드를 사용하는 다른 쓰레드의 응답속도가 엄청나게 증가하는 현상이 발생을 해서,
이런 문제를 제니퍼나 다른 모니터링 툴을 못 쓰는 사람들이 어떻게 잡을 수 있을까?
해서 만들게 되었다.
뭐 어찌보면, JConsole(이게 뭔지 모르는 분들은 제 책 보세욤...)을 써서 볼수 있겠지만,
서버에 부하가 많이 갈 수도 있고, 방화벽으로 막혀있는 상황이라면,
사용하기가 쉽지 않다.
아직 성능 테스트할 때 사용한 적은 없어서
(내 PC에서는 부하를 발생시켜서 테스트는 해 봤지만...)
해당 JSP를 아직은 공개하진 않을 예정이다.
뭐 소스가 이따구야~~
라는 분도 있을 수가 있고... ㅎㅎㅎ
혹~~ 써보고 싶은 분들은 저에게 이멜 보내주시면, 보내드리도록 하겠다.
메일 주소는 "자바 성능을 결정짓는 코딩 습관과 튜닝 이야기"에 있는 주소를 참조~~~ ㅎㅎ
만약 DB의 Connection을 WAS에서 제공하는 것을 사용하지 않을 경우나,
다른 특이한 경우에 이런 일이 발생하게 된다.
그럴때에는 당황하지 말고, 다음과 같이 하면 된다.
1. 먼저 어떤 메소드에서 DB Connection을 맺는지 확인해야 한다.
제니퍼에 로긴하여
장애진단 - 유틸리티 - 로딩 클래스 목록을 찾아간다.
(만약 이 메뉴도 못찾아 가면 이 설명을 읽지 말기 바란다. ^^)
2. 로딩 클래스 목록중에서 DB와 연결을하는 getConnection 관련 메소드를 찾는다.
그 메소드의 매개변수까지 꼭 확인해야 한다.
3. w11.conf 나 w12.conf 와 같이 각 WAS 별 설정이 지정되어 있는 설정파일을 연다.
(제니퍼에서 관리도구를 통해서 설정하는 것이 더 낫다. 실시간으로 반영이 되기 때문에...)
거기서 jdbc_connection_get =
이라고 되어 있는 부분을 찾는다.
분명히 #으로 주석이 되어 있을 것이다.
그 주석을 풀고 저 설정값 뒷 부붓에 패키지를 포함하여 클래스와 메소드와 매개변수를 지정한다.
예를 들어 삼성 SDS의 Athena (지금은 Anyframe 인가??)를 사용할 경우에는 다음과 같이 지정하면 된다.
jdbc_connection_get = athena.titan.services.datasource.impl.AbstractDataSourceService.getConnection() 만약 매개변수의 타입이 String이면, ....getConnection(String) 과 같이 지정하면된다.