본문으로 건너뛰기

프로젝트 계획서

프로젝트 계획서

목차


1. 프로젝트 주제

  • 주 주제: Kubernetes 기반 3-Tier 고가용성 시스템 구축
  • 세부 주제: 개발자를 위한 올인원 협업 플랫폼 (Gition - Git + Notion)
구분내용
코드 관리GitHub 연동, 브랜치/커밋 관리
문서화Notion 스타일 블록 에디터
CI/CDGitHub Actions + GitLab CI 하이브리드
인증GitHub OAuth 2.0

2. 요구사항 정의

2.1. 시스템 요구사항

  • On-Premise VMware 환경에서 Kubernetes 클러스터 구축
  • Control Plane(k8s-m): Master 노드
  • Worker Node(k8s-n1~n3): 3개 워커 노드
  • 인프라 서버: NFS, MySQL, GitLab
  • 네트워크: VMware NAT 172.100.100.0/24 대역

2.2. 기능 요구사항

인증 및 계정 관리

기능구현 방식상태
GitHub OAuthOAuth 2.0O
세션 관리Token 기반O
로그인/로그아웃localStorage 저장O

저장소 관리

기능설명상태
저장소 목록GitHub API 연동O
저장소 복제서버로 CloneO
브랜치 전환로컬/리모트 브랜치O
파일 탐색디렉토리 네비게이션O

에디터

기능설명상태
블록 에디터Notion 스타일O
마크다운 렌더링MarkdownRenderer-
코드 블록구문 강조-
.gition 저장소브랜치별 로컬 페이지O

Git 연동

기능설명상태
커밋 히스토리브랜치별 조회O
파일 뷰어내용 조회/편집O
코드 검색저장소 내 검색O
Issues/PRGitHub 연동 표시O

CI/CD 파이프라인

플랫폼기능상태
GitHub ActionsESLint / PyLint 검사O
Unit Test 실행O
Gitleaks / Trivy 보안 스캔O
GitLab Mirror 동기화O
GitLab CIDocker 이미지 빌드O
Container Registry 푸시O
수동 배포 트리거O

Kubernetes 인프라

구성 요소설명상태
Ingress ControllerHost/Path 기반 라우팅O
MetalLBLoadBalancer IP 할당O
NFS Provisioner동적 PVC 생성O
FastAPI Deployment3 replicas + 공유 볼륨O
Frontend Deployment2 replicas (React + Nginx)O
MySQL MasterVM Docker (외부 Endpoints)O
MySQL Slave StatefulSetK8s 내 2 replicas (GTID 복제)O
imagePullSecretsGitLab Registry 인증O

2.3. 비기능 요구사항

항목요구사항설명
응답 시간API 응답 < 500ms사용자 경험 보장
가용성99% 이상연간 다운타임 87시간 이내
확장성K8s 기반 스케일 아웃HPA/VPA 자동 스케일링
보안OAuth 2.0 + Token 기반GitHub 인증 연동
유지보수성모듈화 아키텍처컴포넌트 단위 배포 가능

3. 프로젝트 목표

3.1. 목표 개요

  • 고가용성 시스템: MySQL Master-Slave Replication + Frontend/Backend 다중 복제
  • 자동화 CI/CD: GitHub Actions + GitLab CI 하이브리드 파이프라인
  • 무중단 배포: Rolling Update + MySQL Read/Write 분리

3.2. 기술 스택

계층기술
FrontendReact + Vite + TypeScript
BackendPython FastAPI + GitPython
DatabaseMySQL 8.0 (Master-Slave Replication)
AuthGitHub OAuth 2.0
InfraKubernetes + MetalLB + NFS
CI/CDGitHub Actions + GitLab CI

3.3. 마일스톤

버전목표진행률
v0.1Core Platform85%
v0.2Visualization & Features10%
v0.3Advanced Integrations0%

4. 시스템 아키텍처

4.1. 전체 구성

