프론트엔드 운영 모니터링: 로그·알림·롤백·장애 대응

··설명 약 12분·작성: 해비·블로그 소개

프론트엔드 배포 뒤 장애를 발견하면 로그와 롤백 기준을 어떻게 확인하나요?

배포 뒤 문제가 생기면 공개 URL이 어떤 배포와 커밋에 연결되는지부터 확인하세요. 설치·빌드 로그와 실제 요청 중의 runtime 로그를 나눠 보고 사용자 영향이 큰 오류에 알림 기준을 둡니다.

적용 조건·범위: 프론트엔드 deployment rollback만으로 데이터 변경까지 자동 복구된다고 가정하면 안 됩니다.

본문 근거: vercel.com/docs/logs · vercel.com/docs/instant-rollback · vercel.com/docs/observability

관측 가능한 배포 만들기

운영에서 가장 곤란한 상태는 문제가 발생했는데 어떤 코드가 실행 중인지 모르는 경우입니다.

최소한 다음 정보를 연결할 수 있어야 합니다.

Production URL
↓
Deployment
↓
Commit SHA
↓
Build log
↓
Runtime log

배포마다 모든 로그를 별도 문서에 복사할 필요는 없습니다.

대신 어떤 deployment와 commit이 운영 중인지 식별할 수 있는 기준을 남깁니다.

build log와 runtime log

Vercel의 운영 흐름에서도 build 단계 문제와 배포 후 runtime 문제는 분리해서 확인할 수 있습니다.

build log

다음과 같은 문제를 찾을 때 사용합니다.

npm ci 실패
TypeScript 오류
build command 실패
환경변수 누락
page generation 실패

runtime log

deployment가 만들어진 뒤 실제 요청 처리 중 발생하는 문제를 찾을 때 사용합니다.

Route Handler 오류
server-side API 호출 실패
DB 연결 실패
예외 throw
500 응답

build가 성공했다는 이유로 runtime log를 확인하지 않으면 운영 중에만 발생하는 문제를 놓칠 수 있습니다.

최소 모니터링 항목

작은 개인 프로젝트라도 다음 정도는 확인할 수 있으면 좋습니다.

1. 홈페이지가 응답하는가
2. 핵심 사용자 route가 응답하는가
3. 주요 API가 예상 상태를 반환하는가
4. 5xx가 증가하지 않는가
5. 인증 흐름이 정상인가
6. 현재 Production deployment가 무엇인가

단순 uptime 체크만으로 전체 서비스 정상 여부를 보장할 수는 없습니다.

GET /
→ 200

하지만
POST /api/tasks
→ 500

홈페이지가 열리더라도 핵심 기능은 실패할 수 있습니다.

알림 기준

알림은 많을수록 좋은 것이 아닙니다.

무조건 모든 404를 장애 알림으로 보내면 봇이나 잘못된 URL 때문에 실제 문제를 놓칠 수 있습니다.

다음처럼 사용자 영향이 큰 조건을 우선합니다.

지속적인 5xx
핵심 API 실패
로그인 실패율 증가
홈페이지/핵심 route 응답 실패
배포 직후 오류 증가

서비스 규모에 따라 응답시간, 오류율, 트래픽, 외부 API 실패 등을 확장할 수 있습니다.

rollback

운영에 문제가 생겼을 때 항상 새 코드를 수정해 다시 build할 필요는 없습니다.

플랫폼이 이전 deployment로 트래픽을 되돌리는 기능을 제공한다면 빠른 복구 수단으로 사용할 수 있습니다.

Vercel은 이전 Production deployment를 대상으로 rollback할 수 있습니다. Hobby는 바로 이전 배포, Pro·Enterprise는 자격을 갖춘 이전 배포를 선택할 수 있으므로 실제 대상과 권한을 먼저 확인합니다. 롤백 후에는 Production 도메인 자동 할당이 꺼져 새 push가 자동 공개되지 않습니다. 정상 배포를 승격하거나 Undo Rollback을 완료한 뒤 자동 할당 재개 여부까지 확인합니다.

