'분류 전체보기'에 해당되는 글 2491건
- 2009.07.29 oracle 공백 제거
- 2009.07.29 [ JSP ] 게시판 페이징 처리 로직 JSP
- 2009.07.29 게시판용 페이징 클래스
- 2009.07.29 jeus 라이센스 확인 1
- 2009.07.27 JVM Memory 정리
- 2009.07.27 제우스 설정 방법 1
- 2009.07.24 좀 괜찮은 팁. 전송버튼 두번클릭 방지.
- 2009.07.24 SQL Injection 점검툴
- 2009.07.22 eclipse An error occurred while installing the items 1
- 2009.07.21 OWASP 10가지 웹 취약성
- 2009.07.20 Windows XP SP2에서 Windows 방화벽 서비스를 시작할 수 없다 1
- 2009.07.15 Web Application Stress Tool
- 2009.07.15 Fiddler2 - Installation Information 1
- 2009.07.15 [Linux] 리눅스 서버 점검 사항
- 2009.07.15 [Windows] SSH 터널링으로 메신저, 웹브라우징 하기
- 2009.07.15 [Windows] SSH 터널링 - putty의 plink 사용예
- 2009.07.15 file copy 빠르게 [TeraCopy ]
- 2009.07.14 윈도우용 tail
- 2009.07.14 win32 tail
- 2009.07.14 Maven 소개
- 2009.07.14 J2EE에서 한글
- 2009.07.14 http://java.sun.com/j2ee/1.4/docs/api/
- 2009.07.14 gmail 네임텍 만들기 ( 로고 만들기)
- 2009.07.14 데브피아 컬럼] DB 튜닝 이야기 - (2회) INDEX 과연 달면 빠른가?
- 2009.07.14 [데브피아 컬럼] DB 튜닝 이야기 - (1회) INDEX 과연 달면 빠른가?
- 2009.07.13 Process Explorer v11.33
- 2009.07.10 WebtoB + JEUS + web application
- 2009.07.10 JEUS 윈도우 서비스 등록 2
- 2009.07.10 - Windows 에서 WebtoB, JEUS의 서비스 등록 - 1
- 2009.07.09 DDos 공격 백신
http://blog.naver.com/wldud_0729/150015317564
매번 페이징을 구현할 때마다, 한 두시간 씩 끙끙대는 것 같다. 생각을 의사코드로 적은 후에 그걸 코드화 하는 습관을 들여야하는데, 성질이 급해서 일단 생각을 코드화 해서 버그를 잡은 다음에.. 그제서야 의사코드로 적고 있다. 다음은 생각의 흐름를 정리해본 것이다. ************************************************************************************************
데이터는 DB에서 가져오거나 xml파일을 읽어올 것이다. 페이지를 3 페이지씩 보여줄 수도 있고 [1] [2] [3] [다음] 혹은 10페이지씩 보여줄 수도 있다. [1] [2] [3] [4] [5] ...[10] [다음] 값 셋팅에 따라 달라질 수 있도록 페이지그룹 사이즈(pageGroupSize) 변수를 사용하겠다. 셋팅할 수 있는 값이 페이지그룹 사이즈 말고 또 무엇이 있을까? 한 페이지 당 보여주는 리스트 갯수도 변할 가능성이 많다. 이것은 페이지 사이즈(pageSize) 변수로 놓자. 그러면, 페이징 로직의 결과를 예측하기 위해서 이 두개의 변수에 값을 넣어보자. less.. 총 데이터 갯수 (count): 37 이렇게 셋팅을 할 경우, 나오는 결과는? 총 페이지 수(pageCount)는 37 / 4 = 9.25 니까 10 페이지 되겠다. pageCount = (count / pageSize ) + ( count % pageSize == 0 ? 0 : 1); => count % pageSize == 0 ? 0 : 1 이 수식을 풀어서 쓰면 if(count % pageSize == 0) 이렇게 표현된다. ============================================================================= 이 페이지 그룹을 본 후, 현재페이지가 호출될 경우를 생각해보면 5페이지가 호출된다면 numPageGroup이 2인 상태로 페이지바가 보여질 것이다. 그렇다면, 호출된 현재페이지를 가지고 페이지그룹넘버를 구하고, 페이지그룹넘버값으로 페이지바의 첫번째 페이지를 계산해보자. numPageGroup = 올림(currentPage/pageGroupSize) => int numPageGroup = (int) Meth.ceil ((double)currentPage/pageGroupSize) => numPageGroup : 올림(5/3) = 2 startPage = (numPageGroup - 1)*pageGroupSize + 1; => stratPage : (2-1)*3+1 = 4 이제 시작페이지를 가지고 마지막 페이지도 구해보자 endPage = startPage + pageGroupSize -1 => 4+3-1 = 6 이런식으로 시작페이지와 마지막페이지를 구했다면, for문을 돌려서 페이지바를 출력할 수 있을 것이다. 그런데, 마지막 페이지그룹을 위 공식대로 계산하면 endPage가 12페이지가 나온다. 총 페이지수가 10개인데 12페이지까지 출력되면 안 될것이다. 따라서, if문 처리를 추가해주자. if( 마지막페이지 > 총페이지 ) ************************************************************************************************ 로직은 자바 클래스로, 출력부분은 JSTL 코드로 작성했는데.. 페이징 부분 코드는 다음과 같다. [ 자바 클래스 ] //한 페이지 당 보여줄 글 갯수 String pageNum = request.getParameter("pageNum");//페이지 번호
//해당 뷰에서 사용할 속성 request.setAttribute("number", new Integer(number)); <c:if test="${count > 0}"> <c:forEach var="i" begin="${startPage}" end="${endPage}"> <c:if test="${numPageGroup < pageGroupCount}"> 출처 : Tong - 민뎅님의 java통 |
출처 : http://theeye.pe.kr/82
게시판에서 쓸만한 페이징 클래스를 제작해 보았다. 문제 발견시 피드백 부탁드립니다^^
---------------------------------------------------------------------------------------
페이징 클래스 소스코드 :
---------------------------------------------------------------------------------------
public class PageNavigation {
private boolean isPrevPage;
private boolean isNextPage;
protected int nowPage;
protected int rowTotal;
protected int blockList;
protected int blockPage;
private int totalPage;
private int startPage;
private int endPage;
private int startRow;
private int endRow;
// 페이지를 계산하는 생성자
public PageNavigation(int nowPage, int rowTotal, int blockList, int blockPage) {
super();
// 각종 플래그를 초기화
isPrevPage = false;
isNextPage = false;
// 입력된 전체 열의 수를 통해 전체 페이지 수를 계산한다
this.totalPage = (int) Math.ceil((double)rowTotal / (double)blockList);
// 현재 페이지가 전체 페이지수보다 클경우 전체 페이지수로 강제로 조정한다
if(nowPage > this.totalPage)
{
nowPage = this.totalPage;
}
// DB입력을 위한 시작과 종료값을 구한다
this.startRow = (int) (nowPage - 1) * blockList;
this.endRow = (int) this.startRow + blockList - 1;
// 시작페이지와 종료페이지의 값을 구한다
this.startPage = (int) ((nowPage - 1) / blockPage) * blockPage + 1;
this.endPage = (int) this.startPage + blockPage - 1;
// 마지막 페이지값이 전체 페이지값보다 클 경우 강제 조정
if(this.endPage > this.totalPage)
{
this.endPage = totalPage;
}
// 시작 페이지가 1보다 클 경우 이전 페이징이 가능한것으로 간주한다
if(this.startPage > 1)
{
this.isPrevPage = true;
}
// 종료페이지가 전체페이지보다 작을경우 다음 페이징이 가능한것으로 간주한다
if(this.endPage < this.totalPage)
{
this.isNextPage = true;
}
// 기타 값을 저장한다
this.nowPage = nowPage;
this.rowTotal = rowTotal;
this.blockList = blockList;
this.blockPage = blockPage;
}
public void Debug()
{
System.out.println("Total Page : " + this.totalPage + " / Start Page : " + this.startPage + " / End Page : " + this.endPage);
System.out.println("Total Row : " + this.rowTotal + " / Start Row : " + this.startRow + " / End Row : " + this.endRow);
}
// 전체 페이지 수를 알아온다
public int getTotalPage()
{
return totalPage;
}
// 시작 Row값을 가져온다
public int getStartRow()
{
return startRow;
}
// 마지막 Row값을 가져온다
public int getEndRow()
{
return endRow;
}
// Block Row 크기를 가져온다
public int getBlockSize()
{
return blockSize;
}
// 시작페이지값을 가져온다
public int getStartPage()
{
return startPage;
}
// 마지막 페이지값을 가져온다
public int getEndPage()
{
return endPage;
}
// 이전페이지의 존재유무를 가져온다
public boolean isPrevPage()
{
return isPrevPage;
}
// 다음페이지의 존재유무를 가져온다
public boolean isNextPage()
{
return isNextPage;
}
}
---------------------------------------------------------------------------------------
서블릿(Controller) 소스코드 :
---------------------------------------------------------------------------------------
// 리스트를 가져온다
if(request.getParameter("page") == null)
{
nowPage = 1;
}
else
{
nowPage = Integer.parseInt(request.getParameter("page"));
if(nowPage < 1)
{
nowPage = 1;
}
}
// 객체를 생성한다 (현재페이지, 전체글수, 페이지당표시할 글의수, 한번에 표시할 페이징블록수)
PageNavigation pageNav = new PageNavigation(nowPage, rowTotal, 10, 5);
// 디버깅이 필요할시 사용한다. 안써도 됨
pageNav.Debug();
// 시작Row값과 종료Row값을 넣어 쿼리문을 작성한다
sql = "SELECT * FROM TableName ORDER BY no DESC LIMIT " + pageNav.getStartRow() + ", " + pageNav.getBlockSize();
// 뷰에게 넘길 값을 지정한다
request.setAttribute("pageIsPrev", pageNav.isPrevPage()); // 이전페이지 블록의 존재유무
request.setAttribute("pageIsNext", pageNav.isNextPage()); // 다음페이지 블록의 존재유무
request.setAttribute("pageStart", pageNav.getStartPage());// 시작페이지 번호
request.setAttribute("pageEnd", pageNav.getEndPage()); // 종료페이지 번호
---------------------------------------------------------------------------------------
jsp(View) 소스코드(EL표기법, JSTL사용) :
---------------------------------------------------------------------------------------
<div>
<center>
<c:if test="${pageIsPrev}">
<a href="index.do?page=${pageStart - 1}">prev</a>
</c:if>
<c:forEach var="page" begin="${pageStart}" end="${pageEnd}">
<a href="index.do?page=${page}">[${page}] </a>
</c:forEach>
<c:if test="${pageIsNext}">
<a href="index.do?page=${pageEnd + 1}">next</a>
</c:if>
</center>
</div>
---------------------------------------------------------------------------------------
결과 :
---------------------------------------------------------------------------------------
prev [11] [12] [13] [14] [15] next
* JVM Memory 영역에 대한 설명
- Method Area : 메소드와 클래스 변수를 저장하기 위한 공간, 모든 프로그램에 의해 공유.
- Heap Area : 사용자가 생성하는 Java Object들이 저장되는 공간, 동적으로 할당하여 사용되어짐.
- Stack Area : 메소드 호출시 해당 메소드의 매개변수, 지역변수, 임시변수 등을 저장하기 위한 Stack 구조의 메모리.
- Native Heap Area : Java Object가 아닌 Native Object들이 거주하는 공간. OS 차원에서 결정.
- Permanent Space : Class에 대한 Meta 정보를 저장하는 공간. (Permanent Space는 Java Heap의 하위 영역)
* Java 실행 Option
1. -X Option (모든 VM에서 동작하지 않을 수 있는 비표준 option이며, 버젼별로 언급없이 변경되어질 수 있음)
-Xms : 초기 Heap size 설정
-Xmx : 최대 Heap size 설정
-Xss : 각 Thread에 할당되는 Stack size 설정
-Xmn : New 영역을 위한 Heap size 설정
2. -XX Option (올바른 동작을 위해 특정한 시스템 요구사항들이 있으며, 시스템 설정 파라미터에 대한 접근 권한이 요구됨)
-XX:PermSize : 초기 Permanent size 설정
-XX:MaxPermSize : 최대 Permanent size 설정
※ 참고 사이트 : http://blogs.sun.com/watt/resource/jvm-options-list.html
http://www.monosun.com/doc/hotspotvmoption.html
* Heap Size 구하기
long heapSize = Runtime.getRuntime().totalMemory();
String heapSizeMB = (heapSize / (1024*1024)) + "MB";
* 영역별 OutOfMemoryError 대처 방법
1. Heap Area
Exception in thread "main": java.lang.OutOfMemoryError: Java heap space
Exception in thread main: java.lang.OutOfMemoryError: Requested array size exceeds VM limit
원인 : Heap size의 부족으로 Java Object를 생성하지 못하여 발생
해결 : 1. -Xmx Option을 이용하여 최대 Heap size의 크기를 늘려줌
2. Application 로직이 잘못되었거나 JDK나 WAS의 Bug로 인한 Memory 누수가 있는지 확인하여 수정
3. finalize method에 의해 즉각적인 GC가 이루어지지 않으므로 로직 수정을 통해 해결
※ Object Allocation Profiling (Hprof)
java -Xrunhprof:heap=sites [Main Class]
java -Xrunhprof:heap=sites,doe=n [Main Class] (Thread Dump 생성)
2. Permanent Space
Exception in thread "main": java.lang.OutOfMemoryError: Perm Gen space'
원인 : Permanent 저장 공간이 부족하여 발생.
JSP -> Servlet 변환, Reflection을 사용하여 동적으로 로딩되는 Class가 많은 경우에 발생할 수 있으며,
WAS의 Class Reloading 기능이 자주 실행 될 경우에도 발생할 수 있음.
해결 : -XX:PermSize, -XX:MaxPermSize Option을 이용하여 크기를 늘려줌
※ Class Loading Monitoring
java 실행시 -verbose:gc을 사용하여 Class가 Loading 되는 것을 Monitoring
3. Native Heap Area
java.lang.OutOfMemoryError: request bytes for . Out of swap space?
java.lang.OutOfMemoryError: (Native method)'
java.lang.OutOfMemoryError: unable to create new native thread
원인 : Native Heap memory가 부족하여 발생
해결 : 1. Physical memory를 초과할 경우 Virtual Memory를 요청하여 필요한 메모리를 확보하게 되는데,
이 과정에서 오류가 발생할 경우 OS가 제공하는 툴을 통해 이를 모니터링 하고
이 공간 자체가 부족할 경우 크기를 늘려줌
2. -Xmx Option을 이용하여 Heap Area 공간을 줄이고 Native Heap Area 공간을 늘림
3. Thread Stack Space가 부족한 경우 Thread의 수를 줄이거나,
-Xss Option을 통해 Thread별 Stack Size를 줄여줌
(단, Thread별 Stack Size를 과도하게 줄였을 경우 Stack Overflow Error가 발생할 수 있음)
참고 사이트 : http://ukja.tistory.com/61
http://2005elc.elancer.co.kr/eTimes/page/eTimes_view.html?str=c2VsdW5vPTIwODY=
제우스 설정 방법 몇 가지 (JEUS 6.0 기반)
이는 티맥스소프트에 AS 요청을 하면 원격으로 작업해주고 알려주는데, 체크시 자주 이용하는 것이라 정리하였다.
*. DB Close 가 정상적이지 않는 부분을 추적할 때 JEUSMain.xml 설정
<invocation-manager-action>Warning</invocation-manager-action>
<!--invocation-manager-action>AutoClose</invocation-manager-action-->
-> Warning 으로 설정하면 로그 파일에 DB Close 가 정상적이지 않는 파일의 이력이 나타남.
-> AutoClose 으로 설정하면 비정상인 소스를 자동 닫는 기능을 수행하나 디버깅이 안됨. 따라서 정상가동전에는 반드시
Warning 상태로 테스트해야 함.
*. DB Connection 유실 있는 소스를 리눅스 콘솔에서 찾는 방법
[tmax@WEMS WEMS]$ grep "RequestURI" Jeus*20090312*.log
[2009.03.12 17:04:06][0][b168] [container1-42] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:14][0][b168] [container1-22] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:18][0][b168] [container1-32] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:19][0][b168] [container1-33] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:23][0][b168] [container1-26] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:35][0][b168] [container1-33] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:05:15][0][b168] [container1-30] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:05:22][0][b168] [container1-36] [MGR-0107] RequestURI : /cewolf
-> RequestURI 라는 예약어를 통해 관련 소스를 찾을 수 있음.
*. DB ConnectionPool 상태 보기
[tmax@WEMS WEMS]$ ja // 제우스 콘솔로 화면 전환
JEUS 6.0 (Fix#4) Jeus Manager Controller
WEMS>dsinfo 혹은 WEMS>dsinfo -i 5 -k 999 // 파라미터 의미: i(internal), k(repeat)
Connection pool information for engine container 'WEMS_container1'
----------------------------------------------------------------------------------
| id | name | min | max | active | idle | disp | total | wating | working |
----------------------------------------------------------------------------------
| 1 | jdbc/source | 5 | 15 | 15 | 0 | 0 | 15 | true | true |
----------------------------------------------------------------------------------
disp : disposable connection, total = active + idle + disp
-> 컨넥션 풀로 설정한 정보를 제공하여 준다. 필요시 JEUSMain.xml에서 갯수를 변경할 수 있음
*. 제우스 쓰레드 상태 보기, 응답속도, 메모리 관련
[tmax@WEMS WEMS]$ ja // 제우스 콘솔로 화면 전환
JEUS 6.0 (Fix#4) Jeus Manager Controller
WEMS>ti
< ContainerName : WEMS_container1 >
-- Thread State [webtob1-hth0(localhost_9900)] --
[webtob1-hth0(localhost:9900)-w00][waiting, wt=84007 ms]
[webtob1-hth0(localhost:9900)-w01][waiting, wt=84004 ms]
[webtob1-hth0(localhost:9900)-w02][waiting, wt=84003 ms]
[webtob1-hth0(localhost:9900)-w03][waiting, wt=84000 ms]
[webtob1-hth0(localhost:9900)-w04][waiting, wt=84000 ms]
[webtob1-hth0(localhost:9900)-w05][waiting, wt=83996 ms]
[webtob1-hth0(localhost:9900)-w06][waiting, wt=83995 ms]
[webtob1-hth0(localhost:9900)-w07][waiting, wt=83993 ms]
[webtob1-hth0(localhost:9900)-w08][active, rt=111992 ms] /aaa/bbb/test.jsp
[webtob1-hth0(localhost:9900)-w09][waiting, wt=83990 ms]
[webtob1-hth0(localhost:9900)-w10][waiting, wt=83989 ms]
[webtob1-hth0(localhost:9900)-w11][waiting, wt=83986 ms]
[webtob1-hth0(localhost:9900)-w12][waiting, wt=83986 ms]
[webtob1-hth0(localhost:9900)-w13][waiting, wt=83882 ms]
-> active 상태가 장시간 지속되는 관련 소스는 반드시 체크되어야 함.
WEMS>st -r // 요청에 대한 처리시간을 제공
< ContainerName : WEMS_container1 >
< request information(MyGroup/wems) >
- total requests : 19
- total processing time : 26023 ms
- average processing time : 1369 ms
WEMS>st -m // 현재 사용중인 JVM 메모리 정보 제공
< ContainerName : WEMS_container1 >
< memory information >
VM Total Memory = 648740864 Bytes
VM Free Memory = 510449952 Bytes
*. 제우스 덤프 (AS 요청시 이 정보가 제공하면 빨리 처리될 수 있음.)
-> 아래와 같이 하면 로그 파일에 덤프가 수행됨
[tmax@WEMS WEMS]$ ja // 제우스 콘솔로 화면 전환하여 컨테이너의 pid값을 얻음.
JEUS 6.0 (Fix#4) Jeus Manager Controller
WEMS>pidlist
node or container : WEMS, pid : 25195
node or container : WEMS_container1, pid : 25248
[tmax@WEMS WEMS]$ kill -3 25248 // 콘솔상태에서 덤프실행 10초간격 3회 정도
-> 이를 수행하면 로그 파일에 덤프 정보가 수집됨.
*. OutOfMemoryError: PermGen Space 에러가 발생하였을 경우의 JEUSMain.xml 설정
-> Permsize를 조금 크게 하여 가동시킨다. 테스트 운영이나 스트레스 테스트 툴을 이용해 에러가 발생하지
않는 값으로 최종 설정하면 된다.
<engine-container>
<name>container1</name>
<invocation-manager-action>Warning</invocation-manager-action>
<command-option>
-Xms512m -Xmx1024m -Djava.awt.headless=true
-XX:PermSize=512m -XX:MaxPermSize=1024m
</command-option>
<sequential-start>true</sequential-start>
<engine-command>
<type>servlet</type>
<name>engine1</name>
</engine-command>
</engine-container>
[출처] 제우스 설정 방법 (JEUS 6.0)|작성자 비누
글내용작성하고 전송버튼 누를때 수전증 또는 머리와 따로 노는 손가락때문에 타닥~ 두번 클릭이 되는 수가 있습니다. 또는 전송버튼 누르고 전송 완료페이지로 넘어갈때 시간이 걸릴때 "혹시 안눌렀나?" 하고 또한번 누르는 수가 있는데… 이것을 방지하기 위한 팁~~ (특히 설치형 블로그중에 코멘트삭제기능이 없는 경우에 적용하면 대략 괜찮음)
(누르면 없어집니다. 가만히 기다려도 안나옵니다.-_-)소스 : <input type="submit" onClick="this.style.visibility='hidden'" value="눌러요~ 잇힝!" /> (누르면 비활성화 되어 다시 누를수 없게 됩니다.)
소스 : <input type=submit onclick="this.disabled=true" value="이것도 눌러요~ 잇힝!">
An error occurred while installing the items
session context was:(profile=epp.package.jee, phase=org.eclipse.equinox.internal.provisional.p2.engine.phases.Install, operand=null --> [R]com.android.ide.eclipse.adt 0.9.1.v200905011822-1621, action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallBundleAction).
Error while loading manipulator.
Error while loading manipulator.
eclipse update error
subeclipse 를 설치해서 에러를 잡을수있다.
subeclipse 설치는 알아서 하시길...
이 페이지에서
현상
Microsoft Windows XP 서비스 팩 2(SP2)를 설치한 후 Windows 방화벽 서비스를 시작할 수 없습니다. 특히, 다음과 같은...
- 제어판의 서비스 목록에 Windows Firewall/Internet Connection Sharing (ICS)이 표시되지 않습니다.
- 서비스 목록에 Windows Firewall/Internet Connection Sharing (ICS)이 표시되지만 이 서비스를 시작할 수 없습니다.
- Windows 방화벽 설정에 액세스하려고 하면 다음과 같은 오류 메시지가 나타납니다.
원인을 알 수 없는 문제 때문에 Windows에서 Windows 방화벽 설정을 열 수 없습니다.
원인
이 문제는 SharedAccess.reg 파일이 없거나 손상되었기 때문에 발생합니다. SharedAccess.reg 파일은 Windows 방화벽...
해결 방법
이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오. 방법 1: "Setup API InstallHinfSection" 함수를 호출하여 Wi...
방법 1: "Setup API InstallHinfSection" 함수를 호출하여 Windows 방화벽 설치
Windows 방화벽을 설치하려면 다음과 같이 하십시오.- 시작, 실행을 차례로 누르고 cmd를 입력한 다음 확인을 누릅니다.
- 명령 프롬프트에서 다음 명령줄을 입력한 다음 Enter 키를 누릅니다.
Rundll32 setupapi,InstallHinfSection Ndi-Steelhead 132 %windir%\inf\netrass.inf
- Windows를 다시 시작합니다.
- 시작, 실행을 차례로 누르고 cmd를 입력한 다음 확인을 누릅니다.
- 명령 프롬프트에서 다음 명령을 입력한 후 Enter 키를 누릅니다.
Netsh firewall reset
- 시작, 실행을 차례로 누르고 firewall.cpl을 입력한 다음 Enter 키를 누릅니다. Windows 방화벽 대화 상자에서 사용(권장)을 누른 다음 확인을 누릅니다.
방법 2: 레지스트리에 Windows 방화벽 항목 추가
경고 레지스트리 편집기나 다른 방법을 사용하여 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있습니다. 이 문제를 해결하려면 운영 체제를 다시 설치해야 할 수도 있습니다. Microsoft는 이러한 문제의 해결을 보증하지 않습니다. 레지스트리 수정에 따른 모든 책임은 사용자에게 있습니다.레지스트리에 Windows 방화벽을 추가하려면 다음과 같이 하십시오.
- 다음 텍스트를 메모장에 복사한 다음 Sharedaccess.reg라는 이름으로 파일을 저장합니다.
Windows 레지스트리 편집기 버전 5.00 [-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess] "DependOnGroup"=hex(7):00,00 "DependOnService"=hex(7):4e,00,65,00,74,00,6d,00,61,00,6e,00,00,00,57,00,69,00,\ 6e,00,4d,00,67,00,6d,00,74,00,00,00,00,00 "Description"="Provides network address translation, addressing, name resolution and/or intrusion prevention services for a home or small office network." "DisplayName"="Windows Firewall/Internet Connection Sharing (ICS)" "ErrorControl"=dword:00000001 "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\ 74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\ 00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\ 6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00 "ObjectName"="LocalSystem" "Start"=dword:00000002 "Type"=dword:00000020 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Epoch] "Epoch"=dword:00002cd0 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters] "ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\ 00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,\ 69,00,70,00,6e,00,61,00,74,00,68,00,6c,00,70,00,2e,00,64,00,6c,00,6c,00,00,\ 00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\AuthorizedApplications] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\AuthorizedApplications\List] "%windir%\\system32\\sessmgr.exe"="%windir%\\system32\\sessmgr.exe:*:enabled:@xpsp2res.dll,-22019" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List] "%windir%\\system32\\sessmgr.exe"="%windir%\\system32\\sessmgr.exe:*:enabled:@xpsp2res.dll,-22019" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Setup] "ServiceUpgrade"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Setup\InterfacesUnfirewalledAtUpdate] "All"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Enum] "0"="Root\\LEGACY_SHAREDACCESS\\0000" "Count"=dword:00000001 "NextInstance"=dword:00000001
- Sharedaccess.reg를 두 번 눌러 이 파일의 내용을 레지스트리에 추가하고 Windows 방화벽 항목을 만듭니다.
- Windows를 다시 시작합니다.
- 시작, 실행을 차례로 누르고 cmd를 입력한 다음 확인을 누릅니다.
- 명령 프롬프트에서 다음 명령을 입력한 후 Enter 키를 누릅니다.
Netsh firewall reset
- 시작, 실행을 차례로 누르고 firewall.cpl을 입력한 다음 확인을 누릅니다.
- 사용할 Windows 방화벽 설정을 구성합니다.
추가 정보
Windows 방화벽 서비스가 시작되었는지 확인하려면 다음과 같이 하십시오. 시작, 실행을 차례로 누르고 services.msc를 입력한 다음...
- 시작, 실행을 차례로 누르고 services.msc를 입력한 다음 확인을 누릅니다.
- 서비스 목록에서 Windows Firewall/Internet Connection Sharing (ICS)을 찾습니다. 서비스 상태가 시작됨인지 확인합니다.
- 이 서비스 기능을 사용하는 방법에 대한 자세한 내용을 보려면 동작 메뉴에서 도움말을 누릅니다.
현재 상태
Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열한 제품에서 이 문제를 확인했습니다....
참조
Windows XP 서비스 팩 2에서 Windows 방화벽을 사용하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조...
Web Application Stress Tool
Brief Description
On This Page
Quick Details
File Name: | setup.exe | |
Version: | 1.0 | |
Date Published: | 12/26/2002 | |
Language: | English | |
Download Size: | 9.6 MB | |
Estimated Download Time: | 24 min 56K |
Overview
Install Fiddler2 (~500kb)
...or, click here to install the latest v2.x BETA version.System Requirements
Windows 2000 / XP / 2003 / Vista with Microsoft .NET Framework v2.0 or later
10 megabytes disk space / 800mhz processor (Screams at 2.4ghz)
128 megabytes RAM (512mb+ highly recommended)
Note: The legacy product Fiddler v1.3, for users of the .NET Framework v1.1, remains available here.
Complementary Tools
- The Fiddler Script Editor is a syntax-aware script editing environment.
- Microsoft's IE Developer Toolbar offers assorted web developer features.
- Microsoft's IE Powertoys for WebDevs (includes the "View Partial Source" context menu)
- Bayden Systems' TamperIE offers HTTPS form-tampering
- Bayden Systems' MezerTools offers simple screen captures for capturing images of rendering bugs
Notification of Updates
Upon booting, Fiddler will check for new versions by hitting a web service on this server. If you'd prefer to only check for updates manually, set the option in Tools | Fiddler Options.
Version History
See the change log.
1. SUID 점검하기.(root 소유의 SetUID및 SetGID 파일들 점검
#find / -user root -perm -4000 -print (SetUID)
#find / -user root -perm -2000 -print (SetGID)
#find / -user root -perm -4000 -print -xdev
2. 파티션별 디스크사용량 점검
#df -h
3. 파일무결성 점검.
- tripwire 설치 수 실행
4. 백도어 설치여부 점검.(/dev 체크 및 rootkit 점검)
#find /dev -type f -exec ls -l {} \;
#./chkrootkit
5. 현재 열려진 포트 및 응답가능한 포트 점검.
#netstat -atp | grep LISTEN
(사용 프로토콜 : TCP인가? 또는 UDP인가?
사용중인 포트번호
서버와 연결된 IP 및 도메인명
생성 PID
서비스중인 프로세스명
현재 응답가능상태인가?
#lsof | grep LISTEN
(현재 서비스 중인 프로세스명(데몬명)
현재 생성중인 PID번호.
현재 서비스중인 프로세스의 소유자
프로토콜 버전 : Ipv4 또는 Ipv6
TCP 또는 UDP의 여부
응답가능 상태인가?
6. 실생중인 프로세스 및 데몬점검.(프로세스의 생성관계)
#pstree
7. 시스템 운용상황 점검.
#top -d2
8. 백업점검.
9. 스팸메일 점검.(메일큐 디렉토리 점검)
#cd /var/spool/mqueue (동일한 날짜, 동일한 사이즈를 가진 다수 파일구분)
10. Core 점검.
#find / -name core -exec ls -l {} \;
서버내에 긴급한 이상이 발생하였을 경우나 시스템의 정확한 분석을 위해
서버의 메모리 상태를 순간적으로 dump 받는 경우의 파일
11. 파일용량 점검
#repquota -av -ag
#df -h
12. 최근 서버 접속자 점검.
#vi /var/log/secure
#last -n 10
- 최근 10번째까지의 접속기록을 확인.
13. 계정별 최후접속기록 점검.
#lastlog
-lastlog는 현재 /etc/passwd에 존재하는 모든 계정을 대상으로 하여 언제 마지막으로 서버에 접속을 했는가를 확인.
Mail, adm, bin 등의 계정들은 모두 "** Never logged in **" 이라고 되어 있는것이 정상.
14. 현재 서버접속자 보기
#w (telnet)
#ftpwho(ftp)
15. root명령어 사용기록 점검.
#vi /root/.bash_history (.set nu)
#cat /root/..bash_history | wc -l (1000라인 이상 되어야 정상)
16. 계정별 사용명령어파일 점검.
#find / -name .bash_history -exec ls -l {} \; (각 계정별 .bash_history 파일의 존재여부)
#find / -name .bash_history -exec cat {} \; (파일의 내용까지 모두 확인해 볼 수 있음)
17. root소유자 점검(UID와 GID가 0인 사용자 점검)
#cat /etc/passwd | grep 0:0
18. 서버내에 중요한 디렉토리 점검
- /etc/xinetd.d/ (xinetd로 서비스되는 인터넷서비스 파일들이 존재하는 디렉토리)
- /etc/rc.d/ (부팅에 관계된 파일) (파일들을 복사 후 파일용량등을 비교하기) (커널패닉의원인)
- /etc/rc.d/init.d/ (부팅시에 특정 서비스나 데몬들을 시작시키는 스키립트 파일)
19. .rhosts 파일 점검
#find / -name .rhosts -exec ls -l {} \;
#find / -name .rhosts -exec cat {} \;
- 원격에서 패스워드등의 확인과정없이 바로 접속하기 위해서 사용되는 파일
20. 메모리사용량 점검.
#free -m
#cat /proc/meminfo (free 와 top 는 이 파일을 참조하여 보여준다.)
#top -d2
21. 중요 관리자용명령어 점검.
아래의 명령어들을 퍼미션을 100으로 설정한다. 변경 후 퍼미션 변경여부를 확인.
#chmod 100 /usr/bin/top
#chmod 100 /usr/bin/pstree
#chmod 100 /usr/bin/w
#chmod 100 /bin/ps
#chmod 100 /usr/bin/who
#chmod 100 /usr/bin/find
#chmod 100 /bin/df
#chmod 100 /bin/netstat
#chmod 100 /sbin/ifconfig
#chmod 100 /usr/sbin/lsof
#chmod 100 /usr/bin/make
#chmod 100 /usr/bin/gcc
#chmod 100 /usr/bin/g++
#chmod 100 /usr/bin/c++
22. su 명령어를 이용한 root권한 사용자 점검.
su 명령어의 사용내역을 확인할 수 있음.
#cat /var/log/messages | grep root
23. 최근 n 일전 변경된 파일 점검. (단위는 일)
#find / -ctime -1 -print | more
25. find 를 이용한 특정파일 점검하기.
.exec 파일찾기
#find / -name '.exec' -exec cat {} \; -print
#.forward 파일체크
#find / -name '.forward' -exec cat {} \; -print
write 퍼미션이 있는 파일(디렉토리)찾기
#find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \;
#find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \;
SteUID SetGID 체크하기
#find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -lg {} \;
/dev 체크
#find /dev -type f -exec ls -l {} \;
소유자없는 파일 및 디렉토리 찾기
#find / -nouser -o -nogroup -print
원격리모트 접속허용 파일(.rhosts)찾기
#find / -name .rhosts -print
최근 변경된 파일들 찾기.(파일or디렉토리) 단위는 일
#find / -ctime -20 -type f or d
현재 서버에서 열려진 포트 및 접근저보 점검
#netstat -an | grep LISTEN (포트들과 열결되어 있는 실행데몬들을 확인)
#lsof | grep LISTEN (좀 더 자세히 확인)
26. 관리자용 명령어 퍼미션 수정하기.
#chmod 100 /usr/bin/top
#chmod 100 /usrbin/pstree
#chmod 100 /usr/bin/w
#chmod 100 /bin/ps
#chmod 100 /usr/bin/who
#chmod 100 /usr/bin/find
#chmod 100 /bin/df
#chmod 100 /bin/netstat
#chmod 100 /sbin/ifconfig
#chmod 100 /usr/sbin/lsof
#chmod 100 /usr/bin/make
#chmod 100 /usr/bin/gcc
#chmod 100 /usr/bin/g++
#chmod 100 /usr/bin/c++
27. 중요한 파일퍼미션과 소유권 제한 및 점검.
#chmod 644 /etc/service
#chmod 600 /etc/xinetd
#chmod 644 /etc/mail/aliases
#chmod 600 /etc/httpd/conf/httpd.conf
#chmod 644 /var/log/wtmp
#chmod 644 /var/run/utmp
#chmod 644 /etc/motd
#chmod 644 /etc/mtab
#chmod 600 /etc/syslog.conf
#/etc, /usr/etc, /bin, /usr/bin, /sbin, /usr/sbin
#chmod 1777 /tmp
#chmod 1777 /var/tmp
28. umask 값 확인하기.
root의 umask 값 확인하기.
#umask
022 -->파일은 644 디렉토리는 755로 생성됨.
027 -->파일은 640 디렉토리는 750로 생성됨.
29. /dev 에 device 파일 이외의 것이 존재하고 있는지 확인.
#find /dev -type f -exec ls -l {} \;
30. 일반사용자의 명령어 패스
#/usr/local/bin:usr/local/mysql/bin:/home/hosting/bin/
일반사용자가 사용가능한 명령어를 모두 이것에 둠.
31. 관리자의 명령어 패스
#:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin
#/X11:/usr/X11R6/bin:/usr/kerberos/bin:/root/bin
32. 특정 그룹만의 su 사용권한 허용하기
#vi /etc/group (wheel구릅에 su 사용권한을 가질 유저 추가하기)
#wheel:x:10:root,cream
#vi /etc/pam.d/su (두줄 추가하기)
#auth sufficient /lib/security/pam_rootok.so
#auth required /lib/security/pam_wheel.so allow group=wheel
#vi /var/log/message 에서 확인
33. chmod 400 /etc/shadow
34. 시스템 기본로그파일.
- /var/log/messages
- /var/log/secure
- /var/log/wtmp
- /var/run/utmp
- /var/log/lastlog
35. utmp, wtmp, lastlog 파일
utmp파일 : 현재시스템에 접속해 있는 사용자의 정보를 가지고 있음.
#strings utmp | more
정보 이용 명령어
login(1), who(1), init(8), last(8), lastcomm(8)
wtmp파일 : 처음부터 접속했던 모든 사용자의 로그인정보와 로그아웃정보를 가지고 있음.
#strings wtmp | more
정보 이용 명령어
login(1), who(1), init(8), last(8), lastcomm(8)
lastlog 파일
가장 최근에 로그인한 정보를 저장함.
last 라는 명령어로 확인할 수 있음.
36. 패스워드 유출대처방안(웹)
perl을 이용한 방법.
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
Options Indexes SymLinksIfOwnerMatch IncludesNoExec
Order allow,deny
Allow from all
Order deny,allow
Deny from all
SSI의 exec 명령어를 이용하는 방법
# AddType text/html .shtml
# AddHandler server-parsed .shtml
27. PortSentry를 이용한 실시간 해킹방어 구현.(잘못 사용할시 서버접속 안됨)
#tar -xvzf portsentry-1.1.tar.gz
#make linux
#make install
#/usr/local/psionic/portsentry/portsentry -tcp
#/usr/local/psionic/portsentry/portsentry -udp
#/usr/local/psionic/portsentry/portsentry -stcp
#/usr/local/psionic/portsentry/portsentry -atcp
#/usr/local/psionic/portsentry/portsentry -stdp
#vi /etc/hosts.deny 점검.
28. Chkrootkit 로 백도어 점검.
#tar -xvzf chkrootkit.tar.gz
#make sense
#./chkrootkit (점검명령어)
29 ping 을 이용한 DOS 공격 막는 방법.
#vi /etc/sysctl.conf
#net.ipv4.icmp_echo_ignore_broadcasts = 1
#sysctl -w
#/etc/rc.d/init.d/network restart
#sysctl -a | grep ignore_broadcasts
30. Nmap를 이용 포트스켄 하여 해킹가능성 체크.
#nmap -sS -p80 211.42.48.110 -O -v www.armian.net
#nmap -sS -O -v 211.42.48.114
출처
http://blog.naver.com/osang1997.do?Redirect=Log&logNo=40009100812
=============================================================================
iptables -A INPUT -s 211.63.89.95 -p icmp -j DROP
// 모든 패킷 DROP
iptables -A INPUT -s 0/0 -j DROP
iptables -A OUTPUT -f -d 192.168.1.1 -j DROP
// TCP option --syn A에서 B서버로 나가는 패킷은 되고 B에서 A로 들어오는 패킷은 막는다.
iptables -p TCP -s 192.168.1.1 --syn
iptables -A INPUT -p tcp ! --sport 0:1024 --dport 25 -J ACCEPT
// UDP flooding 예방책
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP
// 웹해킹 대응방법
[root@wowsecurity dev]# chmod 700 /usr/bin/wget /usr/bin/lynx /usr/bin/curl
modsecurity 사용
// 한국에서의 ftp만 허용하고 나머지 국가에서의 접속은 차단하고자 할 때
iptables -A INPUT -p tcp --dport 21 -m geoip --src-cc KR -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j DROP
또는 iptables -A INPUT -p tcp --dport 21 -m geoip ! --src-cc KR -j DROP
// 동시접속 제한
iptables -A INPUT -m recent --name badguy --rcheck --seconds 300 -j DROP
iptables -A INPUT -p tcp --syn --dport 25 -m connlimit --connlimit-above 5 -m recent --name badguy --set -j DROP
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 ?connlimit-mask 24 -j DROP
iptables ?A INPUT ?m psd ?j DROP
// VPN
Gateway - to Gateway 방식
Host-to-Gateway 방식
// tacacs 설정
Router(config)# tacacs-server host x.x.x.x
Router(config)# tacacs-server key cisco
Router(config)# enable use tacacs
switch>(enable) set authentication login tacacs
switch>(enable) set tacacs server x.x.x.x
switch>(enable) set tacacs key cisco
// NTP
장시간 상이한 시간설정으로 분석에 어려움, 시간동기화를 시켜줘야 함
// no login : 원격에서 passwd 없이 접근 가능 단 passwd가 설정되어야 한다.
// no login local : passwd 설정 필요없다.
// anti-spam
# vi /etc/mail/access
spammer.org REJECT
x.x.x.0 RELAY
# makemap has /etc/mail/access.db < /etc/mail/access
// sendmail 환경파일 초기화
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
// tcpwrapper 텔넷 설정하기
# vi /etc/inetd.conf
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
위 문장을 다음과 같이 수정
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
# vi /etc/hosts.deny
ALL:ALL
# vi /etc/hosts.allow
telnetd : x.x.x.x
# service inetd restart
// PAM 설정하기
# vi /etc/security/limits.conf
* hard maxlogins 6
@users hard maxlogins 4
// FIND
find / -type f \( -perm -4000 -o -perm -2000 \) -ls // SETUID SETGID 파일들 검색
find / -type f -exec grep 'hack' {} /dev/null \n; // hack 단어를 포함한 파일 검색
find / -user 427 -print // 소유자 UID가 427인 파일을 보여줌
find / -perm -0002 -type d -print // 일반유저가 쓰기권한이 있는 DIR을 보여줌
find / -nouser -o -nogroup -print // 유저나 그룹이 없는 파일을 보여줌
chattr +i - 추가/변경/삭제 불가능
chattr +a - 추가만 가능
chattr +A - 파일에 대한 atime 즉 접근시간 속성을 변경할수 있다.
// proc 제어
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
-> spoofing을 막기 위해 source route 패킷을 허용하지 않는다. 소스 라우팅을 허용할 경우 악의적인 공격자가 ip 소스라우팅을 사용해서 목적지으 ㅣ경로를 지정할 수 있고 원래 위치로 돌아오는 경로도 지정할 수 있다.
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
-> smurf 공격에 악용될 수 있으므로 broadcast 주소를 통한 icmp echo에 대해 응답하지 않도록 한다.
echo "0" > /proc/sys/net/ipv4/ip_forward
-> 해당시스템을 통해 다른 시스템으로 패킷의 포워딩 되지 않도록 한다.(라우터나 게이트웨이가 아닐경우)
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
-> icmp redirect 허용하지 않는다. 허용할 경우 공격자가 임의의 라우팅 테이블을 변경할 수 있어 자신이 의도하지 않은 경로로 트랙픽이 전달될 수있다.
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
-> 스푸핑된 패킷이나 소스라우팅, redirect 패킷에 대해 로그파일 남긴다.
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
-> syn flooding 공격에 대응하기 위해 syncookies기능을 켠다.
echo -e "32768\t61000" > /proc/sys/net/ipv4/ip_local_port_range
-> local port 범위 지정
echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-> backlog queue 사이즈를 늘려 공격에 대응한다.
stunnel
openssl must be installed.
xinetd.conf
service pop3s
{
server = /usr/local/sbin/stunnel
server_args = /usr/local/etc/stunnel/stunnel.conf
}
service ssmtp
{
}
// zone transfer
dig @ns.wowsecurity.net. wowsecurity.net axfr
host -l kunsan.ac.kr dns.kunsan.ac.kr
-> master 는 slave에서만 zone transfer를 허용할 필요가 있다.
slave는 다른 3, 4차 slave서버에 zone transfer를 제공하는 것이 아니라면 모든 zone transfer를 차단해야할것이다.
//ssh에서 tcp-wrapper 사용하기
./configure --with-libwrap
// mysql 3306으로의 접속차단
on compiling, --skip-networking
max_user_connections 설정 제한
show processlist
// 한 IP에서 동시에 telnet 접속 2회 하는거 제한
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit-above 2 -j REJECT
// FTP 접속 제한하기
<Limit Login>
Order deny,allow
Deny from x.x.x.x
Allow from All
// SMURFFING 대책
TCP/IP 대신 암호화로 전송한다.(IP 위조는 사실상 어려움)
VLAN 사용
IP FILTERING (IP와 MAC주소를 고정한다.)
PORT SECURITY (MAC FLOODING 대비)
// 설정
SET PORT SECURITY 3/1 ENABLE MAC ADDRESS
// 나프타 : TCP로 메모리 고갈(실제 사용자의 IP주소로 공격함)
// smurf 대책 - 증폭네트워크딴에서 icmp echo reply 패킷에 대한 차단 or 어느정도의 대역폭만 허용
// no ip redirects - icmp redirect 차단
// ingress <-> egress
// blackhole
출처 : http://simples.kr/bbs/board.php?bo_table=03_2&wr_id=77&page=2 기본적으로 외부에 ssh 연결이 가능한 시스템이 있어야 합니다. |
|
출처 : http://simples.kr/bbs/board.php?bo_table=03_2&wr_id=79
Contents
1 이 문서가 필요한 곳
2 필요한 것
3 방법
3.1 ssh -R 에 대해
3.2 ssh -L 에 대해
3.3 접속
4 실제의 예 1 (ssh서비스 이용하기)
4.1 my_office_pc 에서
4.2 my_home_adsl_pc 에서
5 실제의 예 2 (터미널 서비스 이용하기)
5.1 my_office_pc 에서
5.2 my_home_adsl_pc 에서
6 맺는 말
7 질문과 답변
8 토론
작성 : 김원일
[edit]1 이 문서가 필요한 곳 ¶
회사나 가정에서 작업하던 환경을 그대로 쓰고 싶지만 vpn 이나 firewall 등의 제한으로 외부에서 접근하기가 쉽지 않은 경우가 있다. proxy 가 있거나 vpn 이라면 별 다른 문제가 없을 수도 있겠으나 firewall 같은 경우 넷웍 관리자에게 요청하지 않는 이상, 또는 요청한다고 해도 그다지 쉽게 허가를 얻지 못할 것이다. vpn 이라고 해도 외부의 누군가에게 잠깐 내부의 자원을 이용하게 하기위해 자신의 vpn 접속 방법을 가르쳐 주는 것도 양심상, 보안상 그다지 권장하고 싶은 일은 아니다. 이 문서는 그러한 경우 외부에서 접근 가능한 ssh계정을 이용해 터널을 만들어 vpn, firewall 외부에서 그 안쪽으로 접근을 가능하게 하는 방법이다.
[edit]2 필요한 것 ¶
OpenSSH (ssh protcol 2 이상을 가정)
vpn 및 firewall 외부에 ssh 로 접속이 가능한 계정
임은재님이 작성하신 ssh Howto, ssh + mini proxy 등을 미리 읽어 두는 것이 도움이 된다.
[edit]3 방법 ¶
[edit]3.1 ssh -R 에 대해 ¶
ssh -R 은 원격서버의 특정 포트를 자신이 접근 가능한 서버 및 포트 (이문서에서는 vpn 안쪽의 자신의 서버 또는 작업을 하려는 서버)로 포워딩 하는 것이다. ssh -L 의 역이라고 봐도 무방하다 (ssh -L 에 대해서는 ssh mini proxy 문서를 참조하자)
vpn 또는 firewall 안쪽의 PC 에서
ssh -R port:host:hostport ssh_user@ssh_server
와 같은 명령을 사용한다.
ssh_server서버에 ssh_user라는 계정으로 접속하되 port로 지정한 포트로 들어오는 패킷을 host의 hostport로 포워딩한다는 것이다. 언뜻 알기 어렵지만 차근 차근 이해해 보자.
port : ssh_server에서 열 포트 번호다. (여기서 ssh_user가 ssh_server의 루트가 아니라면 1024번 이상의 포트번호를 지정해야 한다)
host : vpn 및 firewall 안쪽에 있는 우리가 바깥에서 사용할 서버의 ip 또는 이름이다. (꼭 안쪽에 있을 필요는 없다. ssh -R ... 명령을 내리는 자신의 컴퓨터에서 접근 가능해야 한다)
hostport : 위의 host 에서 우리가 이용하려는 서비스가 열려있는 포트 번호다. (역시 접근 가능해야 한다)
이상과 같이 하면 hostname의 loopback 주소(127.0.0.1)에서 port를 리스닝하게 된다. nestat -nl 로 확인해보라. loopback 주소로만 listening하는 것은 sshd 설정상 기본이다.
[edit]3.2 ssh -L 에 대해 ¶
이제 우리가 원하는 우회로의 반은 열린 셈이다. 나머지 반을 열어보자.
ssh -L localport:localhost:port ssh_user@ssh_server
이 명령은 vpn 또는 firewall 바깥의 환경에서 쓰이게 된다. 즉 집이나 외부업체의 회의실 또는 외딴 섬마을 학교의 pc실에서 쓰인다는 것이다.
localport : 현재 작업 중인 컴퓨터에서 열릴 포트이다. (netstat -nl 에서 Listen 중인 것으로 나타날 것이다)
localhost : 말 그대로 localhost라고 적는 것이다. 127.0.0.1 도 무방하다. 여기서 localhost 는 ssh_server의 루프백 주소를 가리킨다.
port : ssh -R 에서의 port 와 같다.
이제 모든 우회로가 열렸다!
[edit]3.3 접속 ¶
우회로를 이용하는 건 다음과 같다.
telnet localhost localport (telnet 서비스를 우회해서 접속할 경우)
http://localhost:localport/ (http 서비스의 경우)
ssh -p localport localhost (ssh 서비스의 경우)
smbclient -p localport localhost (삼바 서비스의 경우)
즉 모든 접속은 localhost로 ssh -L 에서 지정한 localport를 이용하게 된다.
[edit]4 실제의 예 1 (ssh서비스 이용하기) ¶
여기서는 실제로 명령어를 다루는 예를 들겠다. 다음과 같은 컴퓨터들이 등장한다.
my_office_pc (IP : 224.20.X.22 under Firewall)
ssh_server (IP : 210.32.X.221)
my_home_adsl_pc (IP: 61.78.X.226)
지금 시각은 오후 5:32분, 내일 오전까지 끝내야할 작업이 거의 다 끝나가지만 잔업은 하기 싫다. 집에서 작업하고 싶지만 방화벽 때문에 외부에서는 접속할 수가 없는 처지다.
[edit]4.1 my_office_pc 에서 ¶
my_office_pc ~$ ssh -R 22:localhost:22 210.32.X.221
myaccout@210.32.X.221's password: _ <-- ssh_server 패스워드 입력
ssh_server ~$ _
이제 짐을 싸고 정리한 후 퇴근한다!
[edit]4.2 my_home_adsl_pc 에서 ¶
my_home_adsl_pc ~$ ssh -L 2222:localhost:22 210.32.X.221
myaccout@210.32.X.221's password: _ <-- ssh_server 패스워드 입력
ssh_server ~$ _
다른 터미널을 열고
my_home_adsl_pc ~$ ssh -p 2222 localhost
myaccout@localhost`s password: _ <-- my_office_pc 의 패스워드 입력
my_office_pc $ _ <--- 사무실에 ssh 로 연결 되었다!!!
마무리 작업을 하고 맥주 한잔!
[edit]5 실제의 예 2 (터미널 서비스 이용하기) ¶
여기서는 실제로 명령어를 다루는 예를 들겠다. 다음과 같은 컴퓨터들이 등장한다.
my_office_pc (IP : 224.20.X.22 under Firewall,Windows XP)
ssh_server (IP : 210.32.X.221)
my_home_adsl_pc (IP: 61.78.X.226)
지금 시각은 오후 5:45분, 내일 오전까지 끝내야할 작업이 거의 다 끝나가지만 잔업은 진짜!! 하기 싫다. 집에서 작업하고 싶지만 방화벽 때문에 외부에서는 접속할 수가 없는 처지다.
[edit]5.1 my_office_pc 에서 ¶
지금의 사무실의 컴퓨터는 윈도우 환경이다. 윈도우에서는 별도의 ssh 프로그램이 필요하다.
putty (터널링이 가능한 최신 버젼)
plink (putty 의 자매 프로그램, windows console 에서 사용 가능하다. plink -R 또는 plink -L 로 unix 에서와 유사하게 사용한다.
ssh (cygwin 환경에서 사용가능)
plink 를 사용해보기로 하자.
> plink -R 3389:localhost:3389 210.32.X.221
myaccout@210.32.X.221's password: _ <-- ssh_server 패스워드 입력
ssh_server ~$ _
이제 짐을 싸고 정리한 후 퇴근한다!
[edit]5.2 my_home_adsl_pc 에서 ¶
집의 PC는 linux 또는 rdesktop 을 사용해야 한다. 이유는 MS에서 제공하는 windows용 terminal client는 별도로 IP를 확인하기 때문에 인증이 이루어지고도 사용은 불가능하다.
my_home_adsl_pc ~$ ssh -L 3389:localhost:3389 210.32.X.221
myaccout@210.32.X.221's password: _ <-- ssh_server 패스워드 입력
ssh_server ~$ _
다른 터미널을 열고
my_home_adsl_pc ~$ rdesktop localhost:3389 (포트번호는 생략가능)
//rdektop에서 my_office_pc의 윈도우 계정 패스워드 입력
//rdesktop이 시작된다.
마무리 작업을 하고 맥주 한잔!
[edit]6 맺는 말 ¶
원래는 친구 회사의 PC에서 작업을 하기 위해서 이런 방법을 생각해 보았다(어디까지나 친구 본인의 요청에 의해서). 꽤 귀찮아 보이지만 어쩔 수 없는 상황에서는 유용하리라고 생각한다. 외부에 ssh계정이 있어야 하는 단점이 있긴 하지만 그런 경우에는 각자의 집에 ssh 서비스를 이용하는 방법도 있으므로 큰 문제는 없으리라 생각한다.
[edit]7 질문과 답변 ¶
Q: IP 공유기를 사용하고 있습니다. 사설망 IP로도 접근 가능한 방법이 있나요?
A: 네. 공유기 아래의 사설망으로도 위 방법을 사용하면 가능합니다. 하지만 공유기라면 DMZ 설정이나 port forwarding이 더욱 간단하겠지요. 이 문서는 공유기나 방화벽, vpn 설정을 고칠 수 없는 일반 유저를 위한 내용입니다.
Q: 잘 사용한 후, 열어둔 터널을 닫고 싶습니다. 어떻게 해야 하나요?
A: 아~. ssh -R/-L 로 열어둔 터미널에서 나오면 되는군요.
[edit]8 토론 ¶
파일복사가 느린경우 대안... 동적버퍼사이즈를 조정해 비동기복사와 같은 효과
TeraCopy is a compact program designed to copy and move files at the maximum possible speed, providing the user a lot of features:
- Copy files faster. TeraCopy uses dynamically adjusted buffers to reduce seek times. Asynchronous copy speeds up file transfer between two physical hard drives.
- Pause and resume file transfers. Pause copy process at any time to free up system resources and continue with a single click.
- Error recovery. In case of copy error, TeraCopy will try several times and in the worse case just skips the file, not terminating the entire transfer.
- Interactive file list. TeraCopy shows failed file transfers and lets you fix the problem and recopy only problem files.
- Shell integration. TeraCopy can completely replace Explorer copy and move functions, allowing you work with files as usual.
- Full Unicode support.
Download TeraCopy – Free for Home Users
TeraCopy Pro
You can also buy a Pro version of the program that lets you do the following:
- Select files with the same extension/same folder
- Remove selected files from the copy queue
- Get free updates and priority support
- More features coming soon!
Buy TeraCopy Pro – 30-Day Money Back Guarantee
tail은 기본적으로 파일의 마지막 부분을 보여주는 유틸입니다.
(Man 페이지에는 tail -- display the last part of a file 로 설명이 나옵니다.)
파일의 마지막 부분을 보여주는 기능이 있다보니 로그를 보는데 아주 유용합니다.
가령 웹(네트워크)서버에 로그 파일을 tail로 걸어놓고 보면 디버깅이나 프로그래밍할때 많은 도움을 줍니다.
아쉬운게 윈도우용은 tail이 없어서 윈도우상에서 Tomcat + Eclipse 작업을 할땐 로그 보기가 여간 불편한게 아닙니다. 이런 불편함을 덜고자 tail과 유사한 mTail 이라는 프로그램이 있습니다.

사용법은 간단합니다. 출력할 file을 선택하고 우측 위의 start를 누릅니다. 그러면 tail 처럼 log가 죽죽 올라가지요

로그 파일을 모니터링할 때 UNIX 의 tail -f 보다 좋은 것은 없는 것 같습니다. 그런데 Windows 에는 tail 명령 자체가 없기 때문에 난감한 경우가 있습니다. Tail for Win32 라는 괜찮은 녀석이 있습니다. 키워드 하이라이트, 메일 알림 등 추가 기능들도 꽤 괜찮은 편이라, 예전에 소개한 TailXP 보다 더 추천하고 싶습니다.
홈페이지, 다운로드: http://tailforwin32.sourceforge.net/
Tail for Win32
This is the homepage of Tail for Win32 - the Windows version of the UNIX
Tail for Win32 is used to monitor changes to files; displaying the changed lines in realtime. This makes Tail ideal for watching log files.
Tail has a plugin architecture, which allows notifications to occur when certain keywords are detected in monitored files. At the moment a MAPI plugin is available, and work is in progress on an SMTP version.
Features
A few features of Tail:
-
Watch multiple files in realtime
-
Detect keyword matches, and highlight occurences
-
Send mail notifications on keyword matches by SMTP or MAPI
-
Plugin architecture allows you to write specialised handlers
-
Can process files of any size on all types of drive (local or networked)
Download
A number of downloads are available:
-
The binary package: a precompiled version, ready to go out of the box. The ZIP file contains the runnable EXE and a readme.
-
The source package: everything you need to build and modify Tail
-
The 'Devel' package: a snapshot of my development version at the time of the upload. Only download the 'Devel' package if you don't mind sofware that doesn't really 100% work...
Please go to Tail's SourceForge project page to download.
Contribute
If you find Tail for Win32 useful, then why not donate a little to show your appreciation. Even a small amount will be very gratefully received! If you're happy to leave a comment when you donate, I'll add you to the supporters page.

Alternatively, why not keep my iPod or bookshelf happy with an item from my Amazon wishlist? (I dread to think what that list says about me!)
Tail's License
Tail is OpenSource and is licensed under the GPL. In a nutshell, this allows you to give Tail away free or for a cost, but to do so you must also give the source away with it.
Maven 소개
메이븐은 아파치 소프트웨어 재단의 최상급 오픈소스 프로젝트이며 원래는 자카르타 터빈(Jakarta Turbine) 프로젝트의 복잡한 빌드 과정을 관리하기 위해 만들어졌다. 현재 버전 2까지 나오면서 메이븐은 단일 팀 프로젝트에 최적화된 빌드 도구에서 대부분의 소프트웨어 개발 시나리오에 꼭 필요한 범용 빌드 관리 시스템까지 다양하게 사용하고 있다.
Maven 설치와 사용
javacan 블로그의 휼륭한 글
Maven Life-cycle
Maven은 빌드과정을 Phases와 Goal로 life-cyle을 구성한다.
Phases
compile -> test -> package -> install -> deploy
Phases & goal
maven은 플러그인 기반으로 동작하는데 phase에 해당하는 연결된 플러그인의 goal이 실행된다.
process-resources / resources:resources
compile compiler:compile
process-classes
process-test-resources / resources:testResources
test-compile / compiler:testCompile
test / surefire:test
prepare-package
package / jar:jar
Maven의 의존관계
Eclipse 에서 Maven 활용
Maven 주요 goals
Maven profiling
개발 환경마다 설정 정보를 다르게 가져가야 할 경우에, 각각의 개발환경에 적합한 설정 정보를 관리하는 기능으로 profile을 이용한다.
실행 프로파일 설정
<settings>
...
<activeProfiles>
<activeProfile>profile-1</activeProfile>
</activeProfiles>
...
</settings>
<profile>
<id>jboss4.2.2.GA</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<deployPath>
c:/dev/java/jboss-4.2.2.GA/server/default/deploy/${artifactId}.war/
</deployPath>
</properties>
</profile>
<profile>
<id>tomcat5x</id>
<properties>
<deployPath>c:/dev/java/apache-tomcat-5.5.25/webapps/${artifactId}</deployPath>
</properties>
</profile>
</profiles>
<project>
...
<profiles>
<profile>
<id>appserverConfig-dev</id>
<activation>
<property>
<name>env</name>
<value>dev</value>
</property>
</activation>
<properties>
<appserver.home>/path/to/dev/appserver</appserver.home>
</properties>
</profile>
<profile>
<id>appserverConfig-dev-2</id>
<activation>
<property>
<name>env</name>
<value>dev-2</value>
</property>
</activation>
<properties>
<appserver.home>/path/to/another/dev/appserver2</appserver.home>
</properties>
</profile>
</profiles>
..
</project>
프로파일 실행
mvn groupId:artifactId:goal -P profile-1,profile-2
프로파일 중지
mvn groupId:artifactId:goal -P !profile-1,!profile-2
실행환경 저장
실행환경별로 <resouce/>에서 디렉토리별로 클래스, 설정화일을 관리
mvn -Denv=dev integration-test
<resource><directory>src/main/resources-${environment}</directory></resource>
http://maven.apache.org/guides/introduction/introduction-to-profiles.html
참고자료
- 아파치 메이븐 2 시작하기 : http://www.ibm.com/developerworks/kr/library/tutorial/j-mavenv2/index.html
- http://whitebear.tistory.com/60
- Maven Eclipse Plugin 사이트: http://maven.apache.org/plugins/maven-eclipse-plugin/
- Java can : http://javacan.tistory.com/category/Java
- Maven: The Definitive Guide Download "Maven: The Definitive Guide" as a PDF.
J2EE에서 한글
공식처럼 대부분의 사이트가 EUC-KR 인코딩을 사용한다. 그런데 EUC-KR이 올바른 한글 인코딩일까?
결론은 아니다. EUC-KR로는 한글을 모두 표현할 수 가 없다. 똠방각하, 펲시콜라 이런 글자가 안되는 한글 페이지라니... EUC-KR에서는 ?방각하 ?시콜라 처럼 보여진다. google에서 펲시콜라를 입력해보라, 아니 이 블로그만 보더라도... 어처구니없이 외국사이트보다도 세종대왕의 자손들이 만들고 운영하는 사이트들에서 한글이 제대로 쓰여지고 있지 않다.
완성형, 조합형으로까지 거슬러 올라가 전산상의 한글 구현에 대해서 구구절절 읊지 않더라도 한글 자모로 구성 가능한 문자가 표현되지 않는 character set이나 encoding을 사용하는 것은 올바른 습관이 아니라고 본다.
여타의 기술 자료나 QnA 등에서 그래도 앞서나간 사람들이 jsp한글...tomcat 한글... 이런 글에 몽땅 EUC-KR로 기술하고있는 것은 문제라고 생각한다.
마땅히 한글 표현이 우수한 UTF-8를 사용해야한다. 한글 뿐만 아니라 국제화를 고려한다면 더더욱.
Tomcat에서 contentType을 UTF-8으로 하는 경우 jsp 파일은 UTF-8인콩딩으로 작성되어야한다. Eclipse를 사용한다면 문서의 Properties에서 수정할 수 있다. UTF-8인경우 한글 출력 및 post로 submit된 한글 값도 문제가 없지만 get 으로 전송된 파라미터 값은 한글이 깨진다.
Tomcat의 url decoding 과정에서 한글 처리에 문제가 있다.
msg = URLDecoder.decode(qry.split("msg=")[1],"UTF-8");
out.println(msg)
처럼 직접 url decoding을 하면 get 전송된 한글도 정상적으로 출력된다.
request.getParameter()에서 UTF-8으로 decoding되지 않는 문제를 ... 음. 시간이 날 때 좀 더 파헤쳐보면 해법을 찾을 수 있을 거 같다.
꼭 찾아야지.
데브피아에 DB 튜닝관련 컬럼 연재가 2회차가 올라왔습니다. ^^
지난회에는 인덱스를 생성했으나 컬럼의 가공, 내부적 변형, null과의 비교, 부정형 조건등으로 인하여 인덱스를 사용하지 못하는 경우를 보았다.
|
데브피아에 DB 튜닝관련 컬럼 연재가 올라왔네요. 내용이 괜찮아서 퍼왔습니다.
필자가 처음에 SQL을 배울 때 SQL이 상당히 이상했다. 원하는 것만 요구할 뿐 어떻게 가져오라는 정보가 SQL에는 없었기 때문이다. FILE레벨의 I/O까지 코딩에 익숙한 필자에게 절차가 없다는 것이 오희려 더 이상했던 것이다. 물론 상세한 과정이 필요하지 않으므로 편리하고 좋았다 그러나 어떻게 가져오는지는 알지못하고 단지 사용할 뿐이었다. 그러나 SQL이 PLAN이라는 실행 계획을 만들고 그에 따라 가져오게 된다는 사실은 안것은 한참 뒤에 일이었다.
|
Process Explorer v11.33
By Mark Russinovich
Published: February 4, 2009
Download Process Explorer (1.6 MB)
Introduction
Ever wondered which program has a particular file or directory open? Now you can find out. Process Explorer shows you information about which handles and DLLs processes have opened or loaded.
The Process Explorer display consists of two sub-windows. The top window always shows a list of the currently active processes, including the names of their owning accounts, whereas the information displayed in the bottom window depends on the mode that Process Explorer is in: if it is in handle mode you'll see the handles that the process selected in the top window has opened; if Process Explorer is in DLL mode you'll see the DLLs and memory-mapped files that the process has loaded. Process Explorer also has a powerful search capability that will quickly show you which processes have particular handles opened or DLLs loaded.
The unique capabilities of Process Explorer make it useful for tracking down DLL-version problems or handle leaks, and provide insight into the way Windows and applications work.
Download Process Explorer
(1.6 MB)
Run Process Explorer now from Live.Sysinternals.com
WebtoB + JEUS + web application
1.1 설치파일, 라이센스(license.dat)준비
1.2 라이센스 적용 : webtoB4.1\license\license.dat
2.1 실행파일생성(wsconfig) --> 환경파일 컴파일 : wscfl -i [환경파일]
2.3 종료 : wsdown --> wsdown -i (질의를 던지지 않고 바로 down)
3.1 가상홍스트 추가하기
*VHOST
vhost1 DOCROOT="D:/TmaxSoft/edu01", HOSTNAME="test.tmax.co.kr",
NODENAME="Impression32", PORT="80"
D:\WINDOWS\system32\drivers\etc\hosts 파일에 등록
3.4 기동중인 webtob 다운 후 재부팅 : wsdown -i / wsboot
3.5 테스트
NODE절 포트 수정 확인 : http://127.0.0.1:80/
가상호스트 추가 확인 : http://test.tmax.co.kr:80/
4.1 wi : 웹투비의 기본 정보 출력
4.2 ci : 접속한 클라이언트의 정보 출력
ci -s : 접속한 클라이언트의 수 출력
cfg : 웹투비의 환경설정 내용 확인
cfg -n : 노드 환경설정 내용 확인
si : 웹투비의 서비스 목록 출력
st -v : 웹투비의 서비스 상태 출력
st -p : 웹투비의 프로세스 상태 출력
repeat(r) : 웹투비의 명령을 반복적으로 수행하여 모니터링 효과를 냄
ex) r -i 2 -k 10 si
5.1 JEUS 설치파일, 라이센스
5.2 라이센스 적용 : D:\TmaxSoft\JEUS5.0\license\license파일적용
6.1 Two-step 부팅
: 서버실행 - jeus
: 엔진실행 - JEUS의 웹관리자
웹관리자주소 : http://127.0.0.1:9744/webadmin
포트번호지정 : 기본Base port(9736) + 8
포트번호변경 : bin/jeus.properties.cmd
JEUS/config/vhost.xml 의 포트번호를 변경합니다.
웹관리자 계정 : administrator
패스워드 : jeusadmin
6.2 One-step 부팅
: 부트명령(jboot.bat) --> jeus -xml -Uadministrator -Pjeusadmin
: 종료명령(jdown.bat) --> jeusadmin [노드명] -Uadministrator -Pjeusadmin jeusexit
7.1 JEUS\config\JEUSMain.xml : JEUS서버 전체의 환경 설정
7.2 EJBMain.xml : EJB엔진에 대한 환경 설정
7.3 JMSMain.xml : JMS엔진에 대한 환경 설정
7.4 WEBMain.xml : Servlet엔진에 대한 환경 설정
web.xml : 웹의 컨텍스트를 만들때 컨텍스트의 환경설정
7.5 WSMain.xml : WS엔진에 대한 환경 설정
1.1 물리적 Context 생성
C:\tmaxsoft\edu01
|----WEB-INF
web.xml(NODE의 servlet engine에서 가져옴)
웹관리자 로그인 --> J2EE 어플리케이션 모듈배치 --> 절대경로
--> ~~~~ --> 배치(2단계배치[J2EE어플리케이션모듈], 영구배치[J2EE어플리케이션모듈배치])
:테스트를 위한 jsp파일 생성(test.jsp)
:http://127.0.0.1:8088/edu01/test.jsp
8088 : http_listener port
edu01: 배치한 모듈명
test.jsp :
2.1 생성 : 서블릿 엔진 생성(리스너ID, 리스너PORT 지정)
3.1 WebtoB 설정 : sample.m 파일에 추가
3.2 JEUS 설정 : 해당 컨테이너의 webtob 리스너 연결 설정
WebtoB의 가상호스트 vhost1 과 JEUS의 container1에 webtob2 리스너 추가, 연동.
http://test.tmax.co.kr:80/edu01/test.jsp
javac -d . HelloWorldServlet.java
web.xml 문서의 WorkServlet 은 /servlets/* 로 매핑되어 있음
1.1 패키징하기 : JeusBuilder 사용
- 파일명 : wartest.war
서블릿명 : Hello
서블릿 클래스 : tmax.HelloWorldServlet
URI 패턴지어 : /helloworld
Contextpath(url에서 context호출) : /hello
- JEUS 웹관리자 --> J2EE 어플리케이션 모듈 배치 --> 모듈배치 --> ~~~ --> 배치(2단계 배치, 영구배치)
http://127.0.0.1:8088/hello/test.jsp
http://127.0.0.1:8088/hello
http://127.0.0.1:8088/hello/helloworld/
파일명 : wartest2.war
서블릿명 : Hello2
서블릿 클래스 : tmax.HelloWorldServlet
URI 패턴지정 : /helloworld2/
Contextpath : /hello2
<결과확인> http://127.0.0.1:8088/hello2/Hello2 , http://127.0.0.1:8088/hello2/helloworld2/
2.1 DataBase 정보 확인
- 서버 IP : 192.169.10.5
- 접속계정 : oracle/dkzkepal(아카데미)
- sql접속계정 : sqlplus edu01~edu32/edu01~edu32
- SID 명 : ORA10G
create table TmaxTest ( name varchar(20), address varchar(20) );
Insert into TmaxTest values('장동건','서울'); Insert into TmaxTest values('강호동','부산');
2.2 드라이버 준비 및 JEUS 서버 등록
- JDBC 드라이버 : ojdbc14.zip
- 오라클 JDBC 드라이버 다운로드 사이트 : http://www.oracle.com/global/kr
- JEUS 웹관리자 -> JEUS 매니저 리소스 -> JDBC -> 새 JDBC 데이터 소스 생성
로그인 실행 테스트 : MVC
*VHOST
vhost11 DOCROOT="c:/xxx/webapps/test/",
NODENAME = "web1",
HOSTNAME = "test.com",
PORT = "80"
vhost12 DOCROOT="c:/xxx/webapps/test/",
NODENAME = "web1",
HOSTNAME = "www.test.com",
PORT = "80"
* SVRGROUP
vhost11g NODENAME = "web1", SVRTYPE = JSV,Vhostname="vhost11"
vhost12g NODENAME = "web1", SVRTYPE = JSV,Vhostname="vhost12"
* SERVER
test SVGNAME = vhost11g, MinProc = 20, MaxProc = 20, HttpInBufSize=0
wwwtest SVGNAME = vhost12g, MinProc = 20, MaxProc = 20, HttpInBufSize=0
*** JEUS
container.xml 에 두개의 contextgroup을 생성하여 각각의 RegistrationID 를 test, wwwtest 로 하여 연동
- 아래내용 추가
<absolute-path>폴더위치</absolute-path>
<name>애플리케이션명</name>
<path>\</path>
<deployment-type>COMPONENT</deployment-type>
<web-component/>
<deployment-target>
<target>
<engine-container-name>컨테이너명</engine-container-name>
<web-context-group>
<name>MyGroup</name>
</web-context-group>
</target>
</deployment-target>
<classloading>ISOLATED</classloading>
<class-ftp-unit>JAR</class-ftp-unit>
</application>
<?xml version="1.0" encoding="UTF-8"?>
<jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
<context-path>/</context-path>
<enable-jsp>true</enable-jsp>
<auto-reload>
<enable-reload>false</enable-reload>
<check-on-demand>false</check-on-demand>
</auto-reload>
<max-instance-pool-size>-1</max-instance-pool-size>
<url-rewriting>false</url-rewriting>
<enable-default-login>false</enable-default-login>
<webinf-first>false</webinf-first>
<jndi-properties>
<local-bindings>false</local-bindings>
</jndi-properties>
</jeus-web-dd>
*Class Loading : Class.forName();
->class를 사용하는 방법
*Connection 생성방법 2가지
Connection con = null;
Properties env = new Properties(); //사용자 환경변수 객체
try {
env.load(new FileInputStream("d:\\java\\day6\\db.properties"));
Class.forName(env.getProperty("driver")); // JDBC 드라이버용 클래스 로드
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
// 1. DB Connection 얻기
String url = env.getProperty("url");
// thin = type4(순수java)
String user = env.getProperty("user"); //"scott";
String password = env.getProperty("password"); //"tiger";
try {
con = java.sql.DriverManager.getConnection(url, user, password);
System.out.println("****** Connect to DBMS! *******");
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return con;
}
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB");
}catch(NamingException ne){
ne.printStackTrace();
}
-Servlet 마다 DataSource 생성
-DataSource 한번만 생성해도 됨(Servlet마다 DataSource를 생성하지 않음)
3. ServletContextListener에서 생성한 DataSource를 Single tone pattern으로 사용
-class에서도 single.getAttribute()로 DataSource를 얻어 올 수 있음
*statement
Statement <---------- PreparedStatement <------------- CallableStatement
(가장 보편적인 처리) (binding 변수를 통해 빠를 sql처리) (가장 특화 function, procedure호출)
String sql = "select age from test1 where id='syh1011'";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
->PreparedStatement
String sql = "select age from test1 where ?=?";
PreparedStatement pstmt = con.prepareStatementStatement(sql);
pstmt.setString(1, "id");
pstmt.setString(2,"syh1011");
ResultSet rs = pstmt.executeQuery();
String sql = "select anem from salary";
PreparedStatement pstmt = conpreparedStatement(sql);
CallableStatement sctmt = con.prepareCall("{call adjust(?,?)}");
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
cstmt.setString(1, rs.getString("name"));
cstmt.setFloat(2, (float)0.05);
cstmt.executeUpdate();
}
executeUpdate(String sql): SQL문이 insert, update, delete문 등일 경우
execute(String sql) : SQL문을 알지 못할 경우
getXXX(int columnindex) : columnIndex의 값을 XXX타입으로 반환
getXXX(String columnName): columnName의 값을 XXX타입으로 반환
Transaction의 4가지 특성(ACID)
*원자성(Atomicity)
*일관성(Consistency)
*고립성(Isolation)
*지속성(Durability)
-> con.commit(); -> con.rollback();
##### DOMAIN 절
#####
# 독립적인 WebtoB 시스템의 전반적인 환경 설정을 할 수 있다.
*DOMAIN
# 다른 절들의 string 항목도 이와 동일하다.
webtob1
#####
##### NODE 절
#####
# WebtoB를 이루는 각 Node들에 대한 구체적인 환경 설정을 할 수 있다.
# 필수 항목으로 WebtobDir, ShmKey, DocRoot 항목을 설정해야 있다.
*NODE
# Node명은 반드시 UNIX의 경우 "/etc/hosts"(Windows의 경우 C:\WINNT\system32\drivers\etc) 파일에 등록되어 있어야 한다.
# 하나의 Domain은 하나 이상의 Node로 이루어지므로, NODE절에는 최소한 하나 이상의 Node 이름이 정의되어야 한다.
WebServer
# 환경변수로 정의되는 WEBTOBDIR 과 동일한 값으로 설정하면 된다.
WebtobDir = "/data2/wbqam/webtob",
# 32768 ~ 262143 범위 내에서 다른 업무에 사용되는 키값과 충돌이 나지 않게 Shared Memory의 Key값을 설정 하면 된다.
ShmKey = 78100,
DocRoot="/data2/wbqam/webtob/docs",
# Hth하나당 약 800개 이상의 Client를 수용할 수 있다.
# Default Number 설정은 1 이며, 최대 20개 까지 지정할 수 있다.
Hth = 2,
# 일반적으로 Web Server는 80 Port 이용하므로 설정하지 않을경우 default 값으로 80으로 설정된다.
# 최대 100개의 포트를 동시에 지정하여 사용할 수도 있다.
# Listen 항목과 동시에 운영할 수 없으며, Port보다 Listen항목에서 지정되는 Port가 우선순위가 높아
# 동시에 지정하면 Port항목은 무시 된다.
Port = "8100,8200",
# WebtoB에서 시스템의 보안을 위하여 WebtoB의 실제 실행 Process에 대한 권한 설정을 할 수 있다.
# 설정한 권한으로 Process가 실행되기 위해서는 반드시 root 권한으로 WebtoB를 실행해야 한다.
# Client 요구를 수행하기 위하여 Group 설정을 권장한다.
# Group 설정은 Unix계열의 OS에서만 지원한다.
Group = "nobody",
# Client 요구를 수행하기 위하여 User 설정을 권장한다.
# User 설정은 Unix계열의 OS에서만 지원한다.
User = "nobody",
HostName = "www.tmax.co.kr",
# 특별히 $(NODENAME)이라고 적어주면, 자동으로 해당 서버의 HostName가 적용된다.
# 한글 노드명을 사용하거나 긴 노드명을 사용할 경우 NodeName 을 설정한다.
NodeName = "$(NODENAME)"
# MultiNode 설정시 반드시 지정해 주어야 한다.
# default 설정은 7777 번이다.
# NodePort = 7777,
# default 설정은 9999 번이다.
JSVPort = 9100,
# 위의 NodePort와는 달리 이것은 관리 Process 중 하나인 wsracd Daemon에서 사용하는 Port번호이다.
# default 설정은 3333 번이다.
RacPort = 4455,
# default size는 128 Kbyte 이다.
CacheSize = 128,
# default 개수는 128개 이다.
CacheEntry = 256,
# default 설정은 0 second 이다.
CacheRefreshHtml = 60,
# default 설정은 0 second 이다.
CacheRefreshDir = 60,
# 불필요한 시간 지연이 없도록 하려면 이 항목을 지정함으로써 접속을 단절하지 않고 유지할 수 있다.
KeepAlive = Y,
# 커넥션을 끊기 전에 들어주는 요구의 개수를 지정한다.
# default 설정은 9999 이다.
KeepAliveMax = 10,
# 다음 Request 까지 일정 시간 이상이 되면 커넥션을 끊을 수 있도록 설정할 수 있다.
# default 설정은 60 second 이다.
KeepAliveTimeout = 30,
# default 설정은 300 second 이다.
Timeout = 100,
# 값이 설정이 되면 각 사용자의 directory를 찾아서 서비스 한다.
UserDir = "public_html",
# 경로명은 절대 경로와 WEBTOBDIR을 기준으로 한 상대 경로를 사용할 수 있다.
AppDir = "/data2/wbqam/webtob/ap",
# WebtoB에서는 기본적으로 Log 정보를 남기기 위하여 설정한다.
# 환경파일에 따로 설정하지 않을경우 WEBTOBDIR/log 디렉토리에 기록이 된다.
# 로그가 기록될 디렉토리가 없을경우 booting시 에러가 나므로, 실제 존재하는 디렉토리여야 한다.
# 경로명은 절대 경로와 WEBTOBDIR을 기준으로 한 상대 경로를 사용할 수 있다.
# Default Path는 (WEBTOBDIR)/log/syslog 이다.
SysLogDir = "/data2/wbqam/webtob/log/syslog",
UsrLogDir = "/data2/wbqam/webtob/log/usrlog",
# 기본 설정은 index.html 이다.
IndexName = "indexname.html",
# Options에 지정할수 있는 서비스와 기능들을 아래와 같다.
# Service: HTML, CGI, SSI, PHP, JSV
# Function: INDEX, INCLUDE
# 모든 기능을 이용하려면 "+ALL", 모든 기능을 이용하지 않으려면 "-ALL"을 설정할 수 있다.
Options = "+Index",
# HEAD, GET, POST, OPTIONS 등을 설정을 할 수 있으며, 사용하고 싶지 않을경우 "-Option" 으로 설정하면 된다.
# 참고로 HTTP Method CONNECT, DELETE, GET, HEAD, OPTIONS, POST, PUT, TRACE 등이 있다.
Method = "GET,POST,HEAD,-OPTIONS",
# 여러개의 아이피와 포트를 지정할 수도 있다.
# Port항목과 Listen 항목을 동시에 지정하는 경우 Port에 지정한 Port는 무시된다.
# Listen="192.168.1.43:8300",
DirIndex = "diridx_def"
# Server쪽에서 지정된 언어 순서대로 Multiview request 등의 처리가 이루어지도록 한다.
LanguagePrio = "kr",
Logging = "log1",
ErrorLog = "log2",
# EnvFile = "WebtoB.env",
# default 설정은 N 이다.
# SslFlag = Y,
# SSLNAME = "ssl_def",
MaxUser = 4000,
# Default 설정은 0700 이다.
# IpcPerm = 0744,
# 서버가 대량의 접속 시도를 한꺼번에 날려주는 TCP SYN해킹을 당하고 있다면 유용하게 사용 될수 있을 것이다.
# default 설정은 511 이다.
ListenBacklog = 100,
# default 설정은 0이며, 0의 값은 OS default값을 사용함을 의미한다.
SendBufferSize = 4096,
# 0의 값은 크기에 제한이 없음을 의미한다.
# default 설정은 0 bytes 이다.
LimitRequestBody = 20000,
# 0의 값은 제한이 없음을 의미한다.
# default 설정은 100 이다.
LimitRequestFields = 20,
# 최대 허용되는 값은 8190이다.
# default 설정은 8190 bytes 이다.
LimitRequestFieldSize = 300,
# 최대 허용되는 값은 8190이다.
# default 설정은 8190 이다.
LimitRequestLine = 4000,
# "Off", "Prod[uctOnly]", "Min[imal]", "OS", "Full", "Custom=xxx/x.x" 등을 설정할 수 있다.
ServerTokens = "Minimal",
# Vhost절에 이 항목이 설정되지 않은 경우는 Node절에 설정된 값이나 기본값을 Vhost가 따르게 된다.
# default 설정은 "uri,ext" 이다.
ServiceOrder = "ext,uri",
# "On"(ISO-8859-1), "Off"(설정안함), "_charset_"(사용자 기술) 중 하나를 설정할 수 있다.
# 여러 절에서 적용되는 우선 순위는 Node < Vhost < SvrGroup < Directory 순이다.
DefaultCharset = "Off",
# Default Content-Type은 SvrGroup, Vhost, Node절의 순으로 결정된다
DefaultMimetype = "text/html",
# IPCBasePort항목을 통해 해당 포트를 변경할 수 있다.
# 현재 Windows에서만 지원된다. (UNIX의 경우 PIPE통신)
# default 설정은 6666 이다.
# IpcBasePort = 6667,
Expires = "exp11, exp12, expdef1",
TcpGW = "tcpgw_full",
ErrorDocument = "404",
# default 설정은 $WEBTOBDIR/path 이다.
PathDir="/data2/wbqam/webtob/path",
#tmaxi1
# WEBTOBDIR="/data/wbqam/webtob",
# SHMKEY = 78100,
# DOCROOT="/data/wbqam/webtob/docs",
# APPDIR="/data/wbqam/webtob/ap",
# PORT = "8100",
# HTH = 2,
# LOGGING = "log5",
# ERRORLOG = "log6",
# HostName = "www.tmax.co.kr",
# RACPORT = 4455,
# NodePort = 7787
1.1 환경설정파일(sample.m)을 추가, 컴파일
vhost1 HostName="test.tmax.co.kr",
DOCROOT="C:/TmaxSoft/edu02", # 웹서비스 파일 위치 지정
NODENAME="respect04",
PORT="80", # URL 이름이 같은 경우 포스번호를 다르게 설정해야 함. 현재는 호스트네이임이 다르므로 포스번호가 같아도 상관없다
IndexName="test.html", # Wellcome page 설정
KeepAlive=Y, # KeepAlive와 KeepAliveTimeout은 같이 사용해야 함(set 구성)
KeepAliveTimeout=30
1.2 윈도우 hosts 파일에 가상호스트 설정 (실제 서비스할 경우 DNS서버에 추가)
(C:\WINDOWS\system32\drivers\etc\hosts)
추가 => 127.0.0.1 test.tmax.co.kr
1) sample.m 컴파일(wscfl -i sample.m)
2) ws 재기동
3) C:/TmaxSoft/edu02에 test.html 추가
4) 웹에서 test.html 확인 url=http://test.tmax.co.kr
- sample.m에서 정의된 *NODE는 localhost(127.0.0.1)이다.
- sample.m에서 정의되지 않은 기본설정 확인은 wsadmin에서 cfg명령어로 확인한다
cfg -n : Node 환경설정
cfg -vh : vhost 환경설정 (sample.m에 *VHOST가 정의 되었을 때만 사용)
- 기본설정을 변경할 경우 cfg에서 보여진 명령어를 sample.m에 재정의한다
- DOCROOT의 디렉토리 구분은 ''이 아니라 '/'로 구분한다
2.1 가상호스트를 인식 시키기 위한 WebToB설정
sample.m에 정의
*SVRGROUP
v_jsvg NODENAME = "respect04", SVRTYPE = JSV, VHOSTNAME="vhost1" #가상호스트에서 인식
v_MyGroup SVGNAME = v_jsvg, MinProc = 10, MaxProc = 20 # 가상호스트 MyGroup
2.2.1 웹관리자 이용 시
1) 새 웹 리스너 생성
경로 : 서블릿엔진 - MyGroup - 웹리스너
2) 설정
- Listener Id : alias 명
- PORT : 기존 webtob 포트번호와 다르게 설정
- 스레드풀 : max, min은 sample.m *SERVER에서 정의한 내용과 동일하게 처리
- Webtob Address : 해당 Listener와 연결되는 WebtoB서버의 IP어드레스
- Registration Id : sample.m *SERVER에서 정의한 그룹ID
- Webtob Home : C:\TmaxSoft\WebtoB4.1 => webtob가 설치되어 있는 home 디렉토리
2.2.2 서블릿 WEBMain.xml 정의
<webtob-listener>
<listener-id>v_webtob1</listener-id>
<port>9901</port>
<thread-pool>
<min>10</min>
<max>20</max>
</thread-pool>
<scheme>http</scheme>
<registration-id>v_MyGroup</registration-id>
<webtob-home>C:\TmaxSoft\WebtoB4.1</webtob-home>
</webtob-listener>
3. 컨테이너 추가 (웹관리자) 후 WebToB 연동
3.1 새 엔진 컨테이너 생성
- Name : container3
- ID, BasePort
- 서블릿 엔진 : engine2
- 리스너 ID/서버 채널 이름 : http2 (#http 리스너를 반드시 추가하세요.)
- 리스너/서버 채널 포트 : 8087
- 2단계 배치
- 영구배치는 J2EE 어플리케이션 모듈 배치에서 영구배치를 클릭 시
에디터아이콘을 선택하여 영구 모듈 디플로이 컨테이너대상을 설정
<?xml version="1.0" encoding="UTF-8"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
<context-group>
<group-name>MyGroup</group-name>
<webserver-connection>
<http-listener>
<listener-id>http2</listener-id>
<port>8087</port>
<output-buffer-size>8192</output-buffer-size>
<thread-pool>
<min>10</min>
<max>20</max>
</thread-pool>
</http-listener>
<webtob-listener>
<listener-id>v_webtob1</listener-id>
<port>9901</port>
<thread-pool>
<min>10</min>
<max>20</max>
</thread-pool>
<scheme>http</scheme>
<registration-id>v_MyGroup</registration-id>
<webtob-home>C:\TmaxSoft\WebtoB4.1</webtob-home>
</webtob-listener>
</webserver-connection>
</context-group>
</web-container>
4. 서블릿 작성/실행하기
4.1 HelloWorldServlet.java 작성
==============================================================================
package tmax;
import! javax.servlet.*;
import! javax.servlet.http.*;
{
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hellow World Sample</title>");
out.println("</head>");
out.println("<body>");
out.println("<center><h1>Hello World!!!</h1></center>");
out.println("</body>");
out.println("</html>");
out.close();
}
}
================================================================================
C:\TmaxSoft\edu01\WEB-INF\classes>javac -d . H*.java
http://127.0.0.1:8088/edu01/servlets/tmax/HelloWorldServlet
4.4. web.xml에 서블릿명 추가(HelloWorld)
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>tmax.HelloWorldServlet</servlet-class>
<load-on-startup>-1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/helloworld/</url-pattern>
</servlet-mapping>
4.5 실행
http://127.0.0.1:8088/edu01/HelloWorld
5. WebToB에서 서블릿을 실행하기 위한 url 설정
5.1 sample.m 파일 수정
uri2 Uri = "/edu01/", Svrtype = JSV #url에 edu01이 들어간 문자는 서블릿을 실행하게 한다
1. WebtoB윈도우 서비스 등록
명령프롬프트 창에서
cd %WEBTOB_HOME%\bin
srvinstall
2. WebtoB윈도우 서비스 제거
먼저 로드되어 있는 webtob를 down한다.
srvremove
3. jeus윈도우 서비스 등록
%JEUS_HOME%\bin\jeus.ini 파일의 내용을 확인한 후
명령프롬프트 창에서
cd %JEUS_HOME%\bin
svcinstall jeus.ini administrator PASSWORD -hotspot
4. jeus윈도우 서비스 제거
먼저 로드되어 있는 jeus를 down한다.
svcremove -list 해서 먼저 현재 운영중인 서비스를 확인한 다음
svcremove jeus(:서비스명)
hanho9@gmail.com
|
WebtoB 3.1.5 |
WebtoB 3.1.6 |
Windows NT |
O |
O |
Windows 2000 |
O |
O |
Windows XP |
O |
O |
Windows 2003 |
O |
O |
WebtoB 3.1.5 |
WebtoB 3.1.6 |
Description |
srvinstall.exe |
svcinstall.exe |
서비스 등록(설치) |
srvloader.exe |
svcloader.exe |
서비스에서 WebtoB 구동 |
srvremove.exe |
svcremove.exe |
서비스 제거 |
1. WebtoB 설치
- 인스톨 과정을 거쳐 설치
2. System 환경변수에 WEBTOBDIR 추가
- 시스템 속성 > 고급 > 환경변수 > 시스템 변수 에 WebtoB Home Directory 추가
3. > cd %WEBTOBDIR%\bin
- WebtoB 의 실행파일들이 있는 디렉토리로 이동
4. > svcinstall.exe %WEBTOBDIR%
- Windows 에서 WebtoB의 서비스 등록 |
1. Process 확인
- 작업관리자에서 wsm, hth, htl 프로제스가 보인다.
2. Port 확인
- netstat –na 에서 80 Port에서 LISTENING하는지 확인
Proto Local Address Foreign Address State
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
3. wsadmin tool 확인
- wsadmin으로 console tool에 들어가서 st –s 명령어로 서비스가 정상적으로 등록되어
있는지 확인 |
1. > cd %WEBTOBDIR%\bin
- WebtoB 실행 파일들이 있는 디렉토리로 이동
2. > svcremove.exe
- Windows 에서 WebtoB 서비스 제거 |
|
JEUS 4.2 |
Windows NT |
O |
Windows 2000 |
O |
Windows XP |
O |
Windows 2003 |
O |
JEUS 4.2 |
Description |
svcinstall.exe |
서비스 등록(설치) |
jeusloader.exe |
서비스에서 WebtoB 구동 |
svcremove.exe |
서비스 제거 |
1. JEUS 설치
- 인스톨 과정을 거쳐 설치
2. System 환경변수에 JDK_HOME 추가
- 시스템 속성 > 고급 > 환경변수 > 시스템 변수 에 J2SDK Home Directory 추가
3. > cd %JEUS_HOME%\bin
- JEUS 의 실행파일들이 있는 디렉토리로 이동
4. >svcinstall.exe administrator jeusadmin -h
<username> <password> - Windows 에서 JEUS의 서비스 등록 |
1. Process 확인
- 작업관리자에서 java 프로제스가 2개 보여야 한다.
2. Port 확인
- netstat –na 에서 BASE Port에서 LISTENING하는지 확인 (default : 9736)
Proto Local Address Foreign Address State
TCP 0.0.0.0:9736 0.0.0.0:0 LISTENING
3. jeusadmin tool 확인
- jeusadmin으로 console tool에 들어가서 allenglist 명령어로 서비스가 정상적으로 등록되어
있는지 확인 |
1. > cd %JEUS_HOME%\bin
- JEUS 실행 파일들이 있는 디렉토리로 이동
2. > svcremove.exe
- Windows 에서 JEUS 서비스 제거 |
[출처] Windows 에서 WebtoB, JEUS의 서비스 등록 |작성자 인월드