티스토리 뷰

728x90
반응형

포스팅은 우리가 가장 자주 접하게 되는 500 Internal Server Error에 대한 고찰입니다. 

다양한 케이스를 습득해 보고 이에 대한 대응 방안을 마련해 보도록 하겠습니다.



1. 500 Internal Server Error
    1.1 Error 메시지 확인

- JEUS

해당 화면의 Application이 실행할 Container 로그에 에러 메시지가 찍혀 있다.


1.2. 문제 원인
1) 500 Internal Server Error Application의 호출 시 내부적 오류가 있을 때 발생하는 응답코드로, Application이나 서버 내부의 문제이다.
1.3. 해결 방법
1) WebtoB-JEUS-Application500 Error는 WebtoB를 거쳐 JEUS에 Request를 던진 상황에서 발생하는 현상으로 Application이 실행되면서 내부적으로 나는 오류이다. 그러므로 JEUS의 로그를 보고 Application에 잘못된 문법이 있거나 Application에서 요구하는 기능을 JEUS에 설정이 되어있나 확인해 봐야 한다.
2) 웹페이지에 오류 부분 보이게 하는 설정
WEBMain.xml에 다음 부분을 넣어주면 되다. <print-error-to-browser>true</print-error-to-browser> true : 웹페이지에 Application 오류 부분 보이게 하기 false : http 응답코드만 보이게 하기

2. DB Connection 관련 500error
    2.1. Error 메시지 확인
 

- JEUS 로그


2.2. 문제 원인
1) JEUS의 DB Pool 생성 오류
Application에서 JEUS의 DataSource를 사용하여 WAS 내부적으로 Connection Pool을 생성하게 되는 시점에서 에러가 남.
2.3. 해결 방법
1) DB서버 점검
DB의 Mount는 되어있는지 Listen설정이 되어있는지 유무를 확인해 봐야 한다.
2) JEUS와 DB서버간의 방화벽 유무
JEUS와 DB서버간의 방화벽이 존재한다면 접근하는 Port를 열어주어야 한다.

그리고 해당 Port에 대한 TimeOut설정이 되어 있다면 그에 따라 Datasource설정에 해당 설정을 넣어 block을 막을 수 있다.

<< JEUSMain.xml >>

<resources> 

<database>

<vendor>oracle</vendor>

<export-name>IITS_ORA</export-name>

<data-source-class-name> oracle.jdbc.pool.OracleConnectionPoolDataSource </data-source-class-name>

<data-source-type>ConnectionPoolDataSource</data-source-type>

<database-name>webdb</database-name>

<data-source-name> oracle.jdbc.pool.OracleConnectionPoolDataSource </data-source-name>

<port-number>1521</port-number> 

<server-name>172.31.1.26</server-name>

<user>MIRAE_RENTAL</user>

<password>MIRAE22</password>

<driver-type>thin</driver-type>

<connection-pool>

<pooling>

<min>6</min>

<max>10</max>

<step>2</step>

<period>600000</period>

</pooling>

<check-query>Select sysdate FROM dual</check-query>

<check-query-period>1800000</check-query-period>

</connection-pool>

</database> 

</resources>

 

3) JDBC Driver존재 유무 $JEUS_HOME/lib/datasource에 해당 DB Connection을 맺기 위한 vendor사의 JDBC Driver가 존재 하는지 확인해 봐야 한다. 4) JEUS의 설정오류 DataSource설정 관련하여 해당 DB서버의 정보를 잘못 기입하여 발생할 수 있다.

<< JEUSMain.xml >>

<resources> 

<database>

<vendor>oracle</vendor> --> vendor사 잘못 기입

<export-name>IITS_ORA</export-name>

<data-source-class-name> oracle.jdbc.pool.OracleConnectionPoolDataSource </data-source-class-name>

<data-source-type>ConnectionPoolDataSource</data-source-type>

<database-name>webdb</database-name> --> database name 잘못 기입

<data-source-name> oracle.jdbc.pool.OracleConnectionPoolDataSource </data-source-name>

<port-number>1521</port-number> --> Listen Port 잘못 기입 

<server-name>172.31.1.26</server-name> --> DB서버 위치 잘못 기입

<user>MIRAE_RENTAL</user> --> User 잘못 기입

<password>MIRAE22</password> --> password 잘못 기입

<driver-type>thin</driver-type> --> DB서버 지원방식 잘못 기입

<connection-pool>

<pooling>

<min>6</min>

<max>10</max>

<step>2</step>

<period>600000</period>

</pooling>

<check-query>Select sysdate FROM dual</check-query>

<check-query-period>1800000</check-query-period>

</connection-pool>

</database>

</resources>

5) DB 관련 500error가 발생 할 수 있는 상황

- Source내의 lookup name이 설정되어 있지 않은 DataSource를 호출할 때

- WAS 자체 내부 버그

- JDBC Drive 버그

 

3. NullPointException
    3.1. Error 메시지 확인
 
    - JEUS


3.2. 문제 원인
1) java.lang.NullPointerException
      Null값인 Object의 method를 호출하거나 그것을 대상으로 작업을 하려고 할 때 발생.

Thrown when an application attempts to use null in a case where an object is required. These

include :
- Accessing or modifying the field of a null object. - Taking the length of null as if it were an array. - Accessing or modifying the slots of null as if it were an array. - Throwing null as if it were a Throwable value.

3.3. 해결 방법
1) Application 수정
Error를 발생시킨 Application을 수정해야 한다. JSP의 경우 WEB-INF폴더에 있는 .warjspwork에 compile되어 있다. 해당 error의 stack trace를 보고 어느 부분에서 error가 났는지 원인을 분석할 수 있다.

728x90
반응형