┌─────────────────────────────────────────────────────────────┐
│ Client │
│ (React + Vite) │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│ Ingress Controller (nginx-ingress) │
│ Host: gition.local │
│ /api/* → api-svc:3001 │
│ /* → frontend-svc:80 │
└─────────────────────────────────────────────────────────────┘

┌───────────────┴───────────────┐
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────────┐
│ FastAPI │ │ React SPA │
│ (Deployment: 3 pods) │ │ (Deployment: replicas) │
│ │ │ │
│ • GitHub OAuth │ │ • 블록 에디터 │
│ • Git Operations │ │ • 파일 브라우저 │
│ • Page CRUD │ │ • 커밋 히스토리 │
│ • /repos NFS Mount │ │ │
└─────────────────────────┘ └─────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│ MySQL (Master-Slave) │
├──────────────────────────┬──────────────────────────────────┤
│ Master (VM Docker) │ Slave (K8s StatefulSet) │
│ 172.100.100.11 │ mysql-slave-0, mysql-slave-1│
│ Write 전용 │ Read 전용 (GTID 복제) │
└──────────────────────────┴──────────────────────────────────┘

4.2. 네트워크 설계

호스트IP용도
GitLab172.100.100.8GitLab CE + Registry
Bastion172.100.100.9SSH 게이트웨이
NFS172.100.100.10공유 스토리지
MySQL Master172.100.100.11외부 MySQL (Write)
k8s-m172.100.100.12Control Plane
k8s-n1172.100.100.13Worker Node 1
k8s-n2172.100.100.14Worker Node 2
k8s-n3172.100.100.15Worker Node 3
MetalLB VIP172.100.100.20외부 트래픽 진입점

4.3. CI/CD 파이프라인

GitHub → GitHub Actions (ESLint/PyLint → Test → Gitleaks/Trivy → Mirror)


GitLab CI (Docker Build → Container Registry → Kubernetes Deploy)

5. 데이터베이스 설계

5.1. ERD

┌────────────────────┐
│ Users │
├────────────────────┤
│ PK id │
│ github_id │
│ login │
│ email │
│ avatar_url │
│ access_token │
└─────────┬──────────┘
│ 1:N

┌────────────────────┐ ┌────────────────────┐
│ Repositories │ │ Sessions │
├────────────────────┤ ├────────────────────┤
│ PK id │ │ PK id │
│ FK user_id │ │ FK user_id │
│ github_id │ │ token_hash │
│ name │ │ expires_at │
│ clone_url │ └────────────────────┘
│ default_branch │
└─────────┬──────────┘
│ 1:N

┌────────────────────┐
│ BranchPages │
├────────────────────┤
│ PK id │
│ FK repo_id │
│ FK user_id │
│ branch_name │
│ title │
│ content (JSON) │
└────────────────────┘

5.2. MySQL 복제 구성

구성 요소위치역할
MasterVM (172.100.100.11) Docker ComposeWrite 전용
Slave (x2)K8s StatefulSetRead 전용 (GTID 복제)

6. 프로젝트 산출물

6.1. 구현 파일 목록

구분파일설명
FrontendApp.tsx메인 라우팅
Backendmain.pyFastAPI 엔드포인트
DBdatabase.pyRead/Write Split
Git Opsgit_ops.pyGitPython 연동
CI/CDpipelines.yamlGitHub Actions
GitLab CI.gitlab-ci.yml빌드/배포 파이프라인

6.2. Kubernetes 매니페스트

파일설명
ingress.yamlIngress 라우팅 규칙
fastapi-deployment.yamlFastAPI Deployment + Service (3 replicas)
frontend.yamlReact Deployment + Service
nfs-provisioner.yamlNFS 동적 프로비저닝
github-secret.yamlGitLab Registry 인증

6.3. 배포 순서

  1. NFS Provisioner 설치
  2. MySQL Master (VM Docker) 기동
  3. MySQL Slave StatefulSet 배포 → 복제 설정
  4. Backend (FastAPI) 배포 - NFS PVC 마운트
  5. Frontend (React) 배포
  6. Ingress 설정

6.4. 검증 방법

  • ./check-cluster.sh - 클러스터 상태 확인
  • kubectl get pods - Pod 상태
  • kubectl exec mysql-slave-0 -- mysql -e "SHOW SLAVE STATUS\G" - 복제 상태
  • Primary Pod 삭제 → 서비스 지속 확인

7. 일정 계획

단계작업 내용상태
1단계K8s 클러스터 초기 구축O 완료
2단계GitLab CI/CD 구축O 완료
3단계애플리케이션 배포 (Frontend/Backend)O 완료
4단계MySQL Master-Slave 복제 구성O 완료
5단계OAuth + Ingress 트러블슈팅O 완료
6단계블록 에디터 고도화- 진행중
7단계CI/CD 시각화- 예정

관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: 프로젝트 계획서
노드 클릭 → 이동 · 드래그 → 위치 조정