Download presentation
Presentation is loading. Please wait.
Published byShinta Kurniawan Modified 6년 전
1
웹 애플리케이션 로깅 및 오류 처리 기법 웹 애플리케이션 로깅의 필요성을 이해한다 로깅의 분류 및 구현 방안을 학습한다
자카르타 commons 로깅 프레임워크의 활용 방안을 배운다 Log4J 기본 활용방안 및 설정법을 학습한다 종합 실습을 통한 웹 애플리케이션 로깅 설계를 이해한다 한빛미디어(주)
2
웹 애플리케이션 로깅 Section 01 개요 로깅의 필요성 로깅이란 ?
로깅(Logging)은 프로그램 개발이나 운영 시 발생하는 문제점을 추적하거나 운영상태를 모니터링하기 위한 텍스트 형식의 데이터를 남기는 것을 말함 로깅의 필요성 System.out.println() 메서드를 이용한 비 체계적 로깅의 대체 로깅의 분류 유형 설명 시스템 로깅 애플리케이션 내부 동작 과정에서 발생하는 내용에 대한 로깅 ∙ 네트워크 문제로 인한 DB 연결 실패 ∙ 데이터베이스 내부 처리에서 발생한 문제 ∙ 서버 시작/종료 관련 메시지 ∙ 기타 서버 프로그램 동작 중 발생한 문제 등 애플리케이션 로깅 사용자나 데이터와 관련된 내용에 대한 로깅 ∙ 사용자 로그인 히스토리 ∙ 웹의 경우 특정 페이지 요청 기록 ∙ 사용자 권한 관련 ∙ 특정 메서드 호출 및 파라미터 정보 ∙ 처리 데이터 확인용 메시지 등
3
웹 애플리케이션 로깅 Section 01 개요 로깅의 구현형태 형태 설명 프로그래머 임의 구현
프로그래머 임의로 로깅 정책을 수립 파일 I/O 기반의 로깅 클래스 구현 등을 통한 로깅 처리 비교적 손쉽게 구현할 수 있으나, 표준화가 되지 않았기 때문에 유지보수에 문제가 있음 서블릿 컨테이너 제공 웹 애플리케이션에서 대표적으로 이용할 수 있는 로깅의 구현 형태 톰캣과 같은 컨테이너에서 제공하는 API를 이용해 로깅을 하는 방식(톰캣로그파일 사용) 시스템 로깅의 처리에는 적합. 애플리케이션 로깅을 처리하기에는 다소 부적합 필터 혹은 리스너를 이용한 로깅 웹 애플리케이션의 특징을 사용한 로깅 구현 형태이다 필터의 특성상 적용 대상을 선택할 수 있으며 request, response 정보를 가로챌 수 있기 때문에 기존 애플리케이션을 수정하지 않고 추가적으로 필요한 로깅 수행가능(리스너도 유사) 자카르타 Commons 로깅 웹 뿐만 아니라 일반 애플리케이션까지 범용으로 이용할 수 있는 로깅 프레임워크 여러 로깅 API들을 단일화된 접근 방식으로 사용할 수 있도록 해줌 보통의 경우 내부적으로는 Log4j, JDK, Avalon 등의 로깅 API를 사용 애플리케이션에서는 commons-logging API를 통해 처리 Log4j를 이용한 로깅 Log4j는 현재 가장 대표적인 로깅 프레임워크로 비교적 쉬우며 다양한 기능을 제공 Log4j 단독으로도 사용될 수 있지만, commons-logging 패키지 사용을 권장 AOP를 이용한 로깅 AOP는 Aspect Oriented Programming의 약자로, 현재 운영 중인 애플리케이션의 코드를 수정하지 않고 기능을 수정하거나 추가할 수 있는 새로운 프로그래밍 기법임 기존 애플리케이션의 수정 없이 로깅 처리가 필요하다면 생각해볼 만한 방법임
4
웹 애플리케이션 로깅 Section 01 서블릿 컨테이너 제공 로깅 웹 애플리케이션에서 가장 기본이 되는 로깅 기법
주로 시스템 로깅을 처리하기 위해 사용함 컨테이너 마다 로그파일 위치나 파일명이 다름 톰캣 로그파일 디렉터리 메서드 설명 public void log(String msg) 시스템을 통해 문자열 형태의 내용을 출력한다. 톰캣의 경우 localhost.yyyy-MM-dd.log 파일에 기록. 이클립스의 경우 콘솔 메시지로만 출력된다. 로그 레벨은 INFO(정보)로 취급된다. public void log(String msg, Throwable throwable) Throwable 클래스는 모든 자바 오류와 예외의 슈퍼클래스. 메시지와 함께 특정 예외 처리 메시지를 함께 로깅할 수 있다. 로그 레벨은 SEVERE(심각)로 취급된다. 메서드 설명 톰캣 기본 디렉터리 톰캣 설치 디렉터리\logs 이클립스 + WTP workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\logs
5
웹 애플리케이션 로깅 Section 01 필터를 이용한 로깅 필터의 특성을 이용 필터를 이용한 로깅 구현 항목
특정 URL 요청에 선택적 적용이 가능 request, response 를 조작할 수 있음 웹 애플리케이션 전반에 걸쳐 서비스 차원에서의 로그를 관리 필터를 이용한 로깅 구현 항목 항목 설명 로그 파일 이름 보통 web.xml에 초기화 파라미터로 파일명을 등록한 후 참조한다. 로그 처리 init() 메서드 및 destroy() 메서드에서 처리한다. 자카르타 Commons 및 Log4j 등의 로깅 프레임워크를 이용한다. 필터 매핑 <filter-mapping> <filter-name> </filter-name> <servlet-name> </servlet-name> or <url-pattern> </url-pattern> </filter-mapping> 로깅 필터를 적용할 특정 서블릿 혹은 URL 기반의 매핑 정보를 설정한다.
6
웹 애플리케이션 로깅 Section 01 리스너를 이용한 로깅 리스너의 특성을 이용 리스너를 이용한 로깅 구현 항목
컨테이너의 특정 이벤트에 기반을 둔 로깅 구현에 적합 서블릿 스펙 이므로 모든 컨테이너 에서 호환 가능 시스템 로그와 애플리케이션 로그의 중간적 성격의 처리에 적합 리스너를 이용한 로깅 구현 항목 항목 설명 로그 파일 이름 보통 web.xml에 초기화 파라미터로 파일명을 등록한 후 참조한다. 로그 처리 자카르타 Commons 및 Log4j 등의 로깅 프레임워크를 이용하며 다음의 메서드에서 처리한다. <점스타일> ∙ contextInitialized() 및 contextDestroyed() 메서드 ∙ sessionCreated() 및 sessionDestroyed() 메서드</점스타일> 리스너 등록 리스너 등록 시 동일 이벤트에 대해 여러 리스너가 동작할 경우, 우선순위를 정해 순차적으로 실행될 수 있도록 주의한다.
7
웹 애플리케이션 로깅 Section 01 자카르타 Commons 로깅 개요 commons-logging 라이브러리 설치
개발자들에게 공통 로깅 API를 제공하기 위해 만들어진 프레임워크 서로다른 로깅 구현에 대한 사용을 표준화된 방법으로 가능하게 함 애플리케이션이 특정 로깅 API에 종속되는 것을 막아줌 대부분의 로깅 솔루션들은 commons-logging 을 지원 commons-logging 라이브러리 설치 로깅 구현체 설치 기본적으로 제공되는 로깅 구현체는 SimpleLog 클래스로 콘솔출력만 지원함 다양한 로깅설정 및 처리를 위해서는 Log4j 등 별도 설치 필요 항목 설명 기본 톰캣 톰캣 설치 디렉터리\common\lib 이클립스 + WTP WEB-INF\lib
8
웹 애플리케이션 로깅 Section 01 자카르타 Commons 로깅 로깅설정 로깅 구현체에 따라 다음과 같이 설정 필요
여러 로깅 구현체를 동시에 사용할 경우 정해진 순서에 따라 적용 순서 방법 1 프로퍼티 파일을 이용한 방법 ∙ 설정내용 기본: org.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog Log4j: org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger ∙ 클래스 경로 상에 위치한 commons-logging.properties 파일에 설정 2 시스템 프로퍼티를 이용한 방법 ∙ 속성 키: org.apache.commons.logging.Log ∙ 설정 내용은 프로퍼티 파일을 이용한 경우와 동일하다. ∙ 톰캣 시작 시 파라미터로 전달해야 한다. 3 Log4j 를 이용한 방법 ∙ 클래스 경로 상의 log4j.properties 파일에 설정 ∙ 1번 프로퍼티 파일 설정외의 Log4j 설정 필요(이 부분은Log4j에서 다시 설명한다) 4 기본 로깅 구현체 사용 ∙ SimpleLog 클래스 사용 ∙ 1번 설정만으로 사용
9
웹 애플리케이션 로깅 Section 01 자카르타 Commons 로깅 로깅API 사용하기
JSP, 빈즈 클래스, 서블릿 등에서 동일한 방법으로 사용 가능 패키지 import Log 클래스 참조 구하기 로그 수행(로그레벨에 따란 메서드 다름) import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Log log = LogFactory.getLog(Class class); Log log = LogFactory.getLog(String name); log.fatal(Object message); log.fatal(Object message, Throwable t);
10
웹 애플리케이션 로깅 Section 01 자카르타 Commons 로깅 로그레벨 모든 로깅 구현체 에서도 동일하게 사용됨
로그 레벨 처리 메서드 FATAL 가장 심각한 오류를 말한다. 상태 콘솔에 즉시 출력한다. ERROR 일반적인 오류를 말한다. 상태 콘솔에 즉시 출력한다. WARN 오류는 아니지만 주의를 요하는 경우를 말한다. deprecated된 API 사용 등이 여기에 해당한다. 상태 콘솔에 즉시 출력한다. INFO 런타임 시의 관심 있는 이벤트를 말한다. 상태 콘솔에 즉시 출력한다. DEBUG 시스템 흐름과 관련된 상세 정보를 말한다. 로그 파일로만 출력한다. TRACE 가장 상세한 형태의 정보를 말한다. 로그 파일로만 출력한다.
11
웹 애플리케이션 로깅 Section 01 Log4j를 이용한 로깅 Log4j 개요 Log4j 환경설정
아파치 Logging Service 프로젝트로 통합된 대표적인 오픈소스 로깅 프레임워크 자바 이외에 다양한 언어를 지원하는 호환 버전이 존재 Log4j 설치 : 부록CD의 log4j.jar 파일을 WEB-INF/lib 폴더로 복사 Log4j 환경설정 기본톰캣 사용시 : WEB-INF\classes\log4j.properties 이클립스 사용시 : src\log4.properties 에 두면 자동으로 관리됨 키 값 내용 log4j.rootLogger 최상위 로그 설정으로, 다음과 같은 항목이 온다. ∙ 로그 레벨: FATAL, ERROR, WARN, INFO, DEBUG ∙ appender 이름: 해당 appender의 세부 설정을 위해 사용할 이름 log4j.appender.xxx rootLogger에서 설정한 appender 이름(xxx)에 대한 실제적인 클래스를 지정한다. appender는 파일, 콘솔, 이메일 등 다양한 로그 처리 매체 설정을 말함 ∙ 교재 [표 14-13] appender 클래스 종류 참조 log4j.appender.xxx.layout 해당 appender를 통해 출력되는 로그 메시지의 형태를 관리할 layout 클래스를 지정한다. ∙ 교재 [표 14-14] [표 14-15] layout 클래스 종류 및 형식 참조
12
웹 애플리케이션 로깅 Section 01 Log4j를 이용한 로깅 Log4j API 사용
자체 API 를 제공하지만 가급적이면 commons-logging API 사용을 권장 패키지 import Logger 클래스 인스턴스 생성 로그 처리 import org.apache.log4j.Log; static Logger logger = Logger.getLog(Class class) log.info(“로그메시지”);
13
웹 애플리케이션 로깅 교재 : 533 ~ 542 페이지 예제 개요 웹 애플리케이션에 대한 간단한 로깅정책 수립
Log4j를 이용해 콘솔, 파일을 이용해 다양한 포맷의 로깅 수행 필터 및 리스너를 이용해 특정 상황에 대한 로깅 설정
14
웹 애플리케이션 초기화 파라미터 Section 02 개요 초기화 파라미터 응용 분야 ServletConfig를 이용하는 경우
데이터베이스 접속 주소 혹은 JNDI 이름 등 변경이 가능한 값을 설정 함 변경될 수 있는 정보를 프로그램내 하드코딩 해둘 경우 발생하는 유지보수 문제해결 프레임워크 등 사용시 환경설정 파일의 위치나 이름 등 설정 ServletConfig를 이용하는 경우 서블릿 단위로 설정하기 때문에 해당 서블릿에서만 참조가 가능하다. 서블릿 코드 내에서 사용법 ServletContext를 이용하는 경우 웹 애플리케이션 단위로 설정하기 때문에 모든 JSP 나 서블릿에서 참조 가능 getServletConfig().getInitParameter("param-name에서의 설정 이름") getServletContext().getInitParameter("param-name에서의 설정 이름")
15
웹 애플리케이션 오류 처리 기법 Section 02 개요 로깅과 오류처리의 차이 컨테이너 오류 처리 설정
로깅은 운영 중인 애플리케이션의 현황의 모니터링 및 문제발생시 참고자료 오류처리는 발생한 오류를 어떻게 적절히 처리할 수 있는가의 문제 컨테이너 오류 처리 설정 대표적인 웹 애플리케이션 오류처리 코드(서버 기준) 오류코드 내용 100 Continue 200 OK, 오류 없이 전송 성공 201 Created, POST 명령 실행 및 성공 400 Bad request, 클라이언트의 잘못된 요청으로 처리할 수 없음 403 Forbidden, 접근이 거부된 문서를 요청함 404 Not found, 문서를 찾을 수 없음 405 Method not allowed, 리소스를 허용하지 않음 406 Not acceptable, 허용할 수 없음 500 Internal server error, 내부 서버 오류(잘못된 스크립트 실행 시) 501 Not implemented, 클라이언트에서 서버가 수행할 수 없는 행동을 요구함 502 Bad gateway, 서버의 과부하 상태 503 Service unavailable, 외부 서비스가 죽었거나 현재 멈춘 상태 505 HTTP version not supported
16
웹 애플리케이션 오류 처리 기법 Section 02 개요 컨테이너 오류 처리 설정
서버에서 오류 발생시 자체 오류 메시지 출력 -> 보기에 좋지 않음, 사이트 신뢰 저하 각각의 오류에 대해 별도 처리 페이지 지정 가능 web.xml 설정 오류 유형 사용 예 프로그램 오류 <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/error/error.jsp</location> </error-page> 서버 오류 <error-code>500</error-code> <location>/error/500-error.jsp</location>
17
웹 애플리케이션 오류 처리 기법 Section 02 JSP 오류 처리 JSP 에서 발생하는 오류에 대한 처리 방법
JSP 페이지 지시어의 errorPage, isErrorPage 속성을 이용함 -> 교재 145페이지 JSP 2.0 이상에서 부터 ErraData 클래스를 통해 보다 세부적인 에러정보 제공 pageContext 내장객체의 속성 형태로 제공됨 errorData 사용 예 속성 데이터 유형 설명 requestURI String 요청이 실패한 URI servletName 실패한 JSP나 서블릿 이름 statusCode int 실패 상태 코드 throwable Throwable 오류 페이지를 불러들인 예외 요청 실패 URI: ${pageContext.errorData.requestURI} 상태 코드: ${pageContext.errorData.statusCode} 예외 유형: ${pageContext.errorData.throwable}
18
웹 애플리케이션 오류 처리 교재 : 545 ~ 551 페이지 예제 개요
web.xml 설정을 통해 서버 오류를 개별 파일로 처리하도록 함 고급 JSP 오류 처리 실습
Similar presentations