Skip to content

ApexCaptain/ApexCaptain.IaC

Repository files navigation

ApexCaptain.IaC - Infrastructure as Code 포트폴리였

πŸ“‹ ν”„λ‘œμ νŠΈ κ°œμš”

ApexCaptain.IaCλŠ” Oracle Cloud Infrastructure(OCI) 기반의 ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ 인프라λ₯Ό CDK for Terraform(CDKTF)을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ‘œ κ΄€λ¦¬ν•˜λŠ” Infrastructure as Code ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

🎯 μ£Όμš” λͺ©ν‘œ

  • ν•˜μ΄λΈŒλ¦¬λ“œ λ©€ν‹° ν΄λŸ¬μŠ€ν„° Kubernetes ν™˜κ²½ ꡬ좕 및 관리
    • Oracle Cloud OKE ν΄λŸ¬μŠ€ν„° (ν΄λΌμš°λ“œ)
    • On-premise Workstation ν΄λŸ¬μŠ€ν„° (kubeadm 기반)
  • GitOps 기반 배포 νŒŒμ΄ν”„λΌμΈ κ΅¬ν˜„
  • 개인 λ―Έλ””μ–΄ μ„œλ²„ 인프라
  • λ³΄μ•ˆ 및 λͺ¨λ‹ˆν„°λ§ 체계 ꡬ좕

πŸ—οΈ 기술 μŠ€νƒ

핡심 기술

  • CDK for Terraform (CDKTF) - TypeScript 기반 인프라 μ •μ˜
  • Oracle Cloud Infrastructure (OCI) - ν΄λΌμš°λ“œ ν”Œλž«νΌ
  • Kubernetes - μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜
  • Istio - μ„œλΉ„μŠ€ λ©”μ‹œ
  • ArgoCD - GitOps 배포 관리 (개발 쀑)

개발 도ꡬ

  • TypeScript - 메인 개발 μ–Έμ–΄
  • Projen - ν”„λ‘œμ νŠΈ μžλ™ν™” 도ꡬ
  • ESLint + Prettier - μ½”λ“œ ν’ˆμ§ˆ 관리
  • Yarn - νŒ¨ν‚€μ§€ 관리

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

ApexCaptain.IaC/
β”œβ”€β”€ πŸ“ src/                          # μ†ŒμŠ€ μ½”λ“œ
β”‚   β”œβ”€β”€ πŸ“ terraform/               # CDKTF 인프라 μ •μ˜
β”‚   β”‚   β”œβ”€β”€ πŸ“ stacks/              # 인프라 μŠ€νƒλ“€
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ k8s/            # Kubernetes κ΄€λ ¨ μŠ€νƒ
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ oke/        # Oracle Kubernetes Engine (ν΄λΌμš°λ“œ)
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ apps/   # λΉ„μ¦ˆλ‹ˆμŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ cluster.stack.ts
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ network.stack.ts
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ bastion.stack.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── system.stack.ts
β”‚   β”‚   β”‚   β”‚   └── πŸ“ workstation/ # On-premise Workstation (kubeadm)
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ“ apps/   # 개인/λ―Έλ””μ–΄ μ„œλΉ„μŠ€
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ“ dev-pods/ # 개발 ν™˜κ²½
β”‚   β”‚   β”‚   β”‚       └── system.stack.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ cloudflare/      # DNS 및 CDN μ„€μ •
β”‚   β”‚   β”‚   └── πŸ“ project/         # ν”„λ‘œμ νŠΈ 곡톡 μ„€μ •
β”‚   β”‚   β”œβ”€β”€ terraform.module.ts
β”‚   β”‚   └── terraform.config.service.ts
β”‚   β”œβ”€β”€ πŸ“ common/                  # 곡톡 μœ ν‹Έλ¦¬ν‹°
β”‚   β”œβ”€β”€ πŸ“ global/                  # κΈ€λ‘œλ²Œ μ„€μ •
β”‚   └── main.ts                     # μ§„μž…μ 
β”œβ”€β”€ πŸ“ scripts/                     # μžλ™ν™” 슀크립트
β”‚   β”œβ”€β”€ backup-tfstate.script.ts    # Terraform μƒνƒœ λ°±μ—…
β”‚   β”œβ”€β”€ tf-deploy-selection.script.ts # 선택적 배포
β”‚   └── πŸ“ terminal/               # 터미널 도ꡬ
β”œβ”€β”€ πŸ“ .projen/                     # Projen 생성 파일
β”œβ”€β”€ πŸ“ .github/                     # GitHub Actions
β”œβ”€β”€ πŸ“ .devcontainer/              # 개발 μ»¨ν…Œμ΄λ„ˆ μ„€μ •
β”œβ”€β”€ πŸ“ keys/                       # 인증 ν‚€ 파일
β”œβ”€β”€ πŸ“ env/                        # ν™˜κ²½ λ³€μˆ˜
└── πŸ“ assets/                     # 정적 μžμ‚°