개념적으로는 다음과 같습니다.

Deployment A
정상

Deployment B
문제 발생

Traffic
B → A로 되돌림

이것은 Git revert와 같은 작업이 아닙니다.

Rollback
→ 운영 트래픽이 가리키는 deployment 변경

Git revert
→ 저장소에 이전 변경을 되돌리는 새 commit 생성

운영 복구를 먼저 하고 원인을 수정한 새 commit을 만들 수도 있습니다.

rollback 후에도 확인할 것이 있습니다

이전 버전으로 되돌렸다고 모든 문제가 해결된 것은 아닙니다.

특히 다음 항목은 별도로 확인해야 합니다.

DB schema가 새 버전에서 변경되었는가
환경변수가 변경되었는가
외부 API 설정이 바뀌었는가
캐시가 새 버전 응답을 가지고 있는가
사용자 데이터가 이미 변경되었는가

프론트엔드 deployment rollback만으로 데이터 변경까지 자동 복구된다고 가정하면 안 됩니다.

incident 기록

장애가 끝난 뒤 기억에 의존하지 않도록 작은 기록을 남깁니다.

# Incident

## Summary
무슨 문제가 발생했는가

## Started
언제 처음 확인했는가

## Impact
어떤 사용자 기능에 영향이 있었는가

## Detection
어떻게 발견했는가

## Root cause
확인된 원인은 무엇인가

## Recovery
어떤 조치로 복구했는가

## Verification
복구 후 무엇을 다시 확인했는가

## Prevention
같은 문제를 줄이기 위해 무엇을 바꿀 것인가

원인이 확인되지 않았다면 추측을 root cause로 확정해서 쓰지 않습니다.

장애 대응 순서

실제 장애에서는 다음 순서를 기준으로 삼을 수 있습니다.

1. 영향 확인
2. 현재 deployment와 commit 기록
3. 증상·status·log 수집
4. build/runtime/network 계층 분류
5. 빠른 안전 복구가 필요하면 rollback
6. 원인 수정
7. 새 deployment 검증
8. 핵심 기능 회귀 확인
9. incident 기록

사용자 영향이 큰 상황에서는 원인 분석을 완벽히 끝낼 때까지 장애 상태를 유지하는 것보다 안전한 복구를 먼저 선택할 수도 있습니다.

이 주제만 따로 연습하기

알림 발송이나 실제 롤백 없이 가상 장애 기록을 작성합니다. 입력: deployment B 이후 /는 200, 저장 API는 5xx, 이전 정상 deployment A 존재, 같은 배포에서 DB 스키마 변경도 있었으나 구버전 호환성은 미확인입니다.

항목 채워야 할 판단
장애 범위 홈 정상과 저장 실패를 분리
복구 후보 A가 후보이나 DB 호환성 확인 전 안전한 복귀로 확정하지 않음
복구 검증 홈뿐 아니라 저장 요청·로그·배포 식별자 재검사
사건 기록 관측한 5xx는 사실, 추정 원인은 미확인 표시

자가 확인: 홈페이지 uptime 200만으로 복구 완료라고 하면 무엇이 빠질까요? 사용자의 실제 저장 동작과 API 오류가 빠집니다. 결과물은 복귀 판단과 검증 항목을 적은 runbook이며 실제 트래픽 전환 기록이 아닙니다.

학습 완료 체크리스트

  • build log와 runtime log 차이를 설명할 수 있습니다.
  • Production deployment와 commit을 연결할 수 있습니다.
  • 단순 uptime과 핵심 기능 정상 여부를 구분할 수 있습니다.
  • rollback과 Git revert 차이를 이해했습니다.
  • rollback 후 추가 검증이 필요한 이유를 설명할 수 있습니다.
  • incident 기록에 사실과 추측을 구분할 수 있습니다.

선택 실습: 할 일 앱에 적용하기

