반응형
WebLogic 환경에서 JSP 실행 중 다음과 같은 예외가 발생했습니다.
에러 로그
Root cause of ServletException.
java.lang.NumberFormatException: For input string: "[입력오류]"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at jsp_servlet._at_workstate._ws_reward._list.__list._jspService(__list.java:1103)
...
원인 분석
이 예외는 Java의 Integer.parseInt(String)
메서드가 정수로 변환할 수 없는 문자열을 입력받았을 때 발생합니다.
주요 원인:
- 사용자가 웹 요청 파라미터로 정수가 아닌 값을 전송
- null 또는 빈 문자열이 넘어옴에도 검증 없이
parseInt()
호출 - 입력값 필터링/검증 로직이 부족하거나 누락됨
예를 들어, 다음과 같은 코드에서:
<%
int rewardId = Integer.parseInt(request.getParameter("rewardId"));
%>
rewardId=abc
혹은 rewardId=
가 넘어오면 위와 같은 에러가 발생합니다.
해결 방법
1. 입력값 검증 추가
정수로 변환 가능한지 먼저 체크한 후 parseInt
를 호출하도록 수정합니다.
String rewardIdStr = request.getParameter("rewardId");
int rewardId = 0;
if (rewardIdStr != null && rewardIdStr.matches("\\d+")) {
rewardId = Integer.parseInt(rewardIdStr);
} else {
// 예외 처리 또는 기본값 적용
log.warn("Invalid rewardId input: " + rewardIdStr);
}
2. 예외 처리 보완
사용자에게 친절한 메시지를 제공하거나, 서버 로그에만 기록하고 흐름을 유지하는 방식도 고려합니다.
<%
try {
int rewardId = Integer.parseInt(request.getParameter("rewardId"));
// 로직 처리
} catch (NumberFormatException e) {
out.println("잘못된 입력입니다. 숫자만 입력해 주세요.");
log.error("Invalid number format in rewardId", e);
}
%>
3. 입력 파라미터 단위 테스트
- QA 단계에서 각 파라미터에 대해 유효값/무효값 테스트 케이스를 구성하여 반복 발생을 줄일 수 있습니다.
결론
NumberFormatException
은 자주 발생하는 입력 파싱 오류이지만, 간단한 검증 절차만으로도 충분히 방지할 수 있습니다.
입력값은 항상 신뢰하지 말고, 사전 체크 및 예외 처리를 통해 시스템의 안정성을 높여야 합니다.
반응형
'Application Servers & Java' 카테고리의 다른 글
StandardServletAsyncWebRequest 미설치 경고 원인과 해결 방법 (0) | 2025.05.19 |
---|---|
OutOfMemoryError – Java Heap Space 부족으로 인한 JSP 처리 실패 (0) | 2025.05.19 |
SecureLogFormatter 초기화 실패 – NoSuchFieldError: repository (0) | 2025.05.19 |
JWS 설치, Tomcat 구성 및 Apache 연동 실습 (0) | 2025.05.18 |
JBoss EAP 도메인 구성과 클러스터링 실습 (0) | 2025.05.18 |