설정¶
모든 설정은 api.log 접두사 아래. 스타터는 합리적인 기본값을 제공 — 대부분 프로젝트는 아무것도 설정 안 해도 됩니다.
속성¶
| 속성 | 타입 | 기본값 | 설명 |
|---|---|---|---|
api.log.enabled |
boolean |
true |
마스터 스위치. false면 ApiLogAutoConfiguration이 비활성화되어 어떤 빈도 등록되지 않습니다 (리스너, 서비스, RestApiClientUtil 모두 없음). |
api.log.schema.management |
BUILTIN | FLYWAY | NONE |
BUILTIN |
api_log 테이블 생성 방식. BUILTIN (기본) — 스타터가 Spring Boot의 DataSourceScriptDatabaseInitializer로 부팅 시 CREATE TABLE IF NOT EXISTS 실행; 멱등적, 마이그레이션 도구 불필요. FLYWAY — classpath:db/api-log를 spring.flyway.locations에 추가해 번들 마이그레이션이 사용자 마이그레이션과 함께 실행됨 (org.flywaydb:flyway-core 클래스패스 필요; 스타터에선 optional). NONE — 사용자가 직접 DDL 적용 (스키마 참고). |
표면적이 이게 전부입니다 — 스타터는 의도적으로 최소화. 대부분의 동작(재시도 정책, 비동기 executor, Flyway 위치)은 표준 Spring Boot 설정에서 옵니다.
런타임에 비활성화¶
비활성화 시:
ApiEventListener등록 안 됨 → 누군가 이벤트 발행해도 무시됨ApiLogService등록 안 됨 →api_log에 쓰기 없음RestApiClientUtil등록 안 됨 (서비스에 의존)- Flyway는 여전히 마이그레이션을 적용 (테이블은 어쨌든 생성) — 이것도 건너뛰려면
db/migration/V1.0__create_api_log.sql을 Flyway 위치에서 제외
운영에서 중요한 표준 Spring Boot 설정들¶
api-log 전용은 아니지만 프로덕션에서 튜닝할 가능성이 높은 것들:
비동기 executor¶
@Async 리스너는 Spring Boot 기본 taskExecutor를 사용. 커스터마이징 (큐 제한, 풀 크기 등):
spring:
task:
execution:
pool:
core-size: 8
max-size: 32
queue-capacity: 1000
keep-alive: 60s
thread-name-prefix: api-log-
Java 21 + Virtual Threads에서는 executor 자체가 대체됩니다:
api-log에 권장됩니다 — Virtual Threads는 "DB 쓰기 대기가 많은" 워크로드에 딱 맞습니다.
Flyway 마이그레이션 위치¶
api.log.schema.management=flyway이면 스타터가 spring.flyway.locations에 classpath:db/api-log를 추가합니다. 기존 항목은 그대로 유지:
spring:
flyway:
locations:
- classpath:db/migration # 본인 마이그레이션 (Spring Boot 기본 경로)
# api-log의 classpath:db/api-log는 스타터가 자동으로 추가
classpath:db/api-log를 직접 선언할 필요 없습니다. 만약 명시적으로 선언하면 locations 리스트에 두 번 나타남 — Flyway는 문제 없지만 시끄럽습니다. 빼고 customizer에 맡기세요.
JPA 속성¶
스타터는 spring-boot-starter-data-jpa에 의존합니다. JPA 설정은 직접:
spring:
jpa:
hibernate:
ddl-auto: validate # 권장 — Flyway가 스키마 주체
show-sql: false # 디버깅 때만 true
properties:
hibernate:
jdbc:
batch_size: 50 # 리스너는 이벤트당 행 하나 쓰므로 배치가 큰 효과 없음
DataSource 풀¶
기본 설정에서 리스너는 이벤트당 행 하나를 씁니다. HikariCP 풀 사이징:
정확한 숫자는 트래픽에 따라 — 기본 10으로 시작, hikaricp_connections_active 메트릭 보면서 조정.
자동 구성된 빈 오버라이드¶
같은 타입의 빈을 직접 정의하면 스타터의 @ConditionalOnMissingBean이 양보합니다:
@Configuration
public class CustomApiLogConfig {
@Bean
public ApiLogService apiLogService(ApiLogRepository repo, ObjectMapper mapper) {
return new MyCustomApiLogService(repo, mapper); // 직접 만든 서브클래스
}
}
ApiEventListener와 RestApiClientUtil도 같은 패턴.