TaskFlow는 작업을 관리하는 예제 앱입니다. 이 선택 실습에서는 앱을 배포하고 서버·설정·운영 결과를 확인합니다.

이번 주제: 프론트엔드 운영 모니터링: 로그·알림·롤백·장애 대응.

선택: 연재 프로젝트와 전체 자료

연재 프로젝트를 이어 만드는 분을 위한 자료입니다. 이 글의 개념과 예제만 찾으셨다면 필요한 파일과 실행 방법만 펼쳐보세요.

TaskFlow 프로젝트 적용

이 글부터 시작하는 전체 프로젝트

시작 ZIP — deploy-step-09-runtime-diff-full-20260928을 새 폴더에 풀고, 이번 단계 완료 ZIP은 다른 폴더에 풀어 비교합니다. ZIP 안 프로젝트 폴더의 package.json 위치가 실행 루트입니다.

출발점은 Next.js 누적 TaskFlow와 같은 38단계 소스입니다. 프로젝트에는 홈·로그인·개인 작업 화면, 작업 추가·완료·삭제, Route Handler와 캐시 예제가 들어 있습니다. 설치 버전을 고정한 package-lock.json도 포함합니다.

이번 변경 이유: 장애 기록과 복구 후 확인 절차를 누적합니다.

  • docs/incident-template.md
  • docs/rollback-runbook.md
  1. 시작 ZIP을 풀고 npm ci로 의존성을 설치합니다. Node.js 24와 npm을 사용합니다.
  2. 위 변경 파일을 아래 전체 내용 또는 완료 ZIP의 같은 경로와 대조해 적용합니다. 다른 앱 파일은 유지합니다.
  3. npm run typecheck, npm run build를 실행합니다. 오류가 있으면 첫 오류의 파일·명령을 기록하고 해결한 뒤 진행합니다.
  4. npm run setup-auth로 일회용 로컬 학습 계정을 설정한 후 npm run dev를 실행합니다. 생성된 .env.local과 입력 값은 공유하지 않습니다.

예상 결과: 홈과 로그인 화면은 공개됩니다. 로그인 전 /tasks는 로그인 화면으로 이동하고 /api/tasks는 401을 반환합니다. 로그인 후 작업 목록에서 추가·완료·삭제를 확인합니다. /cache-lab의 별도 캐시 실습은 npm run cache-api가 필요합니다.

/legacy/tasks도 기존 인증을 유지합니다. 로그인하지 않은 상태의 로그인 이동은 404 오류가 아닙니다. next.config.ts의 rewrite와 proxy.ts의 보호 경로를 함께 확인하고, 로그인 후 두 주소에서 작업 화면을 대조합니다.

src/lib/env.ts와 src/lib/api.ts(9단계부터)는 환경 차이를 관찰하는 별도 진단 예제입니다. 기본 TaskFlow는 같은 origin의 인증된 /api/tasks를 사용하므로 이 예제로 기존 데이터 조회나 인증을 교체하지 않습니다. 공개 API origin 변수도 해당 진단 예제를 직접 사용할 때만 설정합니다.

저장·운영 범위: 작업은 단일 Node 프로세스 메모리에 저장되고 인증은 학습용 계정 예제입니다. 서버 재시작·서버리스 인스턴스 사이의 데이터 유지는 보장하지 않습니다. 로컬 실행 확인과 실제 운영 서비스 구축은 구분하며, 원격 배포·DNS·SSH·CI·롤백 결과는 직접 실행한 항목만 문서에 기록합니다.

전체 파일·코드 보기

이번 단계의 변경 파일 전체

docs/incident-template.md

# Incident


## Summary


## Started


## Impact


## Evidence


## Root cause


## Recovery


## Verification


## Prevention

docs/rollback-runbook.md

# TaskFlow Rollback Runbook


## Before rollback
1. 현재 deployment 기록
2. 현재 commit 기록
3. 사용자 영향 확인
4. 로그와 status 확보


