반응형
전자정부프레임워크에서 로그 기능과 예외 처리 방법을 학습합니다. 이는 시스템 상태를 모니터링하고 문제를 신속하게 해결할 수 있도록 도와주는 중요한 기능입니다.
1. 로그(Log) 기능 구현
1-1. Log4j 설정
전자정부프레임워크는 기본적으로 Log4j를 사용하여 로그를 처리합니다. 먼저 Log4j 설정 파일을 작성합니다.
log4j.xml
src/main/resources/log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %-5p %c{1} - %m%n"/>
</layout>
</appender>
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/app.log"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="5"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %-5p %c{1} - %m%n"/>
</layout>
</appender>
<root>
<priority value="debug" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
</log4j:configuration>
1-2. 로그 사용법
컨트롤러나 서비스 클래스에서 로그를 사용하려면 Log4j Logger 객체를 선언합니다.
ExampleController.java
import org.apache.log4j.Logger;
@Controller
public class ExampleController {
private static final Logger logger = Logger.getLogger(ExampleController.class);
@RequestMapping("/example")
public String example(Model model) {
logger.info("ExampleController 실행 시작");
try {
// 처리 로직
model.addAttribute("message", "작업 성공");
logger.debug("작업이 성공적으로 완료되었습니다.");
} catch (Exception e) {
logger.error("작업 중 오류 발생: ", e);
}
return "examplePage";
}
}
2. 예외(Exception) 처리 구현
2-1. 전역 예외 처리
Spring에서 제공하는 @ControllerAdvice를 사용하여 전역적으로 예외를 처리합니다.
GlobalExceptionHandler.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception ex, Model model) {
logger.error("예외 발생: ", ex);
ModelAndView mav = new ModelAndView();
mav.addObject("errorMessage", "시스템 오류가 발생했습니다. 관리자에게 문의하세요.");
mav.setViewName("errorPage");
return mav;
}
}
2-2. 특정 예외 처리
필요에 따라 특정 예외를 개별적으로 처리할 수 있습니다.
@ExceptionHandler(NullPointerException.class)
public String handleNullPointerException(NullPointerException ex, Model model) {
logger.warn("NullPointerException 발생: ", ex);
model.addAttribute("errorMessage", "잘못된 접근입니다.");
return "errorPage";
}
3. 테스트 및 결과 확인
3-1. 로그 확인
- 애플리케이션을 실행합니다.
- 콘솔과 logs/app.log 파일에서 로그가 출력되는지 확인합니다.
- 각 로그 수준(INFO, DEBUG, ERROR 등)에 따라 메시지가 다르게 출력됩니다.
3-2. 예외 처리 확인
- 특정 예외를 유발하는 URL로 접속합니다.
- 사용자 친화적인 오류 페이지가 표시되는지 확인합니다.
오류 페이지 예시
errorPage.jsp
<h1>오류 발생</h1>
<p>${errorMessage}</p>
4. 로그 및 예외 처리 시 유의사항
- 로그 관리
- 로그는 중요한 보안 정보(예: 비밀번호, 개인 정보)를 포함하지 않아야 합니다.
- 로그 파일이 과도하게 커지지 않도록 롤링 설정을 사용합니다.
- 예외 처리
- 사용자에게 구체적인 오류 메시지를 노출하지 않도록 주의합니다.
- 비정상 종료가 발생하지 않도록 모든 예외를 포괄적으로 처리합니다.
5. 마무리
오늘 학습한 로그와 예외 처리 기능은 애플리케이션의 안정성과 유지보수성을 향상시키는 핵심 요소입니다. 다음에서는 Ajax를 활용한 비동기 통신 기능에 대해 학습합니다.
반응형
'개발 > 전자정부프레임워크' 카테고리의 다른 글
RESTful 웹 서비스 개발 (0) | 2024.12.25 |
---|---|
Ajax를 활용한 비동기 통신 구현 (0) | 2024.12.25 |
전자정부프레임워크에서 파일 업로드 및 다운로드 구현 (0) | 2024.12.24 |
전자정부프레임워크에서 공통 코드 관리 및 메시지 처리 (2) | 2024.12.24 |
전자정부프레임워크의 화면 구성 및 템플릿 활용 (0) | 2024.12.24 |