Exception 다시 질문드리겠습니다..
- 작성자 :
- 이*수
- 작성일 :
- 2013-03-07 08:24:57
- 조회수 :
- 1,180
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
질문이 길어서 첨부 파일로 남겨놨습니다..
Exception 에대한 질문인데요.. 자세한 설명 부탁드립니다 ..
감사합니다 !! 오늘도 수고하십시오~
Exception 에대한 질문인데요.. 자세한 설명 부탁드립니다 ..
감사합니다 !! 오늘도 수고하십시오~
A
안녕하세요. 이유수님..
자세한 설명은.. 답변으로는 내용이 많아서... 설명드리기가 어려울 것 같습니다..
개념적으로는 Exception에 대한 처리가 2개 부분으로 분리가 됩니다.
하나는 AOP 방식에 의해 Exception 발생을 로그에 남기는 역할과... 발생된 Exception에 따라.. 화면을 제어하는 방식으로요..
context-aspect.xml에 정의된 부분이 AOP에 의해 Exception 정보를 로그에 남기는 부분인데.. 이 부분은 다음 가이드를 참조하시면 되실 것 같습니다..
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte2:bsl:exception_handling
그러나.. 이 부분은.. 오류 내용을 서버 상에 로그에는 남길 수 있지만.. 유수님이 요청하신 Exception 정보를 화면에 남기는 것은.. 불가능합니다.
그래서.. 두번째 요소인.. 화면제어가 필요합니다..
표준프레임워크에 적용된 Spring 프레임워크의 경우는 이전 답변에 드린 것 처럼.. ExceptionResolver를 통해.. 특정 Exception이 DispatcherServlet에 전달이 되면.. 해당 Exception에 대한 view를 리턴합니다.. 즉, 지정된 JSP로 넘어가는 거죠..
여기서.. 문제는 .. 발생된 Exception .. 정확하게는 DispatcherServlet에서 받은 Exception 종류를 확인해야 하는데.. 올려주신 로그 상으로는 식별이 되지 않습니다. (내용 상에 MySQLIntegrityConstraintViolationException 등이 표시되어 있지만.. 실제 전달된 Exception과는 차이가 있음)
정상적인 경우라면.. Spring에 의해... DBMS에 종속된 Exception이 Spring DAO의 범용적인 Exception으로 전환됩니다. (아마도.. 이 경우는 org.springframework.dao.DataIntegrityViolationException이 발생되었을 것으로 판단..)
정확하게 확인하기 위해서는 오류를 발생된 Controller 부분에 try catch로.. Exception을 로깅해보시면 되실 것 같습니다...
그런 후에.. 이전 답변 드린 것 같은 부분에..
발생된 Exception 정보와 리턴 시킬 view (jsp)를 처리하시면 됩니다....
그리고.. 해당 JSP에서 오류의 내용을 화면 등에 처리하시 위해서는... ${exception} 모델을 가지고 처리하시면 되실 것 같습니다... ("exception"라는 이름으로 request의 attribute에 담기고.. 이 정보를 받아서.. jsp에서 처리하여 표시 가능)
다만, 보안 상의 문제로.. Exception 정보를 사용자 화면에 직접 표시해 주는 것은 바람직하지 않습니다. (보안 코딩 상에 점검 대상)
그럼.. 즐거운 하루되십시오.
감사합니다.
자세한 설명은.. 답변으로는 내용이 많아서... 설명드리기가 어려울 것 같습니다..
개념적으로는 Exception에 대한 처리가 2개 부분으로 분리가 됩니다.
하나는 AOP 방식에 의해 Exception 발생을 로그에 남기는 역할과... 발생된 Exception에 따라.. 화면을 제어하는 방식으로요..
context-aspect.xml에 정의된 부분이 AOP에 의해 Exception 정보를 로그에 남기는 부분인데.. 이 부분은 다음 가이드를 참조하시면 되실 것 같습니다..
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte2:bsl:exception_handling
그러나.. 이 부분은.. 오류 내용을 서버 상에 로그에는 남길 수 있지만.. 유수님이 요청하신 Exception 정보를 화면에 남기는 것은.. 불가능합니다.
그래서.. 두번째 요소인.. 화면제어가 필요합니다..
표준프레임워크에 적용된 Spring 프레임워크의 경우는 이전 답변에 드린 것 처럼.. ExceptionResolver를 통해.. 특정 Exception이 DispatcherServlet에 전달이 되면.. 해당 Exception에 대한 view를 리턴합니다.. 즉, 지정된 JSP로 넘어가는 거죠..
여기서.. 문제는 .. 발생된 Exception .. 정확하게는 DispatcherServlet에서 받은 Exception 종류를 확인해야 하는데.. 올려주신 로그 상으로는 식별이 되지 않습니다. (내용 상에 MySQLIntegrityConstraintViolationException 등이 표시되어 있지만.. 실제 전달된 Exception과는 차이가 있음)
정상적인 경우라면.. Spring에 의해... DBMS에 종속된 Exception이 Spring DAO의 범용적인 Exception으로 전환됩니다. (아마도.. 이 경우는 org.springframework.dao.DataIntegrityViolationException이 발생되었을 것으로 판단..)
정확하게 확인하기 위해서는 오류를 발생된 Controller 부분에 try catch로.. Exception을 로깅해보시면 되실 것 같습니다...
그런 후에.. 이전 답변 드린 것 같은 부분에..
발생된 Exception 정보와 리턴 시킬 view (jsp)를 처리하시면 됩니다....
그리고.. 해당 JSP에서 오류의 내용을 화면 등에 처리하시 위해서는... ${exception} 모델을 가지고 처리하시면 되실 것 같습니다... ("exception"라는 이름으로 request의 attribute에 담기고.. 이 정보를 받아서.. jsp에서 처리하여 표시 가능)
다만, 보안 상의 문제로.. Exception 정보를 사용자 화면에 직접 표시해 주는 것은 바람직하지 않습니다. (보안 코딩 상에 점검 대상)
그럼.. 즐거운 하루되십시오.
감사합니다.