Computer 그리고 Developer/dW

[dW] XML 구문을 분석할 때 발생하는 오류 처리하기

버리야 2008. 12. 9. 10:31
반응형

어떤 프로그램이던지 오류가 있기 마련이고, 그에 대한 해결을 얼마나 어떻게 잘해야하는건 프로그래머에게 달려있다.
프로그램을 짜는 사람이 사용자입장에서 보아도 제일 화가나는 프로그램은 이런 오류가 있다! 하고 그냥 죽어버린다거나, 심지어는 오류를 뱉어내지도 않고 그냥 죽는 프로그램일 것이다.

이러한 오류를 처리하기 위해선, 우수한 오류 처리 코드 요건이 있는데..
  • 사용자를 우선한다.
    • 뉴저지 주에 사는 컴퓨터 사용자든, 3층에 있는 웹 개발자든, 뉴욕 증권 거래소 소장이든, 일단 내 고객이 누구인지 파악하고나면, 해당 고객이나 고객층을 고려하여 코드를 작성한다. 내 고객이 일반 컴퓨터 사용자라면 프로그래밍 용어를 배제하고 이해하기쉬운 오류 메시지를 제공한다.

  • (꼭 필요하지 않는 한) 프로그램 흐름을 방해하지 않는다.
    • 문제를 돌아가는 길을 찾는다. 프로그램을 죽이거나, “죄송합니다. 운이 없군요”라는 문구를 내놓거나, 호출 스택 내용을 쏟아내는 방식은 오류 처리가 아니다. 이런 행위는 오류 보고다. 진짜로 어쩌지 못하는 최악의 상황에서만 프로그램 흐름을 완전히 중단한다. 파일이 완전히 누락되었거나, 자료가 복구하지 못할정도로 손상되었거나, XML 문서에서 필수 엘리먼트가 빠졌을 때만 사용자 작업을 중단한다. 고속도로 네다섯 곳이 홍수로 끊기고뒷골목이 완전히 수몰되었을 경우에만 가는 길을 중단하라는 뜻이다. 즉, 진정한 재난이 아니라면 프로그램을 중단하지 말라는 뜻이다.

  • 유용한 정보를 제공한다.
    • 오류를 어떻게 처리하든 오류 처리 코드는 유용한 정보를 제공해야 한다. 프로그램 사용자가 원했거나 요청한 정보를 제공하거나애초에 프로그램이 제공하려던 정보를 제공한다면 더 이상 바랄 나위가 없다. 우아하게 복구하기 어렵거나 다른 방식으로 처리해야한다면 프로그램 사용자에게 현재 상황을 알려준다. 드물게 프로그램을 완전히 중단해야 한다면 문제 진단에 도움이 될만한 정보를 제공한다.

XML 오류를 제대로 처리하려면 SAX API를 잘 알아야 한다.  대다수 XML API는 SAX에 기반을 두기 때문이다.
SAX에서 오류를 처리하는 핵심 인터페이스는 org.xml.sax.ErrorHandler

public void warning(SAXParseException exception) throws Exception
public void error(SAXParseException exception) throws Exception
public void fatalError(SAXParseException exception) throws Exception
프로그램에서 의미 있는 오류 정보를 전달하는 가장 쉬운 방법이 SAXException으로 넘길 예외 클래스를 직접 정의하는 방법인데 getException(), getMessage(), getString()을 이용하여 의미있는 문구를 작성하는
것이 좋다.
코드에서는,
  1. 오류 메시지가 구체적이고 이해하기 쉬우며 유용하다. 또한 프로그래머가 아니라 실제 사용자에게 제공하는 정보다.
  2. 상태 코드와 오류 페이지 등 프로그램 관련 정보를 상위 응용 프로그램에 제공한다. 따라서 XML 구문분석 컴포넌트를 호출한 상위 프로그램이 판독 불가능한 호출 스택 대신 대처 가능한 정보를 얻는다.
  3. 심지어 재지정 페이지도 유용한 정보를 제공한다. 로그 파일에 기록하거나 나중에 프로그래머가 대응할 수 있도록 버그 보고서를 자동으로 생성할 때 필요한 정보를 포함한다.
이러한 내용의 일을 하는 것이 좋다.

더 자세한 내용은,  XML 구문을 분석할 때 발생하는 오류 처리하기 이곳에서~

오류를 효율적으로 처리하는 방법은 아직 나에겐 어렵지만 좀 더 심혈을 기울여 짜는 것이 나중에도 좋고 프로그램에도 좋을 듯한 뻔한 이야기이겠지?


반응형