감리 보안 점검에서 '부적절한 예외처리' 보안 약점이 나왔다.
try catch 문에서 catch (Exception e) 예외처리를 하는 건데, 어찌해야될지 몰라서 구글링과 발만 동동 굴리고 있었다.
하나하나 모두 예외에 따라서 분석 및 처리할 시간은 없다.
다행히도 지금으로부터 4년전 (2011년) 보안점검에 걸려서 누군가 후속조치를 한 소스코드를 발견했다.
물론, 후속조치한 소스코드가 맞는지는 모르겠지만 이게 맞을 것 같다라는 생각에 글을 남겨본다.
일단, 예외처리에 뭔가를 써줘야 감사를 넘어갈 수 있기 때문이다.... 그 방법 중에 하나가 그냥 로그를 남기는 방법.
일단, lo4j.Logger를 임포트 해준다. (드래그할 수 있어요.)
import org.apache.log4j.Logger;
그리고 catch (Exception e)문에 로그를 써준다.
/* 방법1 */
Logger.getLogger(클래스명.class).debug("IGNORED: " + e.getMessage());
/* 방법2 */
private static final Logger logger = Logger.getLogger(클래스명.class);
logger.debug("IGNORED: "+ e.getMessage() );
운영서버에 올라가는 코드에는 프린트문을 쓰면 안된다.
왜냐면, 감리 지적사항으로 나오기 때문!!!
자세한 설명으로
전자정부프레임워크 설명서(?)에 보면 이러한 문구가 있다.
Logging은 시스템의 개발이나 운용시 발생할 수 있는 사항에 대해서, 시스템의 외부 저장소에 기록하여, 시스템의 상황을 쉽게 파악할 수 있도록 도와준다.
많은 개발자가 Log을 출력하기 위해 일반적으로 사용하는 방식은 System.out.println()이다.
하지만 이 방식은 간편한 반면에 다음과 같은 이유로 권장하지 않는다.
1. 콘솔 로그를 출력 파일로 리다이렉트 할 지라도, 어플리케이션 서버가 재 시작할 때 파일이 overwrite될 수도 있음.
2. 개발/테스팅 시점에만 System.out.println()을 사용하고 운영으로 이관하기 전에 삭제하는 것은 좋은 방법이 아님.
3. System.out.println() 호출은 디스크 I/O동안 동기화(synchronized)처리가 되므로 시스템의 throughput을 떨어뜨림.
4. 기본적으로 stack trace 결과는 콘솔에 남는다. 하지만 시스템 운영 중 콘솔을 통해 Exception을 추적하는 것은 바람직하지 못함.
이러이러한 이유들 때문에, log4j를 전자정부프레임워크에서 사용하는 것을 권장한다.
'IT 자료' 카테고리의 다른 글
윈도우8 설치 지금은 연결할 수 없습니다 (0) | 2015.12.20 |
---|---|
널포인트 역참조 조치하기 (0) | 2015.12.02 |
DB2 PK 생성 및 삭제 (0) | 2015.11.11 |
이클립스 글꼴 (0) | 2015.09.03 |
DB2 한글 length 확인하기 (0) | 2015.08.20 |