Challenge
해결하려던 문제
콘텐츠를 빠르게 발행하면서도 이미지 처리 비용을 사용자 요청에서 분리하고, 홈서버의 배포 상태와 장애 원인을 안전하게 관찰할 수 있어야 했습니다.
Next.js 애플리케이션과 Notion CMS를 연결하고, 이미지 가공은 Webhook 시점으로 옮겼습니다. 배포는 commit SHA 기반 GitOps로 통일하고 Kubernetes 조회 권한은 내부 exporter로 격리했습니다.
Scope
직접 다룬 영역
- 01포트폴리오와 Development Log 화면
- 02Notion Webhook과 R2 이미지 파이프라인
- 03GitHub Actions · Argo CD 기반 배포
- 04K3s 상태 조회와 운영 대시보드
Decisions
주요 기술적 선택
- 01
이미지 가공을 쓰기 시점으로 이동
Notion cover를 Webhook에서 WebP로 변환해 R2에 저장하고, 방문자는 Cloudflare CDN에서 완성된 이미지를 직접 받도록 구성했습니다.
- 02
배포 상태를 commit SHA로 연결
GitHub Actions가 이미지를 만들고 manifest의 SHA를 갱신하면 Argo CD가 원하는 상태를 K3s에 반영하도록 흐름을 통일했습니다.
- 03
Kubernetes 권한을 앱에서 분리
web-app의 ServiceAccount token을 비활성화하고, 최소 조회 권한만 가진 내부 status-exporter가 공개 가능한 상태만 전달합니다.
Technology
사용 기술
- Next.js
- TypeScript
- K3s
- Argo CD
- Cloudflare R2