## Rollback
- 이전 정상 deployment를 선택
- 운영 트래픽을 정상 버전으로 전환


## After rollback
1. 홈페이지 확인
2. 핵심 route 확인
3. 주요 API 확인
4. 인증 흐름 확인
5. 환경변수·외부 서비스 영향 확인

6. Vercel Instant Rollback 후 Production 도메인 자동 할당 상태를 확인한다. 정상 deployment를 승격하거나 Undo Rollback으로 자동 배포를 재개한다.

나머지 앱 소스와 잠금 파일은 전체 완료 ZIP에 있습니다. 기존 코드 조각은 설명용이며 위 전체 변경 파일과 ZIP이 이 누적 실습의 기준입니다. 다음 글에는 이번 완료 ZIP을 시작본으로 가져갑니다.

이 회차는 아래 전체 TaskFlow 시작 ZIP을 기준으로 진행합니다. 이전 글의 코드를 모으지 않아도 되며, 완료 ZIP에는 이번 변경과 기존 앱 기능이 함께 들어 있습니다.

rollback-runbook.md

# TaskFlow Rollback Runbook

## Before rollback
1. 현재 deployment 기록
2. 현재 commit 기록
3. 사용자 영향 확인
4. 로그와 status 확보

## Rollback
- 이전 정상 deployment를 선택
- 운영 트래픽을 정상 버전으로 전환

## After rollback
1. 홈페이지 확인
2. 핵심 route 확인
3. 주요 API 확인
4. 인증 흐름 확인
5. 환경변수·외부 서비스 영향 확인
6. Production 도메인 자동 할당 상태 확인; 정상 배포 승격/Undo Rollback으로 재개

incident-template.md

# Incident

## Summary

## Started

## Impact

## Evidence

## Root cause

## Recovery

## Verification

## Prevention

.env.example

# 7편 NEXT_PUBLIC_API_URL을 이 회차부터 NEXT_PUBLIC_API_BASE_URL로 통일합니다.
# 끝에 /가 없는 API origin을 설정하세요. 공개 API 주소만 넣고 secret은 넣지 마세요.
NEXT_PUBLIC_API_BASE_URL=
API_SECRET=

.github/workflows/ci.yml

name: CI


on:
  push:
    branches:
      - main
  pull_request:


jobs:
  build:
    runs-on: ubuntu-latest


    steps:
      - name: Checkout
        uses: actions/checkout@v7


      - name: Setup Node.js
        uses: actions/setup-node@v7
        with:
          node-version: "24.x"
          cache: "npm"


      - name: Install dependencies
        run: npm ci


      - name: Build
        run: npm run build

.gitignore

node_modules/
.next/
.env.local
*.tsbuildinfo

.nvmrc

24

app/layout.tsx

import type { ReactNode } from "react";
export default function RootLayout({ children }: { children: ReactNode }) {
  return <html lang="ko"><body>{children}</body></html>;
}

app/page.tsx

import Link from "next/link";
export default function Home() {
  return <main><h1>TaskFlow 배포 진단 실습</h1><Link href="/tasks">작업 목록</Link></main>;
}

app/tasks/page.tsx

export default function TasksPage() {
  return (
    <main>
      <h1>Tasks</h1>
      <p>TaskFlow 작업 목록입니다.</p>
    </main>
  );
}

docs/deployment-plan.md

# TaskFlow Deployment Plan


## Build
- package manager: npm
- install: npm ci
- build: npm run build


## Primary deployment
- platform: Vercel
- environment: Production


## Alternative deployment
- Firebase Hosting: static output일 때 검토
- Firebase App Hosting: server runtime이 필요할 때 검토


## Verification
- Production URL 응답
- 주요 화면 확인
- 환경변수 확인
- 주요 route 확인
- 현재 commit 확인
- rollback 가능 여부 확인

## Runtime decision


- static-only: no
- server runtime required: yes
- reasons:
  - Route Handler
  - server-side environment variables


