간단한 에러 출력 방법과 문제점

들어가기에 앞서 개발할 때 대부분 간단한 에러 출력 방법은 예외 처리에 유용하지만,
보안상의 이유로 프로덕션 환경에서는 사용하지 않습니다.

 

예외

프로그램 실행 중 발생할 수 있는 정상적인 범위를 벗어난 경우에 처리를 하기 위한 방법입니다.

프로그램 실행 중 중요하게 처리해야 하는 부분중에 에러가 발생하였을 때 예외처리를 하여 로그를 어떻게 남길 것인지도 포함됩니다.

Java에서는 try-catch 문으로 감싸서 에러를 처리할 때 로그를 남기는 방법은 다양합니다.

Java Exception 에러 출력 방법

1. e.getMessage()

에러의 원인을 간단하게 출력합니다.

 

2. e.toString()

에러의 Exception 내용과 원인을 출력합니다.

 

3. e.printStackTrace()

에러의 발생근원지를 찾아서 단계별로 에러를 출력합니다.

e.getMessage

package joon;

public class codeTest {
    public static void main(String[] args) throws Exception{
        try{
        /* int로 형변환이 안되는 문자열을 넣어 강제로 Exception 발생 */
            String product = "사과";
            int productCnt = Integer.valueOf(product);
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
}

 

e.getMessage()는 정말 Exception의 유형도 없이 정말 간단하게 왜 에러가 발생하였는지 보여주기만 합니다.

 

e.toString

package joon;

public class codeTest {
    public static void main(String[] args) throws Exception{
        try{
            String product = "사과";
            int productCnt = Integer.valueOf(product);
        }catch (Exception e){
            System.out.println(e.toString());
        }
    }
}

 

e.toString() 은 어떤 Exception 이 발생하였으며, 원인과 이유를 보여줍니다.

하지만 에러의 발생위치는 보여주지않습니다.

 

e.printStackTrace

package joon;

public class codeTest {
    public static void main(String[] args) throws Exception{
        try{
            String product = "사과";
            int productCnt = Integer.valueOf(product);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

Exception 이 발생한 이유와 발생 위치는 어디에 있는지 전체적인 단계를 전부 출력해 보여줍니다.

 

기본적인 에러 출력 방법의 취약점

앞서 설명한 것처럼 printStackTrace() 뿐만 아니라 기본적인 에러 출력 방법들은 예외 발생 시 예외 메시지와 함께 호출 스택 정보를 출력해 주는 메서드입니다.

이는 개발 및 디버깅 과정에서 유용하게 사용될 수 있지만, 프로덕션 환경에서는 보안 상의 이유로 사용하지 않는 것이 좋습니다. 왜냐하면 호출 스택 정보가 외부로 노출될 경우, 악의적인 공격자가 시스템의 취약점을 파악하고 악용할 수 있기 때문입니다.

 

'Java' 카테고리의 다른 글

Java 의 Call by Value, Call by Reference  (0) 2025.01.06
자바의 람다 표현식  (1) 2024.12.26
Java - Enum  (1) 2024.12.24
자바의 Optional  (0) 2024.12.23
자바의 Generic  (1) 2024.12.19