로깅 표준 및 가이드라인
개요
DTA-WIDE 시스템에서는 다양한 유형의 로그를 수집하고 관리합니다. 이 문서에서는 시스템 전반의 로깅 표준, 특히 HTTP API 요청 로깅에 대한 가이드라인을 제공합니다.
로그 유형
1. 애플리케이션 로그
- 일반 애플리케이션 동작 로그
- 에러 및 경고 로그
- 디버그 로그
2. HTTP API 요청 로그
- API 엔드포인트 접근 로그
- 요청/응답 정보 로그
- 성능 메트릭 로그
3. 감사 로그
- 비즈니스 중요 이벤트 로그
- 보안 관련 활동 로그
- 규정 준수 감사 로그
4. 인프라 로그
- 시스템 리소스 로그
- 네트워크 활동 로그
- 배포 및 구성 변경 로그
HTTP API 요청 로깅
로깅 목적
HTTP API 요청 로깅의 주요 목적:
- 시스템 사용 패턴 파악
- 성능 모니터링 및 최적화
- 문제 해결 및 디버깅
- 보안 모니터링 및 이상 탐지
- 사용량 분석 및 용량 계획
로깅 구조
기본 로그 필드
HTTP API 요청 로그의 기본 필드:
| 필드 | 설명 | 예시 |
|---|---|---|
| timestamp | 요청 발생 시간 | 1679471431000 |
| request_id | 고유 요청 식별자 | req-1234-5678-90ab-cdef |
| method | HTTP 메서드 | GET, POST, PUT, DELETE |
| path | 요청 경로 | /v1/users/123 |
| query_params | 쿼리 파라미터 | {"limit":"20","offset":"0"} |
| user_id | 요청 사용자 ID | user_123 (인증된 경우) |
| client_ip | 클라이언트 IP 주소 | 192.168.1.1 |
| user_agent | 사용자 에이전트 | Mozilla/5.0 (Windows...) |
| status_code | HTTP 상태 코드 | 200, 400, 500 |
| response_time | 응답 시간(ms) | 42 |
| request_size | 요청 크기(바이트) | 1024 |
| response_size | 응답 크기(바이트) | 2048 |
| correlation_id | 요청 추적 ID | corr-1234-5678 |
상세 로그 필드 (선택적)
필요에 따라 추가할 수 있는 상세 필드:
| 필드 | 설명 | 예시 |
|---|---|---|
| request_headers | 요청 헤더 | {"content-type":"application/json"} |
| request_body | 요청 본문 (민감 정보 제외) | {"name":"John Doe"} |
| response_headers | 응답 헤더 | {"content-type":"application/json"} |
| response_body | 응답 본문 (요약) | {"id":"user_123","name":"John"} |
| error_details | 오류 세부 정보 | {"code":"DB_001","message":"DB conn failed"} |
BigQuery 테이블 구조
CREATE TABLE `dta-cloud-de-ENVIRONMENT.log.api_requests` (
timestamp TIMESTAMP(3),
request_id STRING,
method STRING,
path STRING,
query_params JSON,
user_id STRING,
client_ip STRING,
user_agent STRING,
status_code INT64,
response_time INT64,
request_size INT64,
response_size INT64,
correlation_id STRING,
request_headers JSON,
error_details JSON,
service STRING,
environment STRING
)
PARTITION BY DATE(timestamp)
CLUSTER BY method, path, status_code;
HTTP 요청 로그와 감사 로그의 관계
HTTP API 요청 로그와 감사 로그는 서로 다른 목적을 가지지만 상호 보완적입니다:
| 특성 | HTTP API 요청 로그 | 감사 로그 |
|---|---|---|
| 목적 | 기술적 모니터링, 디버깅 | 비즈니스 이벤트 추적, 규정 준수 |
| 범위 | 모든 API 요청 | 중요한 비즈니스 이벤트 |
| 상세도 | 기술적 상세 정보 | 비즈니스 컨텍스트 |
| 사용자 | 개발자, 운영팀 | 보안팀, 규정 준수팀, 비즈니스 관계자 |
| 보존 | 일반적으로 더 짧음 | 규정에 따라 장기간 |
연계 방법
HTTP API 요청과 감사 로그를 연결하기 위해 다음 방법을 사용합니다:
- 상관 관계 ID(Correlation ID): 모든 HTTP 요청과 그로부터 생성된 감사 로그에 동일한 상관 관계 ID를 포함
- 요청 ID(Request ID): HTTP 요청의 고유 식별자를 감사 로그의 참조 필드로 저장
- 세션 ID: 사용자 세션을 기반으로 HTTP 요청과 감사 로그를 그룹화
구현 예시:
// HTTP 요청에서 감사 로그 생성
@Post()
async createResource(@Req() request, @Body() data) {
// 리소스 생성 로직
const resource = await this.service.create(data);
// 감사 로그 생성
await this.auditService.createAuditLog({
eventType: 'RESOURCE_CREATED',
source: 'resource-service',
actor: {
type: 'USER',
id: request.user.id,
name: request.user.name
},
target: {
type: 'RESOURCE',
id: resource.id,
name: resource.name
},
action: 'CREATE',
details: { resourceType: resource.type },
metadata: {
correlationId: request.headers['x-correlation-id'],
requestId: request.headers['x-request-id'],
ipAddress: request.ip,
userAgent: request.headers['user-agent'],
sessionId: request.headers['x-session-id']
},
status: 'SUCCESS'
});
return resource;
}
변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|---|---|---|
| 0.1.0 | 2025-03-29 | bok@weltcorp.com | 최초 작성 |
| 0.2.0 | 2025-03-30 | bok@weltcorp.com | CoreLoggingModule 통합 추가 |