4 min read

Personal DevOps

Table of Contents

์ง์ ‘ CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ ๋œ ์ด์œ ๋Š” ๊ฐ€์ง€๊ณ  ์žˆ๋Š” DevOps ์ง€์‹์„ ํ™œ์šฉํ•˜๋ฉด์„œ๋„ ์ž์œ ๋กญ๊ฒŒ ์ €์˜ ์„œ๋น„์Šค๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•จ์ด์—ˆ๊ณ , ๊ทธ ์ค‘์—์„œ๋„ ์ง‘์ค‘ํ–ˆ๋˜ ๋ถ€๋ถ„์€ Kubernetes(K8s) ๊ตฌ์ถ•๊ณผ ๊ฐ€๊ฒฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
K8s๋Š” DevOps ์—”์ง€๋‹ˆ์–ด์˜ ํ•„์ˆ˜ ์—ญ๋Ÿ‰์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐํ•  ์ˆ˜ ์—†์—ˆ๊ณ , ๊ทธ๋Ÿผ์—๋„ ์ผ๋ฐ˜์ ์œผ๋กœ K8s ๊ตฌ์ถ•์— ๋“ค์–ด๊ฐ€๋Š” ๋น„์šฉ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ์ฐพ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

Overall Architecture

Overall Architecture

Home Server (feat. Mac mini)

K8s๋ฅผ ๊ฐ€์žฅ ์‹ธ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๊ตฌ๋งคํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ตฌ์ถ•ํ•œ ์ดํ›„์—๋Š” ์ „๊ธฐ์„ธ๋งŒ ์ง€๋ถˆํ•˜๋ฉด ๋˜๊ณ , ๋ฏธ๋‹ˆPC๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ดˆ๊ธฐ ๋น„์šฉ๋„ ๋น„์‹ธ์ง€ ์•Š์•„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์ด ์žˆ๋‹ค๋ฉด Linux ์„œ๋ฒ„๋ฅผ ์‚ฌ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์ €๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ์ƒํ™ฉ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„์‹ธ์ง€๋งŒ ์ „์„ฑ๋น„๊ฐ€ ์ข‹๊ณ , ์†Œ์Œ๊ณผ ๋ฐœ์—ด์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ Mac mini๋ฅผ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Mac mini์˜ ์žฅ์ ์€ MacBook์—์„œ ์‰ฝ๊ฒŒ ์›๊ฒฉ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ ,1 macOS ์ƒํƒœ๊ณ„์™€ ์„œ๋น„์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‚˜์ค‘์— ๋‹ค๋ฅธ ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Mac mini๋Š” macOS ํŠน์„ฑ์ƒ K8s๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒํ™” ํ™˜๊ฒฝ์ด ๊ฐ•์ œ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ตœ๋Œ€ํ•œ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฑฐ์ณ ์ง€๊ธˆ์€ Colima๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์ •์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด CLI๋„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

Cloud Server (OKE)

์ดˆ๊ธฐ์—๋Š” ํ™ˆ ์„œ๋ฒ„๋งŒ์œผ๋กœ K8s ์ „์ฒด๋ฅผ ์šด์˜ํ•˜๋ ค๋Š” ๊ณ„ํš์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ 2025๋…„ ์ดˆ ์ •์ „ ๋“ฑ์˜ ์‚ฌ๊ฑด์œผ๋กœ ์ธํ•ด ํ™ˆ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋Š” ๊ฒฝํ—˜์„ ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๊ฒฐ๊ตญ ์ง€์†์ ์ธ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด์„œ๋Š” ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์€ Oracle Kubernetes Engine (OKE)์ž…๋‹ˆ๋‹ค.
OKE๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ๋งค์šฐ ์ €๋ ดํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Control Plane์— ๋Œ€ํ•œ ๊ฐ€๊ฒฉ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AWS ๋“ฑ ๋ฉ”์ด์ € ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๊ฐ€ ๊ธฐ๋ณธ ํด๋Ÿฌ์Šคํ„ฐ ๋น„์šฉ๋งŒ 0.1$/hour๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜๋ฉด ํฐ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.
  2. ๊ฐ•๋ ฅํ•œ Free Tier๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. A1 Ampere ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ์ค€ 24Gi๊นŒ์ง€ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” Free Tier๋กœ ์ธํ•œ ํ˜น์‹œ ๋ชจ๋ฅผ ์ œ์žฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด 13Gi์งœ๋ฆฌ ๋…ธ๋“œ 2๊ฐœ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , Load Balancer๊นŒ์ง€ ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ์š”๊ธˆ์„ ์ง€๋ถˆํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

OKE๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด Vultr๋„ ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ VM์€ ์—†์ง€๋งŒ ๊ฐ€๊ฒฉ์ด ์ €๋ ดํ•˜๊ณ , ์—ญ์‹œ Control Plane ๊ฐ€๊ฒฉ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Frontend & Mobile

