콘솔 및 예외 확인하기
개요
컨픽은 프로그래밍을 하는 역할은 아니지만 디버깅을 해야 하는 경우가 많습니다. 직접 코드를 짜는 것은 아니지만 코드를 돌리는 과정에는 참여하기 때문입니다.
우선 예외 라는 단어가 프로그래밍과 현실에서 조금 다르게 사용되기 때문에 이 부분에 대해 설명하고 시작하겠습니다. 프로그래밍에서는 예외가 난다 = 에러가 난다와 비슷한 의미로 사용됩니다. 그리고 이 에러라는 것은 항상 나쁘다기 보다는 프로그램의 가장 적합한 의도와 다른 방향으로 작동될 때 발생하는 것으로 개발자는 이를 처리해야 합니다.
예외처리는 사용자가 더 다양하고 해당 프로그램의 실제 작동 기전에 대해 이해할 필요도 이유도 없을 경우 더 폭넓게 작동되어야 합니다.
예를 들어 /마을 스폰이라는 명령어를 유저가 입력한다고 가정해 봅시다. 이 경우 /마을 이라는 명령어 뒤에 여러가지 다른 옵션들을 칠 수 있습니다. 예를 들어 "스폰" , "금고" , "초대" 등이 있습니다. 그리고 해당 옵션들을 입력받고 그에 맞는 코드를 실행시키기 위해서는 명령어 뒤에 어떤 옵션을 유저가 입력했는지 알아야 합니다.
하지만 유저는 뒤에 어떠한 옵션도 적지 않고 그냥 /마을 이라는 명령어만 치고 싶을 수도 있습니다. 그 경우 뒤에 어떤 옵션이 있는지 읽는 코드는 무언가를 읽어야 하는데 아무것도 입력되지 않았음으로 예외를 발생시킵니다. 이를 예외처리하여 아무 옵션도 적지 않았을 때는 도움말로 이동시킨다 가 해당 예외처리를 제대로 하는 방법입니다.
예외가 발생한다는 뜻은 순차적인 코드작동 중 중간에 다리가 끊어진다는 뜻입니다. 그렇기 때문에 예외가 발생할 경우 단순히 해당 행동이 안되는 것을 넘어 종종 뒤에 많은 것들이 도미노처럼 줄줄이 무너질 수 있습니다. 물론 그렇게 하지 않기 위해 너무 많은 도미노를 쌓지 않고 설령 중간에 다리가 끊어지더라도 복구하는 기법들이 있긴 하지만 모든 플러그인이 그렇게 아름답게 작동하지는 않을 수도 있습니다.
각설하고 컨픽 도중 예외가 발생하였다면 거의 반드시 지금 하려고 하는 행동이 제대로 진행되지 않았음을 뜻하기 때문에 이 예외를 제대로 이해하고 문제의 원인이 내 컨픽에 있다면 컨픽을 수정하고 원인이 그렇지 않고 코드적인 결함으로 보인다면 - 이는 종종 개발자를 제외하고는 판단하기 어려운 경우들이 많지만 컨픽 문제가 아니라고 판단되는 경우 - 개발자에게 수정 또는 확인을 요청해야 합니다.
에러 메세지 확인하기
콘솔을 확인하는 방법에 대해서는 앞선 시작하기를 참조하여 숙지하였을 것이라 생각합니다.
에러 메세지는 두 가지 방법으로 볼 수 있으며 익숙해지기 전까지는 두번째 방법을 권장합니다.
ssh 프로그램을 이용하여 실시간으로 콘솔창을 확인
콘솔창에서 복사를 하려고 ctrl + c 를 하면 리눅스에선 ctrl + c 가 프로그램 강제종료이기 때문에 문제가 생깁니다. 콘솔창 내용을 복사하기 위해서는 마우스 휠클릭( 안되는 기종도 있음) 또는 우클릭 후 copy 를 해야 합니다.
서버폴더/logs/latest.log 확인
우선 작업이 익숙치 않을 때는 latest.log 를 sftp 프로그램을 통해 바로 보기보다는 일단 가져온 이후 해당 에러 메세지를 보는 것이 좋습니다.
에러 메세지가 무엇인가?
에러 메세지는 콘솔에서 봤을 때 exception 이라는 단어와 함께 무언가 한번에 쭉 뜬 것을 찾으면 됩니다.
위와 같은 것이 에러 메세지입니다.
에러 메세지에 대해 이해하기
세상에는 정말 다양한 에러 메세지가 있고 모든 에러 메세지에 대해 여기에서 기술하기는 불가능합니다. 하지만 컨픽 중 가장 흔하게 볼 수 있는 에러는 거의 정형화되어 있습니다.
위 에러 메세지를 계속해서 이어 확인해 보도록 하겠습니다. 컨픽 입장에서 에러 메세지에서 가장 주의깊게 봐야하는 파트는 거의 항상 최상단에 위치해 있습니다.
우선 위 메세지를 보면 AdvancedEnchantment 플러그인에서 현재 에러 때문에 enchantments.yml 파일을 제대로 로드하지 못했다는 것을 알려줍니다.
그리고 나서 이 exception 의 종류에 대해서도 org.bukkit.configuration.InvalidConfigurationException: 이렇게 알려주고 있습니다.
메세지에서 config, yaml 같은 것이 나오는 경우 yml format 자체에 오류가 있다는 뜻입니다. yml 은 단순히 문자열이 아니고 key 와 value 가 존재하는 데이터를 담는 일종의 데이터베이스이기 때문에 ' 를 너무 많이 또는 부족하게 적거나 ( 이를 제대로 "닫히지 않았다" 라고 보통 표현합니다 ) 스페이스바나 탭이 잘못되어 있는 경우 ( 이를 indentation 이 잘못되었다 라고 보통 표현합니다 ) 문제가 생길 수 있습니다.
이 경우 yaml 파일을 https://www.yamllint.com/ 와 같은 사이트에서 문법이 제대로 되어있는지 체크해 보거나 이 예외 문구에 적혀있는
를 보고 문제점을 수정 할 수 있습니다. 또한 visual studio 같은 IDE 는 yaml 이나 json 에 구조적인 문제점이 있는 경우 바로 캐치해서 빨간색으로 에러 표시를 해 주니 생산성에 도움이 됩니다. 다만 혼자서도 수정을 할 줄 아는 편히 향후 실수를 줄이는 대에는 도움이 좀 될 수 있습니다.
컨픽 잘못이 아닌 경우
모든 에러가 컨픽 잘못은 아닙니다. 플러그인 자체의 결함인 경우도 적지 않고, 최소한 예외처리를 좀 덜 한 경우가 있을 수 있습니다.
예외처리를 덜 했다는 말은 발생할 수 있는 모든 상황에 대해 예외처리를 하지 않았다는 뜻입니다. 서버 자체 플러그인 또한 유저가 사용하는 기능에 대해서는 생각할 수 있는 모든 기능들에 대해 예외처리를 하지만 어드민만 쓰는 기능이거나 소수의 관리진들만 쓰는 기능에서는 예외처리를 따로 하지 않는 경우가 많습니다. 그렇기에 정확히 의도한 바로만 기능을 사용해야 합니다.
예외가 뜨는 경우 예외 전체를 복붙하여 개발자에게 전달하는 것이 중요합니다. 특히 아까 예외에서 본
이렇게 생긴 것들을 stacktrace 라고 하는데 이 파트를 보내주어야 개발자가 어떤 부분에서 문제가 발생했는지 체크하고 수정을 할 수 있습니다.
Last updated