'98..Etc'에 해당되는 글 370건

  1. 2010.02.19 Context Chaining
  2. 2009.12.09 [Apache - Tomcat] 로드 밸런싱, 세션 클러스터링
  3. 2009.11.23 검색엔진에 검색안되게 하는법 1
  4. 2009.10.30 Tomcat class not found 문제
  5. 2009.10.16 보안USB의 주요 취약점에 대한 분석
  6. 2009.10.16 windows에서 2개의 랜 카드 사용시 라우팅하는 방법
  7. 2009.10.09 Jeus 컨테이너추가, 복사(접속포트), 가상호스트 설정
  8. 2009.10.09 가상 호스트와 JEUS 연동
  9. 2009.09.29 age-bio.ru 1
  10. 2009.09.29 익스플로러 8 (ie8) mshtml.dll 오류 해결 방법
  11. 2009.09.27 http://dl.google.com/eclipse/plugin/3.5
  12. 2009.09.27 지난번에는 Maven 에서 GWT 프로젝트를 만들어 보았습니다.
  13. 2009.09.27 GWT-Ext 개발 기초 GWT-Ext - GWT-Ext Widget Library(http://gwt-ext.com)
  14. 2009.09.27 GWT-Ext (http://gwt-ext.com/) 1
  15. 2009.09.27 GWT Study Chapter 2 - Eclipse 설정
  16. 2009.09.27 Google Web Toolkit 1.7.0 released
  17. 2009.09.27 Eclipse 3.5 Galileo에 Google App Engine(GAE) 플러그인 설치
  18. 2009.09.27 [GWT 강좌] GWT로 개발하기-1 (환경구축편)
  19. 2009.09.27 Eclipse Google Plugin 설치하기
  20. 2009.09.27 Eclipse Google Plugin 설치하기
  21. 2009.09.27 물론 이클립스에서는 아주 간단하게 대부분의 추가 기능을 장착할 수 있도록 지원합니다.
  22. 2009.09.27 Google에서 GWT
  23. 2009.09.03 Request Object
  24. 2009.08.20 Jeus webtob의 모든것..[펌]
  25. 2009.08.20 firefox css 깨짐 현상 (webtob 사용시)
  26. 2009.08.19 Jeus - 컨테이너 추가, 복사(접속포트추가), 가상호스트 설정
  27. 2009.08.14 Markup Validation Service
  28. 2009.07.31 jeus 에 2개의 webtob 설정하기.
  29. 2009.07.31 도메인의 IP를 변경하면 언제쯤 인터넷에 전파되어질까?
  30. 2009.07.31 isp 회사들의 dns 주소들
98..Etc/velocity2010. 2. 19. 18:01
반응형
-------------------------------------------------------------------------------------

import java.io.StringWriter;
import java.io.Writer;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

public class ContextChaining {

  public static void main(String[] args) throws Exception {
    Velocity.init();

    Template template = Velocity.getTemplate("./src/ContextChaining.vm");

    VelocityContext context1 = new VelocityContext();
    VelocityContext context2 = new VelocityContext(context1);

    context1.put("firstName", "Joe");
    context2.put("lastName", "Wang");

    Writer writer = new StringWriter();
    template.merge(context2, writer);

    System.out.println(writer.toString());
  }
}
-------------------------------------------------------------------------------------
This is my first name $firstName
This is my last name $lastName

Full Name is $firstName $lastName

Posted by 1010
98..Etc/Tomcat2009. 12. 9. 13:28
반응형

보통 톰캣으로 서비스 구축할 때 안정적으로 서비스하려면 한 서버에 톰캣을 4개 정도 구동시켜야 한다고 하던데 ㅎㅎ
http://www.ibm.com/developerworks/kr/li ··· 61017%2F

웹 개발자에게 있어 톰캣은 JSP를 배우거나 간단한 테스트를 하는 정도의 웹 컨테이너로 생각하는 경우가 많다. 하지만 근래 들어 기업 및 대형 포탈에서 상용 서비스를 위한 웹 컨테이너로서 톰캣을 선택해, 성공적으로 적용한 사례들이 늘고 있다. 톰캣에서 안정적인 웹 서비스를 제공하기 위해서 지원하는 기능은 5가지가 있다. 아파치 웹서버와 연동, 로드밸런싱, 세션 클러스터링, 데이터베이스 처리, 모니터링 및 관리 등이 그것이다.
이 문서에서는 로드밸런싱과 세션 클러스터링 위주로 설명을 할 것이며, 다음에 기회가 된다면 다른 부분에 대해서도 자세히 알아보도록 하겠다.

아파치 웹 서버와 톰캣의 연동

일반적으로 정적인 페이지를 서비스할 때는 웹서버가 훨씬 더 좋은 성능을 발휘한다. 또한 이렇게 역할 분담을 함으로 톰캣에 가중되는 부하를 줄여주는 효과도 얻을 수 있다. 아파치웹서버와 톰캣을 연동하는 것을 일반적으로 ‘커넥터(Connector)'라고 부르며, 여기에는 WARP 커넥터, JK 커넥터 그리고 JK2 커넥터가 있다. 이중에서 WARP와 JK2는 공식 커넥터에서 제외되었고 현재 남아 있는 것은 JK 커넥터뿐이다. 그럼 먼저 JK 커넥터를 이용해서 아파치 웹서버와 톰캣을 연동해 보도록 하겠다.
아파치 웹사이트에서 바이너리 혹은 소스 코드를 다운로드 받도록 하자. 유닉스 혹은 리눅스는 mod_jk.so이며 윈도우용은 mod_jk.dll이다. 이 파일을 아파치 웹서버의 modules 디렉토리에 저장한다(주의, 아파치 웹서버를 컴파일해서 사용하는 경우는 컴파일시에 DSO 기능이 가능하도록 설정해줘야 한다). 저장을 한 후에 아파치 웹서버에 해당 모듈을 인식시켜야 하며 아파치 웹서버의 httpd.conf 파일에 다음 내용을 추가하도록 하자.

리스트 1. httpd.conf

        ...
LoadModule jk_module modules/mod_jk.so    # 모듈 추가
JkWorkersFile "conf/workers.properties"   # JK 설정 파일 위치 및 이름
 
JkLogFile "logs/mod_jk.log"               # JK에 대한 로그 파일 위치
JkLogLevel info                           # 로그 레벨 지정
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"   # 로그 시간 포맷 지정
JkRequestLogFormat "%w %V %T"             # 로그 내용 포맷
JkMount /* loadbalancer                   # URL 링크 -> 모든 요청을 톰캣으로 지정
JkMount /servlet/* loadbalancer           # URL 링크 -> servlet 요청을 톰캣으로 지정
...

위와 같은 설정을 하게 되면 아파치 웹서버로 들어온 모든 요청을 톰캣으로 재전송 하게 된다. 만일 JSP와 서블릿만 톰캣에서 서비스를 하고 나머지는 아파치 웹서버에서 서비스 하고자 한다면 다음과 같이 수정하면 된다.

  
JkMount /*.jsp loadbalancer                # URL 링크 -> *.jsp 요청을 톰캣으로 지정 
JkMount /servlet/* loadbalancer           # URL 링크 -> servlet 요청을 톰캣으로 지정 

httpd.conf에는 위의 내용이 전부이다. 그럼 이제 workers.properties 파일을 작성해 보도록 하겠다. 이 파일이 실제 로드밸런싱을 위한 설정이 되겠다.


위로

라운드 로빈 방식의 로드밸런싱 설정

톰캣에서 제공하는 로드밸런싱은 정확히 톰캣 자체에서 제공하는 것이 아니라 아파치 웹서버와 연동되는 커넥터에 의해서 제공된다(로드밸런싱은 JK, JK2 커넥터에서만 제공된다). 현재는 라운드 로빈(Round Robin) 방식만이 제공되며 로드밸런싱에 대한 설정은 workers.properties 파일에서 정의하게 된다.

리스트 2. workers.properties

  
worker.list=tomcat1, tomcat2, loadbalancer
 
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=11009
worker.tomcat1.lbfactor=100
 
worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=12009
worker.tomcat2.lbfactor=200
 
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1,tomcat2

worker라는 개념은 톰캣의 프로세스로 보면 된다. 즉 worker를 설정하는 구성 요소는 JK 커넥터를 연결하는 방식(JK는 ajp13을 이용한다), 톰캣이 실행되어 있는 IP 혹은 도메인, ajp13 서비스 포트, 그리고 작업 할당량이다. 여기서 주의 깊게 볼 것이 작업 할당량인데 로드밸런싱 시에 lbfactor라는 작업량의 비율을 보고 라운드 로빈 방식의 서비스를 제공하게 된다. 여기서는 tomcat1과 tomcat2를 1대 2의 비율로 작업량을 할당한 것이다.
그럼 이제 남은 작업은 2개의 톰캣 프로세스를 실행시키는 것이다. 톰캣 프로세스를 여러 개 띄우는 방법은 2가지가 있다.

  • 톰캣을 2개 설치해서 기동시킨다. 이때 포트 충돌을 피하기 위해 서버 포트, AJP13과 HTTP 1.1 커넥터 포트 2개를 충돌되지 않게 재정의 한다.
  • 하나의 톰캣에 2개의 서비스를 정의하고 톰캣을 기동시킨다. 이때 AJP13과 HTTP1.1 커텍터 포트 2개를 충돌되지 않게 재정의 한다.

먼저 2개의 바이너리를 설치했다고 가정하면 각각의 톰캣은 다음과 같은 형태의 server.xml 파일로 적용해 준다.

리스트 3. server.xml

리스트 4. server.xml

리스트 3은 tomcat1의 환경 설정이고 리스트 4는 tomcat2의 환경 설정이다. 두 환경 설정의 차이는 3개의 포트번호와 태그의 jvmRoute 속성이다. 태그의 포트는 톰캣을 종료 시키는 작업을 할 때 사용하는 것이며 태그의 포트들은 아파치를 통하지 않고 직접 톰캣에 접속할 경우와 아파치와 연계하여 JK 커넥터와 연동할 때 사용하는 포트이다. 마지막으로 태그는 JK 커넥 터에서 로드밸런싱을 수행할 때 해당 값을 구분자로 활용하게 되는데 이 값을 반드시 다른 톰캣 프로세스와 다른 이름으로 지정해야 한다. 지금까지의 환경 설정은 하나의 아파치 웹서버와 두 개의 톰캣 간의 연계를 위한 것이며 톰캣은 동일한 하드웨어 장비에 설치되어 있다는 가정하에 적용한 것이다. 만일 각각의 톰캣이 서로 다른 하드웨어에 존재한다면 jvmRoute명만 다르게 하고 포트명은 동일해도 상관이 없다. 하지만 만일 하나의 장비에 4개의 톰캣 프로세스를 실행시키고 로드밸런싱을 하려고 한다면 어떻게 될까? 톰캣을 4번 설치하고 각각의 환경 설정 파일을 수정해 주어야 할까? 만일 필요한 환경 설정 내용이 변경된다면(예를 들어 JNDI Resource 정보) 모두 운영자가 환경 설정 파일을 수정해 주어야 할까? 다행히도 톰캣에서는 하나의 바이너리에 여러 개의 프로세스가 뜨도록 할 수 있다. 톰캣의 server.xml 태그는 다음과 같은 구조를 가지고 있다.

--> --> --> -->

여기서 Server 태그는 유일해야 하며 Server 태그 밑에는 여러 개의 태그가 올 수 있다. 여기서 말하는 태그가 바로 하나의 톰캣 프로세스가 된다. 만일 2개의 태그를 정의했다면 2개의 프로세스가 구동되는 것이다. 리스트 5는 이렇게 구현한 환경 설정 파일이다.

리스트 5. server.xml

리스트 5는 하나의 톰캣 바이너리를 통해 2개의 프로세스를 실행시키는 것이다. 이렇게 하면 환경 설정의 편리성을 가져올 수 있지만 특정 서비스만 실행하거나 종료 시키는 것은 아직 지원되지 않는다. 즉 모든 서비스가 동시에 실행되거나 혹은 동시에 종료되는 것을 의미한다. 이런 점을 잘 판단해서 두 가지 형태의 환경 설정 중 하나를 선택하면 되겠다.
지금까지는 로드밸런싱에 대해 알아보았다. 위의 환경설정을 가지고 테스트를 하다 보면 한가지 문제가 발생한다. 예를 들어 어떤 사용자가 tomcat1을 이용해서 쇼핑몰 서비스를 받고 있다가 tomcat1이 비정상 종료를 하게 되었다. 이때 사용자가 웹 페이지를 요청하게 되면 아파치 웹서버는 tomcat1이 종료된 것을 인지하고 그 이후부터 서비스를 tomcat2로 요청하게 된다. 하지만 tomcat1에 저장되어 있던 쇼핑바구니 정보 즉 세션 정보는 사라진 상태다. 즉, 서비스는 유지되지만 사용자는 다시 이유도 모르게 처음부터 쇼핑 항목들을 등록해야 하는 문제를 가지게 된다. 이제부터는 이런 문제를 해결할 수 있는 톰캣 프로세스 간의 세션 정보 공유에 대해서 알아보겠다.


위로

세션 클러스터링 설정

클러스터링은 톰캣 5.x 버전부터 지원이 되고 있지만 아직은 초기 단계이고 세션 클러스터링만이 제공되고 있는 수준이다. 기능이 많이 부족하긴 하지만 로드밸런싱과 더불어 사용할 경우에는 좀 더 안정적인 서비스를 제공할 수 있다. 작업을 해주어야 할 것은 다음과 같다.

  • server.xml에 태그 정의
  • 웹 어플리케이션의 web.xml에 태그 추가
그럼 server.xml에 설정해 보자. 태그는 태그의 하위에 정의해 주면 된다. 즉 여러 개의 호스트(예를 들어 가상 호스트) 를 설정했다면 각각의 경우에 맞게 설정해 주어야 한다. 여기서는 tomcat1과 tomcat2가 동일한 하드웨어에 별도의 바이너리 형태로 설치되어 있다고 가정하고 진행하겠다.

리스트 6. server.xml

... ...

리스트 6은 tomcat1의 server.xml에 적용한 태그이다. 이 내용은 태그 사이에 위치하게 된다. 태그 사이에는 , , 라는 3개의 태그가 위치하는데 은 멤버 그룹을 정의하는 것으로 해당 값이 동일한 모든 톰캣 프로세스는 클러스터로 묶이게 된다. 는 클러스터 그룹에서 보내오는 메시지와 세션 정보 등을 받아오는 것이며 는 자신의 세션 정보 및 메시지를 전송하는 것이다. 위의 내용을 tomcat2의 server.xml에 Receiver 태그의 tcpListenPort 값을 4002로 변경해서 적용하도록 하자.


위로

웹 어플리케이션 작성을 통한 테스트

먼저 테스트를 위해서 간단한 웹 어플리케이션을 작성하도록 하겠다. 여기서 웹 어플리케이션 이름은 lbtest라고 하겠다.

리스트 7. index.jsp

<%@ page contentType="text/html; charset=euc-kr" %>

세션 JSP 테스트

<% Integer ival = (Integer)session.getAttribute("sessiontest.counter"); if(ival==null) { ival = new Integer(1); } else { ival = new Integer(ival.intValue() + 1); } session.setAttribute("sessiontest.counter", ival); %> 당신은 이곳을 <%= ival %> 번 방문 했습니다.

여기를 클릭하세요. 여기

request 객체와 관련된 세션 데이터
요청된 세션 ID : <%= request.getRequestedSessionId() %>
쿠키로 부터 요청된 세션 ID 인가? : <%= request.isRequestedSessionIdFromCookie() %>
URL로부터 요청된 세션 ID 인가? : <%= request.isRequestedSessionIdFromURL() %>
유효한 세션 ID 인가? : <%= request.isRequestedSessionIdValid() %>

작성된 웹 애플리케이션을 tomcat1과 tomcat2에 배포한다. 이때 가장 중요한 것이 web.xml에 반드시 이라는 항목을 넣어 야 한다. 그럼 이제 테스트를 해보도록 하자. 먼저 아파치 웹서버, tomcat1, tomcat2를 차례로 실행시켜 보자. 그리고 http://ipaddress/lbtest/index.jsp 접속하여 세션 객체를 생성해보자. 결과 화면은 그림 1과 같다. 여기서 요청된 세션ID를 보면 뒤에 어떤 톰캣에 접속한 상태인지를 알 수 있다. 이 화면상에서는 tomcat2에 접속한 세션이다. 그럼 tomcat2를 강제로 종료시켜 보도록 하자. 종료 후 화면에 보이는 “여기”를 계속 눌러 보자. 분명히 tomcat2가 종료되었음에도 불구하고 세션 값이 유지되고 있음을 알 수 있다. 이젠 반대로 tomcat2를 다시 실행시킨 후에 tomcat1을 종료시켜 보도록 하자. 역시 마찬가지로 세션 정보가 유지되는 것을 확인할 수 있을 것 이다.

test 결과화면
그림 1. 테스트 결과 화면

이상으로 톰캣을 이용한 로드밸런싱과 세션 클러스터링에 대해서 알아보았다. 일반적으로 로드밸런싱과 클러스터링은 성능 향상이라는 측면과 안정성 확보에 그 목적을 가지고 있다. 물론 고가의 상용 웹 어플리케이션 서버에 비하면 많이 부족하고 하드웨어를 이용한 로드밸런싱과 클러스터링에 비하면 안정성이 떨어질 수도 있지만 저렴한 비용으로 최대의 안정성과 성능을 얻고자 한다면 한번쯤 시도해 볼만한 좋은 기능이라고 할 수 있다. 아무쪼록 리눅스, 아파치, 톰캣 그리고 오픈소스를 통해 즐거운 웹 어플리케이션 개발 환경을 느껴보기 바란다.


위로

참고 자료
The Apache Tomcat Connector: http://tomcat.apache.org/connectors-doc/
Clustering/Session Replication HOW-TO: http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html


출처 : http://tellus.tistory.com/63?srchid=BR1http%3A%2F%2Ftellus.tistory.com%2F63

Posted by 1010
98..Etc/Etc...2009. 11. 23. 10:25
반응형
[참고]
http://www.google.co.kr/support/webmasters/bin/topic.py?topic=8459&hl=ko

[퍼온글]

구글의 검색 결과에 있는 내용을 삭제하고 싶으세요?

구글은 그 검색 결과에 있어서 그 품질을 가장 중요하게 봅니다. 그렇기 때문에 구글은 사용자의 사이트에서 페이지들을 목록화하는 것을, 그 페이지에 대한 책임이 있는 관리자의 요청이 있을 때에만 중지합니다. 이 정책은 어떤 페이지가 구글의 색인에서 부당하게 제거되지 않도록 보호해주기 위해서 필요합니다.

구글은 구글의 사용자를 위해 완전하고 공평한 검색 결과를 제공하기 위한 의무로, 웹에서 정보를 검열하는 행동에 참여할 수 없습니다.

 삭제 기능

다음의 삭제 기능들은 구글이 다음 번에 사용자의 사이트 페이지를 색인 할 때 적용됩니다. (보통 6-8주 걸립니다.)

 사용자 웹사이트의 URL 바꾸기

구글은 페이지의 URL주소와 그의 내용을 밀접히 관련하기 때문에 수동적으로 직접 URL 주소를 변경할 수는 없습니다. 하지만 구글은 인터넷 페이지들을 정기적으로 새롭게 수집하기 때문에 그럴 때마다 변경될 것입니다. 수집하는 것 역시 자동으로 이루어지기 때문에 저희가 수동적으로 일정한 사이트만 더욱 자주 검색할 수는 없습니다.

만약에 사이트가 변경이 되었으면 URL 등록 페이지 를 사용하셔서 페이지 추가를 하실 수 있고, 페이지 삭제에 대한 정보는 아래에 있습니다. 하지만 페이지 등록은 시간이 걸릴 수 있으니 삭제를 하신 후 다시 추가를 하시려 해도 저희가 새롭게 수집하기 전에는 결과에 뜨지 않을 수 있습니다.

구글에 직접 주소 변경을 요청하는 대신, 현재 사용자의 사이트에 연결하고있는 다른 사이트의 링크를 먼저 새롭게 고치는 것을 권장합니다. 그리고 야후! 디렉토리나 오픈 디렉토리에 변경이 입력된 것을 확인하시기 바랍니다. 또는, 전 주소가 HTTP 301 (permanent) redirect를 사용해 방향전환 한다면 저희의 자동 검색기가 새로운 주소를 기록합니다. 이렇게 등록된 페이지가 검색 결과에 나타나려면 보통 6-8주 정도 걸립니다.


 사용자의 웹사이트 URL 제거

사이트 일부, 또는 전체를 구글이 수집 못하게 하시려면 다음의 내용을 지닌 robots.txt파일을 서버 루트(root) 디렉토리에 저장하세요:

User-Agent: *
Disallow: /

이것은 사이트를 검색기에서 제외하는 표준입니다. 다음의 문서를 참조하시면 이 표준에 대한 더 자세한 정보가 있습니다 (영문 문서입니다): http://www.robotstxt.org/wc/norobots.html

참조: 만약 긴급하게 하는 요청이고, 구글의 자동 검색 로봇을 못 기다리시면 구글의 자동 삭제 시스템을 사용하세요. 먼저 해당하는 페이지의 관리자가 사이트에 robots.txt 파일을 저장해야 결과에서 자동적으로 링크를 지우는 이 기능이 올바르게 작동합니다.

웹 서버의 루트(root) 디렉토리에 robots.txt 파일이 저장돼 있으면 페이지들은 계속 구글의 검색 결과에서 제외됩니다. 또한, 루트 디렉토리에 사용자 권위가 없으시더라도 robots.txt 파일을 해당하는 폴더에 저장하면 됩니다. 자동 제외 시스템을 같이 사용하시면 임시적인 180일 동안 구글 검색에서 제외됩니다. (하지만, 루트 폴더가 아닌, 다른 곳에 저장한 상태이면 180일마다 또다시 자동 제외 시스템을 사용하셔야 계속 제외됩니다.)



 각각의 페이지 삭제

모든 검색 로봇을 막으시려면 다음의 메타 테그(meta tag)를 HTML페이지에 포함하세요:

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">

구글 로봇을 제외한 다른 검색 로봇을 허용하시려면 다음의 메타 태그를 사용하세요:

<META NAME="GOOGLEBOT" CONTENT="NOINDEX, NOFOLLOW">

이 표준 메타 태그에 대한 더 많은 정보가 필요하시면 다음 페이지를 방문하세요: http://www.robotstxt.org/wc/exclusion.html#meta.

참조: 만약 긴급하게 하는 요청이고, 구글의 자동 검색 로봇을 못 기다리시면 구글의 자동 제외 시스템을 사용하세요. 먼저 해당하는 페이지의 관리자가 페이지의 HTML 안에 올바른 메타 태그를 입력해야 이 시스템의 기능이 작동합니다.


 사이트 내용의 제거

구글 검색 결과에는 URL 내용을 보여드립니다. 나타나는 검색어들을 bold체로 보기 쉽게 하고, 문맥으로 내용을 파악하실 수 있게 해드립니다. 이렇게 내용을 미리 볼 수 있게 하여 사용자가 원하는 결과를 더욱 정확하게 찾을 수 있게 해 드립니다.

구글이 자신의 페이지를 보지 못하도록 하고 싶다면 다음 태그를 사용하세요:

<META NAME="GOOGLEBOT" CONTENT="NOSNIPPET">

참고: 삭제할 때에는 저장되어 있던 페이지도 삭제됩니다.

참조: 만약 긴급하게 하는 요청이고, 구글의 자동 검색 로봇을 못 기다리시면 구글의 자동 제외 시스템을 사용하세요. 먼저 해당하는 페이지의 관리자가 페이지의 HTML 안에 올바른 메타 태그를 입력해야 이 시스템의 기능이 작동합니다.


 저장된 페이지의 제거

구글은 수집한 모든 문서들을 저장해둡니다. 구글은 저장된 문서를 사용자들을 위해 제공하고, 무슨 이유로 사이트에 접속이 불가능하면 구글의 저장된 페이지를 사용하여 구글이 수집했던 당시의 모습 그대로 볼 수 있습니다. 저장된 페이지는 위 부분에 원본이 아닌 복사된 내용임을 설명하는 메시지가 있습니다.


만약 로봇이 귀하의 사이트에서 내용을 수집 못하게 하고 싶다면, NOARCHIVE 메타 태그를 사용하세요. 이 태그는 문서의 부분에 다음과 같이 배치 하세요.

<META NAME="ROBOTS" CONTENT="NOARCHIVE">

만일 목록을 붙이는 다른 로봇들이 사용자의 페이지에 있는 내용을 수집하는 것을 허락하고, 단지 구글의 로봇들이 페이지를 저장하는 것을 막고 싶으시다면, 다음 태그를 사용하세요.:

<META NAME="GOOGLEBOT" CONTENT="NOARCHIVE">

참조: 이 태그는 페이지에서 단지 저장된 페이지만 삭제합니다. 구글은 계속해서 페이지를 색인하고 그 일부 내용을 보여줍니다.

참조: 만약 긴급하게 하는 요청이고, 구글의 자동 검색 로봇을 못 기다리시면 구글의 자동 제외 시스템을 사용하세요. 먼저 해당하는 페이지의 관리자가 페이지의 HTML 안에 올바른 메타 태그를 입력해야 이 시스템의 기능이 작동합니다.


 오래된 링크(대드 링크) 삭제

구글은 정기적으로 새롭게 웹 페이지를 수집합니다. 구글은 웹을 색인하며 새로운 페이지를 찾고, 삭제 된 링크는폐기하고, 링크를 자동적으로 업데이트 합니다. 접속과 연결이 안 되는 링크는 색인에서 없어집니다.

참조: 만약 긴급하게 하는 요청이고, 구글이 다음번에 사용자의 사이트를 색인 할 때까지 기다릴 수 없다면 저희의 자동 URL 삭제 시스템을 사용하세요. 저희는 웹상에 페이지가 더이상 존재하지 않을 때만 사용자의 삭제 요청을 받아들일 수 있습니다.


 구글 이미지 검색에서 이미지 삭제

만약 사용자가 구글의 이미지 검색에서 결과 내용을 삭제하셔야 한다면, 그 사이트의 웹 마스터의 참여가 있어야 합니다. 페이지의 웹 마스터에게 robots.txt 파일을 서버의 root에 추가하도록 해주세요. (만약 그것을 서버 루트(root)에 넣을 권리가 없다면 그것을 해당하는 디렉토리 부분에 넣을 수 있습니다.)

예시: 만일 사용자의 사이트가 www.yoursite.com/images/dogs.jpg 이고 구글이 그 사이트에서 수집한 dogs.jpg 이미지를 포함하지 않기를 바라신다면,

사용자는 www.yoursite.com/robots.txt 라고 불리는 파일을 만들어야 합니다.

그리고 이 파일 안에는 다음 텍스트 내용이 있어야 합니다.

User-Agent: Googlebot-Image
Disallow: /images/dogs.jpg

저희의 목록에서 사용자의 사이트에 있는 모든 이미지를 삭제하려면 사용자의 서버 root에 다음 robots.txt 파일이 있어야 합니다.

User-Agent: Googlebot-Image
Disallow: /

웹 마스터가 이 파일을 추가한 후에는googlebot@google.com로 그 사실과 그 파일의 위치에 대한 메모를 보내주세요. 저희는 48시간 내에 그 이미지를 삭제해 드릴 것입니다.

출처 : Tong - anidu012님의 기본통

Posted by 1010
98..Etc/Tomcat2009. 10. 30. 13:15
반응형

Tomcat FAQ

Class Not Found 문제


print-friendly
version
Preface
이 페이지에서는 당신이 Class Not Found 에러나 그와 유사한 에러를 만났을 때에 대해 논하고 있다. 당신이 다음 문서들을 읽어 보기를 강력히 추천한다: NoClassDefFoundError exception을 만났다면, 근원적인 문제는 ClassNotFound Exception과 같은 원인일 것이다.
Questions

Answers
jsp:useBean가 정상적으로 실행되지 않습니까?
다음을 확인해 보세요:
  • 당신의 빈즈는 패키지 선언이 되어 있는 클래스야 합니다.
  • 패키지 구조를 포함한 완전한 클래스 명 (예:com.bar.package.MyClass) 이나
  • JSP페이지 위에 import 를 이용 (예: <%@ pageimport="com.bar.package.MyClass"%>)하여야 합니다.

java.lang.NoClassDefFoundError: javax/servlet/Filter 라는 메시지를 받습니까?
아마도 servlet.jar파일이 있어서는 안될 어떤 곳에 복사되어 있을 수 있습니다. 이런 상황은 클래스 로더의 동작을 방해 합니다. 톰캣의 클래스 로더가 기대했던 대로 동작하지 않기 때문입니다. (위의 메시지 처럼)

NoClassDefFoundError: org/xml/sax/InputSource라는 메시지를 받습니까?
당신의 classpath안에 있는 XML api jar 파일들에 충돌이 생겼습니다. 더 많은 정보는 README나 RELEASE_NOTES를 참고하세요.
Posted by 1010
98..Etc/Etc...2009. 10. 16. 10:10
반응형
보안USB에서 그동안 발견된 주요 취약점 정리

1. 실행 프로세스 강제 종료 우회 방법
B사 : 에이전트 보호 기능으로 프로세스 정지 또는 서비스 삭제 방지 기능, 안전모드에서의 매체 제어 정상동작 기능, 윈도우 복구를 통한 에이전트 제거 방지 기능, 안전모드에서의 서비스 삭제 방지 기능을 지원한다.
C사 : 자체 보호기능, 프로세스 Kill 방지, 복원 기능으로 프로세스 강제 종료를 통한 자료 유출을 원천 방지한다. 자체 보호기능은 레지스트리 조작, 프로그램 조작 방지 기능으로 사용자의 임의 조작을 차단하며, 프로세스 Kill 방지 기능은 중요 프로세스 숨김, Kill 방지로 강제 종료를 할 수 없다. 만일의 경우 프로세스가 종료되어도 자동 재실행이 된다.

2. 시작프로그램 삭제 우회 방법
서비스 강제 종료 금지 기능 지원

3. 안전모드 부팅 우회 방법
폴더 삭제 또는 변경 금지 기능 지원

4. PC부팅 시간차 우회 방법
드라이브 레벨에서 제어하는 솔루션이기 때문에 PC부팅 시간과 관계없이 매체 차단 구현

5. 안전모드 폴더 삭제 우회 방법
B사 : 안전모드로 부팅후 일반USB로 저장하려 해도 기본적인 차단으로 매체를 제어한다.
C사 : 안전모드로 부팅해도 자체 보호 모듈을 포함하여 모든 기능이 정상 동작하므로 프로그램 폴더 삭제 등을 통해 무력화 시킬 수 없다.

6. 공유폴더 접근 우회 방법
공유를 하더라도 인증없는 상태에서는 암호화 상태이기 때문에 자료 유출을 할 수 없다.

7. 도스 창 우회 방법
도스 명령을 통한 접근 시에도 인증없이는 내용을 볼 수 없다.

8. 특정 소프트웨어(예: 파이널데이타SW)를 통한 불법접근 우회접근 방법
애플리케이션 실행 제어 기능으로 사전에 등록해 우회접근을 원천 차단한다.

9. 패스워드 스니핑 공격 무력화 우회 방법
고려대에서 암호화 검증을 받은 K라이브러리를 통한 완벽 보안을 하고 있다.

10. VM웨어 우회 방법
B사 : 현재까지 납품된 사이트는 VM웨어를 사용하지 않고 있어 이로 인한 문제가 발생한 적이 없으며, 보안 적합성을 받은 모든 제품의 문제로 향후 판매를 대비해 보완 중이다.
C사 : VM웨어에서 일반 USB를 통한 자료 유출이 가능한 취약점이 발견된 건 사실이나 추가로 보완 모듈을 개발 완료하여 테스트를 진행 중이며, 현재 고객사에 적용 예정이다.

이밖에도 공인인증서를 저장하는 경우 보안USB 승인을 받지 않아도 되는 점을 악용한 공인인증서 파일확장자로 변경하여 시도되는 자료 유출과 관련 일반USB에 대해서는 파일확장자 예외없이 쓰기(write)를 커널 드라이버 레벨에서 근본적으로 차단하므로 파일 확장자를 변경해 저장하는 게 불가능하다.

Posted by 1010
98..Etc/Etc...2009. 10. 16. 09:28
반응형
windows

http://blog.naver.com/congnamu?Redirect=Log&logNo=20051133977



회사에서 회선을 외부망과 내부망으로 나누어 2개의 망으로 사용하고 있었다. 매번 랜선을 뺐다 끼웠다 하는 불편함 때문에 랜카드를 하나 더 끼워서 각각 외부망 내부망을 연결한 상태이다.

외부망: 192.168.2.0  게이트웨이 192.168.2.1
내부망 :192.168.1.0  게이트웨이 192.168.1.1

외부와 내부망에 맞게 IP세팅을 하고 만일 DHCP서버가 있는 곳이면 자동으로 IP가 할당이 되어 있을 것이다. 이제 내부망으로 통신하는 트래픽. 즉, 192.168.1.0 대역으로 나가는 모든 패킷들에 대해서 게이트웨이 192.168.1.1로 가게 만들고 그 이외의 트래픽은 게이트웨이 192.168.2.1로 보내버리면 끝이난다.

사용자 삽입 이미지
 

이 그림은 가상의 네트워크를 맵핑한 것입니다. 네트워크에 맞게 수정해서 설정하세요

라우팅 테이블에 네트워크 라우팅으로 192.168.1.0은 게이트웨이 192.168.1.1로 집어 넣어 버리고
192.168.1.0을 제외한 나머지 모든 패킷(0.0.0.0)은 게이트웨이 192.168.2.1로 보내게 세팅을 하자.

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\onurmark>route add -p 192.168.1.0 MASK 255.255.255.0 192.168.1.1
C:\Documents and Settings\onurmark>route add -p 0.0.0.0 MASK 0.0.0.0 192.168.2.1

라우팅 테이블은 갱신되는 데이터이므로 컴퓨터를 재시작하면 라우팅이 날아가 버린다. 이를 방지하기 위해 -p 옵션(Persistent Route)을 줘서 항상 유지하도록 한다.



출처 : http://www.onurmark.co.kr/102

-----------------
linux

랜카드 두개 연결시 Routing되게 하려면


eth0 192.16.10.1 GW 192.16.10.254

eth1 192.16.5.1


1. /proc/sys/net/ipv4/ip_forward에 1을 저장한다.

    #>echo "1" > /proc/sys/net/ipv4/ip_forward

------------------------------------------------------------

IP 라우팅 테이블 이해

IP 라우팅 테이블 이해

라우팅 문제를 해결하려면 라우팅 테이블을 이해해야 합니다. TCP/IP를 실행하는 모든 컴퓨터는 IP 라우팅 테이블에 따라 라우팅 경로를 정합니다.

IP 라우팅 테이블 표시에 대한 자세한 내용은 라우팅 테이블 보기를 참조하십시오.

다음 그림은 라우팅 테이블의 예를 나타낸 것입니다.

IP 라우팅 테이블

IP 라우팅 테이블에는 다음 열의 정보가 포함됩니다.

  • 대상
    대상은 대상 호스트, 서브넷 주소, 네트워크 주소, 기본 경로입니다. 기본 경로의 대상은 0.0.0.0입니다.
  • 네트워크 마스크
    네트워크 마스크는 대상과 함께 사용할 경로를 결정하는 데 사용됩니다. 예를 들어 호스트 경로의 마스크는 255.255.255.255이고 기본 경로의 마스크는 0.0.0.0이며, 서브넷과 네트워크 경로의 마스크는 이 둘 사이의 값을 가집니다.
    마스크가 255.255.255.255이면 정확히 일치하는 대상만 이 경로를 사용합니다. 마스크가 0.0.0.0이면 어느 대상이나 이 경로를 사용할 수 있습니다. 마스크가 2진수로 기록된 경우 1은 유효값으로 일치해야 하며 0은 유효하지 않은 값이라 일치하지 않아도 됩니다.
    예를 들어 목적지가 172.16.8.0이며 네트워크 마스크가 255.255.248.0이라고 가정합니다. 이 네트워크 마스크에서 첫째 두 옥텟은 정확히 일치해야 하며, 셋째 옥텟의 앞쪽 다섯 개 비트는 일치해야 하고(248=11111000) 마지막 옥텟은 문제가 되지 않습니다. 172.16.8.0의 셋째 옥텟, 즉 8은 2진수로 00001000입니다. 굵게 표시된 마스크 오프 부분인 앞쪽 5개 비트를 변경하지 않기 때문에 15 또는 2진수 00001111로 이동할 수 있습니다. 대상이 172.16.8.0이고 마스크가 255.255.248.0인 경로는 172.16.15.255를 통해 172.16.8.0으로 가는 모든 패킷에 적용됩니다.
  • 게이트웨이
    게이트웨이는 패킷이 전송되어야 하는 다음 라우터의 IP 주소입니다. 이더넷이나 토큰 링같은 LAN 연결에서 이 라우터가 Interface 열에 표시된 인터페이스를 사용하여 게이트웨이에 직접 도달할 수 있어야 합니다. LAN 연결에서 게이트웨이와 인터페이스는 라우터가 트래픽을 전달하는 방법을 결정합니다. 필요 시 전화 접속 인터페이스의 경우 게이트웨이 주소는 구성할 수 없습니다. 지점 간 연결에서 인터페이스는 라우터가 트래픽을 전달하는 방법을 결정합니다.
  • 인터페이스
    인터페이스는 다음 라우터에 도달하기 위하여 사용되는 LAN 또는 필요 시 전화 접속 인터페이스를 나타냅니다.
  • 메트릭
    메트릭은 대상에 도달하기 위하여 사용되는 경로의 상대적 비용을 나타냅니다. 일반적인 메트릭은 홉이며 대상에 도달하기 위하여 지나는 라우터의 수입니다. 같은 대상에 대한 경로가 여러 개이면 메트릭이 가장 낮은 경로가 가장 좋은 경로입니다
  • 프로토콜
    프로토콜은 경로를 알게 된 방법을 보여 줍니다. 프로토콜 열에 RIP나 OSPF 또는 로컬이 아닌 다른 것이 표시되어 있으면 라우터가 경로를 받고 있는 것입니다. OSPF(Open Shortest Path First)는 WindowsXP 64비트 Edition(Itanium) 및 64비트 버전의 Windows Server 2003 제품군에서 사용할 수 없습니다.

2. /proc/sys/net/ipv4/conf/default/rp_filter에 1을 저장한다. 

Posted by 1010
98..Etc/70.JEUS2009. 10. 9. 18:24
반응형
 

[jeus@localhost config]$ cat ws_engine.m
*DOMAIN
jeuservice

*NODE
localhost   * 컨테이너 1
  WEBTOBDIR = "/usr/local/jeus5/webserver",
  SHMKEY    = 54000,
  DOCROOT   = "/home/free/webapps/WebContent",
  PORT      = "8080",
  LOGGING   = "log1",
  ERRORLOG  = "log2",
  JSVPORT   = 9900,
  IndexName = "index.do,index.html,index.jsp",
  HTH       = 1

*VHOST     * 컨테이너2 가상 호스트 추가
vhost1    
  DOCROOT   = "/home/free2/webapps/WebContent",  * 새로운 컨텍스트 경로
  PORT      = "8088",           * 사용할 포트 번호 지정(포트번호만 변경하여 다른 컨텍스트 사용)
  NODENAME  = "localhost",    * 상위에  정의한 NODE 명을 지정
  HOSTNAME  = "192.168.1.11",   * DNS 명(예: aaa.co.kr) 또는 localhost IP(IP로 외부 접속)
                                                * HOSTNAME에서 DNS 명을 설정시에 로컬의 hosts 파일에 dns 추가
  IndexName = "index.do,index.html,index.jsp",  * 컨테이너 기동시에 읽어들일 파일
  LOGGING   = "log3",    * 로그 정의
  ERRORLOG  = "log4"  


*SVRGROUP
htmlg       NODENAME = "localhost", SVRTYPE = HTML
cgig        NODENAME = "localhost", SVRTYPE = CGI
ssig        NODENAME = "localhost", SVRTYPE = SSI
jsvg        NODENAME = "localhost", SVRTYPE = JSV
jsvg1       NODENAME = "localhost", SVRTYPE = JSV, VHOSTNAME = vhost1  * 가상 호스트 추가

*SERVER
html        SVGNAME  = htmlg, MinProc = 1,  MaxProc = 2
cgi         SVGNAME  = cgig,  MinProc = 1,  MaxProc = 2
ssi         SVGNAME  = ssig,  MinProc = 1,  MaxProc = 2
MyGroup     SVGNAME  = jsvg,  MinProc = 5, MaxProc = 10
MyGroup2    SVGNAME  = jsvg1,  MinProc = 5, MaxProc = 10    * 추가된 컨테이너에서 사용하는 그룹

*URI
uri1        Uri      = "/cgi-bin/",  Svrtype = CGI
uri2        Uri      = "/free1/", Svrtype = JSV     * 컨테이너1 의 이름(JEUSMain.xml)
uri3        Uri      = "/free2/", Svrtype = JSV, VhostName=vhost1, SvrName = MyGroup2  * 컨테이너2의 이름(JEUSMain.xml)
uri4        Uri      = "/", Svrtype = JSV

*ALIAS
alias1      URI      = "/cgi-bin/", RealPath = "/usr/local/jeus5/webserver/cgi-bin/"

*LOGGING
log1        Format   = "DEFAULT",   FileName = "/home/free/webapps/logs/webserver/access.log", Option = "sync"
log2        Format   = "ERROR",     FileName = "/home/free/webapps/logs/webserver/error.log",  Option = "sync"
log3        Format   = "DEFAULT",   FileName = "/home/free2/webapps/logs/webserver/access.log", Option = "sync" * 로그파일 저장 경로
log4        Format   = "ERROR",     FileName = "/home/free2/webapps/logs/webserver/error.log",  Option = "sync"

*EXT
htm         MimeType = "text/html",  SvrType = HTML
do              Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup  * 사용 확장자 정의
jsf             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
jsp             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
html            MimeType = "text/html", SvrType = HTML
hwp             MimeType = "application/x-hwp", SvrType = HTML
pdf             MimeType = "application/x-pdf", SVRTYPE = HTML
css             MimeType = "text/css", SvrType = HTML
js              MimeType = "application/x-javascript", SvrType = HTML
gul             MimeType = "application/gul", SvrType = HTML
gif             MimeType = "image/gif", SvrType=HTML
jpeg            MimeType = "image/gif", SvrType=HTML
jpg             MimeType = "image/gif", SvrType=HTML
zip             MimeType = "application/zip", SvrType=HTML
jar             MimeType = "application/x-java-archive", SvrType=HTML
exe             MimeType = "application/octet-stream", SvrType=HTML
wml             MimeType = "application/vnd.wap.wml", SvrType=HTML
wmls            MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wmlc            MimeType = "application/vnd.wap.wmlc", SvrType=HTML
wmlsc           MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wbmp            MimeType = "application/vnd.wap.wbmp", SvrType=HTML
swf             MimeType = "application/x-shockwave-flash", SvrType=HTML
csv             MimeType = "application/octet-stream", SvrType=HTML
xml             MimeType = "text/html", SvrType = HTML
asd             MimeType = "application/astound",SvrType=HTML
asn             MimeType = "application/astound",SvrType=HTML
doc             MimeType = "application/msword",SvrType=HTML
wiz             MimeType = "application/msword",SvrType=HTML
rtf             MimeType = "application/msword",SvrType=HTML
xls             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlw             MimeType = "application/vnd.ms-excel",SvrType=HTML
xla             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlc             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlm             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlt             MimeType = "application/vnd.ms-excel",SvrType=HTML
ppt             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pps             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pot             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
m13             MimeType = "application/x-msmediaview",SvrType=HTML
m14             MimeType = "application/x-msmediaview",SvrType=HTML
wmf             MimeType = "application/x-msmetafile",SvrType=HTML
midi            MimeType = "audio/midi",SvrType=HTML
mid             MimeType = "audio/midi",SvrType=HTML
aif             MimeType = "audio/x-aiff",SvrType=HTML
aiff            MimeType = "audio/x-aiff",SvrType=HTML
aifc            MimeType = "audio/x-aiff",SvrType=HTML
wav             MimeType = "audio/x-wav",SvrType=HTML
cab             MimeType = "x-application/octet-stream", SvrType = HTML
fla             MimeType = "application/x-fla", SvrType=HTML

ws_engine.m 파일은 설정후 컴파일 과정을 함
[jeus@localhost localhost]$
wscfl -i ws_engine.m

##############################################################################

content=Vim/7.2 name=Generator>[jeus@localhost localhost]$ cat JEUSMain.xml
<?xml version="1.0" ENCODING="utf-8"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <node>
                <name>localhost</name>
        <engine-container>
<!-- 컨테이너 1 -->
            <name>container1</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>ws</type>
                <name>engine1</name>
            </engine-command>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>
<!-- 컨테이너 2 -->
                <engine-container>
            <name>container2</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>servlet</type>
                <name>engine2</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>

        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <enable-webadmin>true</enable-webadmin>
    </node>
    <application>
        <!-- 노드 localhost 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free1</name> 
        <path>/home/free/webapps/WebContent</path>
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container1</engine-container-name>
                <web-context-group>
                    <name>MyGroup</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
    <application>
        <!-- 가상호스트 vhost1 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free2</name>
        <path>/home/free2/webapps/WebContent</path> <!-- 추가할 컨텍스트 경로 -->
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container2</engine-container-name>
                <web-context-group>
                    <name>MyGroup2</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
</jeus-system>


##############################################################################

content=Vim/7.2 name=Generator>기본으로 제우스에서 하나의 webtob 와 하나의 호스트명_ws_engine1 를 사용.
컨테이너 1 다음으로 추가되는 컨테이너는,
컨테이너 1에 설정된 호스트명_ws_engine1/WSMain.xml 에 설정부분을 추가하여 사용.

[jeus@localhost localhost_ws_engine1]$ cat WSMain.xml
<?xml version="1.0" ENCODING="UTF-8"?>
<ws-engine xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <domain>
        <name>jeuservice</name>
<!-- 컨테이너 1에서 사용. -->
        <node>
            <name>localhost</name> 
            <webtob-dir>/usr/local/jeus5/webserver</webtob-dir>
            <shmkey>54000</shmkey>
            <docroot>/home/free/webapps/WebContent</docroot>
            <jsv-port>9900</jsv-port>
            <hth>1</hth>
            <port>8080</port>
            <logging>log1</logging>
            <error-log>log2</error-log>
        </node>

<!-- 추가된 컨테이너 설정은 아래 해당하는 엘리먼트 추가  -->
        <svrgroup>
            <name>htmlg</name>
            <svr-type>HTML</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>cgig</name>
            <svr-type>CGI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>ssig</name>
            <svr-type>SSI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg2</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <server>
            <name>html</name>
            <svg-name>htmlg</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc> 
            <asq-count>1</asq-count>
        </server>
        <server>
            <name>cgi</name>
            <svg-name>cgig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>ssi</name>
            <svg-name>ssig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>MyGroup</name>
            <svg-name>jsvg</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <server> <!-- 컨테이너 그룹 추가 (ws_engine.m)-->
            <name>MyGroup2</name>
            <svg-name>jsvg1</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <uri>
            <name>uri1</name>
            <uri-def>/cgi-bin/</uri-def>
            <svr-type>CGI</svr-type>
        </uri>
        <uri>
            <name>uri2</name>
            <uri-def>/webapps</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri3</name>
            <uri-def>/free2</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri4</name>
            <uri-def>/</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <logging>
            <name>log1</name>
            <format>DEFAULT</format>
            <file-name>/home/free/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log2</name>
            <format>ERROR</format>
            <file-name>/home/free/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log3</name>
            <format>DEFAULT</format> <!-- 추가할 컨텍스트의 로그 파일 저장 경로 (ws_engine.m) -->
            <file-name>/home/free2/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log4</name>
            <format>ERROR</format>
            <file-name>/home/free2/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <ext>
            <name>htm</name>
            <mimetype>text/html</mimetype>
            <svr-type>HTML</svr-type>
        </ext>
        <ext>
            <name>jsp</name>
            <mimetype>application/jsp</mimetype>
            <svr-type>JSV</svr-type>
            <svr-name>MyGroup</svr-name>
        </ext>
    </domain>
</ws-engine>


##############################################################################

content=Vim/7.2 name=Generator>
컨테이너 1에서 사용하는
호스트명_servlet_engine1

[jeus@localhost localhost_servlet_engine1]$ cat WEBMain.xml
<?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>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
         
      </thread-pool>
                <webtob-address>127.0.0.1</webtob-address>
                <registration-id>MyGroup</registration-id>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <ENCODING>
            <request-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-ENCODING>
            <response-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-ENCODING>
            <postdata-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-ENCODING>
        </ENCODING>
        <jsp-engine>
            <jsp-work-dir>/home/free/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>


##############################################################################

content=Vim/7.2 name=Generator>컨테이너 2에서 사용하는 호스트명_servlet_engine2
필요한 설정부분은 그룹명과 jsp 컴파일된 클래스가 저장될 경로 변경

[jeus@localhost localhost_servlet_engine2]$ cat WEBMain.xml
<?xml version="1.0" ENCODING="UTF-8"?>
<web-container xmlns=http://www.tmaxsoft.com/xml/ns/jeus>
    <context-group>
        <group-name>MyGroup2</group-name>
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port> <!-- 하나의 webtob 를 공유하기때문에 통신 포트 동일-->
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <registration-id>MyGroup2</registration-id>
                <webtob-home>/usr/local/jeus5/webserver</webtob-home>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <ENCODING>
            <request-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-ENCODING>
            <response-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-ENCODING>
            <postdata-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-ENCODING>
        </ENCODING>
        <jsp-engine>
            <jsp-work-dir>/home/free2/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>


출처 : http://javaiyagi.tistory.com/187


 
 
 
Posted by 1010
98..Etc/70.JEUS2009. 10. 9. 18:19
반응형

실습 5 : 가상 호스트와 JEUS 연동

WebtoB 환경 설정

*NODE
challenge22 WEBTOBDIR="C:/TmaxSoft/WebtoB4.1",
.................
  JSVPORT = 9900


*SVRGROUP
..........
v_jsvg  NODENAME = "challenge22", SVRTYPE = JSV, VHOSTNAME="vhost1"


*SERVER
..............
vjMyGroup SVGNAME = v_jsvg, MinProc = 10, MaxProc = 20


*VHOST
vhost1    HOSTNAME = "test.tmax.co.kr",
              DOCROOT = "C:/TmaxSoft/webhome",

  PORT = "80",
  NODENAME = "challenge22",
  IndexName = "welcome.html"


DNS 등록

윈도우 가상

c:\Windows\system32\drivers\etc\hosts

 127.0.0.1       localhost
 127.0.0.1       test.tmax.co.kr

실제 서버

dns에 등록



제우스 환경 설정

환경설정 파일 위치 : C:\TmaxSoft\JEUS5.0\config\노드명\노드명_servlet_engine1\WEBMain.xml


    <webtob-listener>
                <listener-id>webtob2</listener-id>  <-제우스가 인식하는 리스너 아이디
                <port>9900</port>                          <-다른 시스템에 제우스와 WebtoB가 있을 경우 연동하기 위한 포트
                <output-buffer-size>8192</output-buffer-size
                <thread-pool>                                <-WebtoB 프로세스 정보,, WebtoB 설정보다 작거나 같게 설정
                   <min>10</min>
                   <max>20</max>
                   <step>1</step>
                   <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <webtob-address>localhost</webtob-address>
                <registration-id>jv_jMyGroup</registration-id>            <-WebtoB에서 설정한 서버 지정
   </webtob-listener>


페이지 히스토리
출처 : http://zzru.springnote.com/pages/1458126




---------------------------------


WebtoB+Jeus 가상호스트설정

www.bbb.co.kr 와 www.bbb.co.kr/aaa 는 도메인 주소와 포트번호가
동일하므로 VHOST를 이용한 구분은 불가능합니다.
URI 설정을 이용하여 Context Path "/" 와 "/aaa" 를 구분하여
처리하면 됩니다.

설정 예는 다음과 같습니다.

===========================================================
상략

*NODE
nodename    WEBTOBDIR = "/home/jeus42/webserver",
           SHMKEY    = 54000,
           DOCROOT   = "/home/Jeus42/webserver/docs",
           PORT      = "8080",
           JSVPORT   = 9900,
           HTH       = 1

*SVRGROUP
htmlg       NODENAME = "nodename", SvrType = HTML
jsvg        NODENAME = "nodename", SVRTYPE = JSV

*SERVER
html        SVGNAME  = htmlg, MinProc = 1,  MaxProc = 2
MyGroup     SVGNAME  = jsvg,  MinProc = 25, MaxProc = 30
HpGroup     SVGNAME  = jsvg,  MinProc = 25, MaxProc = 30

*URI
uri1        Uri      = "/aaa/", Svrtype = JSV, SvrName = "MyGroup"
uri2        Uri      = "/", Svrtype = JSV, SvrName = "HpGroup"

하략
=====================================================================

그리고 A장비_servlet_engine1 의 WEBMain.xml(jeus4.x)
설정중 webtob-listener 설정을 하나 더 추가하여 B장비 웹투비의
MyGroup과 연결해야 합니다. webtob-listener는 반복구조를 가집니다.
즉, 하나의 엔진이 여러 웹투비와의 연결을 제공합니다. 
Posted by 1010
98..Etc/Etc...2009. 9. 29. 17:09
반응형

사용자 삽입 이미지

사용자 삽입 이미지

http://svestnik.ru:8080/index.php
http://tiqt.ru:8080/index.php
http://icq-mobila.ru:8080/index.php

http://tel-icq.ru:8080
http://age-bio.ru:8080/index.php
http://medical-static-center.ru:8080/index.php
http://bio-oib.ru:8080/index.php
http://yourbio.ru:8080/index.php
XSS 크로스사이트 스크립트라고합니다. 보안 쪽에서 사용하는 용어죠..
아이프레임으로 공격을 하는 것을 의미하는데...
지금 부터 제가 설명하는 말은 추측입니다... 저도 계정을 발급받아서 호스팅을 받는 입장이라서
루트 권한이 없어서 로그 검색 권한이 없어서 정확하게 어떤 루트로 해킹이 된 것인지 분석을 불가능합니다.
대충 상황을 보면...
이 해킹은 해킹 툴에 의한 해킹 같습니다.
그런데 기존의 XSS 해킹과는 다르게 직접 FTP 계정을 뚫고 들어와서 해커의 IP를 숨겨서
IP가 랜덤하게 로그에 찍히는 것 같습니다.
그래서 호스팅 담당자들도 해커를 찾아내기 힘들어 하는 것 같더군여,.
고가의 웹방화벽을 사용한다면 클릭 몇 번으로 막을 수 있겠지만 대부분 웹나이트나 모듈시큐어리티 같은 공개된 솔루션을 사용하니
URL 차단으로는 한계가 있죠
보시다시피 URL이 랜덤하게 아이프레임으로 들어오니까요..
처음에는 제가 러시아 사이트를 자주 방문해서 그런가 했습니다.
ru, su 도메인이 러시아 도메인이거든요
하지만, 검색을 해보니 다른 분들도 러시아 도메인으로 해킹을 당하는 것을 보고는 그런게 아니라고 생각했습니다.
JPEG 파일로 해킹이 가능하지만
링크가 아닌 다운로드해서 재 업로드는 해킹이 어렵다고 하네요
결론적으로 해킹 툴에 의한 실질적은 FTP 계정을 뚫고 들어오는 것 같습니다.
비밀번호는 6자리 이하는 간단하게 해킹 툴로 뚫기가 쉽습니다.
저는 기존에 8자리를 사용했는데 뚫렸더군요.
그래서 이번에 특수문자로 비밀번호를 만들었습니다.
그런데... 아이러니하게도 보안쪽에서는 특수문자가 해킹에 많이 사용되기에 정말로
보안을 어느 정도 아는 관리자는 특수문자를 사용 못하게 합니다.
역시나 제가 호스팅 받는 곳에서도 특수문자로 FTP 비밀번호를 초기에 못 만들게 되어 있더군요
변경 신청하니 가능은 하지만요.
특수문자로 DB 해킹이 손쉽게 이루어져서 그런가 봅니다.
결론적으로 러시아 도메인으로 아이프레임 공격이 계속 들어온다면
FTP 비밀번호를 어렵게 만드세요
물론 ssh
mysql 비밀번호도 변경하시구요
ssh 비밀번호는 로그인 후
# passwd 로 간편하게 변경이 가능합니다.
FTP, mysql 비밀번호는 허접한 호스팅은 변경신청해야할테도 나름 프로그래밍 되어 있는 곳은 바로 수정 신청이 가
능할 것 입니다.
해킹당하면 루트의 index.php 하단에 아이프레임이 들어갑니다. 그소스만 삭제하시고 덮어쓰기하세요
플러그인 폴더의 모든 index.php 파일도 변경이되는데 본인이 직접 검색해서 따로 올린 플로그인은 index.php 하단
수정하시고 나머지 플러그인은 텍스트큐브.org 에서 다운로드 받아서 덮어쓰기하세요...일일이 변경할려면 힘듭니다.
스킨디렉토리는 소스변경이 없습니다.주의 하실점은 원본 소스에서 변경하셨다면 원본 소스에 최신 변경된 정보가
있는게 아니고 customize밑에 1 디렉토리 밑에 있습니다. 이것을 본인이 사용하는 스킨 디렉토리로 복사해서
백업해두고 일괄 덮어쓰기하면되겠죠. 덮어쓰기 후에 퍼미션(권한)을 707이나 777로 주는 거 잊지 마시구요
안 주면 스킨 수정할 때 권한 없다고 나옵니다.
텍스트큐브에서 소스 다운로드 받아서루트의 index.php 그리고 플러그인 폴더와 attach 폴더 빼고 그리고 백업해둔
스킨 디렉토리 덮어쓰기하면 예전 모습으로 복원됩니다.
저도 일단 비밀번호 변경하고 추이를 지켜보는 중입니다.
하루에 2,3,4번 해킹당하던게 없습니다.
확실히 비밀번호 변경하니 사전파일 돌리는데 시간이 걸리는가 봅니다.
비밀번호 어렵게 변경하세요


출처 : http://comzil.com/
Posted by 1010
98..Etc/Etc...2009. 9. 29. 16:35
반응형
출처 : http://blogdoc.nate.com/269127


nternet Explorer 8 사용 중 mshtml.dll 오류가 발생하고 브라우저가 비정상적으로 종료되는 경우가 있습니다.
jscript.dll과 vbscript.dll 파일 버전이 낮아 발생하는 문제일 수 있습니다.
Internet Explorer 8에서는 Jscript 5.8 버전을 기본으로 사용합니다.
일부 응용 프로그램 등에서 낮은 버전의 Jscript를 설치할 경우 이러한 문제가 발생할 수 있습니다.
 
-. 해결 방법
Internet Explorer 8을 제거 후 다시 설치하여 이 문제를 해결할 수 있습니다.
1. '시작' -> '설정' -> '제어판'을 차례대로 클릭하세요.
2. 제어판 화면이 나타나면 '프로그램 추가/제거'를 클릭하세요.
3. 설치된 목록에서 'Windows Internet Explorer 8'을 찾아 제거를 하세요.
4. 설치 제거가 끝나면 나타나는 대화 상자에서 '지금 다시 시작'을 클릭하세요.
5. 컴퓨터가 다시 시작되면 아래 링크를 클릭하여 Internet Explorer 8 다운로드 사이트로 이동하여 다운로드 설치하세요.
Windows XP용 Windows Internet Explorer 8 다운로드 사이트
6. 설치 완료 화면이 나타나면 '지금 다시 시작'을 클릭하세요.
7. 컴퓨터가 다시 시작되면 Internet Explorer 8을 실행하고 문제가 해결되었는지 확인해 보세요.


------------------------------------------------


출처 : http://woongyee.egloos.com/1914653

제 경우는 ie8과 아래한글 충돌이더군요. ie8을 설치한 후 한글을 설치한 분은 특정 사이트(예: 옥션)에서 다음 그림과 같은 mshtml.dll 오류를 겪을 겁니다. (꼭 한글이 아니라도 ie8을 설치한 다음 ie8의 중요 파일을 바꾸는 프로그램을 설치했을 경우 이런 오류가 납니다.) 여기서 순서가 중요합니다. 한글을 먼저 설치한 다음 ie8을 설치한 분은 상관 없습니다.





해 결 방법은? ie8을 지우고 다시 설치하세요. 크크, 더 간단한 방법 없나고요? 없습니다. 검색해 보면 정상인 mshtml.dll 파일을 다른 컴에서 복사해서 덮어 쓰는 방법도 있긴 한데 이건 될 때도 있고 안 될 때도 있습니다.

원인은 뭘까요? 안녕하슈님의 < ie8 정식 오류 >란 글에 현수아비님이 쓴 덧글을 참고하면 다음과 같다고 합니다.

위 오류의 경우 IE8.0의 Jscript 버전과 한/글(오피스) 제품에 포함된 Jscript 버전이 달라서 발생하는 현상입니다. (참고로 IE 8.0이 나오기 전까지는 Jscript 최신 버전은 한/글(오피스)에서 제공하는 버전입니다.) 우선 IE 8.0에 포함된 Jscript버전을 MS에서 배포하지 않기 때문에 IE 8.0을 재설치하거나, 한/글 제품보다 늦게 설치하여 Jscript버전이 최신 버전으로 유지되도록 해야만 합니다. 가장 좋은 해결 방법은 Jscript을 업데이트해 줘야 하는데, MS에서 배포되기 전까지는 위 방법으로 해결을 하셔야만 합니다.
Posted by 1010
98..Etc/GWT2009. 9. 27. 18:48
반응형

Quick Start

This guide will walk you through creating and deploying your first web application. For more details, please see the User's Guide.

Installing the plugin

If you are already familiar with installing Eclipse plugins, you can just use the update site URL below for your version of Eclipse.

Eclipse 3.5 (Galileo)

http://dl.google.com/eclipse/plugin/3.5

Eclipse 3.4 (Ganymede)

http://dl.google.com/eclipse/plugin/3.4

Eclipse 3.3 (Europa)

http://dl.google.com/eclipse/plugin/3.3

For more details, see Eclipse 3.5 Installation Instructions, Eclipse 3.4 Installation Instructions, or Eclipse 3.3 Installation Instructions.

Note: Installation can take a long time on Eclipse 3.4 because Eclipse is looking for updates to the plugin's dependencies. You can speed up installation by temporarily turning off these update checks.

Creating your first Web Application

To create your first Web Application, select File > New > Web Application Project from the Eclipse menu.

In the New Web Application Project wizard, enter a name for your project and a java package name, e.g., com.example.mywebapp. Click Finish.

Congratulations, you now have an App Engine and GWT-enabled web application!

Running your Web Application locally

Right-click on your web application project and select Debug As > Web Application from the popup menu.

This action creates an Eclipse Web Application launch configuration for you and launches it. The web application launch configuration will start a server and the GWT hosted browser.

At this point, you can set breakpoints, inspect variables and modify code as you would normally expect from a Java Eclipse debugging session.

Deploying your Web Application

To deploy your web application, you will need to create an application from the App Engine Administration Console, at the following URL: https://appengine.google.com/. If you already have one, then you can skip this step.

Once you have an application ID, just right-click on your project, and select Google > App Engine Settings... from the context menu. Enter your application ID into the Application ID text box. Click OK.

Right-click on your project and select Google > Deploy to App Engine. In the resulting Deploy Project to Google App Engine dialog, enter your Google Account email and password.

Note: Don't worry - the plugin doesn't store your password anywhere.

Click Deploy.

Go to http://application-id.appspot.com/ to see your application

Posted by 1010
98..Etc/GWT2009. 9. 27. 18:41
반응형
지난번에는 Maven 에서 GWT 프로젝트를 만들어 보았습니다.
[Maven] GWT 프로젝트 만들기

이제는 만들어진 프로젝트를 가지고 GWT 에뮬레이터를 실행시켜보겠습니다.

지난번에 만들었던 프로젝트에서 조금 바뀌었습니다.
일단 gwt 모듈의 설정파일을 수정합니다.
/kr.co.vicki.gwt.mytodo/src/main/java/kr/co/vicki/gwt/mytodo/Application.gwt.xml


아래와 같이 수정을 해야만 GWT Ext 라이브러리를 사용할 수 있습니다.
  1. <module> 
  2.  
  3.       <!-- Inherit the core Web Toolkit stuff.                        --> 
  4.       <inherits name='com.google.gwt.user.User'/>       
  5.       
  6.       <!--  inherit css based theme --> 
  7.       <inherits name='com.google.gwt.user.theme.standard.Standard'/> 
  8.         
  9.       <!--  inherit GWT Ext --> 
  10.       <inherits name='com.gwtext.GwtExt'/> 
  11.  
  12.       <!-- Specify the app entry point class.                         --> 
  13.       <entry-point class='kr.co.vicki.gwt.mytodo.client.Application'/> 
  14.       
  15.       <!-- Specify the application specific style sheet.              --> 
  16.       <stylesheet src='Application.css' /> 
  17.         
  18.       <!--  GWT Ext stylesheet and script files --> 
  19.       <stylesheet src='js/ext/resources/css/ext-all.css' /> 
  20.       <script src="js/ext/adapter/ext/ext-base.js"/> 
  21.       <script src="js/ext/ext-all.js"/> 
  22.       
  23. </module> 



실제로 GWT Ext 에 사용하는 js, css, 이미지 파일들을 복사하는 작업을 해야합니다.
http://gwt-ext.com/download/


다운받은 gwtext-2.0.5.zip 의 압축을 풀고 해당 위치의 디렉토리들을 아래의 경로에 복사합니다.
/kr.co.vicki.gwt.mytodo/src/main/java/kr/co/vicki/gwt/mytodo/public
source 디렉토리는 필요없긴하나~ 검토의 귀차니즘으로 인해~ 그냥 복사함이 편합니다~


라이센스 문제로 인해 extjs 는 별도로 복사를 해야 합니다. ext-2.0.2.zip 의 압축을 풀고
위와 같은 위치해 해당 파일들과 디렉토리들을 복사합니다.
/kr.co.vicki.gwt.mytodo/src/main/java/kr/co/vicki/gwt/mytodo/public/js/ext



아래와 같이 구성이 되면됩니다.



이제 실제 구현될 파일을 수정해보도록 하겠습니다.
/kr.co.vicki.gwt.mytodo/src/main/java/kr/co/vicki/gwt/mytodo/client/Application.java
  1. package kr.co.vicki.gwt.mytodo.client;  
  2.  
  3. import com.google.gwt.core.client.EntryPoint;  
  4. import com.gwtext.client.core.RegionPosition;  
  5. import com.gwtext.client.widgets.Panel;  
  6. import com.gwtext.client.widgets.Viewport;  
  7. import com.gwtext.client.widgets.layout.BorderLayout;  
  8. import com.gwtext.client.widgets.layout.BorderLayoutData;  
  9.  
  10. /**  
  11.  * Entry point classes define <code>onModuleLoad()</code>.  
  12.  */ 
  13. public class Application implements EntryPoint {  
  14.  
  15.     /**  
  16.      * This is the entry point method.  
  17.      */ 
  18.     public void onModuleLoad() {  
  19.         Panel bodyPanel = new Panel();  
  20.         bodyPanel.setLayout(new BorderLayout());  
  21.           
  22.         Panel leftPanel = new Panel("메뉴");  
  23.         leftPanel.setWidth(250);  
  24.         leftPanel.setCollapsible(true);  
  25.         leftPanel.setHtml("여기는 메뉴 공간입니다.");  
  26.         bodyPanel.add(leftPanel, new BorderLayoutData(RegionPosition.WEST));  
  27.           
  28.         Panel centerPanel = new Panel();  
  29.         centerPanel.setHtml("여기는 센터입니다.");  
  30.         bodyPanel.add(centerPanel, new BorderLayoutData(RegionPosition.CENTER));  
  31.           
  32.         new Viewport(bodyPanel);  
  33.     }  
  34. }  


이제 에뮬레이터로 확인하는 일만 남았습니다.
프로젝트의 pom.xml 이 있는 위치에 콘솔창을 열고 아래와 같은 명령을 입력합니다.
(http://gwt-maven.googlecode.com/svn/docs/maven-googlewebtoolkit2-plugin/plugin-info.html 참조)

mvn googlewebtoolkit2:gwt

재대로 실행이 되지 않을 것입니다.


http://code.google.com/p/gwt-maven/wiki/M2FAQ 를 참조하여 다시 실행해보겠습니다.

mvn com.totsp.gwt:maven-googlewebtoolkit2-plugin:gwt




위와 같이 실행이 되면 성공입니다~~~



사실 처음 Maven 을 접했을때는 진입장벽이 있었는데 해보니깐 재미 있네요~~
Maven Plugin 도 기회가 된다면 만들어 보고 싶네요~~

출처 : http://vicki.tistory.com/536
Posted by 1010
98..Etc/GWT2009. 9. 27. 18:38
반응형

출처 : http://uratang.egloos.com/2136671


GWT 1.6이 나오면서 프로젝트 구조와 embeded Java Servlet (Jetty) server가 달라졌다.

게다가 Google에서 GWT를 위한 플러그인을 제공하므로 Cypal Studio를 사용할 필요가 없어졌으므로

Google 플러그인을 활용한 방법으로 수정한다.

참고: http://paulgrenyer.blogspot.com/2009/04/setting-up-gwt-ext-for-gwt-16-with.html


GWT - Google Web Toolkit(http://code.google.com/webtoolkit/)
  • 복잡한 AJAX 애플리케이션 개발을 손쉽게 해주는 프레임워크이다.
  • JAVA 코드로 작성하고 GWT 컴파일러가 자바코드를 자바스크립트로 변환한다. 모든 자바코드를 변환할 수 있는 것은 아니고, java.util, java.io 패키지의 기능들만 사용할 수 있다.
  • 구동되는 환경은 hosted mode와 web mode가 있다.

    • hosted mode: 컴파일 과정 없이 작성한 코드를 테스트하고 디버깅 할 수 있다. JVM환경의 GWT 브라우저에서 구동된다.
    • web mode: 컴파일러가 자바스크립트와 HTML파일을 생성하고, 이것을 웹브라우저로 구동한다.

[출처] GWT-Ext 개발 기초|작성자 또식이



GWT-Ext - GWT-Ext Widget Library(http://gwt-ext.com)
  • 강력하고 화려한 위젯 라이브러리. GWT와 자바스크립트 라이브러리 EXT(http://extjs.com/)를 활용하였다. http://extjs.com/에서 소개되는 Ext-GWT와는 다르다.

GWT-Ext with Eclipse

참고: http://code.google.com/eclipse/docs/getting_started.html

  • Eclipse plugin 설치
    Europa(3.3): http://dl.google.com/eclipse/plugin/3.3Ganymede(3.4): http://dl.google.com/eclipse/plugin/3.4
  • 이클립스 메뉴에서 File -> New -> Web Application Project 선택
  • 프로젝트와 패키지 이름을 넣고, Use Google App Engine 체크박스를 해제한다.
  • Run As -> Run Configurations에서 Automatically Select Unused Port의 체크박스를 체크한다.
  • 여기까지는 일반적인 GWT 애플리케이션의 실행 방법이다.
  • 다음 라이브러리를 다운로드 한다.

    • GWT-Ext(http://gwt-ext.com/download/)
      압축을 풀어 gwtext.jar파일을 프로젝트의 war\WEB-INF\lib 디렉토리에 넣는다.
    • war 디렉토리 아래에 js 디렉토리를 만든다.
    • Ext(http://gwt-ext.com/download/) 여기 링크에서 화면 아래쪽의 Ext 2.0.2 here의 here를 클릭해서 다운받는다.
      압축을 풀어 js 디렉토리에 넣는다.(디렉토리 2개 파일 4개만 하면 된다. (adapter/, resources/, ext-all.js, ext-all-debug.js, ext-core.js, ext-core-debug.js))
      (디렉토리가 이런 구조가 되도록 주의 js/ext-2.0.2/resources/...)
  • 프로젝트에 gwtext.jar를 추가한다.
    프로젝트를 우클릭한 후,
    Properties -> Java Build Path -> Libraries에서 Add JARs를 클릭한 다음 방금 넣었던 gwtext.jar를 선택한다.
  • oo(프로젝트 이름).gwt.xml 파일에 아래 굵은글씨 부분을 추가한다.
    <inherits name='com.google.gwt.user.User'/>
    <inherits name='com.gwtext.GwtExt' /> ...
    <entry-point class='com.megadeth.client.MegaDeth'/>
    <stylesheet src="../js/ext-2.0.2/resources/css/ext-all.css" />
    <script src="../js/ext-2.0.2/adapter/ext/ext-base.js" />
    <script src="../js/ext-2.0.2/ext-all.js" />
  • oo.client 패키지의 모듈 파일의 일부를 아래와 같이 수정한다.
    public void onModuleLoad(){
      Panel mainPanel = new Panel();
      mainPanel.setTitle("Hello World!");
      mainPanel.setHeight(300);
      mainPanel.setWidth(500);  
      RootPanel.get().add(mainPanel);
    }

  • war 디렉토리 아래의 html파일의 아래 부분을 삭제한다.
    <h1>Web Application Starter Project</h1>
    <table align="center">
      <tr>
        <td colspan="2" style="font-weight:bold;">Please enter your name:</td>
      </tr>
      <tr>
        <td id="nameFieldContainer"></td>
        <td id="sendButtonContainer"></td>
      </tr>
    </table>

  • 플러그인이 제공하는 Run As Web Application을 실행해 보면 작동하는 화면이 보인다.
  • 리모트 서비스를 만들어 본다. oo.client 패키지의 모듈 파일을 아래와 같이 수정한다.
       private Label label = new Label("Today is: ");
       private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
        public void onModuleLoad() {
            Button button = new Button("Get Date");
            Panel panel = new Panel();      
            button.addListener(new ButtonListenerAdapter(){
              public void onClick(Button button, EventObject e) {
                    greetingService.getDate(new NumberCallback());
                }
            });     
            panel.add(label);
            panel.add(button);
            RootPanel.get().add(panel);
        }
        public class NumberCallback implements AsyncCallback {
            public void onFailure(Throwable error) {
                MessageBox.alert("Getting date failed");
            }
            public void onSuccess(Object resp) {
                label.setText("Today is: " + resp.toString());
            }
        }

  • GreetingService에 다음 코드를 추가한다.
    String getDate();
  • GreetingServiceAsync에 다음 코드를 추가한다.
    void getDate(AsyncCallback<String> numberCallback);
  • GreetingServiceImpl에 다음 코드를 추가한다.
    public String getDate() {
         Date date = new Date();
         date.setTime(System.currentTimeMillis());
         SimpleDateFormat sDate = new SimpleDateFormat("MM월 dd일 HH시 mm분 ss초");
         return sDate.format(date);
     }
  • Cypal studio는 OO.gwt.xml, web.xml 파일을 수정하고, RemoteService와 Async파일의 메소드를 자동으로 맞춰주는 기능이 있다.
    그 외에는 Google 플러그인과 큰 기능차이가 없다.

    [출처] GWT-Ext 개발 기초|작성자 또식이

Posted by 1010
98..Etc/GWT2009. 9. 27. 18:35
반응형

Home

GWT-Ext is a powerful widget library that provides rich widgets like Grid with sort, paging and filtering, Tree’s with Drag & Drop support, highly customizable ComboBoxes, Tab Panels, Menus & Toolbars, Dialogs, Forms and a lot more right out of the box with a powerful and easy to use API. It uses GWT and Ext.

GWT-Ext 2.0.5 has been released. Grab the distribution from the Downloads area.  GWT-Ext 2.0.5 supports GWT 1.5 final (1.5.2), Firefox3 and Chrome.

Note that GWT-Ext only supports Ext 2.0.2 that has a LGPL license option.

Check out the wiki for setup and install instructions.

GWT-Ext 2.0 Showcase

Posted by 1010
98..Etc/GWT2009. 9. 27. 18:16
반응형

* 이클립스 3.5 를 기준으로 작성되었습니다.

1. 이클립스 3.5 다운로드 및 압축풀기
- http://www.eclipse.org/downloads/

2. Google Web Toolkit 다운로드
- http://code.google.com/intl/ko/webtoolkit/

3. GWT 이클립스 플러그인 설치
[Help] > [Install New Software...] 메뉴 선택
Work with 에 http://download.instantiations.com/D2GWT/continuous/latest/update/E-3.5/ 입력한 후 엔터키를 누른다.
GWT Desinger를 선택한 후 설치를 진행한다.
 

4. 다음과 같이 Dynamic Web Project를 생성한다.
5. 생성된 프로젝트를 GWT 프로젝트로 변환한다.
6. 다음과 같이 새로운 GWT Module을 추가한다. 

7. Run Configurations를 통해서 6번에서 추가한 모듈을 다음과 같이 GWT Application으로 설정한다.

8. 7에서 Run 버튼을 클릭하면 첫 GWT Application이 실행된다.

Posted by 1010
98..Etc/GWT2009. 9. 27. 17:32
반응형
Posted by 1010
98..Etc/GWT2009. 9. 27. 17:26
반응형

구글의 Plug-in은 위와 같이 Eclipse의 세가지 버전(3.3, 3.4, 3.5)을 지원한다.
이중 3.5버전인 Galileo는 최근에 구글에서 Plug-in을 제공하기 시작했다. (얼마전까지는은 Eclipse 3.5버전에서는 사용하지 못했다는 말이다.)
 
어떻게 설치하고, 환경을 만드는지는 "Google App Engine Java SDK 1.2.1 Released" 의 글을 참조하면 된다. (처음 Eclipse를 사용하는  사람은 "Google App Engine SDK 설치 및 실행"를 참조)

Eclipse 3.5인 Galileo는 이전 버전들과 Plug-in 설치 방식이 약간 달라졌다.
이전 3.4 버전에서 제공 하던 방식은 플러그인을 찾는 방식이 편하지 많은 않았다. 왜냐하면, 백그라운드에서 사용자가 입력한 플러그인 이름을 실시간으로 키 입력시마다 추천해 주는 방식을 제공했는데, 네트워크에서 대기하는 시간에 대한 부담을 사용자가 가져야 했기 때문이다. 3.5 버전에서는 이러한 것들이 개선되어 졌다.

아래는 Eclipse 3.5에 GAE 플러그인을 설치한 것들을 캡쳐한 화면이다.

Eclipse 3.5의 Help > Install New Software... 를 클릭하면 아래 화면이 나타난다.


위 화면에서 상단 오른쪽에 있는 "Add..." 버튼을 클릭하면 창이 나타나면 아래와 같이 "Name"과 "Location"을 입력하고 "OK"버튼을 누른다. (Name은 사용자가 원하는 이름을 넣으면 된다.)


입력한 주소(Location) 정보가 정확하면, 아래과 같이 설치 가능한 플러그인들 목록이 표시된다.
모두 설치를 할것이므로 아래처럼 모두 체크해서 선택하면 된다. 그리고 "Next"버튼을 클릭한다.


위에서 "Next" 버튼을 클릭하면, 아래와 같이 상세 정보들이 나타난다. 다시 "Next"버튼을 클릭한다.

설치할 플러그인들에 대한 Licese 정책에 동의 할 것인지를 묻는 창인데, 당연히 동의해야 한다.
만약 동의하지 않는다면, 설치가 안될테니까... ^^;;;

위에서 동의하고 "Finish"버트을 누루면, 아래와 같이 설치가 진행된다.



출처 : http://happyzoo.tistory.com/169
Posted by 1010
98..Etc/GWT2009. 9. 27. 16:55
반응형

GWT로 뭐 하나 개발할 일이 있어서, 이왕 하는거 정리도 할겸, 모르는 분들이 쉽게 할 수 있도록 할 겸, 정리한번 해 봅니다. 예전 안드로이드 처럼 연재가 끊길 수도 있으나, GWT는 이미 다 알고 있는 상태라~~~.

자~ 이제 시작하기 전에 준비물을 준비하자.

1. Java JDK 1.5 이상 (http://java.sun.com 에서 알아서 받으세요)
2. Eclipse 3.3 이상에 WebTools Platform 2.0 포함된거 (이것도 http://www.eclipse.org 에서 알아서 받으세요.)
3. Cypal Studio for GWT (요건 http://www.cypal.in/studio 에서 다운로드 받으면 됩니다.)
4. GWT 라이브러리 (요거는 구글에서 GWT 라고 치면 가장 첨에 나온다. 앞으로도 가장 첨에 안나올 리가 없다.)

Cypal 관련된 시스템 요구사항은 http://www.cypal.in/studiodocs#requirements 를 참조하기 바란다.

일단 자바랑 Eclipse 3.3은 다운로드 받아서 설치했다고 치고, Cypal studio랑 GWT 라이브로도 다운로드 받았다고 치고 시작하겠다.

다음의 순서에 따라서 세팅해 주기 바란다.

1. Cypal studio를 다운로드 받아서 압축파일을 풀면 4개의 jar 파일이 있는데, 그 파일을 이클립스 설치 위치/plugin 폴더에 몽땅  복사하고, 이클립스를 띄운다. (이클립스가 이미 띄워져 있는 상황에서는 다시 띄워라)

2. 이클립스를 띄웠으면, 메뉴에 Window --> Preferences를 눌러 Cypal Studio 라는걸 찾는다. (없으면 잘 찾아보기 바란다.)

3. Cypal Studio를 눌러서 보면, GWT 라이브러리의 Home 위치를 지정하는 입력 상자가 상단에 있는데 거기에 GWT 압축을 해제한 디렉토리를 지정해준다. (doc, samples 폴더가 하위에 있는 위치를 지정하면 된다.)

4. 이제 이클립스 플젝을 맹글어야 하는데, New project... 을 누른 후 플젝 종류를 선택하는 화면에서 Dynamic Web Project를 클릭한 후 Next를 누른다.

5. 그 다음에서 프로젝트 이름을 지정한 이후에 Configuration 지정하는 부분에서 drop down 메뉴를 내려서 "Cypal Studio for GWT"를 선택해야만 한다. (반드시 !!!!!)

6. 그 다음에 finish를 누르면 GWT를 맹글 수 있는 프로젝트 생성 및 초기 설정이 완료된다.


다음에는 GWT 샘플을 돌려보면서 GWT를 어떻게 사용할 수 있는지 알아보자.

백문이 불여일견이므로, GWT 샘플을 한번 돌려보자.

이클립스 메뉴에서 File --> New... --> Examples 를 선택한 다음, GWT Samples 를 선택한다.
(만약 Cypal이 정상적으로 깔리지 않았다면, 이 목록이 나타나지 않을 것이다.)

그 다음화면에서 다음과 같이 KitchenSink를 선택한다.

그 다음 Finish를 누르면, 해당 프로젝트의 Java Resources하단에 sample_src패키지가 생기고, 그 밑에 Kitchen Sink 샘플이 설치된다.

정상적으로 샘플이 저장되었다면, 해당 프로젝트를 선택한 상태에서 오른쪽 마우스를 클릭하고, Run As... --> Open Run Dialog... 을 클릭한다.

그러면 중간에 뻘건 가방 아이콘과 함께 GWT Hosted Mode Application 이라는 것이 있을 것이다.

만약 Kitchen Sink가 없다면, GWT Hosted Mode Application 을 더블클릭한다.

그러면 가장 위에 이름을 지정하는 곳이 있고, 원하는 이름을 입력한다.

Project와 Module 은 각각 본인의 프로젝트와 방금 추가한 모듈을 선택한다. Apply를 누르고 Run을 눌러보자.

정상적으로 지정이 되었다면, 다음의 두개 화면이 나타날 것이다.

하나는 Host 모드로 돌아가는 톰캣서버 콘솔이고 여기서 에러 메시지를 확인할 수 있다.

다른 하나는 결과를 확인하기 위한 브라우져다.

이제 GWT의 재미를 슬슬 느껴보자.~~~


출처 : http://www.tuning-java.com/92

Posted by 1010
98..Etc/GWT2009. 9. 27. 16:36
반응형
Eclipse를 이용하면 Java 애플리케이션을 좀더 쉽게 개발할 수 있다. GWT는 Eclipse 플러그인을 제공하는데, 이 플러그인을 이용하면 편리한 이클립스개발환경에서 개발및 디버깅을 할 수 있다.

Eclipse Google Plugin 설치하기

GWT Eclipse 플러그인은 eclipse의 software update 기능을 이용해서 설치할 수 있다.

설치는 eclipse 3.4를 기준으로 한다. 최초에는 eclipse 3.2 버전에 설치해보려고 했으나 실패했다. eclipse 사이트에 갔더니 3.5가 최신버전이였다. 이왕 하는거 3.5를 사용하면 어떨까 해서 정보를 찾아보았는데, 현재 gwt 1.6 버전은 3.5에서 작동하지 않는다고 했다. 약간 아쉽긴 하지만 걍 3.4로 밀고가기로 했다.
  1. Help 메뉴의 Software Update를 선택한다.
  2. Available Software 탭을 선택한다음 Add site를 클릭한다.
  3. Location 에 아래의 URL을 입력한다.

    http://dl.google.com/eclipse/plugin/3.4 
     
  4. 이제 Google Update Site for Eclipse 3.4를 선택하고 install 버턴을 클릭하면 된다.
Posted by 1010
98..Etc/GWT2009. 9. 27. 16:36
반응형
Eclipse를 이용하면 Java 애플리케이션을 좀더 쉽게 개발할 수 있다. GWT는 Eclipse 플러그인을 제공하는데, 이 플러그인을 이용하면 편리한 이클립스개발환경에서 개발및 디버깅을 할 수 있다.

Eclipse Google Plugin 설치하기

GWT Eclipse 플러그인은 eclipse의 software update 기능을 이용해서 설치할 수 있다.

설치는 eclipse 3.4를 기준으로 한다. 최초에는 eclipse 3.2 버전에 설치해보려고 했으나 실패했다. eclipse 사이트에 갔더니 3.5가 최신버전이였다. 이왕 하는거 3.5를 사용하면 어떨까 해서 정보를 찾아보았는데, 현재 gwt 1.6 버전은 3.5에서 작동하지 않는다고 했다. 약간 아쉽긴 하지만 걍 3.4로 밀고가기로 했다.
  1. Help 메뉴의 Software Update를 선택한다.
  2. Available Software 탭을 선택한다음 Add site를 클릭한다.
  3. Location 에 아래의 URL을 입력한다.

    http://dl.google.com/eclipse/plugin/3.4 
     
  4. 이제 Google Update Site for Eclipse 3.4를 선택하고 install 버턴을 클릭하면 된다.
Posted by 1010
98..Etc/GWT2009. 9. 27. 16:35
반응형
물론 이클립스에서는 아주 간단하게 대부분의 추가 기능을 장착할 수 있도록 지원합니다.
하지만 조금 크다고 하는 IT 관련 회사에서는 내부적으로 방화벽을 어찌나 잘 구축해 놓았던지 업데이트 관련한 네트웍을 거의 무용화 시켜 버리더군요.

그래서 이에 대해 조금이라고 고생을 해본 프로그램제공업자들은 로컬로 업데이트할 수 있는 방법을 제공하기도 합니다.
하지만 구글에서는 GWT(Google Web Toolkit)을 제공하면서 그렇게 하지 않았더군요. ㅎ..

GWT를 이용해보고자 하는 열망에 어느정도의 삽질을 통해 다음과 같은 방법을 찾았습니다.
언제쯤 이클립에서 몇번의 클릭만으로 원하는 기능을 장착하게 될런지.. ㅎ..

어쨋든..
일단 임시디렉토리를 하나 만들어 놓습니다.
저같은 경우는 "/GWT" 머 이렇게 만들어 놓았습니다.
그리고 여기에 하부디렉토리 두개를 만듭니다. "/GWT/features", "/GWT/plugins"

"/GWT"에 http://dl.google.com/eclipse/plugin/3.4/site.xml 를 다운받아서 옮겨놓습니다.
"/GWT/site.xml"이 생기겠죠.

다음..
"/GWT/features"에 아래 파일들을 다운받습니다.
"/GWT/plugins"에는 다음과 같은 파일들을 다운받습니다.


이제 다 되었네요.
이클립스의 Software Updates에 들어가서 Available Software 탭의 Add Site를 통해서 업데이트를 진행하면 됩니다.


Posted by 1010
98..Etc/GWT2009. 9. 27. 16:23
반응형

GWT 1.6이 나오면서 프로젝트 구조와 embeded Java Servlet (Jetty) server가 달라졌다.

게다가 Google에서 GWT를 위한 플러그인을 제공하므로 Cypal Studio를 사용할 필요가 없어졌으므로

Google 플러그인을 활용한 방법으로 수정한다.

참고: http://paulgrenyer.blogspot.com/2009/04/setting-up-gwt-ext-for-gwt-16-with.html


GWT - Google Web Toolkit(http://code.google.com/webtoolkit/)
  • 복잡한 AJAX 애플리케이션 개발을 손쉽게 해주는 프레임워크이다.
  • JAVA 코드로 작성하고 GWT 컴파일러가 자바코드를 자바스크립트로 변환한다. 모든 자바코드를 변환할 수 있는 것은 아니고, java.util, java.io 패키지의 기능들만 사용할 수 있다.
  • 구동되는 환경은 hosted mode와 web mode가 있다.

    • hosted mode: 컴파일 과정 없이 작성한 코드를 테스트하고 디버깅 할 수 있다. JVM환경의 GWT 브라우저에서 구동된다.
    • web mode: 컴파일러가 자바스크립트와 HTML파일을 생성하고, 이것을 웹브라우저로 구동한다.

GWT-Ext - GWT-Ext Widget Library(http://gwt-ext.com)
  • 강력하고 화려한 위젯 라이브러리. GWT와 자바스크립트 라이브러리 EXT(http://extjs.com/)를 활용하였다. http://extjs.com/에서 소개되는 Ext-GWT와는 다르다.

GWT-Ext with Eclipse

참고: http://code.google.com/eclipse/docs/getting_started.html

  • Eclipse plugin 설치
    Europa(3.3): http://dl.google.com/eclipse/plugin/3.3Ganymede(3.4): http://dl.google.com/eclipse/plugin/3.4
  • 이클립스 메뉴에서 File -> New -> Web Application Project 선택
  • 프로젝트와 패키지 이름을 넣고, Use Google App Engine 체크박스를 해제한다.
  • Run As -> Run Configurations에서 Automatically Select Unused Port의 체크박스를 체크한다.
  • 여기까지는 일반적인 GWT 애플리케이션의 실행 방법이다.
  • 다음 라이브러리를 다운로드 한다.

    • GWT-Ext(http://gwt-ext.com/download/)
      압축을 풀어 gwtext.jar파일을 프로젝트의 war\WEB-INF\lib 디렉토리에 넣는다.
    • war 디렉토리 아래에 js 디렉토리를 만든다.
    • Ext(http://gwt-ext.com/download/) 여기 링크에서 화면 아래쪽의 Ext 2.0.2 here의 here를 클릭해서 다운받는다.
      압축을 풀어 js 디렉토리에 넣는다.(디렉토리 2개 파일 4개만 하면 된다. (adapter/, resources/, ext-all.js, ext-all-debug.js, ext-core.js, ext-core-debug.js))
      (디렉토리가 이런 구조가 되도록 주의 js/ext-2.0.2/resources/...)
  • 프로젝트에 gwtext.jar를 추가한다.
    프로젝트를 우클릭한 후,
    Properties -> Java Build Path -> Libraries에서 Add JARs를 클릭한 다음 방금 넣었던 gwtext.jar를 선택한다.
  • oo(프로젝트 이름).gwt.xml 파일에 아래 굵은글씨 부분을 추가한다.
    <inherits name='com.google.gwt.user.User'/>
    <inherits name='com.gwtext.GwtExt' /> ...
    <entry-point class='com.megadeth.client.MegaDeth'/>
    <stylesheet src="../js/ext-2.0.2/resources/css/ext-all.css" />
    <script src="../js/ext-2.0.2/adapter/ext/ext-base.js" />
    <script src="../js/ext-2.0.2/ext-all.js" />
  • oo.client 패키지의 모듈 파일의 일부를 아래와 같이 수정한다.
    public void onModuleLoad(){
      Panel mainPanel = new Panel();
      mainPanel.setTitle("Hello World!");
      mainPanel.setHeight(300);
      mainPanel.setWidth(500);  
      RootPanel.get().add(mainPanel);
    }

  • war 디렉토리 아래의 html파일의 아래 부분을 삭제한다.
    <h1>Web Application Starter Project</h1>
    <table align="center">
      <tr>
        <td colspan="2" style="font-weight:bold;">Please enter your name:</td>
      </tr>
      <tr>
        <td id="nameFieldContainer"></td>
        <td id="sendButtonContainer"></td>
      </tr>
    </table>

  • 플러그인이 제공하는 Run As Web Application을 실행해 보면 작동하는 화면이 보인다.
  • 리모트 서비스를 만들어 본다. oo.client 패키지의 모듈 파일을 아래와 같이 수정한다.
       private Label label = new Label("Today is: ");
       private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
        public void onModuleLoad() {
            Button button = new Button("Get Date");
            Panel panel = new Panel();      
            button.addListener(new ButtonListenerAdapter(){
              public void onClick(Button button, EventObject e) {
                    greetingService.getDate(new NumberCallback());
                }
            });     
            panel.add(label);
            panel.add(button);
            RootPanel.get().add(panel);
        }
        public class NumberCallback implements AsyncCallback {
            public void onFailure(Throwable error) {
                MessageBox.alert("Getting date failed");
            }
            public void onSuccess(Object resp) {
                label.setText("Today is: " + resp.toString());
            }
        }

  • GreetingService에 다음 코드를 추가한다.
    String getDate();
  • GreetingServiceAsync에 다음 코드를 추가한다.
    void getDate(AsyncCallback<String> numberCallback);
  • GreetingServiceImpl에 다음 코드를 추가한다.
    public String getDate() {
         Date date = new Date();
         date.setTime(System.currentTimeMillis());
         SimpleDateFormat sDate = new SimpleDateFormat("MM월 dd일 HH시 mm분 ss초");
         return sDate.format(date);
     }
  • Cypal studio는 OO.gwt.xml, web.xml 파일을 수정하고, RemoteService와 Async파일의 메소드를 자동으로 맞춰주는 기능이 있다.
    그 외에는 Google 플러그인과 큰 기능차이가 없다.

이 글은 스프링노트에서 작성되었습니다.


출처 : http://uratang.egloos.com/2136671

Posted by 1010
98..Etc/ASP.NET2.02009. 9. 3. 20:58
반응형

ASP 내장 객체

   강좌 최초 작성일 : 1999년 x월 x일
   강좌 최종 수정일 : 2001년 7월 17일

   작성자 : Taeyo(김 태영)
   편집자 : Taeyo(김 태영)

   강좌 제목 : Request Object

Request Object

Request Object는 주로 사용자로부터 정보를 전달 받을때 사용되는 개체입니다우리는 ASP 라는 서버 사이드를 공부하는 것이기에 모든 관점은 서버쪽에서 바라보는 습관이 필요함다

Request 라는 말은 "요청하다" 이지만 이것은 서버측에서 요청한다는 의미입니다... 즉, 사용자가 서버로 보내오는 요청이나 데이터를 얻어내는 역할을 하는 것이 바로 이 Request 개체가 담당하는 역할이지요..

이 개체가 가지고 있는 주요기능은 다음 표와 같습니다만...아무래도 강좌에서 이 개체의 컬렉션등을 구체적으로  모두 알아보기에는 어려움이 있기에...우린 여기서 그 중 중요한 몇가지만 체크하려 합니다....  (더 깊숙한 내용은 책이나 MSDN을 참고해 주세요)

Collection (컬렉션)
ClientCertificate 사용자가 페이지나 리소스를 액세스할 때 서버로 전달한 클라이언트 증명서에 있는 모든 필드와 엔트리값(읽기 전용)
Cookies 사용자의 시스템에서 요청과 함께 전달된 모든 쿠키값
Form 폼 요청으로 전송된(POST 사용) 모든 HTML 컨트롤 요소 값
QueryString 사용자 요청에서 URL에 추가된 모든 이름/값 쌍들이나, GET 방식이 사용된 폼에 있는 HTML 컨트롤 요소값들(읽기 전용)
ServerVariables 클라이언트로부터 이들의 요청과 함께 전달된 모든 HTTP 헤더 값들과 웹 서버의 여러 가지 환경 변수값들(읽기 전용)

Property (속성)
TotalBytes 사용자에 의해 전송된 요청의 본문에 있는 바이트들의 총 수(읽기전용)

Method (메소드)
BinaryRead(count) 데이터가 POST 요청의 일부로 서버로 전송될 때, 사용자 요청으로부터 count 바이트의 데이터를 얻어낸다. 이것은 Variant 배열로 반환되며 ASP 코드가 이미 Request.Form 컬렉션을 참조했으면 이 메소드는 사용될 수 없다. 마찬가지로 여러분이 BinaryRead 메쏘드를 사용했으면 Request.Form 컬렉션도 사용할 수 없게 된다. 둘 중에 하나만이 사용

위의 표에서 굵게 처리한 것들이 Request 개체의 자주 쓰이는 것들입니다.가장 많이 쓰이는 것이 바로 QueryString, Form 입니다만...아마도 이들을 명시해서 사용하는 분은 없을 것입니다... 반드시 명시할 필요는 없기 때문이지요...  ^^   그 이야기는 이따가 다시 하시고 하구요.. 이제 한번 조금은 더 구체적으로 알아볼까요?


1. QueryString & Form

이 컬렉션은 한 페이지에서 다른페이지로 GET 방식으로 데이터를 보낼때, 그 클라이언트가 보낸값을 알아내기 위해 쓰입니다. 간단하게 예를 코드로 보면 다음과 같은 코드를 통해서 알 수 있습니다.

Form.htm

<html>
<body>
    <form Action="Result.asp" METHOD="GET">
        이름 : <INPUT TYPE="Text" NAME="name"><br>
        나이 : <INPUT TYPE="Text" NAME="age"><br>
    <INPUT TYPE="Submit" NAME="Enter" Value="확인">
    </form>
</body>
</html>

Result.asp

<html>
<body>
    이름은 <%=Request.QueryString("name")%> 이구요..<br>
    나이는 <%=Request.QueryString("age")%> 입니다
</body>
</html>

각각의 페이지를 작성해서... 웹 서버의 디렉토리에 올리고...  ^^Form.htm 부터 로딩해서 살펴보면,... 각각의 폼안의 컨트롤에 입력한 값이..Result.asp에 제대로 찍혀나오는 것을 볼 수 있을 것입니다.

중요한 것은 폼안의 컨트롤들의 이름과 Request.QueryString 할 때의 이름이 같아야 한다는 겁니다.이 이름은 반드시 맞추어 주셔야만 합니다. 반드시요.. 안 그러면, 그 값으로 NULL이 나오게 되기에 문제가 될 수 있습니다.

그리고, 위의 소스에서는 Form.htm 페이지의 폼 태그안에서..그 폼의 Method를 GET으로 준 것을 볼 수가 있습니다. 만일, 위처럼 GET 방식으로 데이터를 전송한다면반드시 ASP 측에서는 Request 개체의 QueryString로 그 값을 받아야 합니다.  ^^QueryString 이란 메소드가 바로 GET 방식으로 넘어오는 데이터를 서버측에서 얻어내는 역할을 하니까요

하지만, GET 방식으로 넘어오는 데이터들은 그다지 보안에 좋지 못합니다.이러한 데이터들은 브라우저의 URL바에 그 넘어오는 값이 모두 노출되기 때문이지요...

해서, 그보다는 POST 방식으로 데이터를 전송하는 것이 추천되는데..폼을 통해서 데이터를 전송할 경우 폼의 Method를 POST 로 지정해 주게되면 해당 데이터들이 URL의 꼬리에 붙어서 전송되는 것(브라우저의 URL바에 다 보임)이 아니라HTTP 헤더안에 포함되어져 오기에 조금은 보안적인 데이터 전송방법이라고 볼 수 있지요..물론, 완전한 보안적인 방법은 아니구요. QueryString 에 비하면 그렇다는 것입니다. ^^

이 방법은 뭐 많이 바꿀 것이 없습니다. 단지, 위의 소스에서 Form 태그안의 Method를 POST로만지정하면 그게 전부이지요..  ^^ 위의 소스를 POST 방식으로 바꾼 소스를 한번 보입시다.

Form.htm

<html>
<body>
    <form Action="Result.asp" METHOD="POST">
        이름 : <INPUT TYPE="Text" NAME="name"><br>
        나이 : <INPUT TYPE="Text" NAME="age"><br>
        <INPUT TYPE="Submit" NAME="Enter" Value="확인">
    </form>
</body>
</html>

Result.asp

<html>
<body>
    이름은 <%=Request.Form("name")%> 이구요..<br>
    나이는 <%=Request.Form("age")%> 입니다
</body>
</html>

소스중에 굵고, 빨갛게 처리된 부분이 수정된 부분입니다. 두 페이지 모두 다음과 같은 결과를 가져다 주기는 하지요...


단지 중요한 것은 하이퍼링크로 정보를 보낼때는 form을 쓰지못하고 반드시 Querystring를 써야만 한다는 것입니다. 하이퍼링크를 통해서 넘어오는 데이터는 GET 방식으로 넘어오게 되기에 말입니다.

하지만, 이 두가지 컬렉션 QueryString, Form 을 반드시 명시해 주어야 하는 것은 아닙니다..GET 방식으로 넘어오던, POST 방식으로 넘어오던 그 데이터를 서버측에서 얻어내기 위해서는

GET : Request.QueryString("...")POST : Request.Form("...")
GET, POST : Request("...")

와 같이 할 수 있다는 뜻입니다. 고로, 위의 Result.asp 소스는... 폼에 GET 방식이던, POST 방식이던지에 무관하게다음처럼 작성할 수 있다는 것이지요.

Result.asp

<html>
<body>
    이름은 <%=Request("name")%> 이구요..<br>
    나이는 <%=Request("age")%> 입니다
</body>
</html>

이 방법은 간단하기는 하지만, 그다지 서버의 성능에 좋지 못한 방법입니다...고로, 튜닝시에는 반드시 제대로 된 컬렉션의 이름을 지정하는 것이 필요합니다.

그러니 첨부터 프로그래밍시에 QueryString 이나 Form 을 사용해주는 것이 바람직합니다.개발자에게 가장 귀찮은 방법이 가장 빠른 방법이고는 합니다..  ^^


2. ServerVariables

Servervariable는 서버자체의 CGI버전이나 PORT, 로그인 유저명,IP주소등을 알려주는 컬렉션입니다.만일, 현재 서버의 웹 서버 버전을 알고 싶다면 다음처럼 하시면 됩니다..

Request.Servervariables("SERVER_SOFTWARE") 혹은 Request("SERVER_SOFTWARE") 처럼 사용하면 된답니다. 하지만, 역시 Request("SERVER_SOFTWARE") 라고 하는 방법은 서버의 성능에좋지 못합니다. 가급적 Request.Servervariables("SERVER_SOFTWARE") 라고 사용하세요

이 컬렉션을 사용해서 우리가 개발자의 입장에서 쓸만한 것은 사용자의 접속 IP 주소를 알아오는

Request.Servervariables("REMOTE_ADDR")

가 있습니다. 그리고, 사용자의 브라우저나 OS 버전을 알 수 있게 해주는

Request.Servervariables("HTTP_AGENT")

정도입니다. 이것은 나름대로 유용한 정보이지요...  ^^그렇다면, 위의 몇 가지 외에 얻어올 수 있는 또 다른 정보들로는 어떤 것들이 있을까요?그것이 사정없이 궁금해 지지 않나요? 하하... 궁금해 지지요?해서 따로 강좌를 준비해 두었습니다.

아래의 링크를 눌러 이 컬렉션의 활용법을 좀 더 알아봅시다. 이 링크를 누르신다면 지금 접속하신 분(당신!!!) 의 접속사항을 보실수 있습니다.

ServerVariables 활용법

출처 : http://www.taeyo.pe.kr/lecture/3_beginner_Objects/Request.htm

Posted by 1010
98..Etc/70.JEUS2009. 8. 20. 17:25
반응형
출처 : http://searcher.tistory.com/entry/Jeus-webtob%EC%9D%98-%EB%AA%A8%EB%93%A0%EA%B2%83%ED%8E%8C

이 문서는 ww.tmax.co.kr 에서 개발/배포하는

웹서버(WebToB)와 웹어플리케이션서버(JEUS)의 설치 및 시동, 연동, 경로설정에 관한 자료입니다.

(버젼 : JEUS4.2, WEBTOB3.1.6(build3), j2sdk1.4.1_07)

 

 

### 설치/시동/테스팅/종료 ###

----------------------------------------------------------------------------------------

1. 필요 프로그램

- j2sdk1.4.1_07 (http://java.sun.com)       # j2sdk1.4.1_07 이하 버젼 권장 (1.4.2버젼대에서는 문제발생할 수 있음)

- jeus42.exe (http://www.tmax.co.kr)

- webtob_3.1.6(build3).exe (http://www.tmax.co.kr)

----------------------------------------------------------------------------------------

2. j2sdk1.4.1_07 설치

- path 맨 앞에 C:/jdk1.4.1_07/bin 설정

- classpath에 . 설정

----------------------------------------------------------------------------------------

3. JEUS42 설치

- JEUS42.exe를 실행 

  (windows2003 서버의 경우 installing... uninstall부분에서 정지시는 windows2000호환성모드로 다시 실행)

- http://www.tmax.co.kr의 download링크를 클릭 (회원가입필요)

  JEUS license를 신청 -> 이메일을 통해 license부여받음 (90일 사용가능)

  부여받은 license파일을 제우스홈\license에 복사 (덮어쓰기)

- 설치 후 다음 세개의 파일을 자신의 환경에 맞게 편집

  1) 제우스홈\config\노드명\JEUSMain.xml 

  2) 제우스홈\webhome\servlet_home\webapps\examples\web-inf\web.xml
  3) 제우스홈\config\노드명\노드명_servlet_engine1\WEBMain.xml

-------------------------------------------------------------------------------------

4. webtob3.1.6 설치

- webtob_3.1.6(build3).exe 실행하여 설치 

  (windows2003에서 installing... uninstall부분에서 정지시는 windows2000호환성모드로 다시 실행)

- http://www.tmax.co.kr의 download링크를 클릭 (회원가입필요)

  WEBTOB license를 신청 -> 이메일을 통해 license.dat부여 (90일 사용가능)

  부여받은 license.dat파일을 c:\webtob\license에 복사 (덮어쓰기)

-------------------------------------------------------------------------------------

5. PATH 설정 후 리부팅 : 자신의 환경에 맞게 설정하고 시스템을 리부팅

  (Program Files처럼 공백을 포함한 디렉토리를 가진 경로는 맨뒤로...)

ex) PATH=C:\J2SDK1.4.1_07\bin;C:\webtob\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOW
S\System32\Wbem;C:\webtob\bin;C:\Jeus42\lib\etc\ant\bin;C:\Jeus42\bin;C:\Jeus42\lib\system

-------------------------------------------------------------------------------------

6. WEBTOB 환경설정

  1) 웹투비홈\config\sample.m을 카피해서 http.m을 생성

  2) wscfl -i http.m을 커맨드창에서 실행 (webtob 환경설정)

  정상결과 예)

        Current configuration:
                Number of client handler(HTH) = 1
                Supported maximum user per node = 975
                Supported maximum user per handler = 975
        CFL is done successfully for node(노드명(노드명))

---------------------------------------------------------------------------------------

7. 시동

1) webtob를 실행

- webtob 실행 :  wsboot

2) JEUS를 실행

- 우선 command창을 두개 띄웁니다.(제우스, 제우스관리자)

- 제우스창에 "jeus + 엔터"

- 제우스관리자창에 "jeusadmin 노드명 -U유져명 -P제우스패스워드 ->boot

- 제우스창에 에러(Exception)가 없다면 실행 성공!!!

--------------------------------------------------------------------------------------

8. 테스팅

- JEUS기본포트는 8088, webtob기본포트는 8080

- JSP 기본경로

제우스홈\webhome\servlet_home\webapps\examples
           http://127.0.0.1/examples/

- Servlet 기본경로

제우스홈\webhome\servlet_home\webapps\examples\WEB-INF\classes
    http://127.0.0.1/examples/

--------------------------------------------------------------------------------------

9. 종료

1) JEUS종료

- 제우스관리자창에 down -> jeusexit

2) WEBTOB종료

- 웹투비창에 wsdown -i

--------------------------------------------------------------------------------------

 

 

 

 

### JEUS/WEBTOB 연동하기 ###

--------------------------------------------------------------------------------------

1. webtob 설정

   - 웹투비홈/config/http.m의 각 항목에 추가합니다.

   *NODE

       JSVPORT = 9900

   *SVRGROUP

       jsvg     NODENAME=노드이름, SVRTYPE=JSV

   *SERVER

      MyGroup    SVGNAME=jsvg, MinProc=10, MaxProc=10

   *URI

      uri2    Uri="/examples/", Svrtype=JSV

--------------------------------------------------------------------------------------

2. jeus 설정

   - 제우스홈/config/노드이름/노드이름_servlet_engine1/WEBMain.xml 수정

        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <hth-count>1</hth-count>
                <webtob-address>IP 혹은 127.0.0.1(동일서버에 JEUS와 WEBTOB존재시)</webtob-address>
                <registration-id>MyGroup</registration-id>
                <thread-pool>
                    <min>4</min>
                    <max>10</max>
                    <step>2</step>
                    <max-idle-time>30000</max-idle-time>
                    <max-wait-queue>4</max-wait-queue> 
                </thread-pool>
            </webtob-listener>
        </webserver-connection>


--------------------------------------------------------------------------------------

3. 제우스홈/bin/jeus.properties 조정

    - JEUS_WSDIR 부분을 주석처리 하거나 삭제

    - PATH 에서 $JEUS_HOME/webserver 부분도 제거

--------------------------------------------------------------------------------------

4. webtob 와 jeus 를 부팅 후 확인

   http://주소:8080/exapmples/index.jsp 에서 테스팅 페이지 보기

--------------------------------------------------------------------------------------

 

 

### DB 연동 ###

--------------------------------------------------------------------------------------

* MySQL 커넥션풀 샘플 (WEBMain.xml에 추가)

JEUS에서 제공하는 ConnectionPool은 JDBC Drive를 통해 얻은 Connection의 관리는 
엔진에서 해주는 것이므로 JDBC Driver를 $JEUS_HOME/lib/datasource 아래에 두고
DBConnectionPool은 container.xml에 DataSource는 JeusMain.xml에 다음과 같이 
설정을 하시면 사용하실 수가 있습니다. 
 
1) DBConnectionPool
------------------------------------------------------------------------------
<DBConnectionPool MaxUseCount="-1" 
                  ConnectionPoolType="shared" 
                  CloseDelayMillis="-1" 
                  MaxActiveTimeSecs="-1" 
                  ConnectionPoolID="mysql-shared" 
                  ConnectionArguments="user=root;password=" 
                  DriverClassName="org.gjt.mm.mysql.Driver" 
                  DynamicIncrement="true" 
                  ConnectionURL="jdbc:mysql://localhost:3306/mysql" 
                  LoginDelayMillis="-1" 
                  CloseLongActiveConnection="false" 
                  ConnectionTimeOutSecs="10"> 
        <DBPoolControl MaxCapacity="30" 
                   InitCapacity="20" 
                   MaxIdleTimeSecs="300" 
                   IncrementRate="4" /> 
        <DBAConnection ForcedClose="false" />
</DBConnectionPool>
 
 
2) DataSource
------------------------------------------------------------------------------
<DataSource> 
    <Database> 
            <Vendor>others</Vendor> 
            <ExportName>mysql</ExportName> 
            <DataSourceClassName>
                jeus.jdbc.driver.blackbox.BlackboxConnectionPoolDataSource
            </DataSourceClassName> 
            <Property> 
                <Name>URL</Name> 
                <Type>java.lang.String</Type> 
                <Value>jdbc:mysql://localhost:3306/mysql</Value> 
            </Property> 
            <Property> 
                <Name>DriverClassName</Name> 
                <Type>java.lang.String</Type> 
                <Value>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</Value> 
            </Property> 
            <Property> 
                <Name>Password</Name> 
                <Type>java.lang.String</Type> 
                <Value></Value> 
            </Property> 
            <Property> 
                <Name>User</Name> 
                <Type>java.lang.String</Type> 
                <Value>root</Value> 
            </Property> 
            <DataSourceType>ConnectionPoolDataSource</DataSourceType> 
            <ConnectionPool> 
                <MinPoolSize>4</MinPoolSize> 
                <MaxPoolSize>4</MaxPoolSize> 
                <IncreasingStep>1</IncreasingStep> 
                <ResizingPeriod>10</ResizingPeriod> 
                <OperationTimeout>30000</OperationTimeout> 
                <WaitForFreeConnection> 
                    <WaitingTime>10000</WaitingTime> 
                </WaitForFreeConnection> 
            </ConnectionPool> 
        </Database> 
  </DataSource>
--------------------------------------------------------------------------------------

* Oracle 커넥션풀 샘플 (JEUSMain.xml의 </node>하단에 추가)

    <resource>
        <data-source>
            <database>
                <vendor>oracle</vendor>
                <export-name>오라클UID</export-name>
                <data-source-class-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-class-name>
                <data-source-type>DataSource</data-source-type>
                <database-name>디비명</database-name>
                <data-source-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-name>
                <network-protocol>tcp</network-protocol>
                <user>scott</user>
                <password>tiger</password>
                <port-number>1521</port-number>
                <server-name>아이피 또는 127.0.0.1</server-name>
                <driver-type>thin</driver-type>
                <connection-pool>
                    <pooling>
                        <max>20</max>
                        <step>1</step>
                        <period>500000</period>
                    </pooling>
                </connection-pool>
            </database>
        </data-source>
    </resource>

--------------------------------------------------------------------------------------

* DB2

  1) JEUS 3.x ($JEUS_HOME/config/<NODENAME>/JeusMain.xml
        <Database> 
            <Vendor>db2</Vendor> 
            <ExportName>db2local</ExportName> 
            <DatabaseName>SAMPLE</DatabaseName> 
            <DataSourceClassName>COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource</DataSourceClassName>
            <DataSourceName/> 
            <ServiceName/> 
            <Description/> 
            <NetworkProtocol/> 
            <Password>jeus2013</Password> 
            <PortNumber>포트번호</PortNumber> 
            <ServerName>DB서버 IP</ServerName> 
            <User>db2inst1</User> 
            <DataSourceType>LocalXADataSource</DataSourceType> 
            <ConnectionPool> 
                <MinPoolSize>2</MinPoolSize> 
                <MaxPoolSize>4</MaxPoolSize> 
                <IncreasingStep>1</IncreasingStep> 
                <ResizingPeriod>600000</ResizingPeriod> 
                <OperationTimeout>30000</OperationTimeout> 
                <WaitForFreeConnection> 
                    <WaitingTime>10000</WaitingTime> 
                </WaitForFreeConnection> 
            </ConnectionPool> 
        </Database>  
  2) JEUS 4.x ($JEUS_HOME/config/<NODENAME>/JEUSMain.xml
           <database>
                <vendor>db2</vendor>
                <export-name>db2XADatasource1</export-name>
<data-source-class-name>COM.ibm.db2.jdbc.DB2XADataSource</data-source-class-name>
                <data-source-type>XADataSource</data-source-type>
                <database-name>sample</database-name>
                <description>Customer DB</description>
                <password>db2inst1</password>
                <encryption>false</encryption>
                <port-number>포트번호</port-number>
                <server-name>DB서버 IP</server-name>
                <user>db2inst1</user>
                <connection-pool>
                    <pooling>
                        <min>2</min>
                        <max>4</max>
                        <step>1</step>
                        <period>600000</period>
                    </pooling>
                    <wait-free-connection>
                        <enable-wait>false</enable-wait>
                        <wait-time>10000</wait-time>
                    </wait-free-connection>
                    <operation-to>30000</operation-to>
                </connection-pool>
            </database>
--------------------------------------------------------------------------------------


 

 

### TIPS ###

--------------------------------------------------------------------------------------

* 파일경로설정

1) 파일 실제경로 (기본값)

- servlet : 제우스홈\webhome\servlet_home\webapps\examples\WEB-INF\classes

- jsp : 제우스홈\webhome\servlet_home\webapps\examples

2) 기존의 examples 컨텍스트 이외에 새로운 aaa라는 컨텍스트를 추가하는 방법 (컨텍스트 설정법)
- WEBMain.xml에서 다음 부분을 추가한다. 
  <context> 
    <context-name>aaa</context-name> 
    <context-path>/aaa</context-path> 
  </context> 
- aaa 컨텍스트의 DD(deployment descriptor)파일을 작성 
  제우스홈\config\노드명\[SERVLET_ENGINE_NAME]\jeus-web-dd_examples.xml 파일을 jeus-web-dd_aaa.xml 파일로 복사  

  하여 편집. context-name, docbase 만 설정하면 됩니다. WEBMain.xml의 이름과 동일해야 함. 
  <?xml version="1.0"?> 
  <!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN" 
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd"> 
  <jeus-web-dd> 
    <context> 
        <context-name>aaa</context-name> 
        <docbase>서버의 물리적 절대경로</docbase> 
        <auto-reload> 
            <enable-reload>true</enable-reload> 
            <check-on-demand>true</check-on-demand> 
        </auto-reload> 
    </context> 
  </jeus-web-dd> 
- WebtoB의 환경설정파일(http.m)의 URI 절에 aaa 컨텍스트 경로를 다음과 같이 추가한다. 
  *URI 
  uri8 Uri = "/aaa/",Svrtype = JSV 
- WebtoB의 환경파일 수정 후에는 반드시 환경파일 컴파일 후 WebtoB를 재기동 : wscfl -i http.m 
- JEUS 를 재기동



--------------------------------------------------------------------------------------

* index.jsp를 자동으로 인식시키려면

- 제우스홈\config\노드명\[SERVLET_ENGINE_NAME]\webcommon.xml 파일에 index.jsp추가

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>

--------------------------------------------------------------------------------------

* jspwork 디렉토리 변경

1. JEUS 3.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/container.xml의
<JSPEngine> 태그 안에 JspWorkDir을 설정하면 됩니다.
<Container>
  ...
  <ContextGroup>
    ...
    <JSPEngine ... 
      JspWorkDir="/app/jwork" 
      ...
    />
2. JEUS 4.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/WEBMain.xml의
<jsp-engine> 태그 안에 <jsp-work-dir>를 설정하면 됩니다.
<web-container>
  <context-group>
    ...
    <jsp-engine>
      ...
      <jsp-work-dir>/app/jwork</jsp-work-dir>
      ...
    </jsp-engine>
--------------------------------------------------------------------------------------

* 폴더관리 (webtob, jeus 연동시)

- image, js, css, html 등은WebToB홈\docs 에 폴더로 관리해서 WEBTOB가 처리

- jsp, servlet은 context를 별도 설정 (컨텍스트 설정법 참조)해서 JEUS가 처리

--------------------------------------------------------------------------------------

* 오라클 데이터베이스 사용시 C:/jeus/lib/datasource 폴더에 classes12.zip 복사

--------------------------------------------------------------------------------------

* trouble shooting

- Out Of Memory 에러

  JVM에서 사용할 수 있는 memory가 부족할 때 발생합니다. 
  이것을 해결하는 방법으로는 버전별로 다음과 같이 JEUS 환경 파일에서
  추가하면 됩니다. -Xms가 min 값이고 -Xmx가 max 값입니다.
  1) JEUS 3.x ($JEUS_HOME/config/<HOSTNAME>/JeusMain.xml)
  <JeusSystemConfig>
      <NodeConfig>
          ...
          <EngineContainer>
              ...
              <CommandOption>-Xms256m -Xmx256m<CommandOption>
  2) JEUS 4.x ($JEUS_HOME/config/<HOSTNAME>/JEUSMain.xml)
  <jeus-system>
      <node>
          ...
          <engine-container>
             ...
              <command-option>-Xms256m -Xmx256m<command-option>
- 노드명에 '-' 문자를 썼을 경우 또는 노드명에 공백이 있는 경우

  wscfl -i http.m 부분에서 오류 -> 노드명을 ""으로 묶어준다.

- 8080포트 사용하려고 할때 XDB 인증창이 뜬다면... 

  =====> 오라클의 XDB포트와 충돌하는 경우이므로 오라클의 XDB포트를 아래와 같이 변경해준다.

  [시작] -> [프로그램] -> [Oracle - OraHome92] -> [Configuration and Migration Tools] 

  -> [Database Configuration Assistant]   선택

  프로그램이 실행이되면.....

  [다음] 버튼을 Click -> [데이터베이스의 데이이터베이스 옵션구성] 선택 -> [사용 가능한 데이터베이스] 선택 

  -> [표준데이터베이  스 기능...] 버튼을 Click -> Oracle XML DB 의 [사용자 정의 ...] 버튼을 Click 

  -> [포트 번호 구성] 항목의 [사용자 정의 값 지정] 을 선택하셔서 HTTP 포트를 바꿔줍니다. 

  그리고 FTP 및 WebDAV 포트는 기본 설정인 2100 을 사용합니다. -> [확인] 버튼을 Click 하시고 

  [다음] 버튼을 Click 하셔서 데이터베이스를 실행할 기본모드를 선택하시고 [완료] 버튼을 눌러주시면 

  요약 메세지창이 뜨고 [확인] 버튼을 눌러주시면 XDB 의 Port 설정이 끝나게 됩니다.

- 다음과 같은 nullpointer exception 발생시

  <<__Exception__>>
  java.lang.NullPointerException
          at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:20
  5)
          at javax.servlet.GenericServlet.log(GenericServlet.java:300)
          at javax.servlet.GenericServlet.init(GenericServlet.java:257)
          at jeus.servlet.common.WebContainerManager.startContainer(WebContainerMa
  nager.java:538)
          at jeus.servlet.syscontext.SystemContext.startup(SystemContext.java:64)
          at jeus.servlet.deployment.SystemWebContainer.startup(SystemWebContainer
  .java:35)
          at jeus.server.SystemEngineController.startEngine(SystemEngineController
  .java:26)
          at jeus.server.JeusServer.boot(JeusServer.java:720)
          at jeus.server.ControlThread.acceptRequests(ControlThread.java:181)
          at jeus.server.ControlThread.run(ControlThread.java:86)
  java.lang.NullPointerException : null
  [SystemEngineController] fail to start System Engine [devserver_system_engine] :
   jeus.server.JeusServerException
  <<__!Exception__>>
  [2005.05.26 10:30:05][2] [ControlThread] command (210.117.198.62:1063) : disconn
  ect()

 =====> j2sdk1.4.1_07 이하 버젼으로 jdk를 다시 설치한 수 jeus/webtob 다시설치 해보세요.

- C:\Program Files\Java\j2re1.4.1_07\bin\server\jvm.dll 파일을 찾지 못할때

  =====> C:\j2sdk1.4.1_07\jre\bin\server 폴더를 카피해서 

             C:\Program Files\Java\j2re1.4.1_07\bin 폴더에 복사하세요.

--------------------------------------------------------------------------------------

* 클래스파일 변경시 실시간으로 변경 반영

소스가 WEB-INF/classes 아래에 있으면 리부팅이 필요 없습니다. 
단, 확인 하실 것이 container.xml(WEBMain.xml)에 context 태그 내에 AutoReload="true"가 설정되어 있으면 됩니다.
WEB-INF/lib/*.jar는 라이브러리와 같이 수정하지 않는다는 의미를 포함하고 있으므로(J2EE 스펙에 준하면...) 
jar 파일 내의 수정은  반드시 제우스를 리부팅 해야 적용됩니다.
--------------------------------------------------------------------------------------

* 인클루드된 파일 변경시 즉시 적용(<%@ include 자동 반영하기)

JSP의 include의 방식에는 <%@ include (action), <jsp:include (directive) 가 있다.

이 중 <jsp:include (action) 는 include하는 JSP(a.jsp)와 include되는 JSP(b.jsp)가 각각 별도의 servlet으로 변환된다.
a.jsp가 수행 도중 b.jsp의 include 구문을 만나면 b.jsp로 제어권이 넘어가서 수행된 후 다시 a.jsp로 제어권이 넘어와서 계속 수행된다.
그래서 b.jsp가 변경된 경우 변경사항이 자동으로 반영된다.

그리고 <%@ include (directive)는 include하는 JSP(a.jsp)와 include되는 JSP(b.jsp)가  하나의 servlet으로 변환되어서 a.jsp 내에 b.jsp가 완전히 포함되는 형태로 변환된다.
<%@ include (directive)의 목적은 JSP가 Servlet으로 변환되어 컴파일 될 때에
특정 코드나 text를 포함하기 위해서 이다.
따라서 b.jsp가 변경된 경우 a.jsp는 b.jsp가 변경되었는지 모르기 때문에 include 된 JSP의 변경시 이것을 인지하지 못한다.

<%@ include (directive) 를 사용하는 경우 JSP container가 include된 파일이 변경된 경우 자동으로 반영해 주기 위해서는 include하는 파일이 수행될 때 마다 include된 파일의 변경 여부를 검사해서 변경되었다면 include 하는 파일을 recompile 해 주어야 한다.
이것은 JSP container에게는 상당히 부하를 주는 작업이다.
그래서 JSP Spec에서는 include된 파일의 변경시 반영 여부는 명시하지 않고 있다.

JEUS에서는 개발과 운영의 편의성을 위해서 이것을 옵션으로 지정하여 변경시 자동 반영이 되게 설정할 수 있다.
하지만 이 옵션을 true로 설정하는 경우 불필요한 검사가 들어가게 되므로 수행 속도에 지장을 주게됩니다. 반드시 JSP 파일의 변경이 빈번한 경우에만 설정하면 된다.

1. JEUS 3.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/container.xml에 설정
---------------------------------------------------------
<Container>
    ...
    <ContextGroup>
        ...
        <JSPEngine ...
            CheckIncludedJspFile="true"
            ... />
2. JEUS 4.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/WEBMain.xml에 설정
---------------------------------------------------------
<web-container>
    ...
    <context-group>
        ...
        <jsp-engine>
            ...
            <check-included-jspfile>true</check-included-jspfile>
            ...
        </jsp-engine>
        ...
    </context-group>
    ...
</web-container>
--------------------------------------------------------------------------------------

* http.m 샘플

*DOMAIN
WebtoB

*NODE
devserver WEBTOBDIR="C:/webtob", 
  SHMKEY = 54000,
  DOCROOT="C:/tmax/webdocs",
  IndexName="index.jsp,index.html,index.htmm",
  PORT = "80", 
  LOGGING = "log1",
  ERRORLOG = "log2",
  HTH = 1,
  JSVPORT = 9900

*SVRGROUP
htmlg  NODENAME = devserver, SvrType = HTML
cgig  NODENAME = devserver, SVRTYPE = CGI
ssig  NODENAME = devserver, SVRTYPE = SSI
jsvg  NODENAME = devserver, SVRTYPE=JSV

*SERVER
html  SVGNAME = htmlg, MinProc = 3, MaxProc = 10
cgi  SVGNAME = cgig, MinProc = 3, MaxProc = 10
ssi  SVGNAME = ssig, MinProc = 3, MaxProc =10
MyGroup  SVGNAME=jsvg, MinProc=10, MaxProc=10

*URI
uri1  Uri = "/cgi-bin/", Svrtype = CGI
uri2  Uri="/examples/", Svrtype=JSV
uri3  Uri="/", Svrtype=JSV

*ALIAS
alias1  URI = "/cgi-bin/", RealPath = "C:/webtob/cgi-bin/"

*LOGGING
log1  Format = "DEFAULT", FileName = "C:/webtob/log/access.log", Option = "sync"
log2  Format = "ERROR", FileName = "C:/webtob/log/error.log", Option = "sync"

*EXT
htm  MimeType = "text/html", SvrType = HTML
--------------------------------------------------------------------------------------

* JEUSMain.xml 샘플

<?xml version="1.0"?>
<!DOCTYPE jeus-system PUBLIC "-//Tmax Soft, Inc.//DTD JEUS Main Config 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-main-config.dtd">
<jeus-system>
    <node>
        <name>devserver</name>
        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <enable-webadmin>true</enable-webadmin>
        <system-log>
            <level>debug</level>
        </system-log>
        <engine-container>
            <name>container1</name>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
    </node>
</jeus-system>

--------------------------------------------------------------------------------------

* WEBMain.xml 샘플

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>MyGroup</group-name>
        <group-docbase>webapps</group-docbase>
        <session-config>
            <timeout>20</timeout>
            <shared>true</shared>
        </session-config>
        <logging>
            <error-log>
                <target>stdout</target>
                <level>information</level>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
            </error-log>
            <user-log>
                <target>file</target>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
            </user-log>
            <access-log>
                <target>file</target>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
        <context>
            <context-name>examples</context-name>
            <context-path>/examples</context-path>
        </context>
  <context> 
   <context-name>ngi</context-name> 
   <context-path>/</context-path> 
  </context> 
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <hth-count>1</hth-count>
                <webtob-address>127.0.0.1</webtob-address>
                <registration-id>MyGroup</registration-id>
                <thread-pool>
                    <min>4</min>
                    <max>10</max>
                    <step>2</step>
                    <max-idle-time>30000</max-idle-time>
                    <max-wait-queue>4</max-wait-queue> 
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
    </context-group>
</web-container>
--------------------------------------------------------------------------------------

 

 

 

### 실무 적용 예 (버츄얼호스팅 사용) ###

-------------------------------------------------------------------------------------- 

프로젝트 실제환경을 로컬에서 구현해 작업해야 하는 상황에서...

두대의 IBM서버로 돌아가는 JEUS/WEBTOB의 환경설정 입니다.

 

<<< 실제환경 >>>

---------------------------------------------------------------------------

- 서버1 : WindowsServer2003Standard, 웹서버 (WEBTOB)

- 서버2 : WindowsServer2003Standard, 웹컨테이너 (JEUS), DB(Oracle9i)

- 두 서버는 9999포트를 통해 연동한다.

- images,css,js는 서버1에 jsp,java는 서버2에 위치시킨다.

- 서버구조는 1 WEBSERVER, 2 CONTAINER (원래 4개에서 필요한 두개만 가동)

- 윈도우 hosts파일에 localhost2, localhost3 추가

----------------------------------------------------------------------------

 

<<< sample.m >>>

*DOMAIN
WebtoB

*NODE
realchokyCompaq
  WebtobDir="C:/webtob",
  Shmkey=54000,
  Docroot="C:/center",
  HTH=1,
  port="9900",
  JSVPort=9999,
  IndexName="index.jsp,index.htm,index.html",
  Logging="log1",
  ErrorLog="log2"

*VHOST
center
  NodeName="realchokyCompaq",
  HostName="localhost2",
  DocRoot="C:/center",
  Port="9900",
  SSLFlag=N,
  IndexName="index.jsp,index.htm,index.html"

admin
  NodeName="realchokyCompaq",
  HostName="localhost3",
  DocRoot="C:/admin",
  Port="9900",
  IndexName="index.jsp,index.htm,index.html"

*SVRGROUP
htmlg
  NodeName="realchokyCompaq",
  SvrType=HTML

jsvg
  NodeName="realchokyCompaq",
  SvrType=JSV,
  VHostName=center

jsvg2
  NodeName="realchokyCompaq",
  SvrType=JSV,
  VHostName=admin

*SERVER
html
  SvgName=htmlg,
  MinProc=30,
  MaxProc=60

Center
  SvgName=jsvg,
  MinProc=30,
  MaxProc=30,
  HttpInBufsize=0,
  HttpOutBufsize=0

Admin
  SvgName=jsvg2,
  MinProc=10,
  MaxProc=10,
  HttpInBufsize=0,
  HttpOutBufsize=0

*URI
images
  Uri="/images/",
  SvrType=HTML

center
  Uri="/",
  SvrType=JSV,
  VhostName=center

admin
  Uri="/",
  SvrType=JSV,
  VhostName=admin

*LOGGING
log1
  FileName="C:/webtob/log/access.log",
  Format="DEFAULT",
  Option="sync"

log2
  FileName="C:/webtob/log/error.log",
  Format="ERROR",
  Option="sync"

*EXT
htm
  Mimetype="text/html",
  Svrtype=HTML

jsp
  Mimetype="application/jsp",
  Svrtype=JSV

 

 

<<< JEUSMain.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-system PUBLIC "-//Tmax Soft, Inc.//DTD JEUS Main Config 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-main-config.dtd">
<jeus-system>
    <node>
        <name>realchokyCompaq</name>
        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <system-log>
            <level>debug</level>
        </system-log>
        <engine-container>
            <name>container1</name>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
        <engine-container>
            <name>container2</name>
            <engine-command>
                <type>servlet</type>
                <name>engine2</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
    </node>
    <resource>
        <data-source>
            <database>
                <vendor>oracle</vendor>
                <export-name>오라클UID</export-name>
                <data-source-class-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-class-name>
                <data-source-type>DataSource</data-source-type>
                <database-name>디비명</database-name>
                <data-source-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-name>
                <network-protocol>tcp</network-protocol>
                <user>아이피</user>
                <password>패스워드</password>
                <port-number>1521</port-number>
                <server-name>아이피 혹은 127.0.0.1</server-name>
                <driver-type>thin</driver-type>
                <connection-pool>
                    <pooling>
                        <max>20</max>
                        <step>1</step>
                        <period>500000</period>
                    </pooling>
                </connection-pool>
            </database>
        </data-source>
    </resource>
</jeus-system>

 

 

<<< WEBMain.xml (컨테이너 1) >>>

 

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>Center</group-name>
        <group-docbase>webapps</group-docbase>
        <servlet-home>c:\</servlet-home>
        <context>
            <context-name>Center</context-name>
            <context-path>/</context-path>
        </context>
        <session-config>
            <shared>true</shared>
            <timeout>20</timeout>
        </session-config>
        <webserver-connection>
            <webtob-listener>
                <listener-id>Center</listener-id>
                <port>9999</port>
                <output-buffer-size>0</output-buffer-size>
                <webtob-address>127.0.0.1</webtob-address>
                <thread-pool>
                    <min>30</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
        <logging>
            <error-log>
                <target>stdout</target>
                <buffer-size>0</buffer-size>
                <level>information</level>
            </error-log>
            <user-log>
                <buffer-size>0</buffer-size>
            </user-log>
            <access-log>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
    </context-group>
</web-container>

 

 

<<< jeus-web-dd_Center.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd">
<jeus-web-dd>
    <context>
        <context-name>center</context-name>
        <docbase>center</docbase>
        <auto-reload>
            <enable-reload>true</enable-reload>
            <check-on-demand>true</check-on-demand>
        </auto-reload>
    </context>
</jeus-web-dd>

 

 

 

<<< WEBMain.xml (컨테이너 2) >>>

 

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>Admin</group-name>
        <group-docbase>webapps</group-docbase>
        <servlet-home>c:\</servlet-home>
        <context>
            <context-name>Admin</context-name>
            <context-path>/</context-path>
        </context>
        <session-config>
            <shared>true</shared>
            <timeout>20</timeout>
        </session-config>
        <webserver-connection>
            <webtob-listener>
                <listener-id>Center</listener-id>
                <port>9999</port>
                <output-buffer-size>0</output-buffer-size>
                <webtob-address>127.0.0.1</webtob-address>
                <thread-pool>
                    <min>30</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
        <logging>
            <error-log>
                <target>stdout</target>
                <buffer-size>0</buffer-size>
                <level>information</level>
            </error-log>
            <user-log>
                <buffer-size>0</buffer-size>
            </user-log>
            <access-log>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
    </context-group>
</web-container>


 

 

<<< jeus-web-dd_Admin.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd">
<jeus-web-dd>
    <context>
        <context-name>admin</context-name>
        <docbase>admin</docbase>
        <auto-reload>
            <enable-reload>true</enable-reload>
            <check-on-demand>true</check-on-demand>
        </auto-reload>
    </context>
</jeus-web-dd>


--------------------------------------------------------------------------------------

 

 

이 문서는 실무에서 자주 사용되는 웹/웹어플서버인 JEUS/WEBTOB를 접하면서 생기게된

설정문제와 기타 문제들을 정리해볼 목적으로 만들어 졌습니다. 오류사항이 있으면 메일을 보내주세요.

기타 문의는 http://www.tmax.co.kr 개발자포럼을 이용하세요.
Posted by 1010
98..Etc/70.JEUS2009. 8. 20. 17:05
반응형
우선 webtob/config/http.m 파일을 열어서

변경전)
css  MimeType = "application/x-pointplus", SVRTYPE = HTML

변경후)
css  MimeType = "text/css", SVRTYPE = HTML



------------위에 않되는 경우----------------------

htc MimeType ="text/x-component" SvrType =HTML (추가)
#txt MimeType ="text/plain" SvrType =HTML (주석처리)

-
-----------------------------------------------

컴파일 하고 webtob 재시작 해주세요...

wscfl -i http.m


원인은 아래 잃어보세요...

하도 틀린 곳이 많아서 (특히,  MS IIS를 돌리는 곳 가운데) 어디를 딱히 찍어낼 수도 없습니다. text/css나 text/html, text/javascript 등을 http 헤더에 지정하지 않은 채로 파일을 내보내는 곳이 아주 많습니다.

이런 곳이 많은 이유 중 하나는 M$ IE가 http 표준을 무시하고 제멋대로 file type sniffer인지 뭔지 하는 것을 쓰면서 웹 제작자의 버릇을 아주 잘못 들여 놓았기 때문입니다. 표준을 지키는 것이 얼마나 중요한지 보여 주는 단적인 보기입니다.


http 헤더의 Content-Type에 지정한 값을 _무조건_ 믿어야 함에도 불구하고, MS IE는  그것을 믿지 않고 파일 확장자와 파일 첫 부분을 직접 들여다 보고서 제멋대로 파일의 MIME type을 결정합니다.   이 바람에 상당수의 웹 개발자들이 http content-type header field에 제대로 된 값을 지정하지 않은 채로 파일을 내보냅니다.  그럴 경우 서버는 디폴트 값을 쓰므로, html, css 등이  text/html이나 text/css 대신 application/octet-stream이란 머릿표를  달고 클라이언트로 보내집니다. 이런 Content-Type 헤더를 달고 온 파일에 대해 http 표준을 따르는 모질라와 같은 브라우저는 application/octetstream은 자체 처리할 수 없으므로 저장하라는 대화 상자를 띄웁니다. 또 어떤 경우는 text/html이나 text/css 자리에 text/plain이 붙어 있어서 iframe으로 포함시킨 html 문서의 소스가 그대로 보이는 경우도 있습니다.

    IIS이든 Apache이든 또다른 웹 서버이든 정적 문서는 확장자 별로 (apache는 필요하면 특정 파일에 대해서만 따로 MIME type을 지정할 수도 있습니다) 기본 MIME type을 지정할 수 있습니다. 웹 서핑 하다가 html 소스가 화면 일부에 보인다든지, MS IE로 볼 때에는 '광고'가 뜨던 부분에서 모질라는 파일을 저장하라는 대화 상자가 뜬다든지 하면 신고해 주십시오. 다 이런 문제 때문입니다.

   참, MS IE의 file type sniffer는 어떨 때에는 아주 엉터리입니다. 전에 제가 운영하던 곳에서 database로부터 동적으로 PDF를 생성해서 (LaTeX을 써서) 뿌려 준 적이 있습니다. 물론, application/pdf란 http 헤더를 달아서 내보냈지요. acroread도 군소리 없이 잘 보여 주는 pdf 파일을 보고 MS IE의 filetype sniffer는 제멋대로 pdf가 아니라고 판단하고서 acroread를 띄우는 대신 저장하라고 하더군요.
Posted by 1010
98..Etc/70.JEUS2009. 8. 19. 09:42
반응형
출처 : http://develop.sunshiny.co.kr/143

[
jeus@localhost config]$ cat ws_engine.m
*DOMAIN
jeuservice

*NODE
localhost   * 컨테이너 1
  WEBTOBDIR = "/usr/local/jeus5/webserver",
  SHMKEY    = 54000,
  DOCROOT   = "/home/free/webapps/WebContent",
  PORT      = "8080",
  LOGGING   = "log1",
  ERRORLOG  = "log2",
  JSVPORT   = 9900,
  IndexName = "index.do,index.html,index.jsp",
  HTH       = 1

*VHOST     * 컨테이너2 가상 호스트 추가
vhost1    
  DOCROOT   = "/home/free2/webapps/WebContent",  * 새로운 컨텍스트 경로
  PORT      = "8088",           * 사용할 포트 번호 지정(포트번호만 변경하여 다른 컨텍스트 사용)
  NODENAME  = "localhost",    * 상위에  정의한 NODE 명을 지정
  HOSTNAME  = "192.168.1.11",   * DNS 명(예: aaa.co.kr) 또는 localhost IP(IP로 외부 접속)
                                                * HOSTNAME에서 DNS 명을 설정시에 로컬의 hosts 파일에 dns 추가
  IndexName = "index.do,index.html,index.jsp",  * 컨테이너 기동시에 읽어들일 파일
  LOGGING   = "log3",    * 로그 정의
  ERRORLOG  = "log4"  


*SVRGROUP
htmlg       NODENAME = "localhost", SVRTYPE = HTML
cgig        NODENAME = "localhost", SVRTYPE = CGI
ssig        NODENAME = "localhost", SVRTYPE = SSI
jsvg        NODENAME = "localhost", SVRTYPE = JSV
jsvg1       NODENAME = "localhost", SVRTYPE = JSV, VHOSTNAME = vhost1  * 가상 호스트 추가

*SERVER
html        SVGNAME  = htmlg, MinProc = 1,  MaxProc = 2
cgi         SVGNAME  = cgig,  MinProc = 1,  MaxProc = 2
ssi         SVGNAME  = ssig,  MinProc = 1,  MaxProc = 2
MyGroup     SVGNAME  = jsvg,  MinProc = 5, MaxProc = 10
MyGroup2    SVGNAME  = jsvg1,  MinProc = 5, MaxProc = 10    * 추가된 컨테이너에서 사용하는 그룹

*URI
uri1        Uri      = "/cgi-bin/",  Svrtype = CGI
uri2        Uri      = "/free1/", Svrtype = JSV     * 컨테이너1 의 이름(JEUSMain.xml)
uri3        Uri      = "/free2/", Svrtype = JSV, VhostName=vhost1, SvrName = MyGroup2  * 컨테이너2의 이름(JEUSMain.xml)
uri4        Uri      = "/", Svrtype = JSV

*ALIAS
alias1      URI      = "/cgi-bin/", RealPath = "/usr/local/jeus5/webserver/cgi-bin/"

*LOGGING
log1        Format   = "DEFAULT",   FileName = "/home/free/webapps/logs/webserver/access.log", Option = "sync"
log2        Format   = "ERROR",     FileName = "/home/free/webapps/logs/webserver/error.log",  Option = "sync"
log3        Format   = "DEFAULT",   FileName = "/home/free2/webapps/logs/webserver/access.log", Option = "sync" * 로그파일 저장 경로
log4        Format   = "ERROR",     FileName = "/home/free2/webapps/logs/webserver/error.log",  Option = "sync"

*EXT
htm         MimeType = "text/html",  SvrType = HTML
do              Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup  * 사용 확장자 정의
jsf             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
jsp             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
html            MimeType = "text/html", SvrType = HTML
hwp             MimeType = "application/x-hwp", SvrType = HTML
pdf             MimeType = "application/x-pdf", SVRTYPE = HTML
css             MimeType = "text/css", SvrType = HTML
js              MimeType = "application/x-javascript", SvrType = HTML
gul             MimeType = "application/gul", SvrType = HTML
gif             MimeType = "image/gif", SvrType=HTML
jpeg            MimeType = "image/gif", SvrType=HTML
jpg             MimeType = "image/gif", SvrType=HTML
zip             MimeType = "application/zip", SvrType=HTML
jar             MimeType = "application/x-java-archive", SvrType=HTML
exe             MimeType = "application/octet-stream", SvrType=HTML
wml             MimeType = "application/vnd.wap.wml", SvrType=HTML
wmls            MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wmlc            MimeType = "application/vnd.wap.wmlc", SvrType=HTML
wmlsc           MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wbmp            MimeType = "application/vnd.wap.wbmp", SvrType=HTML
swf             MimeType = "application/x-shockwave-flash", SvrType=HTML
csv             MimeType = "application/octet-stream", SvrType=HTML
xml             MimeType = "text/html", SvrType = HTML
asd             MimeType = "application/astound",SvrType=HTML
asn             MimeType = "application/astound",SvrType=HTML
doc             MimeType = "application/msword",SvrType=HTML
wiz             MimeType = "application/msword",SvrType=HTML
rtf             MimeType = "application/msword",SvrType=HTML
xls             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlw             MimeType = "application/vnd.ms-excel",SvrType=HTML
xla             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlc             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlm             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlt             MimeType = "application/vnd.ms-excel",SvrType=HTML
ppt             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pps             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pot             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
m13             MimeType = "application/x-msmediaview",SvrType=HTML
m14             MimeType = "application/x-msmediaview",SvrType=HTML
wmf             MimeType = "application/x-msmetafile",SvrType=HTML
midi            MimeType = "audio/midi",SvrType=HTML
mid             MimeType = "audio/midi",SvrType=HTML
aif             MimeType = "audio/x-aiff",SvrType=HTML
aiff            MimeType = "audio/x-aiff",SvrType=HTML
aifc            MimeType = "audio/x-aiff",SvrType=HTML
wav             MimeType = "audio/x-wav",SvrType=HTML
cab             MimeType = "x-application/octet-stream", SvrType = HTML
fla             MimeType = "application/x-fla", SvrType=HTML

ws_engine.m 파일은 설정후 컴파일 과정을 함
[jeus@localhost localhost]$
wscfl -i ws_engine.m

##############################################################################

[jeus@localhost localhost]$ cat JEUSMain.xml
<?xml version="1.0" encoding="utf-8"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <node>
                <name>localhost</name>
        <engine-container>
<!-- 컨테이너 1 -->
            <name>container1</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>ws</type>
                <name>engine1</name>
            </engine-command>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>
<!-- 컨테이너 2 -->
                <engine-container>
            <name>container2</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>servlet</type>
                <name>engine2</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>

        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <enable-webadmin>true</enable-webadmin>
    </node>
    <application>
        <!-- 노드 localhost 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free1</name> 
        <path>/home/free/webapps/WebContent</path>
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container1</engine-container-name>
                <web-context-group>
                    <name>MyGroup</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
    <application>
        <!-- 가상호스트 vhost1 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free2</name>
        <path>/home/free2/webapps/WebContent</path> <!-- 추가할 컨텍스트 경로 -->
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container2</engine-container-name>
                <web-context-group>
                    <name>MyGroup2</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
</jeus-system>


##############################################################################

기본으로 제우스에서 하나의 webtob 와 하나의 호스트명_ws_engine1 를 사용.
컨테이너 1 다음으로 추가되는 컨테이너는,
컨테이너 1에 설정된 호스트명_ws_engine1/WSMain.xml 에 설정부분을 추가하여 사용.

[jeus@localhost localhost_ws_engine1]$ cat WSMain.xml
<?xml version="1.0" encoding="UTF-8"?>
<ws-engine xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <domain>
        <name>jeuservice</name>
<!-- 컨테이너 1에서 사용. -->
        <node>
            <name>localhost</name> 
            <webtob-dir>/usr/local/jeus5/webserver</webtob-dir>
            <shmkey>54000</shmkey>
            <docroot>/home/free/webapps/WebContent</docroot>
            <jsv-port>9900</jsv-port>
            <hth>1</hth>
            <port>8080</port>
            <logging>log1</logging>
            <error-log>log2</error-log>
        </node>

<!-- 추가된 컨테이너 설정은 아래 해당하는 엘리먼트 추가  -->
        <svrgroup>
            <name>htmlg</name>
            <svr-type>HTML</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>cgig</name>
            <svr-type>CGI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>ssig</name>
            <svr-type>SSI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg2</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <server>
            <name>html</name>
            <svg-name>htmlg</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc> 
            <asq-count>1</asq-count>
        </server>
        <server>
            <name>cgi</name>
            <svg-name>cgig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>ssi</name>
            <svg-name>ssig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>MyGroup</name>
            <svg-name>jsvg</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <server> <!-- 컨테이너 그룹 추가 (ws_engine.m)-->
            <name>MyGroup2</name>
            <svg-name>jsvg1</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <uri>
            <name>uri1</name>
            <uri-def>/cgi-bin/</uri-def>
            <svr-type>CGI</svr-type>
        </uri>
        <uri>
            <name>uri2</name>
            <uri-def>/webapps</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri3</name>
            <uri-def>/free2</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri4</name>
            <uri-def>/</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <logging>
            <name>log1</name>
            <format>DEFAULT</format>
            <file-name>/home/free/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log2</name>
            <format>ERROR</format>
            <file-name>/home/free/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log3</name>
            <format>DEFAULT</format> <!-- 추가할 컨텍스트의 로그 파일 저장 경로 (ws_engine.m) -->
            <file-name>/home/free2/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log4</name>
            <format>ERROR</format>
            <file-name>/home/free2/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <ext>
            <name>htm</name>
            <mimetype>text/html</mimetype>
            <svr-type>HTML</svr-type>
        </ext>
        <ext>
            <name>jsp</name>
            <mimetype>application/jsp</mimetype>
            <svr-type>JSV</svr-type>
            <svr-name>MyGroup</svr-name>
        </ext>
    </domain>
</ws-engine>


##############################################################################


컨테이너 1에서 사용하는
호스트명_servlet_engine1

[jeus@localhost localhost_servlet_engine1]$ cat WEBMain.xml
<?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>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <webtob-address>127.0.0.1</webtob-address>
                <registration-id>MyGroup</registration-id>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <encoding>
            <request-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-encoding>
            <response-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-encoding>
            <postdata-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-encoding>
        </encoding>
        <jsp-engine>
            <jsp-work-dir>/home/free/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>


##############################################################################

컨테이너 2에서 사용하는 호스트명_servlet_engine2
필요한 설정부분은 그룹명과 jsp 컴파일된 클래스가 저장될 경로 변경

[jeus@localhost localhost_servlet_engine2]$ cat WEBMain.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <context-group>
        <group-name>MyGroup2</group-name>
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port> <!-- 하나의 webtob 를 공유하기때문에 통신 포트 동일-->
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <registration-id>MyGroup2</registration-id>
                <webtob-home>/usr/local/jeus5/webserver</webtob-home>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <encoding>
            <request-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-encoding>
            <response-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-encoding>
            <postdata-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-encoding>
        </encoding>
        <jsp-engine>
            <jsp-work-dir>/home/free2/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>
Posted by 1010
98..Etc/Etc...2009. 8. 14. 15:53
반응형
웹 문서의 markup(HTML, XHTML, …)을 검사

http://validator.kldp.org/
Posted by 1010
98..Etc/70.JEUS2009. 7. 31. 10:25
반응형
C:\TmaxSoft\JEUS6.0\config\administrator\administrator_servlet_engine1

WEBMain.xml 설정 부분에 웹투비 리스너를 두개등록하여 기동한다.
 

<webtob-listener>            <=== WebtoB와의 연동을 위해서 추가해야 하는 부분입니다.
                <listener-id>webtob1</listener-id>
                <port>9900</port>        <=== WebtoB의 JSVPORT 와 동일해야 합니다.
                <webtob-address>127.0.0.1</webtob-address>     <=== WebtoB의 IP 입니다.
                <registration-id>MyGroup</registration-id>     <=== WebtoB의 SERVER 명과 동일
                <thread-pool>
                    <min>25</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>


 <webtob-listener>            <=== WebtoB와의 연동을 위해서 추가해야 하는 부분입니다.
                <listener-id>webtob1</listener-id>
                <port>9900</port>        <=== WebtoB의 JSVPORT 와 동일해야 합니다.
                <webtob-address>127.0.0.1</webtob-address>     <=== WebtoB의 IP 입니다.
                <registration-id>MyGroup</registration-id>     <=== WebtoB의 SERVER 명과 동일
                <thread-pool>
                    <min>25</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>

Posted by 1010
98..Etc/Etc...2009. 7. 31. 09:47
반응형

안녕하세요. 누리호스팅입니다.

도메인의 IP를 변경하면 언제쯤 인터넷에 전파되어질까?
라는 의문점을 고객님께서는 가지고 계실겁니다. 아래의 내용을 보시면 그 해답을 얻을수
가 있을겁니다.

누리호스팅 네임서버를 고객님 도메인의 1차,2차 네임서버로 등록하여 사용할때 유의사항
에 대하여 안내를 해 드립니다.

누리호스팅에서는 고객님께서 직접 누리호스팅의 고객지원센터에서 네임서버의 정보관리(고
객님 도메인의 등록,수정,삭제)를 할수 있게 되어 있습니다. 그런데, 현재 TTL 시간이 1800
으로 해서 서비스를 하시는 경우가 상당히 많습니다. 이것에 대한 장단점을 기술적인 부분
에 대한 설명부터 해서 안내하여 드리겠습니다.

TTL(Time To Live)의 개념은 RFC 1035 문서에 다음과 같이 정의되어 있습니다.
--------------------------------------------------------------------------
TTL             a 32 bit signed integer that specifies the time interval
                that the resource record may be cached before the source
                of the information should again be consulted.
--------------------------------------------------------------------------

가정1. 누리호스팅 네임서버에 등록한 도메인 : www.abc.com
가정2. www.abc.com의 TTL : 86,400초 (1일)

위의 내용을 가정해서 설명하겠습니다. 

A라는 사람이 하나로통신 전용선을 이용하고 있습니다. 네임서버는 하나로통신 네임서버를 
사용합니다. A가 www.abc.com 으로 22시에 처음으로 접속을 하였습니다. 
그러면 A가 사용하는 네임서버에서 www.abc.com이라는 도메인정보가 없기 때문에 누리호스
팅 네임서버로 www.abc.com의 IP정보를 쿼리를 합니다. 그러면, 하나로통신 네임서버에는 
86,400초동안 www.abc.com의 IP정보를 가지고 B,C 기타의 하나로통신 네임서버를 이용하는 
사람들에게 서비스를 해 줍니다.  86,400초가 지나고 나면 www.abc.com의 도메인 정보는 하
나로 통신 네임서버에서 삭제됩니다. 다시 누군가가 www.abc.com의 도메인 정보를 쿼리할때
에 누리호스팅 네임서버에 물어봅니다.

그러면 www.abc.com의 IP정보가 변경이 되는경우는 어떻게 될까요?

오늘 저녁 22 시에 IP정보를 변경을 하였다고 하면, 내일 저녁까지 기존IP와 변경된 IP 두
가지 정보가 인터넷에 있는 임의의 네임서버에는 섞여서 있을겁니다. 왜냐하면, 21시에 누
리호스팅 네임서버에서 www.abc.com 의 IP정보를 쿼리해간 네임서버에는 내일 21시까지 
www.abc.com의 IP정보를 가지고 있을것이기 때문입니다.

따라서, 오늘저녁부터 내일저녁까지 기존의 IP와 변경된 IP 두개의 서버에서 고객님은 서비
스를 운영을 해야 되겠습니다. 조금 이상하시죠? ^^

서버가 여유있게 남아 있는 경우에는 별 이상이 없겠지만, 일반적인 경우에는 쉽지않은 문
제가 됩니다. 그리고, 서버가 여유있게 있다고 하더라도 서비스 정보가 두군데 분산되어 저
장이 되는 문제도 쉽지 않은 문제가 될수 있을듯 합니다.

이런 문제를 아주 쉽게 해결할 수 있는 것이 도메인의 TTL 값을 조정해서 해결하는것입니
다.~~ ^^

즉, 누리호스팅의 네임서버에서 TTL을 86,400 -> 1800(30분) 으로 변경을 하는것입니다.
도메인의 정보가 인터넷에 전파되는데 걸리는 시간이 30분이라는 것입니다. 저희가 고객의 
서비스를 이전해 주는 작업을 가끔 해 주는 경우가 있는데, 30분으로 도메인의 TTL을 설정
하고 작업하면 서비스 중지 없이 거의 실시간으로 도메인 IP정보 변경을 할수가 있었습니
다. 뭔가 해결이 된듯 하지 않습니까?~~~ ^^

그러면, 항상 네임서버에 등록된 도메인의 TTL을 1800으로 설정하면 어떻게 되겠습니까?
이것도 문제가 됩니다. 어떤 문제가 있냐면, A라는 사람이 www.abc.com으로 접속을 자주합
니다. 그러면, 정확히 30분 간격으로 해서 누리호스팅 네임서버에 쿼리를 합니다. 크게 문
제되지는 않지만, 누리호스팅 네임서버에 쿼리를 하는 시간만큼 지연이 생깁니다. 브라우져
에서 홈페이지를 열려고 할때는 대략 1초정도 딜레이 되는 것도 문제가 되겠지요~~?

이런 경우의 사용자가 많다고 생각하면 서버 관리자 입장에서는 사소한 문제로 그런 시간 
지연이 생긴다는 것이 조금 괴로우실 겁니다. ^^

따라서, TTL의 86,400초와 1,800초의 두가지 옵션을 저희가 누리호스팅 네임서버에서 제공
하는 이유를 이해하시리라 생각하고, 정상적인 업무 처리를 간단히 정리하면서 정리하겠습
니다.

### 네임서버에 TTL 변경 절차 ###
================================================================================
1. 도메인의 IP변경 이벤트 발생
2. 적어도 변경 시점 TTL 시간 이전에 1,800초로 변경 : 누리호스팅 고객지원센터에서
3. 누리호스팅 네임서버에서 도메인의 IP변경  : 누리호스팅 고객지원센터에서 
4. 변경된 IP정보로 이상없이 서비스 되는지 확인 (2-3일정도)
5. TTL 시간 86,400초로 변경
================================================================================

감사합니다. 
Posted by 1010
98..Etc/Etc...2009. 7. 31. 09:26
반응형
likejazz님이 최근 posting한 openDNS에 대한 글을 보다가 아래 comment를 보니 KT DNS 주소를 올려주신 분이 계셨다.

내가 항상 외우고 있던 데이콤 DNS서버와 비교해보니 KT쪽 ping 응답 속도가 더 빨랐다.(물론 이 값이 절대적이지는 않을 거라고 생각은 하지만 어느 정도 신뢰성이 있지 않을까?)

맘 먹은김에 찾아보니 잘 정리해 놓은 글이 있었다.

한국통신(KT)- 주 DNS 주소: 168.126.63.1 - 보조 DNS 주소: 168.126.63.2
* 두루넷- 주 DNS 주소: 210.117.65.1 - 보조 DNS 주소: 210.117.65.2
* 신비로- 주 DNS 주소: 202.30.143.11 - 보조 DNS 주소: 203.30.143.11
* 데이콤- 주 DNS 주소: 164.124.101.2 - 보조 DNS 주소: 203.248.252.2
* 하나로- 주 DNS 주소: 131.107.1.7 - 보조 DNS 주소: 210.94.0.7
* 드림라인- 주 DNS 주소: 210.181.4.25 - 보조 DNS 주소: 210.181.1.24

출처 : http://kofree.net/board/bbs/board.php?bo_table=tbl009&wr_id=1516&page=2
Posted by 1010