ํ”„๋ก ํŠธ์—”๋“œ๋Š” Vercel, Netlify, GitHub Pages, GitLab Pages ๋“ฑ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค์˜ ๋ฌด๋ฃŒ ํ”Œ๋žœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ GitLab Pages๋Š” ์ฝ”๋“œ๋ฅผ ๋น„๊ณต๊ฐœ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋น„์šฉ ์—†์ด ํŽ˜์ด์ง€๋ฅผ ๊ณต๊ฐœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์€ ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ง์ ‘ ๋นŒ๋“œํ•˜์—ฌ ์Šคํ† ์–ด์— ๋ฐฐํฌํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
Android ํ™˜๊ฒฝ์„ ์œ„ํ•œ Play Store ๊ณ„์ •์€ ์„ค์ •ํ•ด ๋‘์—ˆ๊ณ , iOS ํ™˜๊ฒฝ์€ ์ถ”ํ›„์— ๊ณ ๋ คํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

Database

DB๋Š” Supabase๋ฅผ ๋ฉ”์ธ์œผ๋กœ ํ•˜๊ณ , ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€๋กœ Oracle Cloud๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Supabase๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์ž‘์—…์„ Postgres + S3๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์ˆœํ•จ, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์™ธ๋ถ€ ์„œ๋น„์Šค ์—ฐ๋™์ด ๋งˆ์Œ์— ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
Pro Plan๋งŒ ๊ฒฐ์ œํ•˜๋ฉด ์ถ”๊ฐ€ ์„œ๋น„์Šค ๊ตฌ๋… ์—†์ด Supabase๋งŒ์œผ๋กœ ์ค‘๊ทœ๋ชจ ์„œ๋น„์Šค๊นŒ์ง€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฌ์ ๋„ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” DB๋„ K8s ์ƒ์— ๋ฐฐํฌํ•  ๊ณ„ํš์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ์•„๋ฌด๋ž˜๋„ DB๋Š” ๋ถ„๋ฆฌ๋œ ํ™˜๊ฒฝ + Managed Service๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๊ณ  ๊ด€๋ฆฌ ํฌ์ธํŠธ๋„ ์ ์–ด์ง„๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Northflank (Monitoring)

๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด Northflank์— Uptime Kuma๋ฅผ ๋ฐฐํฌํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

Uptime Kuma์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์žฅ์ ์€ ๋‹จ์ˆœํ•จ์ธ๋ฐ, Grafana, Prometheus ๋“ฑ์˜ ๊ณ ๊ธ‰ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ™œ์šฉํ•  ๊ธฐํšŒ๋„ ์žˆ๊ณ , ๊ฐœ์ธ ์„œ๋ฒ„์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ณต์žก๋„๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋†’์ผ ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
Northflank๋Š” ๊ธฐ์กด ์ธํ”„๋ผ์™€ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์„ ์„ ํƒํ•˜๋ฉด์„œ๋„, Docker ์ปจํ…Œ์ด๋„ˆ ํ•˜๋‚˜๋ฅผ ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•˜๊ณ  ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์„ค์ •์— ํŠน์ด์‚ฌํ•ญ์€ ์—†๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Persistent Volume๋งŒ ๊ฐ„๋‹จํžˆ ์„ค์ •ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.2

Windows (Optional)

Windows๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Hyper-V๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, VMWare, VirtualBox ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ K8s๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐ€๋”์”ฉ VMWare๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒ ๋จธ์‹ ์„ ๋„์šฐ๊ณ  ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ ํ™œ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • Broadcom์— ๋กœ๊ทธ์ธํ•œ ๋’ค ์ด ๋งํฌ์—์„œ VMWare Workstation Pro๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Ubuntu ์ด๋ฏธ์ง€๋Š” ์—ฌ๊ธฐ์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Public CI/CD & Helm chart

CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ Helm chart๋ฅผ ํˆฌ๋ช…ํ•˜๊ฒŒ ๊ณต๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐœ Helm chart

2024๋…„์— ์ฒ˜์Œ K8s ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ์˜ Helm chart๋Š” ๋น„๊ณต๊ฐœ์˜€์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ 2025๋…„ 7์›”๋ถ€ํ„ฐ Helm chart๋ฅผ ๊ณต๊ฐœํ•˜์—ฌ ์ œ๊ฐ€ ์–ด๋– ํ•œ ์„œ๋น„์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํˆฌ๋ช…ํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

External Secrets Operator ๋“ฑ์˜ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Helm chart๋ฅผ ๊ณต๊ฐœ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ Secret ๊ด€๋ฆฌ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๋ฐฐํฌ๋Š” Argo CD๋ฅผ ์‚ฌ์šฉํ•œ GitOps ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉฐ, App of Apps ํŒจํ„ด์„ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Integrated CI/CD

์ €์˜ GitHub์—๋Š” ๋‹ค์ˆ˜์˜ ๋ฐฑ์—”๋“œ Repository๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐฑ์—”๋“œ ๊ตฌ์กฐ์˜ ํ†ต์ผ์ด ๊ฐ™์ด ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด, ๊ฐ๊ฐ CI/CD ์„ค์ •์„ ํ•˜์ง€ ์•Š๊ณ  ํ•œ ๊ณณ์— ํ†ตํ•ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Helm chart ์ €์žฅ์†Œ์— GitHub Actions๋ฅผ ์„ค์ •ํ•˜์—ฌ, Repository ์ด๋ฆ„๋งŒ ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅํ•˜๋ฉด ์ด๋ฅผ Cloneํ•˜์—ฌ ๋นŒ๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ํƒœ๊ทธ๊นŒ์ง€ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Footnotes

  1. https://support.apple.com/guide/mac-help/mh14066/mac โ†ฉ

  2. https://northflank.com/guides/deploy-uptime-kuma-on-northflank โ†ฉ