지금 진행하고 있는 골키퍼 버전2 프로젝트를 개발하면서 구글 로그인 기능을 처음 구현했다. 처음 하는 거다보니 예상하지 못한 오류들이 많이 발생했고, 브레이크 포인트를 걸면서 확인해가기에는 오류가 너무 많았다. 그래서 Logging 작업을 철저히 해놓고 다시 오류를 고쳐나가기로 했다.
오류가 났는지 정확히 확인하기 위해서는 http 요청
, 비즈니스 로직을 타면서 호출되는 Spring Bean
, http 응답 정보
를 기록해야 한다고 판단했다.
본론에 들어가기 전에, Logging이 뭔지부터 정의하고 넘어가보자. 요즘 핫한 ai 에게 Logging 이 뭐냐고 물어보면 이렇게 대답해준다.
Logging is the process of recording events or information in a computer system for the purpose of analysis, tracking, and debugging. It allows developers to monitor the behavior of their software, understand and diagnose issues, and gain insights into how it's being used. Logs can also be used for auditing, performance analysis, and security purposes. -Chat GPT
한국말로 번역하면, “컴퓨터 시스템에서 발생하는 각종 이벤트나 정보들을 기록하는 작업으로 분석, 추적, 디버깅을 그 목적으로 한다.” 라고 번역할 수 있다.
Spring Boot, 정확히는 implementation 'org.springframework.boot:spring-boot-starter-web'
을 적용한 Spring MVC 웹 시스템에서 로그를 남길때 사용할 만한 기술들은 4가지 정도가 있다.
자바로 웹 개발을 할 때 사용되는 원천기술인 Servlet 스택에 포함된 요소이다. Servlet 컨테이너가 요청을 올바른 Servlet에 전달해 주기 전에, Filter를 거치게 된다. 그림으로 표현하면, 이런 식이다.
Spring Boot에서 Filter 의 동작 위치
<aside> 🔥 즉, Spring 컨테이너와 무관한 내용들(http 요청)을 로그로 남기기에 적당한 위치라고 볼 수 있다.
</aside>
Spring MVC Framework 에서 제공하는 기술로, 컨트롤러 실행 전후에 특정 작업을 추가할 수 있도록 하는 구성 요소이다. 다수의 컨트롤러에 대해 동일한 기능을 적용해야 할 때 사용할 수 있는 것이다. 그림으로 표현하면
인터셉터 동작과정
org.springframework.web.servlet.HandlerInterceptor
인터페이스를 구현하고, Spring 설정에 등록하면 사용할 수 있다.
HandlerInterceptor
JavaDoc (Spring Boot v2.7.7)