πŸš€ μ£Όμš” κΈ°λŠ₯

1. ν•˜μ΄λΈŒλ¦¬λ“œ λ©€ν‹° ν΄λŸ¬μŠ€ν„° Kubernetes ν™˜κ²½

  • Oracle Kubernetes Engine (OKE) ν΄λŸ¬μŠ€ν„° μžλ™ ν”„λ‘œλΉ„μ €λ‹ (ν΄λΌμš°λ“œ)
  • On-premise Workstation ν΄λŸ¬μŠ€ν„° kubeadm 기반 ꡬ좕 (둜컬 ν™˜κ²½)
  • Istio μ„œλΉ„μŠ€ λ©”μ‹œ κ΅¬μΆ•μœΌλ‘œ μ„œλΉ„μŠ€ κ°„ 톡신 관리
  • ν•˜μ΄λΈŒλ¦¬λ“œ λ©€ν‹° ν΄λŸ¬μŠ€ν„° 톡신 μ„€μ • (μ§„ν–‰ 쀑)

2. λ³΄μ•ˆ 및 인증

  • Vault - μ‹œν¬λ¦Ώ 관리 μ‹œμŠ€ν…œ (개발 쀑)
  • OAuth2 Proxy - 인증 ν”„λ‘μ‹œ
  • Cert-Manager - SSL μΈμ¦μ„œ μžλ™ 관리
  • Bastion 호슀트 - λ³΄μ•ˆ μ ‘κ·Ό μ œμ–΄

3. λͺ¨λ‹ˆν„°λ§ 및 κ΄€μ°°μ„±

  • Prometheus + Grafana - λ©”νŠΈλ¦­ μˆ˜μ§‘ 및 μ‹œκ°ν™” (개발 쀑)

4. DevOps 도ꡬ

  • ArgoCD - GitOps 기반 배포 관리 (개발 쀑)
  • CloudBeaver - λ°μ΄ν„°λ² μ΄μŠ€ 관리 도ꡬ
  • Redis UI - Redis 관리 μΈν„°νŽ˜μ΄μŠ€

5. 개인 λ―Έλ””μ–΄ μ„œλ²„ 인프라 (On-premise)

  • Jellyfin - λ―Έλ””μ–΄ 슀트리밍 μ„œλ²„
  • qBittorrent - ν† λ ŒνŠΈ λ‹€μš΄λ‘œλ“œ 관리
  • 7 Days to Die - κ²Œμž„ μ„œλ²„
  • SFTP μ„œλ²„ - 파일 전솑 μ„œλΉ„μŠ€

πŸ”§ 인프라 μ•„ν‚€ν…μ²˜

λ„€νŠΈμ›Œν¬ ꡬ성

OCI VCN
β”œβ”€β”€ Public Subnet (Bastion, Load Balancer)
β”œβ”€β”€ Private Subnet (Kubernetes Nodes)
└── Database Subnet (RDS, Redis)