## Primary
Vercel Production


## Firebase alternative
App Hosting 우선 검토


## Static variant
정적 결과물로 분리할 경우 Firebase Hosting 검토

## Production deployment


- deployment URL: 운영 문서에서 관리
- commit SHA: 배포마다 기록
- deployment status: 확인
- build log: 확인
- smoke test: 확인

## Domain


- canonical domain: 운영 문서에서 관리
- www policy: canonical로 redirect
- HTTPS: 확인
- DNS status: 확인
- auth callback / allowed origin: 확인

## Runtime difference checklist


1. Production deployment와 commit 확인
2. 환경변수 이름·scope 확인
3. Request URL과 status 확인
4. Response headers 확인
5. origin / proxy 경로 확인
6. cache 여부 확인
7. 수정 후 새 deployment에서 재검증

docs/incident-template.md

# Incident


## Summary


## Started


## Impact


## Evidence


## Root cause


## Recovery


## Verification


## Prevention

docs/rollback-runbook.md

# TaskFlow Rollback Runbook


## Before rollback
1. 현재 deployment 기록
2. 현재 commit 기록
3. 사용자 영향 확인
4. 로그와 status 확보


## Rollback
- 이전 정상 deployment를 선택
- 운영 트래픽을 정상 버전으로 전환


## After rollback
1. 홈페이지 확인
2. 핵심 route 확인
3. 주요 API 확인
4. 인증 흐름 확인
5. 환경변수·외부 서비스 영향 확인

6. Vercel Instant Rollback 후 Production 도메인 자동 할당 상태를 확인한다. 정상 deployment를 승격하거나 Undo Rollback으로 자동 배포를 재개한다.

docs/server-access-runbook.md

# Server Access Runbook


## Connection
- host: 저장하지 않음
- user: 환경별 문서에서 별도 관리
- authentication: SSH key 우선
- private key: 저장소에 포함 금지


## Before upload
1. 대상 서버 확인
2. 현재 경로 확인
3. 배포 대상 경로 확인
4. 기존 파일 상태 확인


## After upload
1. 파일 존재 확인
2. owner / permission 확인
3. 서비스가 실제 경로를 읽는지 확인
4. HTTP 결과 확인


## Never commit
- private key
- password
- access token
- production secret

next-env.d.ts

/// <reference types="next" />
/// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts";
import "./.next/types/root-params.d.ts";

// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

next.config.ts

import type { NextConfig } from "next";


const nextConfig: NextConfig = {
  async rewrites() {
    return [
      {
        source: "/legacy/tasks",
        destination: "/tasks",
      },
    ];
  },
};


export default nextConfig;

package.json

{
  "name": "taskflow-deployment-lab",
  "private": true,
  "engines": {
    "node": "24.x"
  },
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "typecheck": "tsc --noEmit"
  },
  "dependencies": {
    "next": "16.3.5",
    "react": "19.3.0",
    "react-dom": "19.3.0"
  },
  "devDependencies": {
    "typescript": "5.9.3",
    "@types/node": "24.10.1",
    "@types/react": "19.2.7",
    "@types/react-dom": "19.2.3"
  }
}

README.md

# 배포·서버 10 — deploy-step-10-observability-rollback

이 ZIP은 8편의 /legacy/tasks → /tasks rewrite를 재현하는 최소 Next.js 앱과 이전 회차 운영 문서를 포함합니다. 기존 TaskFlow 전체 기능, 로그인, 실제 API 서버나 Production 배포 상태를 제공하지 않습니다.

Node.js 24.x, npm을 사용합니다. `npm ci` → `npm run typecheck` → `npm run build`로 확인하고 `npm run dev` 후 `/tasks`, `/legacy/tasks`를 비교합니다. 전체 의존성 잠금 파일은 package-lock.json에 있습니다.

.env.example은 값이 빈 설정 안내입니다. 독자의 앱에서 사용하는 변수만 .env.local 또는 플랫폼의 해당 환경에 설정하세요. URL·계정·비밀키를 ZIP에 넣지 않습니다.

