데브포일 홈
DEV MODE - 실서버 영향 없음 📦 배포 관리
API 모니터링과 에러 추적
+400 XP
LEVEL 77 QUEST

API 모니터링과 에러 추적

API 모니터링과 에러 추적 — DevFoil 바이브코딩 Stage 16, Lv.77

API는 배포 후가 시작이다
모니터링 없는 API는 눈 감고 운전하는 것
API를 배포했다고 끝이 아닙니다. 실제 트래픽이 들어오면 예상치 못한 에러, 성능 저하, 보안 공격이 발생합니다.

"어제 오후 3시에 API가 5분 동안 다운됐는데 아무도 몰랐다" 이런 상황을 방지하려면 실시간 모니터링과 알림 시스템이 필수입니다.

이 강의에서 구축하는 것:
  • 구조화된 로깅 시스템
  • Sentry를 활용한 에러 추적
  • API 응답 시간 모니터링
  • 자동 알림 설정 (Slack, 이메일)
  • 모니터링 대시보드 구축
구조화된 로깅 시스템
console.log를 버려라
console.log는 개발 중에는 편하지만, 프로덕션에서는 무용지물입니다. 로그 레벨, 타임스탬프, 요청 ID, 구조화된 데이터가 포함된 로깅이 필요합니다.
// AI 프롬프트: "프로덕션용 구조화된 로깅 시스템 만들어줘"
const winston = require('winston');

const logger = winston.createLogger({
  level: process.env.LOG_LEVEL || 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.errors({ stack: true }),
    winston.format.json()
  ),
  defaultMeta: {
    service: 'my-api',
    environment: process.env.NODE_ENV
  },
  transports: [
    // 콘솔 (개발 환경)
    new winston.transports.Console({
      format: process.env.NODE_ENV === 'development'
        ? winston.format.combine(winston.format.colorize(), winston.format.simple())
        : winston.format.json()
    }),
    // 파일 (에러만)
    new winston.transports.File({
      filename: 'logs/error.log',
      level: 'error',
      maxsize: 10 * 1024 * 1024,  // 10MB
      maxFiles: 5
    }),
    // 파일 (전체)
    new winston.transports.File({
      filename: 'logs/combined.log',
      maxsize: 10 * 1024 * 1024,
      maxFiles: 10
    })
  ]
});

// 요청 로깅 미들웨어
function requestLogger(req, res, next) {
  const requestId = req.headers['x-request-id'] || crypto.randomUUID();
  req.requestId = requestId;
  const start = Date.now();

  res.on('finish', () => {
    const duration = Date.now() - start;
    logger.info('API 요청', {
      requestId,
      method: req.method,
      path: req.originalUrl,
      statusCode: res.statusCode,
      duration: `${duration}ms`,
      userAgent: req.headers['user-agent'],
      ip: req.ip,
      userId: req.user?.userId
    });

    // 느린 요청 경고 (3초 이상)
    if (duration > 3000) {
      logger.warn('느린 API 응답 감지', {
        requestId, path: req.originalUrl, duration: `${duration}ms`
      });
    }
  });

  next();
}

app.use(requestLogger);
🔒
여기까지는 미리보기입니다
API 모니터링과 에러 추적
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)