웹 로그, DB 쿼리문과 결과 로그 출력

This commit is contained in:
2026-06-22 22:34:56 +09:00
parent bcd0ef2af3
commit f384388c67
21 changed files with 706 additions and 214 deletions
+34 -34
View File
@@ -390,43 +390,43 @@ chocoadmin/
> local/stage에서는 개발과 디버깅에 충분한 상세 로그를 남기고, production에서는 운영에 필요한 수준으로 로그 양과 민감정보 노출을 제한한다.
- [ ] 로그 정책 정의 문서 작성 (`docs/phase/phase9.md`)
- [ ] 환경 구분: `local`, `stage`, `production`
- [ ] 로그 레벨 구분: `debug`, `info`, `warn`, `error`
- [ ] 로그 출력 형식: 사람이 읽기 쉬운 콘솔 출력 + 필요 시 JSON line 확장 가능 구조
- [ ] 민감정보 마스킹 대상 정의: 비밀번호, 인증 토큰, 쿠키, DB 접속 문자열, secret, 개인정보성 필드
- [ ] 서버 실행 로그 유틸 구현
- [ ] 공통 logger 모듈 추가 (`lib/logger.ts`)
- [ ] request 단위 correlation id 생성 및 로그에 포함
- [ ] API route 시작/종료, 처리 시간, status code, action 결과 기록
- [ ] 인증 실패, 권한 없음, 유효성 검증 실패, 비즈니스 예외를 구분해 기록
- [ ] DB query 로그 구현
- [ ] Prisma query event 또는 Prisma Client 설정 기반 query 로깅 적용
- [ ] local/stage: query문, params, duration, 결과 row/count 또는 요약 결과를 사람이 보기 쉬운 format으로 출력
- [ ] production: query문 전체/결과 전체 출력 금지, duration, table/action 추정값, affected count, slow query 중심으로 출력
- [ ] production slow query threshold 설정 (`DB_SLOW_QUERY_MS`)
- [ ] 결과 로그 최대 길이 제한 (`DB_LOG_RESULT_LIMIT`) 및 초과 시 truncate 표시
- [ ] 환경변수 추가
- [ ] `APP_ENV=local|stage|production`
- [ ] `LOG_LEVEL=debug|info|warn|error`
- [ ] `DB_QUERY_LOG=off|summary|full`
- [ ] `DB_SLOW_QUERY_MS`
- [ ] `DB_LOG_RESULT_LIMIT`
- [ ] 주요 API에 로그 적용
- [ ] 로그인 성공/실패 로그
- [ ] 마에스트로 목록/상세 조회 로그
- [ ] 연장 신청 조회/승인/취소 로그
- [ ] 업그레이드 신청 조회/승인/거절 로그
- [ ] 중복 처리 방지로 `409` 반환 시 warning 로그
- [ ] Docker/NAS 로그 운영 절차 문서화
- [ ] `docker compose logs -f` 확인 방법
- [ ] stage와 production의 권장 `.env` 로그 설정 예시
- [ ] Nginx Proxy Manager access/error log와 애플리케이션 로그를 같이 확인하는 절차
- [x] 로그 정책 정의 문서 작성 (`docs/phase/phase9.md`)
- [x] 환경 구분: `local`, `stage`, `production`
- [x] 로그 레벨 구분: `debug`, `info`, `warn`, `error`
- [x] 로그 출력 형식: 사람이 읽기 쉬운 콘솔 출력 + 필요 시 JSON line 확장 가능 구조
- [x] 민감정보 마스킹 대상 정의: 비밀번호, 인증 토큰, 쿠키, DB 접속 문자열, secret, 개인정보성 필드
- [x] 서버 실행 로그 유틸 구현
- [x] 공통 logger 모듈 추가 (`lib/logger.ts`)
- [ ] request 단위 correlation id 생성 및 로그에 포함 (보류 — Edge Middleware 제약으로 헤더 주입 방식 필요, `docs/phase/phase9.md` 참고)
- [x] API route 시작/종료, 처리 시간, status code, action 결과 기록 (`lib/api-handler.ts` `withApiHandler` 래퍼로 공통 처리)
- [x] 인증 실패, 권한 없음, 유효성 검증 실패, 비즈니스 예외를 구분해 기록 (`ApiError` + `withApiHandler`)
- [x] DB query 로그 구현
- [x] Prisma query event 기반 query 로깅 적용 (`lib/db.ts` `$on("query", ...)`)
- [x] local/stage: query문, params, duration, 결과`sql-formatter`로 pretty 출력 (`$on` + `$extends.$allOperations`)
- [x] production: `LOG_LEVEL=info` 설정 시 debug 로그 전체 억제 — slow query만 warn으로 출력
- [x] production slow query threshold 설정 (`DB_SLOW_QUERY_MS`, 기본 1000ms)
- [ ] 결과 로그 최대 길이 제한 (`DB_LOG_RESULT_LIMIT`) 및 초과 시 truncate 표시 (미구현)
- [x] 환경변수 추가
- [x] `APP_ENV=local|stage|production`
- [x] `LOG_LEVEL=debug|info|warn|error`
- [ ] `DB_QUERY_LOG=off|summary|full` (미구현 — 현재는 `LOG_LEVEL`로 제어)
- [x] `DB_SLOW_QUERY_MS`
- [ ] `DB_LOG_RESULT_LIMIT` (미구현)
- [x] 주요 API에 로그 적용
- [x] 로그인 성공/실패 로그 (`auth.ts`)
- [x] 마에스트로 목록/상세 조회 로그 (`lib/maestros.ts`)
- [x] 연장 신청 조회/승인/취소 로그 (`lib/extension-requests.ts`, `app/api/extension-requests/[id]/route.ts`)
- [x] 업그레이드 신청 조회/승인/거절 로그 (`lib/upgrade-requests.ts`, `app/api/upgrade-requests/[id]/route.ts`)
- [x] 중복 처리 방지로 `409` 반환 시 warning 로그 (`withApiHandler``ApiError` 캐치 후 warn 출력)
- [x] Docker/NAS 로그 운영 절차 문서화 (`docs/phase/phase9.md`)
- [x] `docker compose logs -f` 확인 방법
- [x] stage와 production의 권장 `.env` 로그 설정 예시
- [x] Nginx Proxy Manager access/error log와 애플리케이션 로그를 같이 확인하는 절차
- [ ] 검증
- [ ] local에서 query문과 결과 전체가 출력되는지 확인
- [x] local에서 query문과 결과 전체가 출력되는지 확인
- [ ] stage에서 query문과 결과 전체가 출력되는지 확인
- [ ] production 설정에서 결과 전체가 출력되지 않고 summary/slow query 중심으로 출력되는지 확인
- [ ] 로그에 비밀번호, token, cookie, secret, DB password가 노출되지 않는지 확인
- [x] 로그에 비밀번호, token, cookie, secret, DB password가 노출되지 않는지 확인 (`onQuery`에서 `PASSWORD(` 포함 쿼리는 params 치환 생략)
### Phase 10. 마에스트로 정보 수정 및 학생 목록 고도화