CI workflow는 이미 package.json/package-lock.json과 build 스크립트가 있는 기존 npm 프로젝트 루트에 적용합니다. actions/checkout@v7, actions/setup-node@v7, Node 24.x를 사용합니다. GitHub 원격 실행은 검증하지 않았습니다.

src/lib/env.ts는 해당 모듈을 import할 때 환경 변수를 검사합니다. 파일을 추가하기만 해서는 사용하지 않는 앱 전체의 환경 설정이 자동 검증되지 않습니다.

9편부터 변수명을 NEXT_PUBLIC_API_BASE_URL로 통일합니다. 7편 NEXT_PUBLIC_API_URL 값의 이름을 바꾸고 Preview/Production scope에도 반영한 뒤 다시 build해야 합니다. 끝에 /가 없는 API origin을 입력하세요. src/lib/api.ts의 getTasks는 독자의 실제 /api/tasks API를 호출하는 함수이며 이 최소 앱에는 API 서버와 호출 UI를 추가하지 않았습니다.

이 자료에는 실제 배포·DNS 변경·SSH 접속·메일/알림·롤백 결과가 없습니다. 운영 작업은 독자가 본인 환경과 권한을 확인한 후 수행해야 합니다. 문서의 확인 항목은 수행할 체크리스트이며 이미 통과했다는 기록이 아닙니다.

src/lib/api.ts

import { env } from "./env";


export async function getTasks() {
  const response = await fetch(`${env.apiBaseUrl}/api/tasks`);


  if (!response.ok) {
    throw new Error(`Failed to fetch tasks: ${response.status}`);
  }


  return response.json();
}

src/lib/env.ts

function required(name: string, value: string | undefined) {
  if (!value) {
    throw new Error(`Missing environment variable: ${name}`);
  }


  return value;
}


export const env = {
  apiBaseUrl: required(
    "NEXT_PUBLIC_API_BASE_URL",
    process.env.NEXT_PUBLIC_API_BASE_URL,
  ),
};

tsconfig.json

