Spring Boot Access Log 구현 가이드 | AOP + Lombok + 실무 로그 분석
실무에서 바로 쓰는 Spring Boot Access Log 구현 전략 (AOP + Lombok 활용)
Spring Boot 애플리케이션에서 HTTP 요청 로그(Access Log)를 자동으로 캡처하고, 요청자 IP, 요청 URI, HTTP 메서드, 파라미터까지 정확히 수집하는 방법을 단계별로 정리합니다. 이 가이드는 유지보수성과 확장성을 고려해 Lombok과 AOP를 결합한 구현 방식을 제시하며, 운영 환경에서 실무적으로 활용 가능한 패턴을 설명합니다. 본문 전체에서 Spring Boot Access Log 구현 가이드 | AOP + Lombok + 실무 로그 분석 키워드를 적절히 반영합니다.
1. Maven 의존성 설정 (Spring Boot + Lombok + AOP)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
Lombok을 도입하면 DTO와 빌더 코드를 대폭 줄여 가독성과 유지보수가 개선됩니다. 의존성 구성만으로도 AOP와 Lombok 결합에 필요한 기초를 마련할 수 있으며, 이 문서는 Spring Boot Access Log 구현 가이드 | AOP + Lombok + 실무 로그 분석 관점에서 실용적인 설정을 권장합니다.
2. Access Log DTO 정의
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
@Getter
@Builder
@ToString
public class AccessLog {
private String ip; // 요청자 IP
private String uri; // 요청 URI
private String method; // HTTP Method
private String params; // 요청 파라미터
private long timestamp; // 요청 시간 (밀리초)
}
Builder 패턴과 Lombok 애노테이션을 사용하면 AccessLog 객체를 깔끔하고 안전하게 생성할 수 있습니다. 운영 로그 포맷과 구조를 미리 정의해 두면 로그 파싱과 분석 파이프라인 구성 시 이점을 얻습니다. 이 접근법은 Spring Boot Access Log 구현 가이드 | AOP + Lombok + 실무 로그 분석의 핵심 원칙과 일치합니다.
3. AOP Aspect로 Access Log 자동 기록
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.Arrays;
import java.util.stream.Collectors;
@Slf4j
@Aspect
@Component
public class AccessLogAspect {
@AfterReturning("within(@org.springframework.web.bind.annotation.RestController *)")
public void logAccess(JoinPoint joinPoint) {
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attrs == null) return;
HttpServletRequest request = attrs.getRequest();
// 요청 파라미터 문자열 생성
String params = request.getParameterMap().entrySet().stream()
.map(e -> e.getKey() + "=" + Arrays.toString(e.getValue()))
.collect(Collectors.joining(", "));
// AccessLog 객체 생성
AccessLog logEntry = AccessLog.builder()
.ip(request.getRemoteAddr())
.uri(request.getRequestURI())
.method(request.getMethod())
.params(params)
.timestamp(System.currentTimeMillis())
.build();
// 로그 출력
log.info("AccessLog: {}", logEntry);
// 실무 확장: DB 저장 또는 외부 로그 서버 전송 가능
}
}
이 Aspect는 RestController 내의 모든 엔드포인트 응답이 반환된 직후에 트리거되어 요청 정보를 수집합니다. 파라미터 직렬화와 AccessLog 빌더 사용으로 로그 형식을 일관되게 유지할 수 있으며, 필요하면 이 지점에서 비동기 전송이나 메시지 큐로 위임할 수 있습니다. 위 코드는 Spring Boot Access Log 구현 가이드 | AOP + Lombok + 실무 로그 분석을 따른 간결하고 확장 가능한 예시입니다.
4. 실무 확장 전략 (로그 분석 & 트래픽 모니터링)
- DB 저장: AccessLog를 MySQL/PostgreSQL 테이블에 적재해 쿼리 기반 분석을 수행
- ELK 연동: Logstash → Elasticsearch → Kibana 조합으로 실시간 시각화와 대시보드 구성
- 필터링: 관리용 URI나 헬스체크 등 노이즈가 되는 항목을 선별 제외
- 비동기 처리: @Async, Kafka 등으로 로그 처리 지연을 최소화
- 통계 분석: 요청 빈도, 평균 응답 시간, IP별 트래픽 패턴 등을 집계
5. 예제 Access Log 출력
2025-11-13 09:00:12 INFO AccessLogAspect: AccessLog: AccessLog(ip=192.168.1.100, uri=/api/users, method=GET, params=id=[10], timestamp=1731460812000)
2025-11-13 09:00:14 INFO AccessLogAspect: AccessLog: AccessLog(ip=192.168.1.101, uri=/api/orders, method=POST, params=orderId=[123], timestamp=1731460814000)
6. SEO 최적화 키워드 포함
이 문서에는 핵심 검색어와 관련 용어를 의도적으로 포함했습니다. "Spring Boot Access Log 구현 가이드 | AOP + Lombok + 실무 로그 분석"이라는 키워드는 구현 단계와 확장 전략을 찾는 개발자들이 바로 찾을 수 있도록 본문 곳곳에 자연스럽게 배치했습니다. 또한 Lombok, AOP, HTTP 요청 로그, RestController, DTO, 로그 분석 등 실무 중심 키워드를 활용해 검색 가시성을 높였습니다.
🚀 이 주제, 우리 서비스에 어떻게 적용할까요?
Spring Boot Access Log 구현 가이드 | AOP + Lombok + 실무 로그 분석를 실제 서비스와 조직에 녹여보고 싶다면, 현재 아키텍처와 운영 방식을 한 번 점검해 보는 것부터 시작해 보세요. 팀 위키나 기술 블로그, 사내 스터디 주제로도 아주 좋습니다.
이 글이 도움이 됐다면, 비슷한 엔터프라이즈 사례 글들도 함께 살펴보면서 우리 조직에 맞는 운영 상용구를 정의해 보세요.
7. 결론
요약하면, AOP로 진입-응답 시점을 포착하고 Lombok으로 로그 모델을 관리하면 적은 코드 변경으로도 전 트래픽에 대한 일관된 Access Log를 확보할 수 있습니다. 필요에 따라 DB 적재, ELK 파이프라인, 비동기 처리로 확장하면 운영성과 분석 역량을 높일 수 있습니다. 본 가이드는 Spring Boot Access Log 구현 가이드 | AOP + Lombok + 실무 로그 분석 관점에서 실무 적용 가능한 방법을 제시했습니다.
댓글
댓글 쓰기