ν•˜μ΄λΈŒλ¦¬λ“œ Kubernetes ν΄λŸ¬μŠ€ν„° ꡬ성

Oracle Cloud OKE Cluster (ν΄λΌμš°λ“œ)
β”œβ”€β”€ System Namespace
β”‚   β”œβ”€β”€ Istio Control Plane
β”‚   β”œβ”€β”€ ArgoCD (개발 쀑)
β”‚   β”œβ”€β”€ Vault (개발 쀑)
β”‚   └── Monitoring Stack (개발 쀑)
β”œβ”€β”€ Application Namespace
β”‚   β”œβ”€β”€ Docent AI Engine
β”‚   β”œβ”€β”€ Docent AI Web
β”‚   └── Business Applications
└── Ingress Controller

On-premise Workstation Cluster (kubeadm 기반)
β”œβ”€β”€ System Namespace
β”‚   β”œβ”€β”€ Istio Control Plane
β”‚   β”œβ”€β”€ Local Development Tools
β”‚   β”œβ”€β”€ Monitoring Stack
β”‚   └── Longhorn Storage
β”œβ”€β”€ Application Namespace
β”‚   β”œβ”€β”€ Development Applications
β”‚   β”œβ”€β”€ Testing Workloads
β”‚   β”œβ”€β”€ Media Services (Jellyfin, qBittorrent)
β”‚   β”œβ”€β”€ Game Servers (7 Days to Die)
β”‚   └── File Services (SFTP, NAS)
└── Local Ingress Controller

πŸ“Š ν”„λ‘œμ νŠΈ 톡계

  • 총 μ½”λ“œ 라인: 15,000+ 라인
  • TypeScript 파일: 50+ 개
  • Terraform μŠ€νƒ: 20+ 개
  • 배포된 μ• ν”Œλ¦¬μΌ€μ΄μ…˜: 20+ 개 (일뢀 개발 쀑)
  • μžλ™ν™” 슀크립트: 10+ 개
  • 개발 μ§„ν–‰λ₯ : μ•½ 70% μ™„λ£Œ

🎯 핡심 μ„±κ³Ό

1. 인프라 μžλ™ν™”

  • 100% μ½”λ“œ 기반 인프라 관리
  • GitOps μ›Œν¬ν”Œλ‘œμš° κ΅¬ν˜„μœΌλ‘œ 배포 μžλ™ν™” (μ§„ν–‰ 쀑)
  • λ©€ν‹° ν™˜κ²½ 지원 (ν΄λΌμš°λ“œ/On-premise)

2. λ³΄μ•ˆ κ°•ν™”

  • Zero Trust λ„€νŠΈμ›Œν¬ μ•„ν‚€ν…μ²˜ κ΅¬ν˜„
  • μ‹œν¬λ¦Ώ 관리 μžλ™ν™” (Vault 개발 쀑)
  • SSL μΈμ¦μ„œ μžλ™ κ°±μ‹ 

3. 운영 νš¨μœ¨μ„±

  • λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œ ꡬ좕 (Prometheus/Grafana 개발 쀑)
  • 둜그 쀑앙화 μ‹œμŠ€ν…œ (κ³„νš 쀑)
  • λ°±μ—… 및 볡ꡬ μžλ™ν™”
  • λ―Έλ””μ–΄ μ„œλΉ„μŠ€ μžλ™ν™” (Jellyfin, qBittorrent)

πŸ”„ 개발 μ›Œν¬ν”Œλ‘œμš°

1. μ½”λ“œ μž‘μ„±

# 개발 ν™˜κ²½ μ„€μ •
yarn install
yarn watch

# 인프라 μ½”λ“œ μž‘μ„±
# src/terraform/stacks/ μ—μ„œ μŠ€νƒ μ •μ˜

2. 배포 ν”„λ‘œμ„ΈμŠ€

# 인프라 κ³„νš
yarn tf@plan

# 선택적 배포
yarn tf@deploy:selection

# 전체 배포
yarn tf@deploy

3. μƒνƒœ 관리

