Request Log 모아서 저장하기
배경
- 요청마다 로그를 DB에 저장하면 요청 처리 시간에 DB 쓰기 시간도 포함
- 메모리 queue에 로그를 모으고 5분마다 저장하도록 변경
저장 시간 비교
- 실제 서비스 코드와 별도 PostgreSQL 환경에서 로그 2,000건 저장
- Java 21, Spring Boot 3.5.4, PostgreSQL 16.15
- 단일 thread에서 실행
- 실행 순서를 바꿔가며 방식별로 5회 측정. 아래 값은 중앙값
| 항목 | 매 요청 즉시 저장 | 모아서 저장 |
|---|---|---|
| 전체 저장 시간 | 4.517초 | 1.072초 |
| 성공 트랜잭션 수 | 2,000회 | 1회 |
| INSERT 수 | 2,000회 | 2,000회 |
- INSERT 횟수는 같고 트랜잭션 수 감소
- DB 저장 시간 약 76% 감소. queue에서 기다리는 5분은 측정에서 제외
- 저장 전에 프로세스가 종료되면 메모리에 쌓인 로그 유실 가능