printStackTrace를 사용하다가 경고 메시지가 나타났다. 찾아보니 코드가 특정 경고 유형에 해당하면 메시지를 띄운다고한다.
경고 메시지를 없애려면 경고를 억제하는 애너테이션 @SuppressWarnings을 추가해줘야한다.
@SuppressWarnings 애너테이션은 컴파일러 경고를 무시하기 위해 사용되며, 각 경고 유형에 대응하는 속성을 지정해야한다. 주요 @SuppressWarnings 속성들은 다음과 같다.
본인의 경우에는 printStackTrace를 사용하다가 경고 메시지가 떴다. 인텔리제이에서 지원하는 수정 도우미(Alt+Enter)를 사용하였는데@SuppressWarnings("CallToPrintStackTrace") 애너테이션이 추가됐다. 위에서 작성한 경고 속성에 나와있지 않은 속성이라 구글링해보았다.
결론은 IntelliJ CallToPrintStackTrace 속성은 IntelliJ IDEA에서 정의한 속성이라고 한다. 왜 인텔리제이는 스택 트레이스를 사용하는 것에 경고를 날릴까?
그 이유는 다음과 같다. 스택 트레이스는 버그를 디버깅하거나 예외 처리를 분석하는 데 유용하지만, 비즈니스 코드에서는 보안 및 로깅에서 주의가 필요하다.
보안 문제
스택 트레이스에는 프로그램이 동작하는 동안의 호출 경로와 관련된 정보가 포함되어 있다. 이 정보를 외부에 노출하는 것은 보안상의 위험을 초래할 수 있다.
불필요한 정보 노출
비즈니스 환경에서는 사용자에게 불필요한 기술적인 세부 사항을 노출시키는 것을 지양해야 한다. 스택 트레이스는 주로 개발자를 위한 디버깅 도구로 사용되며, 일반 사용자에게는 이 정보가 필요하지 않다.
로그 용량 증가
스택 트레이스는 긴 에러 메시지를 생성하므로 로그 파일의 크기를 증가시킨다. 많은 양의 스택 트레이스가 로그에 기록되면 로그 파일의 관리 및 분석이 어려워질 수 있다.
가독성 및 유지보수
스택 트레이스는 개발자에게 유용한 정보일 수 있지만, 사용자 또는 운영 팀에게는 이해하기 어려울 수 있다. 또한, 코드의 성능에 불필요한 부하를 일으킬 수 있다.
대신에, SLF4J, Logback, Log4j와 같은 로깅 프레임워크를 사용하여 적절한 로깅 수준과 메시지로 정보를 기록하는 것이 권장된다. 로깅 레벨을 설정하여 필요한 정보만을 기록하고, 비즈니스 환경에서는 민감한 정보를 최소화하여 보안을 유지하는 것이 중요하다.
평소 에러가 발생 시 어느 곳에서 어떤 에러가 발생했는지 알려주는 printStackTrace를 별 생각없이 사용해왔었다. 하지만 인텔리제이가 알려주는 경고에 대해서 찾아보자 printStackTrace의 문제점에 대해서 상세히 알게되었다. 또한, @SuppressWarnings 어노테이션과 어노테이션에서 사용하는 속성에 대해서 알게되었다.
비즈니스 환경에서 printStackTrace를 지양하고 로깅 프레임워크에 대해 공부하고 적용시켜봐야겠다.