# μƒνƒœ λ°±μ—…
yarn tf@backup

# μƒνƒœ 정리
yarn tf@clean

πŸ› οΈ μ£Όμš” 슀크립트

슀크립트 μ„€λͺ…
yarn tf@deploy 전체 인프라 배포
yarn tf@deploy:selection 선택적 μŠ€νƒ 배포
yarn tf@plan 배포 κ³„νš 확인
yarn tf@backup Terraform μƒνƒœ λ°±μ—…
yarn terminal λŒ€ν™”ν˜• 터미널 도ꡬ

πŸ“ˆ ν–₯ν›„ κ³„νš

단기 λͺ©ν‘œ (1-3κ°œμ›”)

  • ArgoCD μ™„μ„±: GitOps 배포 νŒŒμ΄ν”„λΌμΈ ꡬ좕 μ™„λ£Œ
  • Vault μ™„μ„±: μ‹œν¬λ¦Ώ 관리 μ‹œμŠ€ν…œ ꡬ좕 μ™„λ£Œ
  • Prometheus/Grafana μ™„μ„±: λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œ ꡬ좕 μ™„λ£Œ

쀑기 λͺ©ν‘œ (3-6κ°œμ›”)

  • ν•˜μ΄λΈŒλ¦¬λ“œ λ©€ν‹° ν΄λŸ¬μŠ€ν„° 톡신: OKE와 Workstation ν΄λŸ¬μŠ€ν„° κ°„ Istio μ—°κ²°
  • λͺ¨λ‹ˆν„°λ§ 고도화: ELK μŠ€νƒ μΆ”κ°€ 및 Kiali ν™œμ„±ν™”
  • Authentik: 톡합 인증 μ‹œμŠ€ν…œ ꡬ좕
  • Palworld κ²Œμž„ μ„œλ²„: μΆ”κ°€ κ²Œμž„ μ„œλ²„ ꡬ좕

μž₯κΈ° λͺ©ν‘œ (6κ°œμ›”+)

  • λ©€ν‹° ν΄λΌμš°λ“œ 지원: AWS, Azure μΆ”κ°€
  • μ„œλ²„λ¦¬μŠ€ μ•„ν‚€ν…μ²˜: FaaS λ„μž…
  • AI/ML νŒŒμ΄ν”„λΌμΈ: λ¨Έμ‹ λŸ¬λ‹ μ›Œν¬λ‘œλ“œ 지원

πŸ† 기술적 도전과 ν•΄κ²°

1. ν•˜μ΄λΈŒλ¦¬λ“œ λ©€ν‹° ν΄λŸ¬μŠ€ν„° 톡신

도전: ν΄λΌμš°λ“œ(OKE)와 On-premise(Workstation) Kubernetes ν΄λŸ¬μŠ€ν„° κ°„ μ•ˆμ „ν•œ 톡신 ꡬ좕 ν•΄κ²°: Istio μ„œλΉ„μŠ€ λ©”μ‹œμ™€ μ „μš© λ„€νŠΈμ›Œν¬ κ΅¬μ„±μœΌλ‘œ ν•΄κ²° (μ§„ν–‰ 쀑)

2. μƒνƒœ 관리

도전: Terraform μƒνƒœ 파일의 μ•ˆμ „ν•œ 관리 ν•΄κ²°: μžλ™ν™”λœ λ°±μ—… μŠ€ν¬λ¦½νŠΈμ™€ 원격 μƒνƒœ μ €μž₯μ†Œ κ΅¬ν˜„

3. λ³΄μ•ˆ κ°•ν™”

도전: ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ ν™˜κ²½μ—μ„œμ˜ λ³΄μ•ˆ κ°•ν™” ν•΄κ²°: Vault, OAuth2 Proxy, Cert-Managerλ₯Ό ν†΅ν•œ 쒅합적 λ³΄μ•ˆ 체계 ꡬ좕 (μ§„ν–‰ 쀑)


About

CDK for Terraform project

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •