자바서버를 돌리다보면 오류가 날때 어마어마한 스택트레이스 메시지에 질리기도 한다.
Q&A 사이트에 가보면 이것을 보고도 오류를 못찾는 경우가 종종 있는 것 같다.
이 스택트레이스 메시지를 보고 오류를 쉽게 찾는 법을 포스팅한다.
규칙은 내가 작성한 코드가 아닌 클래스는 제외한다가 되겠다.
1. org.apache... 으로 시작되는 라인은 거른다.
2. java.base... 으로 시작되는 라인은 거른다.
3. org.spring... 으로 시작되는 라인은 거른다.
4. javax.servlet... 으로 시작되는 라인은 거른다.
남은 라인 중에서 스택트레이스에 내가 작성한 클래스가 있다면 에러 위치는 찾은 것이다.
스택트레이스에서 못찾았으면 내가 작성한 코드에서 오류가 없을 수도 있다.
그때도 스택트레이스 메시지에서 단서가 있다.
각 콜스택 최상단에 에러 메시지가 있을 것이다.
탭 적용에서 맨 왼쪽에 있는 라인이 되겠다.
여기에 특정 클래스가 언급되어 있으면 그것이 에러 원인이다.
보통은 아래 오류가 보일 것으로 생각한다.
java.lang.NoClassDefFoundError
==> 저 뒤에 기술되는 클래스 명이 있는데 그 클래스를 못찾은 거다.
==> 라이브러리가 설치 안되어 있거나 세팅에 오류가 있다.
다른 오류가 있을 수 있는데 마주치지 못했다.
다만 그 다른 오류라도 위 방법대로 소거법으로 소거하면 문제가 명확해 질수가 있다.
에러 발생시 99%는 자기 코드 에러이다.
그러므로 시스템이나 라이브러리를 탓하기 전에 코드부터 점검하는 습관이 좋다.
이 포스팅은 자바웹프로그래밍을 겨냥하여 쓰여졌으나
비슷한 방법으로 안드로이드나 일반 자바개발에서도 유용하게 적용이 가능할 것이다.
에러 찾는 예제를 보겠다.
위의 소거 규칙대로 다 소거하다보면 몇 줄 남지 않는다.
위 예제에서는 sun. 으로 시작되는 라인이 있는데 이것도 우리가 작성한 코드가 아니니 제외토록 하자.
노랑색이 실제 에러 위치이고 빨간색 라인(탭 적용에서 맨 왼쪽에 위치)은 무슨 에러인지 말해준다.
에러는 테스트를 위해서 일부러 유발시켰다.
스택 트레이스에서 기술된대로 47번 라인에서 0으로 나누는 코드가 있다.
이런식으로 에러를 찾으면 된다.
'Tech' 카테고리의 다른 글
[OpenSSL] ECDSA Sign 과 Verify (0) | 2018.08.02 |
---|---|
[OpenSSL] 시작 - VS2017에 세팅하기 (0) | 2018.08.01 |
EPD 와 OTC 방법론 (0) | 2018.07.31 |
코드 정리 #8 (0) | 2018.07.29 |
[기초] OpenSSL 해쉬 함수 사용 예제 (0) | 2018.07.29 |