{
  "compilerOptions": {
    "target": "ES2017",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "react-jsx",
    "incremental": true,
    "plugins": [
      {
        "name": "next"
      }
    ],
    "paths": {
      "@/*": [
        "./*"
      ]
    }
  },
  "include": [
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx",
    ".next/types/**/*.ts",
    ".next/dev/types/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

이전 체크포인트

deploy-step-09-runtime-diff

변경 파일

docs/
├─ deployment-plan.md
├─ rollback-runbook.md
└─ incident-template.md

실제 검증 범위

이 본문 작성 단계에서는 TaskFlow 운영 서비스에 고의적인 장애를 발생시키거나 실제 rollback을 실행하지 않습니다.

운영 반영 단계에서 테스트 가능한 안전한 deployment를 기준으로 플랫폼의 rollback 절차와 핵심 기능 재검증을 확인해야 합니다.

참고용 문서·최소 예제 코드

아래는 라우팅 문제를 따로 재현하기 위한 기존 최소 예제입니다. 누적 TaskFlow에는 이 파일들로 앱 전체를 덮어쓰지 않습니다. 위 전체 완료 ZIP은 기존 로그인·작업 목록·API를 보존하고 변경한 설정만 합쳤습니다.

완료 체크포인트

deploy-step-10-observability-rollback

실습 경로·결과·복구

독자 질문

장애를 발견한 뒤 어느 버전으로 안전하게 돌아갈까요?

배포 전제

현재·이전 정상 deployment의 URL과 commit, 로그 접근 권한, 핵심 URL smoke test 목록이 필요합니다. 실제 운영 장애를 일부러 만들지 않습니다.

실행 단계

  1. docs/rollback-runbook.md에 장애 시각·영향 경로·현재 commit·이전 정상 deployment·복귀 결정자·핵심 재검사 URL을 적습니다.
  2. 빌드 로그와 런타임 로그를 구분해 증거를 남기고, 실패 조건(예: 주요 화면 불능 또는 연속 5xx)을 팀 기준으로 정의합니다. incident-template에는 관측 사실과 추정을 구분합니다.
  3. 검증된 이전 배포를 선택해 플랫폼 복귀 절차를 문서로 연습합니다. 실제 조작 시에는 데이터·스키마·환경변수 호환성을 먼저 확인하고 복귀 직후 화면·API·로그를 다시 확인합니다.

성공·실패 확인

단순 uptime 200은 기능 정상의 충분한 증거가 아닙니다. 복귀 전후 URL·commit·대표 작업 경로의 응답, 5xx 로그 변화를 기록해야 복구가 입증됩니다. 로그가 없으면 원인을 확정하지 않고 미확인으로 남깁니다.

복구와 검증 상태

복귀가 불가능하거나 데이터 비호환이면 무리하게 예전 코드로 전환하지 말고 영향 범위를 제한해 담당자와 복구 방안을 확인합니다. 이 원고 작성 과정의 실제 알림 발송·롤백·운영 장애 대응은 미확인입니다.

다음 학습

마지막 글에서는 지금까지 배운 install, build, route, env, DNS, cache, runtime, rollback 문제를 하나의 장애 대응 체크리스트로 통합합니다.

다음 글: 프론트엔드 배포 오류 해결 허브

다음 회차 확인 과제: 11회차에서는 01~10회차의 증거 수집표·smoke test·롤백 기록을 하나의 장애 대응 순서로 연결합니다.

공식 문서

공식 문서 확인 기준: 2026-09-21

체크포인트 다운로드

deploy-step-10-observability-rollback 완료 ZIP 다운로드

시작 체크포인트: 9회차 완료 ZIP

글 소개·학습 준비·전체 목차
차트와 알림으로 표현한 운영 모니터링과 롤백 표지

배포·서버 · 10 / 11 · 운영 실습 · 로그와 롤백

배포가 성공한 뒤에도 운영은 끝나지 않습니다.

실제 서비스에서는 문제가 생겼을 때 어느 deployment에서 시작되었는지 확인하고, build 단계와 runtime 단계를 구분하며, 영향이 크다면 이전 정상 버전으로 빠르게 되돌릴 수 있어야 합니다.

이 글에서는 특정 모니터링 제품을 도입하는 대신 프론트엔드 서비스가 최소한 갖춰야 할 운영 기준을 정리합니다.

이번 글에서 배우는 내용

  • build log와 runtime log 차이
  • deployment 버전과 commit 추적
  • 가용성 확인과 기능 정상 여부 차이
  • 알림 조건을 정하는 기준
  • rollback과 Git revert 차이
  • incident 기록 방법
  • 복구 후 회귀 확인

선수 지식

  • Vercel Production deployment 경험
  • Git commit 기본 개념
  • HTTP 상태 코드
  • 브라우저 Network 탭

목차

  1. 관측 가능한 배포 만들기
  2. build log와 runtime log
  3. 최소 모니터링 항목
  4. 알림 기준
  5. rollback
  6. rollback 후에도 확인할 것이 있습니다
  7. incident 기록
  8. 장애 대응 순서
  9. 학습 완료 체크리스트
  10. TaskFlow 프로젝트 적용
  11. 실습 프로젝트 전체 코드
  12. 실습 경로·결과·복구
  13. 다음 학습
  14. 공식 문서
  15. 단독 실습과 결과 확인

이 글이 도움이 되었나요?

조회 중

분류별 과정 이동 (선택)

읽음 기록

읽음 — / 전체 11개 · 필수 7개

이 글을 쓴 해비

웹사이트를 제작·운영하고, 개인 서비스와 자동화·AI 도구를 만듭니다. 직접 만들며 배운 내용과 문제 해결 과정을 BlogFlow에 기록합니다.

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기