2010년 1월 13일 수요일

IE8에서 디버깅 안될시의 처리

Visual Studio 2005에서 ActiveX Band Objet 등을 디버깅하기 위해 IE8 프로세스를 디버깅하려고 하면 IE8 LCIE(Loosely-Coupled Internet Explorer) 때문에 디버깅하려는 프로세스에 디버거가 연결되지 않고 아래와 같은 메시지를 출력하고 실행한 프로세스가 종료되어 버린다.
'[2344] iexplore.exe: 네이티브' 프로그램이 0 (0x0) 코드에서 끝났습니다.

이 현상을 회피하려면 LCIE의 프로세스 추가 할당 기능을 비활성화해주면 된다.
방법은 아래 레지스트리에
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main
TabProcGrowth값을 DWORD값으로 생성하고 0으로 설정해주면 된다.

 

 

사실, IE8 LCIE때문이 아니라, 비스타에서는 보호모드로 동작되는 Internet Explorer (버전 7이상)를 디버깅할 때 나타나는 일반적인 현상이죠. 마이크로소프트는 이런 문제를 Visual Studio 2008에서는 "Web Browser Debugger" 방식의 디버깅 유형을 추가해서 해결하고 있고. (그러고 보니, Visual Studio 2005에서도 다음 SP에서는 지원해 주어야 할 기능이 아닐까 싶네요. ^^)

 

 

출저 : 안규현 선배의 메일.. ㅋㅋㅋ

2009년 10월 13일 화요일

rpm 페키지 삭제 방법 (페도라6)

설치된 rpm 패키지가 잇는지 확인해야 겠지요

rpm -qa | grep <패키지명>

 

rpm --erase `rpm -qa | grep <패키지명>
 rpm --erase --noscripts `rpm -qa | grep <패키지명>

 

위 과정은 <패키지명>로 시작되는 패키지를 찾아 삭제 하는 명령이다.

 

리눅스&페도라 FTP 서버 구축 및 사용법

우선 리눅스 OR 페도라를 설치하면서 필요없을 것 같아서 FTP서버를 설치 하지 않았다고 하자.그럼 설치를 새로 해주고 설정등을 잡아주고 FTP서버를 기동시켜야 한다.그리고 설치는 했으나 사용을 하지 않는다고 재워 놓았다면

 

#rpm -qa |grep proftpd                  를 입력하여 패키지 파일을 검색해 보고 있으면

 

#rpm -ivh 패키지파일이름                  을 입력하여 설치를 하자.

 

없으면 rpm 파일이라던지 다른 소스 파일을 다운받아서 설치 하도록하자.소스파일 다운 받을 수 있게 친절하게 알려준 블로그나 지식자료들이 오래되어서 그 서버들이 제대로 동작을 안하는 데가 많았다.

본좌는 돌다 돌다 헤메다 헤메다 여기서 다운받다.. http://www.proftpd.org에 접속하면 아래와 같은 그림이 나온다.빨간색으로 표시 해놓은 [gz] 파일을 클릭하여 다운 받도록 한다.

 

 

(위의 사이트에서 빨간색으로 표시된 부분을 클릭하면 알아서 다운로드 창이 뜬다.그러나 약간 서버가 불안해서 안될때도 있다)


[bz2]파일을 선호하면 그것을 다운받아도 된다.개인적인 취향이니 그건 각자가 알아서 선택하도록 한다. 파일을 다운받아 놓을 폴더로 이동한다.


# cd /usr/local/src/               <-- 난 요기다 다운받았다.

 

각자 소스파일을 받아서 활용하는 곳으로 받아서 풀어주길 바란다.이것도 저것도 모르는 초보라면 그냥 따라 해주실 바란다.그리고 압축을 풀어야 하는데 다운 받은 폴더로 이동을 해서 아래와 같은 명령어를 입력해주도록 한다.

 

 

# tar xvfz proftpd-1.3.1.tar.gz

 

(P.S:
압축을 푸는 진행과정이 모니터에 주루룩 올라가면서 나오게 된다.그리고 여기서 TIP하나! Tab 키를 사용하게 되면 긴 소스파일 이름을 다 입력하지 않아도 되므로 자주 활용하도록하자.사용법은 위의  proftpd-1.3.1.tar.gz 을 입력할려고 한다고 하자.그럼 앞의 명령어들을 다 이렇게 다 써놓고

# tar xvfz pro   까지만 입력하고 tab키를 누르게 되면 나머지 소스 파일명이 알아서 입력이 된다.단 주의 사항은 같은 이니셜이 있다면 입력되지 않고 같은 이니셜을 가지고 있는 파일명들이 화면으로 보여준다.그렇게 되면prof 까지 쓰고 다시 tab키를 누르게 되면 나머지 부분이 자동으로 입력되게 된다. )

 

 

자 이제 압축을 다 풀었다면 압축을 풀어 놓은 proftpd 폴더로 이동합니다. 위의 경로에 다운 받으셔서 압축을 풀으셨다면 proftp파일의 경로는 아래와 같을 것이다.

 

# cd /usr/local/src/proftpd-1.3.1            <-- 해당경로로 이동

 

해당경로에서 아래와 같이 쓰자.

 

# ./configure \
--prefix=/usr/local/proftpd \
--enable-autoshadow

 

 

그리고 설정이 잡히면

 

make && make install

 

명령을 순서대로 차례 차례 내리도록 하자.

그리고 설정을 잡아 주셔야 하네~~.. 설정을 잡기위해서 해당 설정파일(proftpd.conf) 을 열어 주자.

 

# vim /usr/local/proftpd/etc/proftpd.conf

 

(PS:
여기서부턴  http://blog.naver.com/ljhamway/150025243686 의 약속의 땅님의 블로그 글을 참고 수정하여 내용을 적었습니다.)

 

------------------------------------------------------------------------------------------
proftpd.conf 설정 내용 확인
------------------------------------------------------------------------------------------

# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName   "ProFTPD Default Installation"
ServerType   standalone

-----부연설명----------------------------------------------------------------
보통 ServerType 은 standalone방식과 inetd방식이 있습니다.
ftp나 대형서버같은 경우는 항상 ftp를 열어둬야 겠지만, 저같이 스터디용~서버에 ftp사용자를 막아놓고 일부분만 허용하시는
분은 xinetd로 사용하는것이 서버에 과부하를 줄일수 있는 한가지 방법이겠죠
standalone로 사용하실분은 특별히 다른 기능을 넣을 필요는 없습니다. 유저와 그룹설정만 바꿔주시고 사용하시면 되고
inetd으로 사용하시려는 분들은 좀 복잡한데..
이방식은 따로 xinetd를 설치하셔야 합니다 (페도라 코어4의 기준에는 xinetd가 설치가 되어있지를 않습니다. ) 설치하시기전에
혹시나 설치가 되어 있는지 확인은 하셔야죠^^
RPM으로 설치가 되어 있다면..
RPM -qa | grep xinetd  로 검색하시면 뭔가 나올거에요 안나오면 RPM으로는 설치 안된거고
find /-name xinetd.* 하셔서 관련 파일이 있으면 아마도 설치가 되어 있을것입니다.

설치가 안되있는것을 확인 하셨다면... 그냥 yum으로 설치하시면 되요

yum install xinetd

설치가되셨다면 그다음에는 ....
xinetd가 기동시 불러들이는 폴더는 /etc/xinetd.d/폴더 입니다 일단 이 폴더로 이동을 해봅시다.
그후 proftp가 xinetd로 불려질수 있겠끔 아래의 내용으로 파일을 하나 생성하셔야 합니다

ervice ftp
{
       flags           = REUSE
       socket_type     = stream
       instances       = 50
       wait            = no
       user            = root
       server          = /usr/sbin/proftpd

       bind            = <the-ip-you-wish-to-bind-to>
       log_on_success  = HOST PID
       log_on_failure  = HOST RECORD
}


(PS:

이 부분에서 서버용으로 쓸려고 했기때문에  그래픽으로 보여주는 x-windowd를 설치하지 않아서 standalone방식으로 사용을 하게 되었다.기회가 될 때 이부분은 다시 수정해서 쓰도록 하겠다.부족한 부분과 필요한 부분은 따로 자료를 검색해 봐주길 바란다.)

 

----------------------------------------------------------------------------------
proftpd.conf 내용 계속 ......
-----------------------------------------------------------------------------------

DefaultServer   on

# Port 21 is the standard FTP port.
Port    21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask    022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances   30
# Set the user and group that the server normally runs at.
User    nobody
Group    nogroup <--이렇게 되어 있으면 nobody로 바꾸세요

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~
DefaultRoot ~ !root (root를 제외한 접속자들이 상위로 기어올라 가지 못하게 하는 부분입니다)


# Normally, we want files to be overwriteable.
<Directory /*>
  AllowOverwrite  on
</Directory>

# A basic anonymous configuration, no upload directories.
<Anonymous ~ftp>
  User    ftp
  Group    ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias   anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients   10

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin   welcome.msg
  DisplayFirstChdir  .message


  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>

</Anonymous>
//설정내용 끝 (자세한 설정은 다른 분들것도 참조하세요)----------------------------

 

 

 

자 이제 설정을 마쳤으니 데몬을 돌려서 우리가 원한 FTP가 동작하는 것을 확인해봐야 하지 않을까?

 

# /usr/local/proftpd/sbin/proftpd  

(xinetd 로 운영하시면 /usr/local/proftpd/sbin/proftpd start)

 

 - warning: unable to determine IP address of 'localhost.localdomain'  
   (OR  warning: unable to determine IP address of '자신의 호스트네임')
 - error: no valid servers configured
 - Fatal: error processing configuration file '/usr/local/proftpd/etc/proftpd.conf'


그럼 부분 위와 같은 드러운 에러 내용을 만나게 돈다.여기 저기 자료를 찾던중 약속의 땅님의 블로그에서 실마리를 찾게 되었다.아래와 같이 명령어를 입력하고 엔터를 치게되면

 

# vim /etc/hosts


-----------------------------------------------
hosts 설정
-----------------------------------------------
# Do not remove the following line, or various programs
# that require network functionality will fail.
::1     localhost.localdomain   localhost

-----------------------------------------------
설정 마침
-----------------------------------------------

 

여기서


::1     localhost.localdomain   localhost         <--- 이부분을 아래와 같이 수정

 

127.0.0.1  localhost.localdomain   localhost

 

주의하실 부분은  도메인을 이용해서 로그인하는 분들께는 추가를 해야할 부분이 있다.

여기서 hostname이 아닌 IP를 이용해서 접속하게 되는데 무슨 소리냐 하면 아래 그림을 보면 리눅스에 접속했을때 사용자@뒤에 붙는것 문자열 중에 IP주소로 쓰여져서 나오는 경우가 있고 아니면 설치를 할때 설정 환경 부분에서 정해준 각자의 호스트 네임으로 문자열이 보여지게 된다.

(사용자 root@ 뒤에 있는 빨간색으로 쳐져있는게 HOSTNAME 이다.)

 

IP주소를 사용 하는 분들은 위의 내용처럼 입력을 하게 되면 에러메세지가 나오지 않고  FTP를 기동 시킬수 있고 HOSTNAME를 사용하는사람들은 아래와 같이 수정하여서 FTP를 기동시키자.

 

예를 들어 호스트 네임이 good 이고  IP주소가 999.999.999.999 이고 도메인이 www.good.com 이라고 하면


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


::1     localhost.localdomain   localhost                                                          <--- 이부분을 아래와 같이 수정해 주자.(당연히 이 부분은 지우고 아래의 두 줄만 입력하자.)


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


127.0.0.1  localhost.localdomain   localhost
999.999.999.999 
www.good.com  good 

 

라고 수정을 하고 다시 proftpd 를 실행시키면 에러 메세지가 뜨지 않는다. 위 명령어의 의미는

IP 999.999.999.999 와 도메인 www.good.com  과 HOSTNAME good 는 같다라는 명령을 내린것이다.위에서 에러창에 뜬 hostname의 주소를 정해준 거라 생각하면 이해가 쉽게 되겠다.그리고 예를 들어서 good 를 썼으니 오해 없길 바란다.


#/usr/local/proftpd/sbin/proftpd          이렇게 proftp를 실행후 FTP가 돌아가는지 확인할려면

 

#ps -aux | grep proftpd                    라고 입력을 하면 아래와 같은 화면을 볼 수 있다.

 

nobody 23595 0.0  0.4 2465______________________________ proftpd:(accepting connections)
root   22343 0.0  0.6 3009______________________________ grep proftpd

 

 

라는 화면을 볼 수 있다. 보안상 빨간 언더바를 쳐서 나머지 부분을 표시하였다.그러니 황당해 하지말고 nobody 와 root 가 뜨면 성공한 것이다.그리고 우리는 리눅스를 설치할 때 FTP서버를 안 깔았다는 전제하에서 시작한 것이므로 리눅스 명령창에서

 

#setup      을 입력하고 그 다음에 나오는 설정 창에서

 

Firewall configuration 메뉴로 들어가서 커스터 마이즈 메뉴 아래에 [  ] FTP라고 되어 있는 부분을 [ * ] FTP 로 선택해 주자. FTP를 사용하겠다는 인증을 받는 것이므로 중요하다.그리고 나서 클라이언트 프로그램인 LeechFTP 등을 사용하여 쉽게 자료를 올리고 다운 받아 보도록하자.LeechFTP에 대한 사용법은 다음 시간에 다시 하도록 하겠다.

 

급하면 웹을 검색해서 찾아보도록 한다.설정하기가 아주 쉽다.서버프로그램인 proftpd 와 클라이언트 프로그램인 LeechFTP를 잘 구별해서 생각하도록 하자.서버프로그램이 없으면 클라이언트 프로그램을 설치해봐도 아무런 소용이 없다.그리고 FTP관련 기타 명령어는 다음과 같다.


#killall proftpd         //프로세스 죽이기(종료)

# /usr/local/proftpd/sbin/proftpd   //ProFTP 데몬 띄우기


(P.S:

proftp를 죽인후 다시 재생할 땐 안 될 수도 있다. 왜 그러냐면Ftp를 정시키시면 /etc/shutmsg 파일이 생성된다. 이 파일을 지워야 재가동 할 수 있으니 찾아서 지우고 다시 실행하도록 한다.)

 

리눅스의 한글이 깨진다면

/etc/sysconfig/i18n 내용에 아래내용을 집어넣는다.

 

 

#> Vi /etc/sysconfig/i18n

 

LANG="ko_KR.eucKR"
SUPPORTED="en_US.iso885915:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="lat0-sun16"
SYSFONTACM="iso15"

 

저장후 빠져나와 설정을 적용시킨다.

 

source /etc/sysconfig/i18n

저장후 빠져나와 설정을 적용시킨다.

 

source /etc/sysconfig/i18n

2009년 9월 16일 수요일

Log4sql

log4sql을 사용하면 I,U,D,S 쿼리문과 쿼리 수행시간, parameter까지 확인을 할 수 있습니다.

 

사용방법은 간단합니다.

라이브러리만 추가해준후 driver class만 변경해주면 됩니다.

 

보다 자세한 사용법 및 jar파일은 아래 URL에서 확인하시면 됩니다.

 

http://log4sql.sourceforge.net/index_kr.html

2009년 9월 14일 월요일

out 객체

out 객체는 JSP 페이지의 결과를 웹 브라우저에 전송해 주는 출력 스트림을 나타내며 JSP페이지가 웹 브라우저에게 보내는 모든 정보는 out객체로 통해서 전달이 된다.

 

out객체는 java.io.Writer 클래스를 상송 받은 javax.servlet.jsp.JspWriter클래스 타입의 객체이며 out객체로 사용한다.

 

주로 많이 사용되는 메소드는 웹 브라우저에 출력을 하기 위한 println() 메소드이다.

 

out 내부 객체의 메소드

 

boolean isAutoFlush() 출력버퍼가 다 채워진 경우에 자동으로 flush했을 경우는 true를 리턴, 그렇지 않은 경우는 false 를 리턴한다.

 

int getBufferSize() 출력 버퍼의 전체의 크기를 바이트 단위로 리턴한다.

 

int getRemaining() 출력 버퍼의 남은 양을 바이트 단위로 리턴한다.

 

void clearBuffer()  현재 출력 버퍼에 저장된 내용을 취소한다.(비운다.)

 

String println(string) 현재 출력 버퍼에 저장된 내용르 웹 브라우저로 전송하고 버퍼를 비운다.

 

void close() 출력 버퍼의 내용을 flush하고 스트림을 닫는다.

 

 리턴타입

메소드명

설명

 없음  clear()

 출력버퍼에 저장된 내용을 버림.

 비었을 경우 예외발생

 없음  clearBuffer()

 clear()메소드와 같은 역할이지만,

 버퍼가 빈경우에도 예외발생않고 현재 버퍼를 비움

 없음  flush()

 현재 버퍼에 저장된 내용을 클라이언트로

 전송하고 버퍼를 비움.

 없음  close()

 출력 버퍼를 클라이언트로 전송하고

 출력스트림 종료

 boolean  isAutoFlush()  page지시어의 autoFlush속성으로 지정된 값을 리턴
 int  getBufferSize()  출력 버퍼의 크기를 바이트 단위
 int  getRemaining()  출력 버퍼의 남은 양
 없음  print(String str )  출력 스트림으로 str 문자열 출력 

 

 

Cannot load JDBC driver class

tomcat/common/lib/ 아래에

ojdbc14라이브러리 추가

 

아울러 jdk1.5/lib 안에도 꼭 있어야 함..

jdk1.5/jre/lib/ext 안에는 있으나 마나이다..

==========================================

위 작업 끝난 다음에...도 jdbc 드라이버가 인식이 안됫었는데 알보고니 철자가 틀려서 그런거였다;;

ㅠㅠ;;;

'oracle.jdbc.dirver.OracleDriver' 로 써 있었던 것이였다 =>'oracle.jdbc.driver.OracleDriver' 로 바꿔야 햇는데;;

 

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:766)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
 at org.apache.jsp.index_jsp._jspService(index_jsp.java:62)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
 at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
 at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Unknown Source)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:760)
 ... 22 more