Migrate from Supabase to Appwrite with core functionality and UI components
This commit is contained in:
204
docs/archive/03_개발_단계/01_개발_로드맵.md
Normal file
204
docs/archive/03_개발_단계/01_개발_로드맵.md
Normal file
@@ -0,0 +1,204 @@
|
||||
# 적자 탈출 가계부 개발 로드맵
|
||||
|
||||
## 개발 접근 방식
|
||||
|
||||
'적자 탈출 가계부' 프로젝트는 애자일 방법론을 기반으로 개발될 예정입니다. 2주 단위의 스프린트로 진행하며, 각 스프린트마다 사용 가능한 기능을 구현하고 테스트하는 방식으로 진행합니다. MVP(Minimum Viable Product) 접근법을 통해 핵심 기능을 우선적으로 개발하고, 사용자 피드백을 바탕으로 점진적으로 기능을 확장해 나갈 계획입니다.
|
||||
|
||||
## 개발 단계
|
||||
|
||||
### 1단계: 기획 및 설계 (2024년 Q1)
|
||||
|
||||
#### 1월: 요구사항 분석 및 기획
|
||||
- [x] 사용자 요구사항 수집 및 분석
|
||||
- [x] 경쟁 앱 분석 및 차별화 전략 수립
|
||||
- [x] 핵심 기능 정의 및 우선순위 설정
|
||||
- [x] 사용자 페르소나 및 사용자 여정 맵 작성
|
||||
|
||||
#### 2월: UI/UX 설계
|
||||
- [ ] 앱 정보 구조 설계
|
||||
- [ ] 주요 화면 와이어프레임 작성
|
||||
- [ ] 디자인 시스템 구축 (색상, 타이포그래피, 컴포넌트)
|
||||
- [ ] 프로토타입 제작 및 사용성 테스트
|
||||
|
||||
#### 3월: 기술 설계
|
||||
- [ ] 시스템 아키텍처 설계
|
||||
- [ ] 데이터베이스 스키마 설계
|
||||
- [ ] API 명세 작성
|
||||
- [ ] 보안 및 개인정보 보호 전략 수립
|
||||
|
||||
### 2단계: MVP 개발 (2024년 Q2)
|
||||
|
||||
#### 4월: 기본 인프라 구축
|
||||
- [ ] 개발 환경 설정
|
||||
- [ ] CI/CD 파이프라인 구축
|
||||
- [ ] 백엔드 서버 기본 구조 개발
|
||||
- [ ] 데이터베이스 구축 및 연결
|
||||
|
||||
#### 5월: 핵심 기능 개발 (1)
|
||||
- [ ] 사용자 인증 시스템 구현
|
||||
- [ ] 기본 수입/지출 기록 기능 개발
|
||||
- [ ] 카테고리 관리 기능 개발
|
||||
- [ ] 기본 대시보드 구현 (D3.js/Chart.js 활용)
|
||||
- [ ] 뉴모피즘 스타일 UI 컴포넌트 개발
|
||||
|
||||
#### 6월: 핵심 기능 개발 (2)
|
||||
- [ ] 예산 설정 및 관리 기능 개발
|
||||
- [ ] 기본 분석 보고서 구현
|
||||
- [ ] 알림 시스템 구현
|
||||
- [ ] 데이터 백업 및 복원 기능 개발
|
||||
|
||||
### 3단계: 베타 테스트 및 개선 (2024년 Q3)
|
||||
|
||||
#### 7월: 베타 버전 완성
|
||||
- [ ] 기능 통합 및 안정화
|
||||
- [ ] 성능 최적화
|
||||
- [ ] 사용자 피드백 수집 시스템 구현
|
||||
- [ ] 베타 테스트 환경 구축
|
||||
|
||||
#### 8월: 베타 테스트 진행
|
||||
- [ ] 클로즈드 베타 테스트 진행 (100명 규모)
|
||||
- [ ] 사용자 피드백 수집 및 분석
|
||||
- [ ] 버그 수정 및 UI/UX 개선
|
||||
- [ ] 성능 모니터링 및 최적화
|
||||
|
||||
#### 9월: 개선 및 추가 기능 개발
|
||||
- [ ] 베타 테스트 피드백 기반 개선사항 적용
|
||||
- [ ] 추가 기능 개발 (사용자 요구 기반)
|
||||
- [ ] 앱 안정성 및 성능 최적화
|
||||
- [ ] 출시 준비 (앱스토어 등록 준비)
|
||||
|
||||
### 4단계: 출시 및 확장 (2024년 Q4)
|
||||
|
||||
#### 10월: 공식 출시
|
||||
- [ ] 앱스토어 및 구글 플레이 스토어 등록 (Capacitor 앱 배포)
|
||||
- [ ] 웹 버전 공개 및 PWA 배포
|
||||
- [ ] 마케팅 캠페인 실행
|
||||
- [ ] 사용자 지원 시스템 구축
|
||||
- [ ] 실시간 모니터링 및 이슈 대응
|
||||
|
||||
#### 11월: 고급 기능 개발 (1)
|
||||
- [ ] AI 기반 지출 분석 엔진 개발
|
||||
- [ ] 맞춤형 절약 제안 시스템 구현
|
||||
- [ ] 영수증 스캔 및 자동 분류 기능 개발
|
||||
- [ ] 사용자 행동 분석 시스템 구현
|
||||
|
||||
#### 12월: 고급 기능 개발 (2)
|
||||
- [ ] 금융 계좌 연동 기능 개발
|
||||
- [ ] 절약 챌린지 시스템 구현
|
||||
- [ ] 커뮤니티 기능 개발
|
||||
- [ ] 프리미엄 구독 모델 구현
|
||||
|
||||
### 5단계: 확장 및 고도화 (2025년 Q1-Q2)
|
||||
|
||||
#### 3월 추가 작업: 기술 스택 전환 (Flutter → React, MongoDB → Supabase)
|
||||
- [x] 문서 업데이트 (README.md, 시스템 아키텍처, Lovable UI 컴포넌트 정리)
|
||||
- [x] Lovable UI 컴포넌트 React 구현 (LovableButton, LovableCard, LovableBudgetCard, LovableTransactionCard, LovableAddTransactionButton)
|
||||
- [x] 홈 화면 React 리팩토링
|
||||
- [x] Supabase 기본 연동 설정 (데이터 모델, 실시간 구독)
|
||||
- [ ] Supabase 인증 구현 및 완전한 통합
|
||||
- [ ] Capacitor 설정 및 네이티브 기능 연동
|
||||
|
||||
#### 3-4월: 서비스 확장 및 안정화
|
||||
- [ ] 상태 관리 시스템 구현 (React Context 또는 Redux)
|
||||
- [ ] 추가 화면 개발 (통계, 예산 설정, 프로필)
|
||||
- [ ] 다중 기기 동기화 기능 구현
|
||||
- [ ] 데스크톱 앱 버전 개발 (Electron 활용)
|
||||
- [ ] 국제화 및 현지화 (다국어 지원)
|
||||
|
||||
#### 5-6월: 서비스 고도화
|
||||
- [ ] 고급 데이터 시각화 도구 개발
|
||||
- [ ] 고급 AI 예측 모델 개발
|
||||
- [ ] 금융 교육 콘텐츠 통합
|
||||
- [ ] 파트너십 확대 (금융 기관, 핀테크 등)
|
||||
- [ ] 사용자 데이터 기반 서비스 개인화 강화
|
||||
|
||||
## 개발 팀 구성
|
||||
|
||||
### 핵심 팀 (초기 단계)
|
||||
- **프로젝트 매니저**: 1명 - 전체 프로젝트 조정 및 일정 관리
|
||||
- **UI/UX 디자이너**: 1명 - 사용자 경험 설계 및 시각적 디자인
|
||||
- **프론트엔드 개발자**: 2명 - 웹 앱 개발 (React, Capacitor)
|
||||
- **백엔드 개발자**: 2명 - 서버 및 API 개발 (Node.js)
|
||||
- **데이터 엔지니어**: 1명 - 데이터 모델링 및 분석 시스템 개발
|
||||
- **QA 엔지니어**: 1명 - 품질 보증 및 테스트 자동화
|
||||
|
||||
### 확장 팀 (후기 단계)
|
||||
- **AI/ML 엔지니어**: 1명 - 인공지능 및 기계학습 모델 개발
|
||||
- **DevOps 엔지니어**: 1명 - 인프라 관리 및 배포 자동화
|
||||
- **마케팅 전문가**: 1명 - 사용자 확보 및 브랜딩 전략
|
||||
- **콘텐츠 제작자**: 1명 - 재정 교육 콘텐츠 및 가이드 제작
|
||||
- **고객 지원 담당자**: 1-2명 - 사용자 문의 대응 및 지원
|
||||
|
||||
## 개발 환경 및 도구
|
||||
|
||||
### 개발 환경
|
||||
- **프론트엔드**: React, Vite, Tailwind CSS, Capacitor, TypeScript
|
||||
- **상태 관리**: React Context API (또는 Redux 검토 중)
|
||||
- **백엔드**: Supabase(PostgreSQL) On-Premise
|
||||
- **인증**: Supabase Auth
|
||||
- **AI/ML**: Python, TensorFlow, Pandas
|
||||
- **인프라**: Docker, Kubernetes
|
||||
|
||||
### 개발 도구
|
||||
- **프로젝트 관리**: Jira, Confluence
|
||||
- **소스 코드 관리**: GitHub
|
||||
- **CI/CD**: GitHub Actions, Jenkins
|
||||
- **커뮤니케이션**: Slack, Zoom
|
||||
- **디자인**: Figma, Adobe XD
|
||||
- **테스트**: Jest, Cypress, Postman
|
||||
|
||||
## 품질 보증 전략
|
||||
|
||||
### 테스트 전략
|
||||
- **단위 테스트**: 개별 함수 및 컴포넌트 테스트 (Jest)
|
||||
- **통합 테스트**: 컴포넌트 간 상호작용 테스트
|
||||
- **E2E 테스트**: 사용자 시나리오 기반 전체 흐름 테스트 (Cypress)
|
||||
- **성능 테스트**: 로드 테스트 및 스트레스 테스트
|
||||
- **보안 테스트**: 취약점 스캔 및 침투 테스트
|
||||
|
||||
### 코드 품질 관리
|
||||
- **코드 리뷰**: 모든 코드 변경에 대한 동료 검토
|
||||
- **정적 코드 분석**: ESLint, SonarQube
|
||||
- **코드 컨벤션**: 일관된 코딩 스타일 가이드
|
||||
- **문서화**: 코드 및 API 문서 자동화
|
||||
|
||||
## 위험 관리
|
||||
|
||||
### 잠재적 위험 및 대응 전략
|
||||
1. **일정 지연**
|
||||
- 대응: 우선순위 재조정, 스프린트 계획 유연성 확보
|
||||
- 완화: 버퍼 시간 확보, 주기적 진행 상황 검토
|
||||
|
||||
2. **기술적 복잡성**
|
||||
- 대응: 전문가 자문, 기술 스파이크 활용
|
||||
- 완화: 단계적 구현, 대안 기술 검토
|
||||
|
||||
3. **사용자 채택 저조**
|
||||
- 대응: 사용자 피드백 기반 개선, 마케팅 전략 조정
|
||||
- 완화: 초기 사용자 테스트, 경쟁 분석 강화
|
||||
|
||||
4. **보안 및 개인정보 이슈**
|
||||
- 대응: 즉각적인 취약점 패치, 투명한 커뮤니케이션
|
||||
- 완화: 정기적인 보안 감사, 개인정보 보호 설계
|
||||
|
||||
## 성공 기준
|
||||
|
||||
### 기술적 성공 기준
|
||||
- 99.9% 이상의 서비스 가용성
|
||||
- 앱 크래시 비율 0.1% 미만
|
||||
- 평균 앱 로딩 시간 2초 이내
|
||||
- 데이터 손실 사고 0건
|
||||
|
||||
### 비즈니스 성공 기준
|
||||
- 출시 6개월 내 50,000명 이상의 활성 사용자 확보
|
||||
- 무료 사용자의 8% 이상 유료 구독 전환
|
||||
- 앱스토어 평점 4.5/5.0 이상
|
||||
- 사용자 유지율 30일 기준 40% 이상
|
||||
|
||||
## 결론
|
||||
|
||||
'적자 탈출 가계부' 개발 로드맵은 사용자 중심의 접근 방식과 애자일 방법론을 기반으로 설계되었습니다. MVP 접근법을 통해 핵심 기능을 우선적으로 개발하고, 사용자 피드백을 지속적으로 반영하여 서비스를 개선해 나갈 계획입니다.
|
||||
|
||||
개발 과정에서 발생할 수 있는 위험을 사전에 식별하고 대응 전략을 마련하여, 프로젝트의 성공적인 완수를 위한 기반을 마련하였습니다. 또한, 명확한 성공 기준을 설정하여 프로젝트의 진행 상황을 객관적으로 평가할 수 있도록 하였습니다.
|
||||
|
||||
이 로드맵은 프로젝트의 진행 상황과 사용자 피드백에 따라 유연하게 조정될 수 있으며, 궁극적으로는 사용자들이 재정적 어려움에서 벗어나 건강한 재정 상태를 달성할 수 있도록 돕는 가치 있는 서비스를 제공하는 것을 목표로 합니다.
|
||||
122
docs/archive/03_개발_단계/1단계/1단계_산출물_요약.md
Normal file
122
docs/archive/03_개발_단계/1단계/1단계_산출물_요약.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# 적자 탈출 가계부 - 1단계 산출물 요약
|
||||
|
||||
## 1. 요구사항 문서
|
||||
|
||||
### 1.1 사용자 페르소나
|
||||
- 3개의 대표 페르소나 정의 (직장인, 신혼부부, 대학생)
|
||||
- 각 페르소나의 재정적 특성, 소비 패턴, 목표 정의
|
||||
- 페르소나별 주요 문제점과 니즈 식별
|
||||
|
||||
### 1.2 핵심 문제 정의
|
||||
- 신용카드 사용 관련 문제점 분석
|
||||
- 기존 가계부/금융 앱의 한계 정리
|
||||
- MVP 접근 방식 및 문제 해결 전략 수립
|
||||
|
||||
### 1.3 주요 사용 시나리오
|
||||
- 3개의 사용자 시나리오 작성
|
||||
- 월간 카드 한도 관리
|
||||
- 충동 구매 방지
|
||||
- 부부 공동 카드 관리
|
||||
- 각 시나리오별 사용자 여정 및 앱 기능 요구사항 정의
|
||||
|
||||
### 1.4 프로젝트 개요
|
||||
- 프로젝트 목표, 범위, 기술 스택 정의
|
||||
- MVP 핵심 기능 신용카드 관리 중심으로 수정
|
||||
- 확장 기능에 AI 기반 재정 어시스턴트 추가
|
||||
|
||||
## 2. 사용자 스토리 및 기능 목록
|
||||
|
||||
### 2.1 사용자 스토리
|
||||
- 카드 한도 관리 관련 스토리 (한도 설정, 현황 확인, 알림)
|
||||
- 카드 사용 내역 관리 관련 스토리 (내역 기록, 조회/분석, 수정/관리)
|
||||
- 대시보드 및 분석 관련 스토리 (메인 대시보드, 지출 분석, 리포트/인사이트)
|
||||
- 사용자 관리 및 설정 관련 스토리 (프로필 관리, 데이터 관리, 다중 사용자 지원)
|
||||
|
||||
### 2.2 MVP 기능 목록 (MoSCoW 방법론)
|
||||
- Must have: 월간 카드 한도 설정, 실시간 사용량 표시, 기본 알림 등
|
||||
- Should have: 카테고리별 한도, 내역 템플릿, 기본 분석 기능 등
|
||||
- Could have: 영수증 사진 촬영, 위치 기반 자동 완성, 맞춤형 리포트 등
|
||||
- Won't have: 자동 내역 동기화, 다중 사용자 지원, AI 고급 분석 등
|
||||
|
||||
### 2.3 제외 기능 명확한 정의
|
||||
- 자동 내역 동기화, 다중 사용자 지원, AI 기반 고급 분석 등 MVP에서 제외되는 기능 명확히 정의
|
||||
|
||||
## 3. 데이터 모델 설계
|
||||
|
||||
### 3.1 핵심 데이터 엔티티
|
||||
- 사용자(Users) 테이블 구조
|
||||
- 카드(Cards) 테이블 구조
|
||||
- 카테고리(Categories) 테이블 구조
|
||||
- 지출(Expenses) 테이블 구조
|
||||
- 한도(Limits) 테이블 구조
|
||||
- 알림(Notifications) 테이블 구조
|
||||
- 템플릿(Templates) 테이블 구조
|
||||
|
||||
### 3.2 데이터 관계 및 제약 조건
|
||||
- 테이블 간 관계 정의 (ERD 작성)
|
||||
- 기본 카테고리 목록 정의
|
||||
- 데이터 유효성 검사 규칙 정의
|
||||
|
||||
### 3.3 데이터베이스 인덱스 설계
|
||||
- 성능 최적화를 위한 인덱스 설계
|
||||
- 데이터 마이그레이션 전략
|
||||
- 데이터 보안 고려사항
|
||||
|
||||
## 4. UI/UX 와이어프레임
|
||||
|
||||
### 4.1 핵심 화면 와이어프레임
|
||||
- 로그인/회원가입 화면
|
||||
- 메인 대시보드 화면
|
||||
- 지출 입력 화면
|
||||
- 지출 목록 화면
|
||||
- 필터 및 검색 화면
|
||||
|
||||
### 4.2 추가 화면 와이어프레임
|
||||
- 예산 설정 화면
|
||||
- 분석 화면
|
||||
- 설정 화면
|
||||
- 카드 관리 화면
|
||||
- 카드 추가 화면
|
||||
|
||||
### 4.3 화면 간 이동 흐름도
|
||||
- 주요 사용자 흐름 정의
|
||||
- 신규 사용자 온보딩 흐름
|
||||
- 지출 기록 흐름
|
||||
- 지출 분석 흐름
|
||||
- 한도 관리 흐름
|
||||
- 지출 내역 검색 흐름
|
||||
|
||||
### 4.4 디자인 노트
|
||||
- 색상 팔레트
|
||||
- 타이포그래피
|
||||
- 아이콘 및 시각적 요소
|
||||
- 사용자 경험 고려사항
|
||||
- 접근성 고려사항
|
||||
|
||||
## 5. 기술 스택 및 개발 환경
|
||||
|
||||
### 5.1 기술 스택
|
||||
- 모바일 앱: Flutter (크로스 플랫폼)
|
||||
- 백엔드: Supabase (PostgreSQL)
|
||||
- AI 모델:
|
||||
- 기기 내: TensorFlow Lite, 경량 모델 (DistilBERT)
|
||||
- 서버: Hugging Face 또는 OpenAI 모델
|
||||
|
||||
### 5.2 개발 환경 설정 계획
|
||||
- 개발 환경 요구사항
|
||||
- 필요한 개발 도구 목록
|
||||
- 로컬 개발 환경과 서버 환경 설정 단계
|
||||
|
||||
## 6. 다음 단계 계획
|
||||
|
||||
### 6.1 2단계 목표
|
||||
- 백엔드 구축 (Supabase 설정)
|
||||
- 데이터베이스 스키마 구현
|
||||
- 기본 API 엔드포인트 개발
|
||||
- 인증 시스템 구현
|
||||
|
||||
### 6.2 향후 고려사항
|
||||
- 개인정보 보호 방안
|
||||
- LLM 모델 선택 및 최적화
|
||||
- 사용자 피드백 반영 전략
|
||||
- 단계별 기능 확장 계획
|
||||
131
docs/archive/03_개발_단계/1단계/1단계_첫주차_할일.md
Normal file
131
docs/archive/03_개발_단계/1단계/1단계_첫주차_할일.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# 적자 탈출 가계부 앱 - 1단계 첫 주차 할 일
|
||||
|
||||
## 역할 구분
|
||||
- [사용자] : 제품 기획 및 테스트 담당자가 수행할 작업
|
||||
- [AI] : AI 어시스턴트가 수행할 작업
|
||||
- [공동] : 함께 논의하고 결정할 작업
|
||||
|
||||
## 1일차: 프로젝트 초기화 및 요구사항 정의
|
||||
|
||||
### 오전
|
||||
- [공동] 프로젝트 관리 환경 설정 ✅
|
||||
- [사용자] 프로젝트 폴더 구조 생성 ✅
|
||||
- [AI] 문서 템플릿 준비 (요구사항, 디자인 등) ✅
|
||||
- [사용자] 일정 관리 도구 설정 (선택적)
|
||||
|
||||
### 오후
|
||||
- [사용자] MVP(Minimum Viable Product) 핵심 요구사항 정의
|
||||
- [사용자] 사용자 페르소나 작성 (주 사용자층 정의) ✅
|
||||
- [사용자] 핵심 문제 정의 (적자 발생 원인 분석) ✅
|
||||
- [사용자] 주요 사용 시나리오 작성 (2-3개) ✅
|
||||
- [AI] 요구사항 문서화 및 정리 ✅
|
||||
|
||||
## 2일차: 사용자 스토리 및 기능 목록 작성
|
||||
|
||||
### 오전
|
||||
- [공동] 사용자 스토리 작성
|
||||
- [사용자] 핵심 사용자 니즈 정의
|
||||
- [AI] 사용자 스토리 형식으로 문서화: ✅
|
||||
- "사용자로서 나는 지출을 빠르게 기록하고 싶다"
|
||||
- "사용자로서 나는 현재 사용 가능한 잔액을 실시간으로 확인하고 싶다"
|
||||
- "사용자로서 나는 월별 예산을 설정하고 진행 상황을 확인하고 싶다"
|
||||
- "사용자로서 나는 지출 패턴을 카테고리별로 분석하고 싶다"
|
||||
- "사용자로서 나는 예산 초과 시 알림을 받고 싶다"
|
||||
|
||||
### 오후
|
||||
- [공동] MVP 기능 목록 및 우선순위 설정 ✅
|
||||
- [사용자] 필수 기능 결정 ✅
|
||||
- [AI] 기능별 우선순위 부여 (MoSCoW 방법: Must have, Should have, Could have, Won't have) ✅
|
||||
- [공동] 제외할 기능 명확히 정의 ✅
|
||||
|
||||
## 3일차: 데이터 모델 설계
|
||||
|
||||
### 오전
|
||||
- [AI] 핵심 데이터 엔티티 정의 ✅
|
||||
- [AI] 사용자(users) 테이블 구조 설계 ✅
|
||||
- [AI] 지출(expenses) 테이블 구조 설계 ✅
|
||||
- [AI] 카테고리(categories) 테이블 구조 설계 ✅
|
||||
- [AI] 예산(budgets) 테이블 구조 설계 ✅
|
||||
|
||||
### 오후
|
||||
- [공동] 데이터 관계 및 제약 조건 설계 ✅
|
||||
- [AI] 테이블 간 관계 정의 (ERD 작성) ✅
|
||||
- [사용자] 기본 카테고리 목록 정의 ✅
|
||||
- [AI] 데이터 유효성 검사 규칙 정의 ✅
|
||||
- [사용자] 데이터 모델 검토 및 피드백 ✅
|
||||
|
||||
## 4-5일차: UI/UX 와이어프레임 작성
|
||||
|
||||
### 4일차
|
||||
- [공동] 핵심 화면 와이어프레임 스케치 ✅
|
||||
- [AI] 초기 와이어프레임 제안: ✅
|
||||
- 로그인/회원가입 화면 ✅
|
||||
- 메인 대시보드 화면 ✅
|
||||
- 지출 입력 화면 ✅
|
||||
- 지출 목록 화면 ✅
|
||||
- [사용자] 와이어프레임 검토 및 피드백 ✅
|
||||
|
||||
### 5일차
|
||||
- [공동] 추가 화면 및 사용자 흐름 설계 ✅
|
||||
- [AI] 추가 와이어프레임 제안: ✅
|
||||
- 예산 설정 화면 ✅
|
||||
- 분석 화면 ✅
|
||||
- 설정 화면 ✅
|
||||
- [AI] 화면 간 이동 흐름도 작성 ✅
|
||||
- [사용자] 최종 와이어프레임 검토 및 승인 ✅
|
||||
|
||||
## 6일차: 기술 스택 결정 및 개발 환경 설정 계획
|
||||
|
||||
### 오전
|
||||
- [AI] 최종 기술 스택 결정 ✅
|
||||
- [AI] Flutter 버전 선택 ✅
|
||||
- [AI] 필요한 Flutter 패키지 목록 작성 ✅
|
||||
- [AI] Supabase 설치 요구사항 확인 ✅
|
||||
- [사용자] 기술 스택 검토 및 승인 ✅
|
||||
|
||||
### 오후
|
||||
- [AI] 개발 환경 설정 계획 수립 ✅
|
||||
- [AI] 개발 환경 요구사항 문서화 ✅
|
||||
- [AI] 필요한 개발 도구 목록 작성 ✅
|
||||
- [AI] 로컬 개발 환경과 서버 환경 설정 단계 정의 ✅
|
||||
- [사용자] 서버 환경 정보 공유 ✅
|
||||
|
||||
## 7일차: 1단계 검토 및 2단계 준비
|
||||
|
||||
### 오전
|
||||
- [공동] 1단계 산출물 검토
|
||||
- [사용자] 요구사항 문서 검토 및 피드백
|
||||
- [사용자] 와이어프레임 최종 검토
|
||||
- [AI] 데이터 모델 최종 검토
|
||||
- [AI] 문서 보완 및 수정
|
||||
|
||||
### 오후
|
||||
- [공동] 2단계 계획 수립
|
||||
- [AI] 2단계 작업 목록 초안 작성
|
||||
- [사용자] 2단계 일정 및 우선순위 결정
|
||||
- [공동] 2단계 목표 및 성공 기준 정의
|
||||
- [AI] 1단계 결과물 최종 정리 및 문서화
|
||||
|
||||
## 주간 산출물 목록
|
||||
|
||||
1. **요구사항 문서** [공동]
|
||||
- MVP 핵심 요구사항 정의서
|
||||
- 사용자 스토리 목록
|
||||
- 기능 우선순위 목록
|
||||
|
||||
2. **데이터 모델 문서** [AI 주도]
|
||||
- 데이터베이스 스키마 설계서
|
||||
- ERD(Entity Relationship Diagram)
|
||||
- 기본 카테고리 목록 [사용자 정의]
|
||||
|
||||
3. **디자인 문서** [공동]
|
||||
- 핵심 화면 와이어프레임
|
||||
- 사용자 흐름도
|
||||
- UI 컴포넌트 목록
|
||||
|
||||
4. **기술 문서** [AI 주도]
|
||||
- 기술 스택 명세서
|
||||
- 개발 환경 설정 가이드
|
||||
- 2단계 백엔드 구축 계획
|
||||
|
||||
이 일정은 유연하게 조정 가능하며, 각 태스크의 완료 상황에 따라 일정을 앞당기거나 미룰 수 있습니다. 중요한 것은 1주차 말에 2단계 백엔드 구축을 시작할 수 있도록 필요한 모든 계획과 설계가 완료되는 것입니다.
|
||||
303
docs/archive/03_개발_단계/2단계/2단계_계획.md
Normal file
303
docs/archive/03_개발_단계/2단계/2단계_계획.md
Normal file
@@ -0,0 +1,303 @@
|
||||
# 적자 탈출 가계부 - 2단계 계획
|
||||
|
||||
## 1. 2단계 목표
|
||||
|
||||
2단계의 주요 목표는 적자 탈출 가계부 앱의 백엔드 인프라를 구축하고, 데이터베이스를 설계하며, 기본적인 API 엔드포인트를 개발하는 것입니다. 이를 통해 3단계에서 진행될 프론트엔드 개발을 위한 기반을 마련합니다.
|
||||
|
||||
### 핵심 목표
|
||||
1. [x] Supabase 기반 백엔드 인프라 구축
|
||||
2. [x] 데이터베이스 스키마 구현
|
||||
3. [x] 기본 API 엔드포인트 개발
|
||||
4. [x] 사용자 인증 시스템 구현
|
||||
5. [ ] 초기 테스트 환경 구성
|
||||
|
||||
## 2. 작업 목록 및 일정
|
||||
|
||||
### 1일차: Supabase 프로젝트 설정
|
||||
|
||||
#### 오전
|
||||
- [x] [사용자] Supabase 계정 생성 및 프로젝트 생성
|
||||
- [x] [AI] Supabase 프로젝트 설정 가이드 작성
|
||||
- [x] [공동] 프로젝트 환경 변수 및 보안 설정
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 데이터베이스 연결 테스트 코드 작성
|
||||
- [x] [사용자] 데이터베이스 연결 테스트
|
||||
- [x] [AI] 기본 백엔드 구조 설계 문서 작성
|
||||
|
||||
### 2일차: 데이터베이스 스키마 구현
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] SQL 스키마 스크립트 작성
|
||||
- [x] Users 테이블 생성
|
||||
- [x] Cards 테이블 생성
|
||||
- [x] Categories 테이블 생성
|
||||
- [x] Expenses 테이블 생성
|
||||
- [x] Limits 테이블 생성
|
||||
- [x] Notifications 테이블 생성
|
||||
- [x] Templates 테이블 생성
|
||||
|
||||
#### 오후
|
||||
- [x] [사용자] SQL 스키마 스크립트 실행 및 검증
|
||||
- [x] [AI] 기본 카테고리 데이터 삽입 스크립트 작성
|
||||
- [x] [사용자] 기본 데이터 삽입 및 확인
|
||||
- [x] [공동] 데이터베이스 인덱스 및 제약 조건 검토
|
||||
- [x] [공동] 코드 및 문서 관리 원칙 수립 (Gitea와 옵시디언 통합)
|
||||
|
||||
### 3-4일차: API 엔드포인트 개발
|
||||
|
||||
#### 3일차 오전
|
||||
- [x] [AI] 사용자 관리 API 개발
|
||||
- [x] 회원가입 API
|
||||
- [x] 로그인 API
|
||||
- [x] 프로필 조회/수정 API
|
||||
- [x] 비밀번호 변경/재설정 API
|
||||
|
||||
#### 3일차 오후
|
||||
- [x] [AI] 카드 관리 API 개발
|
||||
- [x] 카드 등록 API
|
||||
- [x] 카드 조회 API
|
||||
- [x] 카드 수정/삭제 API
|
||||
- [x] 카드 한도 설정 API
|
||||
|
||||
#### 4일차 오전
|
||||
- [x] [AI] 지출 관리 API 개발
|
||||
- [x] 지출 등록 API
|
||||
- [x] 지출 조회 API
|
||||
- [x] 지출 수정/삭제 API
|
||||
- [x] 지출 필터링/검색 API
|
||||
|
||||
#### 4일차 오후
|
||||
- [x] [AI] 분석 및 대시보드 API 개발
|
||||
- [x] 카테고리별 지출 분석 API
|
||||
- [x] 기간별 지출 추이 API
|
||||
- [x] 한도 사용 현황 API
|
||||
- [x] 대시보드 요약 정보 API
|
||||
|
||||
### 5일차: 인증 및 보안 구현
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 사용자 인증 시스템 구현
|
||||
- [x] JWT 토큰 기반 인증 설정
|
||||
- [x] 소셜 로그인 연동 (Google, Kakao, Naver, Apple)
|
||||
- [x] 권한 관리 시스템 구현
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 데이터 보안 구현
|
||||
- [x] 민감 정보 암호화 설정
|
||||
- [x] API 요청 검증 미들웨어 구현
|
||||
- [x] CORS 및 보안 헤더 설정
|
||||
|
||||
### 6일차: 테스트 및 문서화
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] API 테스트 스크립트 작성
|
||||
- [x] 단위 테스트 작성
|
||||
- [x] 통합 테스트 작성
|
||||
- [x] 성능 테스트 작성
|
||||
|
||||
#### 오후
|
||||
- [x] [공동] API 문서 작성
|
||||
- [x] Swagger/OpenAPI 문서 생성
|
||||
- [x] API 엔드포인트 사용 예제 작성
|
||||
- [x] 에러 코드 및 응답 형식 문서화
|
||||
|
||||
### 7일차: 2단계 검토 및 3단계 준비
|
||||
|
||||
#### 오전
|
||||
- [x] [공동] 2단계 산출물 검토
|
||||
- [x] 백엔드 기능 테스트
|
||||
- [x] API 응답 검증
|
||||
- [x] 성능 및 보안 검토
|
||||
|
||||
#### 오후
|
||||
- [ ] [공동] 3단계 계획 수립
|
||||
- [ ] 3단계 작업 목록 초안 작성
|
||||
- [ ] 3단계 일정 및 우선순위 결정
|
||||
- [ ] 3단계 목표 및 성공 기준 정의
|
||||
- [ ] [AI] 2단계 결과물 최종 정리 및 문서화
|
||||
|
||||
## 3. 기술적 고려사항
|
||||
|
||||
### 3.1 Supabase 설정
|
||||
- Supabase 프로젝트 리전: 서울 (ap-northeast-2)
|
||||
- 데이터베이스 성능 티어: 스타터 플랜
|
||||
- 스토리지 설정: 영수증 이미지 저장용 버킷 구성
|
||||
- 백업 설정: 일일 자동 백업 활성화
|
||||
|
||||
### 3.2 API 설계 원칙
|
||||
- RESTful API 설계 원칙 준수
|
||||
- JSON 응답 형식 표준화
|
||||
- HTTP 상태 코드 적절히 활용
|
||||
- 페이지네이션 및 필터링 지원
|
||||
- 일관된 에러 처리 및 응답 형식
|
||||
|
||||
### 3.3 보안 고려사항
|
||||
- 모든 API 요청에 인증 필요 (공개 API 제외)
|
||||
- 비밀번호 해싱에 bcrypt 사용
|
||||
- API 요청 속도 제한 설정
|
||||
- 민감한 정보는 서버 측에서만 처리
|
||||
- HTTPS 강제 적용
|
||||
|
||||
### 3.4 성능 최적화
|
||||
- 데이터베이스 쿼리 최적화
|
||||
- 적절한 인덱스 설정
|
||||
- 캐싱 전략 구현 (Redis 고려)
|
||||
- 대량 데이터 처리를 위한 페이지네이션
|
||||
- 비동기 처리가 필요한 작업 식별
|
||||
|
||||
## 4. 산출물 목록
|
||||
|
||||
2단계 완료 시 다음과 같은 산출물이 생성될 예정입니다:
|
||||
|
||||
1. **Supabase 프로젝트 설정 문서**
|
||||
- 프로젝트 구성 정보
|
||||
- 환경 변수 목록
|
||||
- 접근 권한 설정
|
||||
|
||||
2. **데이터베이스 스키마 문서**
|
||||
- SQL 스키마 스크립트
|
||||
- ER 다이어그램 (구현 버전)
|
||||
- 인덱스 및 제약 조건 목록
|
||||
|
||||
3. **API 문서**
|
||||
- API 엔드포인트 목록 및 설명
|
||||
- 요청/응답 형식 예제
|
||||
- 인증 및 권한 요구사항
|
||||
|
||||
4. **테스트 문서**
|
||||
- 테스트 케이스 목록
|
||||
- 테스트 결과 보고서
|
||||
- 성능 테스트 결과
|
||||
|
||||
5. **개발 가이드**
|
||||
- 로컬 개발 환경 설정 방법
|
||||
- API 사용 예제 코드
|
||||
- 문제 해결 가이드
|
||||
|
||||
## 5. 위험 요소 및 대응 계획
|
||||
|
||||
### 5.1 기술적 위험
|
||||
- **Supabase 제한 사항**: 무료/스타터 플랜의 제한 사항 파악 및 대응 계획 수립
|
||||
- **데이터베이스 성능**: 대량 데이터 처리 시 성능 이슈 대응 방안 마련
|
||||
- **API 응답 시간**: 복잡한 쿼리의 응답 시간 최적화 전략 수립
|
||||
|
||||
### 5.2 일정 관련 위험
|
||||
- **기술 학습 시간**: Supabase 학습에 필요한 추가 시간 고려
|
||||
- **예상치 못한 문제**: 버퍼 시간을 일정에 포함하여 계획
|
||||
|
||||
### 5.3 보안 관련 위험
|
||||
- **데이터 보안**: 민감 정보 보호를 위한 추가 보안 조치 계획
|
||||
- **인증 시스템**: 보안 취약점 방지를 위한 철저한 테스트 계획
|
||||
|
||||
## 6. 성공 기준
|
||||
|
||||
2단계는 다음 기준이 충족될 때 성공적으로 완료된 것으로 간주합니다:
|
||||
|
||||
1. 모든 데이터베이스 테이블이 성공적으로 생성되고 관계가 설정됨
|
||||
2. 모든 필수 API 엔드포인트가 구현되고 테스트됨
|
||||
3. 사용자 인증 시스템이 안전하게 작동함
|
||||
4. API 응답 시간이 목표 성능 기준을 충족함 (평균 응답 시간 < 300ms)
|
||||
5. 모든 API가 문서화되고 프론트엔드 개발에 사용할 준비가 됨
|
||||
|
||||
## 7. 다음 단계 미리보기
|
||||
|
||||
2단계 완료 후 진행될 3단계의 주요 내용은 다음과 같습니다:
|
||||
|
||||
1. Flutter 프로젝트 설정 및 기본 구조 구현
|
||||
2. UI 컴포넌트 개발 및 스타일 가이드 작성
|
||||
3. 백엔드 API와의 연동 구현
|
||||
4. 핵심 화면 및 기능 구현
|
||||
5. 사용자 테스트 및 피드백 수집
|
||||
|
||||
## 8. 진행 상황
|
||||
|
||||
### 8.1 완료된 작업
|
||||
1. [x] **Supabase 프로젝트 설정**
|
||||
- [x] 프로젝트 생성 및 기본 설정
|
||||
- [x] 데이터베이스 연결 설정
|
||||
- [x] 스토리지 버킷 구성
|
||||
- [x] 백업 설정 구성
|
||||
|
||||
2. [x] **데이터베이스 스키마 구현**
|
||||
- [x] 사용자 테이블 생성
|
||||
- [x] 카테고리 테이블 생성
|
||||
- [x] 지출/수입 테이블 생성
|
||||
- [x] 예산 테이블 생성
|
||||
- [x] 카드 테이블 생성
|
||||
- [x] 한도 테이블 생성
|
||||
- [x] 템플릿 테이블 생성
|
||||
- [x] 알림 테이블 생성
|
||||
- [x] 분석 설정 테이블 생성
|
||||
|
||||
3. [x] **기본 데이터 삽입**
|
||||
- [x] 기본 카테고리 데이터 삽입
|
||||
- [x] 테스트 사용자 데이터 삽입
|
||||
- [x] 샘플 지출/수입 데이터 삽입
|
||||
|
||||
4. [x] **API 엔드포인트 개발**
|
||||
- [x] 사용자 관리 API 함수 구현
|
||||
- [x] 카테고리 관리 API 함수 구현
|
||||
- [x] 지출/수입 관리 API 함수 구현
|
||||
- [x] 예산 관리 API 함수 구현
|
||||
- [x] 카드 관리 API 함수 구현
|
||||
- [x] 한도 관리 API 함수 구현
|
||||
- [x] 템플릿 관리 API 함수 구현
|
||||
- [x] 알림 관리 API 함수 구현
|
||||
- [x] 분석 관리 API 함수 구현
|
||||
|
||||
5. [x] **사용자 인증 시스템 구현**
|
||||
- [x] JWT 토큰 기반 인증
|
||||
- [x] 비밀번호 암호화 (bcrypt)
|
||||
- [x] 소셜 로그인 연동 (Google, Kakao, Naver, Apple)
|
||||
- [x] 이메일 인증 및 비밀번호 재설정
|
||||
- [x] Row Level Security (RLS) 정책 구현
|
||||
- [x] 토큰 블랙리스트 관리 (로그아웃)
|
||||
|
||||
6. [x] **데이터 보안 구현**
|
||||
- [x] 민감 정보 암호화 설정
|
||||
- [x] API 요청 검증 미들웨어 구현
|
||||
- [x] CORS 및 보안 헤더 설정
|
||||
- [x] 데이터 암호화 전략 수립
|
||||
- [x] 보안 감사 및 검증
|
||||
|
||||
7. [x] **성능 테스트 및 최적화**
|
||||
- [x] 데이터베이스 쿼리 성능 테스트
|
||||
- [x] 성능 병목 지점 식별
|
||||
- [x] 성능 최적화 전략 수립
|
||||
- [x] 성능 테스트 보고서 작성
|
||||
|
||||
### 8.2 진행 중인 작업
|
||||
- [x] 보안 감사 및 검증
|
||||
- [x] 보안 취약점 분석
|
||||
- [x] 보안 테스트 및 검증
|
||||
|
||||
### 8.3 다음 단계
|
||||
- [ ] 백엔드 테스트
|
||||
- [x] 단위 테스트 작성 및 실행
|
||||
- [x] 인증 시스템 단위 테스트 작성 및 실행
|
||||
- [x] 기타 API 함수 단위 테스트 작성 및 실행
|
||||
- [x] 통합 테스트 구현
|
||||
- [x] 보안 테스트 및 취약점 분석
|
||||
|
||||
- [ ] 3단계 준비
|
||||
- [ ] 프론트엔드 개발 환경 설정
|
||||
- [ ] API 연동 계획 수립
|
||||
- [ ] 3단계 세부 일정 및 작업 목록 작성
|
||||
|
||||
## 9. 이슈 및 고려사항
|
||||
|
||||
1. [ ] **Supabase Realtime 서비스 상태**
|
||||
- [ ] Realtime 서비스가 현재 Unhealthy 상태로 표시됨
|
||||
- [ ] 실시간 기능이 필요한 경우 추가 디버깅 필요
|
||||
- [ ] 우선순위: 중간 (기본 CRUD 작업에는 영향 없음)
|
||||
|
||||
2. [ ] **대용량 데이터 처리 전략**
|
||||
- [ ] 장기적인 데이터 보관 정책 수립 필요
|
||||
- [ ] 오래된 데이터 아카이빙 전략 고려
|
||||
- [ ] 우선순위: 낮음 (초기 단계에서는 문제 없음)
|
||||
|
||||
3. [ ] **API 성능 최적화**
|
||||
- [ ] 복잡한 분석 쿼리 최적화 필요
|
||||
- [ ] 캐싱 전략 구현 고려
|
||||
- [ ] 우선순위: 중간 (기본 기능에는 영향 없음)
|
||||
223
docs/archive/03_개발_단계/3단계/3단계_계획.md
Normal file
223
docs/archive/03_개발_단계/3단계/3단계_계획.md
Normal file
@@ -0,0 +1,223 @@
|
||||
/Users/hansoo./Documents/my vault/3. Resource/Users/hansoo./Documents/my vault/3. Resource# 적자 탈출 가계부 - 3단계 계획
|
||||
|
||||
## 1. 3단계 목표
|
||||
|
||||
3단계의 주요 목표는 적자 탈출 가계부 앱의 프론트엔드를 개발하고, 백엔드 API와 연동하여 완전한 사용자 경험을 제공하는 것입니다. 이 단계에서는 Flutter를 사용하여 크로스 플랫폼 모바일 앱을 개발합니다.
|
||||
|
||||
### 핵심 목표
|
||||
1. [x] Flutter 프로젝트 설정 및 기본 구조 구현
|
||||
2. [x] UI 컴포넌트 개발 및 디자인 시스템 구축
|
||||
3. [ ] 백엔드 API와의 연동 구현
|
||||
4. [x] 핵심 화면 및 기능 구현
|
||||
5. [ ] 사용자 테스트 및 피드백 수집
|
||||
|
||||
## 2. 작업 목록 및 일정
|
||||
|
||||
### 1일차: 개발 환경 설정 및 프로젝트 구조 설계
|
||||
|
||||
#### 오전
|
||||
- [x] [사용자] Flutter 개발 환경 설정
|
||||
- [x] [AI] Flutter 프로젝트 생성 및 기본 설정 가이드 작성
|
||||
- [x] [공동] 프로젝트 구조 및 아키텍처 설계
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 상태 관리 전략 수립 (Provider, Bloc, Riverpod 등)
|
||||
- [x] [AI] 라우팅 및 네비게이션 설계
|
||||
- [x] [사용자] 기본 프로젝트 구조 검증 및 테스트
|
||||
|
||||
### 2일차: 디자인 시스템 및 UI 컴포넌트 개발
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 디자인 시스템 설계
|
||||
- [x] 색상 팔레트 및 테마 설정
|
||||
- [x] 타이포그래피 스타일 정의
|
||||
- [x] 공통 UI 컴포넌트 디자인
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 기본 UI 컴포넌트 구현
|
||||
- [x] 버튼, 입력 필드, 카드 등 기본 컴포넌트
|
||||
- [x] 커스텀 위젯 및 애니메이션
|
||||
- [x] 반응형 레이아웃 구현
|
||||
|
||||
### 3-4일차: 화면 개발 및 API 연동
|
||||
|
||||
#### 3일차 오전
|
||||
- [x] [AI] 인증 관련 화면 개발
|
||||
- [x] 로그인 화면
|
||||
- [x] 회원가입 화면
|
||||
- [x] 비밀번호 재설정 화면
|
||||
|
||||
#### 3일차 오후
|
||||
- [x] [AI] 인증 API 연동
|
||||
|
||||
{{ ... }}
|
||||
|
||||
### 5일차: 지출 관리 기능 개발
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 지출 추가/편집 화면 개발
|
||||
- [x] [AI] 지출 목록 및 상세 화면 개발
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 지출 관리 API 연동
|
||||
- [x] [AI] 지출 필터링 및 검색 기능 구현
|
||||
|
||||
### 6일차: 예산 관리 및 프로필 기능 개발
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 예산 관리 화면 개발
|
||||
- [x] 예산 설정 화면
|
||||
- [x] 예산 사용 현황 표시
|
||||
- [x] 카테고리별 예산 관리
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 프로필 화면 개발
|
||||
- [x] 사용자 정보 표시 및 수정
|
||||
- [x] 테마 설정 (라이트/다크 모드)
|
||||
- [x] 언어 설정
|
||||
- [x] 로그아웃 기능
|
||||
|
||||
### 7일차: 통계 및 분석 기능 개발
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 통계 화면 개발
|
||||
- [x] 지출 추이 차트
|
||||
- [x] 카테고리별 지출 분석
|
||||
- [x] 기간별 지출 비교
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 분석 기능 구현
|
||||
- [x] 지출 패턴 분석
|
||||
- [x] 예산 대비 지출 분석
|
||||
- [x] 절약 제안 기능
|
||||
|
||||
### 8일차: 오프라인 동기화 기능 개발
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 오프라인 동기화 인프라 구축
|
||||
- [x] 동기화 큐 서비스 구현
|
||||
- [x] 로컬 데이터베이스 서비스 구현
|
||||
- [x] 네트워크 연결 상태 모니터링 서비스 구현
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 동기화 UI/UX 구현
|
||||
- [x] 동기화 상태 위젯 개발
|
||||
- [x] 동기화 대시보드 위젯 개발
|
||||
- [x] 동기화 상태 화면 개발
|
||||
- [x] 동기화 정책 설정 기능 구현
|
||||
|
||||
### 9일차: 오프라인 동기화 기능 테스트 및 개선
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 동기화 기능 테스트
|
||||
- [x] 다양한 네트워크 상황에서의 동기화 테스트
|
||||
- [x] 오류 처리 및 재시도 메커니즘 테스트
|
||||
- [x] 대용량 데이터 동기화 테스트
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 동기화 기능 개선
|
||||
- [x] 성능 최적화
|
||||
- [x] 사용자 경험 개선
|
||||
- [x] 오류 처리 메커니즘 강화
|
||||
|
||||
{{ ... }}
|
||||
|
||||
## 5. 진행 상황 요약 (2025-02-28 업데이트)
|
||||
|
||||
### 완료된 작업
|
||||
1. **프로젝트 기본 구조 구현**
|
||||
- Flutter 프로젝트 생성 및 설정
|
||||
- 디렉토리 구조 및 아키텍처 설계
|
||||
- Provider 패턴 기반 상태 관리 구현
|
||||
|
||||
2. **디자인 시스템 구축**
|
||||
- 앱 테마 설정 (라이트/다크 모드)
|
||||
- 색상 팔레트 및 타이포그래피 정의
|
||||
- 공통 UI 컴포넌트 구현
|
||||
|
||||
3. **핵심 화면 개발**
|
||||
- 스플래시 화면
|
||||
- 로그인/회원가입 화면
|
||||
- 홈 화면 (지출 요약 및 최근 지출 목록)
|
||||
- 지출 추가/편집/상세 화면
|
||||
- 예산 관리 화면
|
||||
- 프로필 화면
|
||||
- 동기화 상태 화면
|
||||
- 통계 및 분석 화면
|
||||
|
||||
4. **서비스 레이어 구현**
|
||||
- StorageService: Hive를 사용한 로컬 데이터 저장
|
||||
- AuthService: 사용자 인증 관리
|
||||
- ExpenseService: 지출 데이터 관리
|
||||
- BudgetService: 예산 데이터 관리
|
||||
- ApiService: 백엔드 API 통신
|
||||
- SyncQueueService: 오프라인 동기화 작업 관리
|
||||
- LocalDatabaseService: 로컬 데이터베이스 관리
|
||||
- ConnectivityService: 네트워크 연결 상태 모니터링
|
||||
|
||||
5. **모델 구현**
|
||||
- UserModel: 사용자 정보 모델
|
||||
- ExpenseModel: 지출 정보 모델
|
||||
- BudgetModel: 예산 정보 모델
|
||||
- CategoryConstants: 카테고리 상수 정의
|
||||
- SyncOperation: 동기화 작업 모델
|
||||
- SyncOperationType: 작업 유형 열거형
|
||||
- SyncStatus: 작업 상태 열거형
|
||||
|
||||
6. **프로바이더 구현**
|
||||
- UserProvider: 사용자 상태 관리
|
||||
- ExpenseProvider: 지출 상태 관리
|
||||
- BudgetProvider: 예산 상태 관리
|
||||
- ThemeProvider: 테마 상태 관리
|
||||
- ConnectivityProvider: 네트워크 연결 상태 관리
|
||||
|
||||
7. **오프라인 동기화 기능 구현**
|
||||
- 오프라인 작업 큐 관리 시스템
|
||||
- 동기화 상태 위젯 (SyncStatusWidget)
|
||||
- 동기화 대시보드 위젯 (SyncDashboardWidget)
|
||||
- 동기화 상태 화면 (SyncStatusScreen)
|
||||
- 네트워크 상태에 따른 자동/수동 동기화 정책
|
||||
- 작업 재시도 및 오류 처리 메커니즘
|
||||
- 동기화 작업 상태 추적 (대기, 진행 중, 완료, 실패)
|
||||
|
||||
8. **통계 및 분석 기능 구현**
|
||||
- 지출 추이 차트 구현
|
||||
- 카테고리별 지출 분석 시각화
|
||||
- 기간별 지출 비교 기능
|
||||
- 지출 패턴 분석 알고리즘
|
||||
- 예산 대비 지출 분석 대시보드
|
||||
- 절약 제안 기능
|
||||
|
||||
### 진행 중인 작업
|
||||
1. 오프라인 동기화 기능 테스트 및 안정화
|
||||
2. 테스트 환경 구성 (웹, 에뮬레이터)
|
||||
3. 대용량 데이터 동기화 성능 최적화
|
||||
|
||||
### 다음 작업 계획
|
||||
1. 동기화 작업 우선순위 설정 기능 구현
|
||||
2. 충돌 해결 메커니즘 구현
|
||||
3. 동기화 통계 및 로그 기능 강화
|
||||
4. 성능 최적화 및 버그 수정
|
||||
5. 사용자 테스트 및 피드백 수집
|
||||
6. 앱 출시 준비 (앱 스토어 등록 등)
|
||||
|
||||
### 기술적 이슈 및 해결 방안
|
||||
1. **폰트 호환성 문제**
|
||||
- 문제: Pretendard 폰트 사용 시 오류 발생
|
||||
- 해결: Google Fonts의 Noto Sans로 대체하여 해결
|
||||
|
||||
2. **라우팅 충돌 문제**
|
||||
- 문제: 라우트 이름과 변수명 충돌
|
||||
- 해결: 라우트 이름 변수를 더 명확한 이름으로 변경 (settings → settingsRoute)
|
||||
|
||||
3. **API 연동 문제**
|
||||
- 문제: 싱글톤 패턴 구현 시 의존성 주입 이슈
|
||||
- 해결: 생성자에서 선택적 매개변수를 통한 의존성 주입 방식 개선
|
||||
|
||||
4. **오프라인 동기화 이슈**
|
||||
- 문제: 네트워크 연결 복구 시 동기화 작업 중복 실행
|
||||
- 해결: 작업 ID 기반 중복 방지 메커니즘 구현
|
||||
|
||||
5. **로컬 데이터베이스 성능 이슈**
|
||||
- 문제: 대용량 데이터 처리 시 지연 발생
|
||||
- 해결: 인덱싱 및 페이지네이션 적용, 비동기 처리 최적화
|
||||
296
docs/archive/03_개발_단계/4단계/4단계_계획.md
Normal file
296
docs/archive/03_개발_단계/4단계/4단계_계획.md
Normal file
@@ -0,0 +1,296 @@
|
||||
# 적자 탈출 가계부 - 4단계 계획
|
||||
|
||||
## 1. 4단계 목표
|
||||
|
||||
4단계의 주요 목표는 적자 탈출 가계부 앱의 품질을 향상시키고, 사용자 경험을 개선하며, 앱 스토어 출시를 준비하는 것입니다. 이 단계에서는 테스트, 최적화, 안정화 작업을 중점적으로 진행합니다.
|
||||
|
||||
### 핵심 목표
|
||||
1. [x] 앱 성능 최적화 및 안정화 (2025년 2월 28일 완료)
|
||||
2. [ ] 사용자 테스트 및 피드백 수집/반영
|
||||
3. [x] 오프라인 동기화 기능 안정화 (2025년 2월 25일 완료)
|
||||
4. [ ] 앱 출시 준비 및 배포
|
||||
5. [ ] 사용자 가이드 및 문서 작성
|
||||
|
||||
## 2. 작업 목록 및 일정
|
||||
|
||||
### 1일차: 성능 최적화 및 코드 리팩토링 (2025년 2월 24일 완료)
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 성능 분석 및 병목 지점 식별
|
||||
- [x] 메모리 사용량 분석
|
||||
- [x] 렌더링 성능 분석
|
||||
- [x] 네트워크 요청 최적화 분석
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 코드 리팩토링 및 최적화
|
||||
- [x] 불필요한 빌드 최소화
|
||||
- [x] 메모리 누수 해결
|
||||
- [x] 이미지 및 리소스 최적화
|
||||
|
||||
### 2일차: 오프라인 동기화 기능 안정화 (2025년 2월 25일 완료)
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 동기화 성능 최적화
|
||||
- [x] 대용량 데이터 동기화 테스트
|
||||
- [x] 동기화 작업 우선순위 설정 기능 구현
|
||||
- [x] 충돌 해결 메커니즘 구현
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 동기화 오류 처리 강화
|
||||
- [x] 네트워크 불안정 상황 테스트
|
||||
- [x] 동기화 실패 복구 메커니즘 개선
|
||||
- [x] 동기화 로그 및 통계 기능 구현
|
||||
|
||||
### 3일차: 개발자 모드 및 성능 모니터링 도구 구현 (2025년 2월 26-27일 완료)
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 개발자 모드 기능 구현
|
||||
- [x] 개발자 모드 활성화/비활성화 기능
|
||||
- [x] 7번 클릭으로 개발자 모드 전환 기능
|
||||
- [x] SharedPreferences를 사용한 상태 지속
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 성능 모니터링 도구 구현
|
||||
- [x] 프레임 렌더링 타이밍 추적
|
||||
- [x] 빌드 시간 및 래스터 시간 기록
|
||||
- [x] 느린 프레임 및 프레임 드롭 감지
|
||||
- [x] 성능 측정 데이터 저장 및 분석
|
||||
|
||||
### 4일차: 메모리 관리 및 성능 프로필 화면 구현 (2025년 2월 28일 완료)
|
||||
|
||||
#### 오전
|
||||
- [x] [AI] 메모리 관리 기능 강화
|
||||
- [x] 메모리 사용량 기록
|
||||
- [x] 리소스(구독, 타이머, 애니메이션 컨트롤러) 추적
|
||||
- [x] 메모리 정리 및 가비지 컬렉션 기능
|
||||
|
||||
#### 오후
|
||||
- [x] [AI] 성능 프로필 화면 구현
|
||||
- [x] 앱 및 기기 정보 표시
|
||||
- [x] 빌드 시간 차트
|
||||
- [x] 메모리 사용량 차트
|
||||
- [x] 메모리 정리 및 보고서 생성 버튼
|
||||
- [x] [AI] 오프라인 모드 및 테스트 모드 구현
|
||||
- [x] 인증 서비스 테스트 모드 추가
|
||||
- [x] 오프라인 상태에서 로그인/회원가입 기능 구현
|
||||
- [x] 동기화 큐에 인증 작업 추가 기능 구현
|
||||
- [x] 로컬 데이터베이스에 사용자 정보 저장 기능 추가
|
||||
|
||||
### 5일차: 사용자 테스트 준비 및 진행 (2025년 3월 1일 예정)
|
||||
|
||||
#### 오전
|
||||
- [ ] [AI] 테스트 시나리오 및 설문지 작성
|
||||
- [ ] 핵심 기능 테스트 시나리오
|
||||
- [ ] 사용성 테스트 항목
|
||||
- [ ] 피드백 수집 설문지
|
||||
|
||||
#### 오후
|
||||
- [ ] [사용자] 내부 테스트 진행
|
||||
- [ ] 테스트 참가자 모집
|
||||
- [ ] 테스트 세션 진행
|
||||
- [ ] 피드백 수집
|
||||
|
||||
### 6일차: 피드백 분석 및 개선 (2025년 3월 2일 예정)
|
||||
|
||||
#### 오전
|
||||
- [ ] [AI] 수집된 피드백 분석
|
||||
- [ ] 주요 이슈 및 개선점 식별
|
||||
- [ ] 우선순위 설정
|
||||
- [ ] 개선 계획 수립
|
||||
|
||||
#### 오후
|
||||
- [ ] [AI] 핵심 개선사항 구현
|
||||
- [ ] UI/UX 개선
|
||||
- [ ] 기능 개선
|
||||
- [ ] 버그 수정
|
||||
|
||||
### 7일차: 보안 및 데이터 무결성 강화 (2025년 3월 3일 예정)
|
||||
|
||||
#### 오전
|
||||
- [ ] [AI] 보안 감사 및 개선
|
||||
- [ ] 데이터 암호화 검토
|
||||
- [ ] 인증 및 권한 관리 강화
|
||||
- [ ] 개인정보 보호 검토
|
||||
|
||||
#### 오후
|
||||
- [ ] [AI] 데이터 무결성 강화
|
||||
- [ ] 데이터 백업 및 복구 기능
|
||||
- [ ] 데이터 검증 로직 강화
|
||||
- [ ] 오류 발생 시 데이터 보호 메커니즘
|
||||
|
||||
### 8일차: 앱 출시 준비 (2025년 3월 4일 예정)
|
||||
|
||||
#### 오전
|
||||
- [ ] [AI] 앱 스토어 최적화
|
||||
- [ ] 앱 아이콘 및 스크린샷 준비
|
||||
- [ ] 앱 설명 및 키워드 최적화
|
||||
- [ ] 개인정보 처리방침 작성
|
||||
|
||||
#### 오후
|
||||
- [ ] [AI] 출시 버전 빌드 및 테스트
|
||||
- [ ] 릴리스 빌드 생성
|
||||
- [ ] 최종 테스트 진행
|
||||
- [ ] 배포 준비
|
||||
|
||||
### 9일차: 사용자 가이드 및 문서 작성 (2025년 3월 5일 예정)
|
||||
|
||||
#### 오전
|
||||
- [ ] [AI] 사용자 가이드 작성
|
||||
- [ ] 주요 기능 사용법
|
||||
- [ ] 자주 묻는 질문 (FAQ)
|
||||
- [ ] 문제 해결 가이드
|
||||
|
||||
#### 오후
|
||||
- [ ] [AI] 개발자 문서 작성
|
||||
- [ ] 아키텍처 문서
|
||||
- [ ] API 문서
|
||||
- [ ] 유지보수 가이드
|
||||
|
||||
## 3. 기술 스택 및 도구
|
||||
|
||||
### 테스트 도구
|
||||
- Flutter 테스트 프레임워크
|
||||
- Firebase Test Lab
|
||||
- Flutter Performance 모니터링 도구
|
||||
- 자체 개발한 성능 프로파일링 도구
|
||||
|
||||
### 성능 최적화 도구
|
||||
- Flutter DevTools
|
||||
- Lighthouse (웹 버전)
|
||||
- Firebase Performance Monitoring
|
||||
- 자체 개발한 메모리 관리 및 성능 모니터링 도구
|
||||
|
||||
### 배포 도구
|
||||
- Fastlane
|
||||
- Firebase App Distribution
|
||||
- Google Play Console
|
||||
- Apple App Store Connect
|
||||
|
||||
## 4. 품질 지표 및 목표
|
||||
|
||||
### 성능 목표
|
||||
- 앱 시작 시간: 2초 이내
|
||||
- 화면 전환 시간: 300ms 이내
|
||||
- 메모리 사용량: 최대 100MB
|
||||
- 배터리 소모: 1시간 사용 시 5% 이내
|
||||
- 프레임 드롭률: 1% 이하
|
||||
|
||||
### 안정성 목표
|
||||
- 크래시 비율: 0.1% 이하
|
||||
- ANR (Application Not Responding): 0.05% 이하
|
||||
- 오프라인 동기화 성공률: 99% 이상
|
||||
- 메모리 누수 발생률: 0%
|
||||
|
||||
### 사용자 경험 목표
|
||||
- 앱 스토어 평점: 4.5 이상
|
||||
- 사용자 이탈률: 20% 이하
|
||||
- 일일 활성 사용자 (DAU): 초기 목표 1,000명
|
||||
|
||||
## 5. 출시 전략
|
||||
|
||||
### 단계적 출시
|
||||
1. 내부 테스트 (알파)
|
||||
- 개발팀 및 내부 사용자 대상
|
||||
- 주요 버그 및 성능 이슈 식별
|
||||
- 개발자 모드를 통한 성능 데이터 수집
|
||||
|
||||
2. 제한된 공개 테스트 (베타)
|
||||
- 선별된 외부 사용자 대상
|
||||
- 사용자 피드백 수집 및 개선
|
||||
- 성능 모니터링 데이터 분석
|
||||
|
||||
3. 정식 출시
|
||||
- 구글 플레이 스토어 및 애플 앱 스토어 출시
|
||||
- 마케팅 활동 시작
|
||||
|
||||
### 마케팅 전략
|
||||
- 소셜 미디어 홍보
|
||||
- 금융/가계부 관련 커뮤니티 홍보
|
||||
- 보도자료 배포
|
||||
- 인플루언서 협업
|
||||
|
||||
## 6. 위험 요소 및 대응 계획
|
||||
|
||||
### 잠재적 위험
|
||||
1. **성능 이슈**
|
||||
- 위험: 대용량 데이터 처리 시 성능 저하
|
||||
- 대응: 페이지네이션 및 지연 로딩 구현, 데이터 캐싱 최적화, 개발자 모드를 통한 지속적인 성능 모니터링
|
||||
|
||||
2. **동기화 충돌**
|
||||
- 위험: 오프라인 모드에서 동일 데이터 수정 시 충돌
|
||||
- 대응: 충돌 해결 알고리즘 구현, 사용자 선택 옵션 제공, 동기화 로그 및 통계 기능을 통한 문제 추적
|
||||
|
||||
3. **Provider 관련 오류**
|
||||
- 위험: Provider 패턴 사용 시 의존성 주입 문제로 앱 실행 오류 발생
|
||||
- 대응: 모든 Provider를 MultiProvider에 등록하고, 의존성 주입을 통해 서비스 공유, 일관된 네이밍 컨벤션 적용
|
||||
|
||||
4. **API 요청 실패**
|
||||
- 위험: 서버 연결 불안정 또는 API 오류로 인한 데이터 로딩 실패
|
||||
- 대응: 모든 API 호출에 대한 로컬 데이터 대체 로직 구현, 오프라인 모드 강화, 사용자 친화적 오류 메시지 제공
|
||||
|
||||
5. **사용자 수용성**
|
||||
- 위험: 복잡한 기능으로 인한 사용자 혼란
|
||||
- 대응: 직관적인 UI/UX 개선, 튜토리얼 및 도움말 강화
|
||||
|
||||
6. **보안 취약점**
|
||||
- 위험: 개인 금융 데이터 유출 가능성
|
||||
- 대응: 데이터 암호화, 보안 감사, 취약점 테스트
|
||||
|
||||
## 7. 해결된 주요 이슈
|
||||
|
||||
### Provider 관련 오류
|
||||
- **문제**: ConnectivityProvider를 찾을 수 없는 `ProviderNotFoundException` 오류 발생
|
||||
- **원인**:
|
||||
1. `main.dart`에 `ConnectivityProvider`가 MultiProvider 목록에 포함되지 않음
|
||||
2. `ConnectivityProvider` 생성자가 새로운 `ConnectivityService` 인스턴스를 생성하여 의존성 공유 불가
|
||||
- **해결**:
|
||||
1. `main.dart`의 MultiProvider 목록에 `ConnectivityProvider` 추가
|
||||
2. `ConnectivityProvider` 생성자 수정하여 외부에서 `ConnectivityService` 주입 가능하도록 변경
|
||||
3. `isConnected` getter 추가하여 `isOnline`과 동일하게 동작하도록 함
|
||||
|
||||
### 예산 데이터 로딩 오류
|
||||
- **문제**: 예산 화면에서 "예산 사용 현황을 불러오는 중 오류가 발생했습니다: Exception: 예산 사용 현황 조회 실패: Exception: 서버 오류: 404" 메시지 표시
|
||||
- **원인**: 서버에서 예산 데이터를 가져오는 API 요청이 404 오류를 반환하고, 오류 발생 시 로컬 데이터를 사용하는 대체 로직이 없었음
|
||||
- **해결**: `BudgetService`의 `getBudgetUsage` 메서드를 수정하여 API 호출이 실패할 경우 로컬 데이터를 사용하도록 변경
|
||||
|
||||
## 8. 유지보수 계획
|
||||
|
||||
### 정기 업데이트
|
||||
- 월 1회 기능 업데이트
|
||||
- 2주 1회 버그 수정 및 안정성 개선
|
||||
- 사용자 피드백 기반 개선 사항 우선순위 지정
|
||||
|
||||
### 모니터링 시스템
|
||||
- Firebase Crashlytics를 통한 오류 모니터링
|
||||
- Firebase Analytics를 통한 사용자 행동 분석
|
||||
- 자체 개발한 성능 모니터링 도구를 통한 성능 데이터 수집 및 분석
|
||||
- 사용자 피드백 수집 및 분석 시스템
|
||||
|
||||
## 9. 개발자 모드 및 성능 모니터링 도구 활용 계획
|
||||
|
||||
### 개발자 모드 활용
|
||||
- 내부 테스트 중 성능 데이터 수집
|
||||
- 사용자 환경에서의 실제 성능 측정
|
||||
- 문제 발생 시 상세 진단 정보 수집
|
||||
|
||||
### 성능 모니터링 도구 활용
|
||||
- 프레임 렌더링 성능 지속적 모니터링
|
||||
- 메모리 사용량 추적 및 최적화
|
||||
- 성능 병목 현상 조기 발견 및 해결
|
||||
- 사용자 기기별 성능 차이 분석
|
||||
|
||||
### 메모리 관리 도구 활용
|
||||
- 메모리 누수 조기 발견 및 해결
|
||||
- 리소스 사용 최적화
|
||||
- 저사양 기기에서의 성능 개선
|
||||
|
||||
## 10. 결론 및 기대 효과
|
||||
|
||||
### 기대 효과
|
||||
- 앱의 안정성과 성능이 향상되어 사용자滿足도가 증가할 것으로 기대
|
||||
- 사용자 피드백을 반영한 지속적인 개선으로 앱의 품질이 유지될 것으로 기대
|
||||
- 마케팅 활동을 통해 사용자 수와 앱 스토어 평점이 개선될 것으로 기대
|
||||
|
||||
## 11. 참고자료
|
||||
|
||||
- [Git 이슈 트래킹 시스템 설정](1.%20Project/2.%20ZELLYY/젤리의%20적자%20탈출/04_참고자료/Git_이슈_트래킹_시스템.md)
|
||||
408
docs/archive/Nginx_Supabase_설치_가이드.md
Normal file
408
docs/archive/Nginx_Supabase_설치_가이드.md
Normal file
@@ -0,0 +1,408 @@
|
||||
# Nginx와 Supabase 설치 가이드
|
||||
|
||||
이 문서는 Debian 12 서버에 Nginx와 Supabase를 설치하고 설정하는 과정을 안내합니다.
|
||||
|
||||
## 1. 서버 접속
|
||||
|
||||
SSH 키를 사용하여 서버에 접속합니다:
|
||||
|
||||
```bash
|
||||
ssh a11
|
||||
```
|
||||
|
||||
또는 전체 명령어를 사용할 수도 있습니다:
|
||||
|
||||
```bash
|
||||
ssh -i ~/.ssh/id_ed25519_ism ism-admin@a11.ism.kr
|
||||
```
|
||||
|
||||
## 2. 시스템 업데이트
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
```
|
||||
|
||||
## 3. Nginx 설치 및 설정
|
||||
|
||||
### 3.1 Nginx 설치
|
||||
|
||||
```bash
|
||||
sudo apt install -y nginx
|
||||
```
|
||||
|
||||
### 3.2 방화벽 설정
|
||||
|
||||
```bash
|
||||
sudo apt install -y ufw
|
||||
sudo ufw allow 'Nginx Full' # 80, 443 포트 허용
|
||||
sudo ufw allow 'OpenSSH' # SSH 포트 허용
|
||||
sudo ufw enable
|
||||
```
|
||||
|
||||
### 3.3 SSL 인증서 발급 (Let's Encrypt)
|
||||
|
||||
```bash
|
||||
sudo apt install -y certbot python3-certbot-nginx
|
||||
sudo certbot --nginx -d a11.ism.kr
|
||||
```
|
||||
|
||||
### 3.4 Nginx 설정 파일 생성
|
||||
|
||||
```bash
|
||||
sudo nano /etc/nginx/sites-available/supabase
|
||||
```
|
||||
|
||||
다음 내용을 파일에 추가합니다:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name a11.ism.kr;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name a11.ism.kr;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/a11.ism.kr/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/a11.ism.kr/privkey.pem;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
|
||||
ssl_session_timeout 1d;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
|
||||
add_header X-Frame-Options DENY;
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
|
||||
# Kong API
|
||||
location /api {
|
||||
proxy_pass http://localhost:8000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# Kong Admin API
|
||||
location /kong {
|
||||
proxy_pass http://localhost:8001;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# Studio
|
||||
location / {
|
||||
proxy_pass http://localhost:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# GoTrue
|
||||
location /auth {
|
||||
proxy_pass http://localhost:9999;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# PostgREST
|
||||
location /rest/v1 {
|
||||
proxy_pass http://localhost:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# Storage
|
||||
location /storage/v1 {
|
||||
proxy_pass http://localhost:5000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# WebSocket 지원
|
||||
location /realtime/v1 {
|
||||
proxy_pass http://localhost:4000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
설정 파일을 활성화하고 Nginx를 재시작합니다:
|
||||
|
||||
```bash
|
||||
sudo ln -s /etc/nginx/sites-available/supabase /etc/nginx/sites-enabled/
|
||||
sudo nginx -t # 설정 파일 문법 검사
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
## 4. Docker 및 Docker Compose 설치
|
||||
|
||||
### 4.1 Docker 설치
|
||||
|
||||
```bash
|
||||
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
sudo apt update
|
||||
sudo apt install -y docker-ce docker-ce-cli containerd.io
|
||||
sudo usermod -aG docker $USER
|
||||
```
|
||||
|
||||
### 4.2 Docker Compose 설치
|
||||
|
||||
```bash
|
||||
sudo apt install -y docker-compose-plugin
|
||||
```
|
||||
|
||||
## 5. Supabase 설치
|
||||
|
||||
### 5.1 Supabase 프로젝트 클론
|
||||
|
||||
```bash
|
||||
mkdir -p ~/supabase
|
||||
cd ~/supabase
|
||||
git clone --depth 1 https://github.com/supabase/supabase
|
||||
cd supabase/docker
|
||||
```
|
||||
|
||||
### 5.2 환경 변수 설정
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
다음과 같이 환경 변수를 설정합니다:
|
||||
|
||||
```
|
||||
# Supabase 설정
|
||||
POSTGRES_PASSWORD=zellyy_finance_secure_password_2025
|
||||
JWT_SECRET=$(openssl rand -base64 32)
|
||||
ANON_KEY=$(openssl rand -base64 32)
|
||||
SERVICE_ROLE_KEY=$(openssl rand -base64 32)
|
||||
|
||||
# API 및 사이트 URL
|
||||
SITE_URL=https://a11.ism.kr
|
||||
API_EXTERNAL_URL=https://a11.ism.kr
|
||||
STUDIO_PORT=3000
|
||||
|
||||
# 대시보드 인증
|
||||
DASHBOARD_USERNAME=hansoo
|
||||
DASHBOARD_PASSWORD=zellyy_secure_dashboard_password_2025
|
||||
|
||||
# 이메일 설정 (선택 사항)
|
||||
SMTP_HOST=
|
||||
SMTP_PORT=
|
||||
SMTP_USER=
|
||||
SMTP_PASS=
|
||||
SMTP_SENDER_NAME=
|
||||
```
|
||||
|
||||
### 5.3 Supabase 실행
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 5.4 상태 확인
|
||||
|
||||
```bash
|
||||
docker compose ps
|
||||
```
|
||||
|
||||
## 6. 인증 정보 기록
|
||||
|
||||
설치 후 생성된 API 키와 JWT 시크릿을 기록합니다. 이 정보는 `.env` 파일에서 확인할 수 있습니다:
|
||||
|
||||
```bash
|
||||
cd ~/supabase/supabase/docker
|
||||
grep -E "JWT_SECRET|ANON_KEY|SERVICE_ROLE_KEY" .env
|
||||
```
|
||||
|
||||
이 정보를 `/Users/hansoo./Documents/my vault/1. Project/ZELLYY/적자 탈출 가계부/02_기술_문서/Supabase_인증_정보.md` 파일에 기록합니다.
|
||||
|
||||
## 7. 데이터베이스 초기 설정
|
||||
|
||||
### 7.1 PostgreSQL 접속
|
||||
|
||||
```bash
|
||||
docker exec -it supabase-db psql -U postgres
|
||||
```
|
||||
|
||||
### 7.2 기본 스키마 생성
|
||||
|
||||
```sql
|
||||
-- 사용자 스키마 생성
|
||||
CREATE SCHEMA app;
|
||||
|
||||
-- Row Level Security 활성화
|
||||
ALTER TABLE app.users ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 기본 정책 설정
|
||||
CREATE POLICY "사용자는 자신의 데이터만 볼 수 있음" ON app.users
|
||||
FOR ALL
|
||||
USING (auth.uid() = user_id);
|
||||
```
|
||||
|
||||
## 8. 백업 설정
|
||||
|
||||
### 8.1 자동 백업 스크립트 생성
|
||||
|
||||
```bash
|
||||
mkdir -p ~/backup-scripts
|
||||
nano ~/backup-scripts/backup-postgres.sh
|
||||
```
|
||||
|
||||
다음 내용을 파일에 추가합니다:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/home/ism-admin/backups"
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
BACKUP_FILE="$BACKUP_DIR/postgres_backup_$TIMESTAMP.sql.gz"
|
||||
|
||||
# 백업 디렉토리 생성
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# 데이터베이스 백업
|
||||
docker exec supabase-db pg_dumpall -U postgres | gzip > $BACKUP_FILE
|
||||
|
||||
# 30일 이상 된 백업 삭제
|
||||
find $BACKUP_DIR -name "postgres_backup_*.sql.gz" -type f -mtime +30 -delete
|
||||
```
|
||||
|
||||
스크립트에 실행 권한 부여:
|
||||
|
||||
```bash
|
||||
chmod +x ~/backup-scripts/backup-postgres.sh
|
||||
```
|
||||
|
||||
### 8.2 Cron 작업 설정
|
||||
|
||||
```bash
|
||||
crontab -e
|
||||
```
|
||||
|
||||
다음 내용을 추가하여 매일 새벽 3시에 백업을 실행합니다:
|
||||
|
||||
```
|
||||
0 3 * * * /home/ism-admin/backup-scripts/backup-postgres.sh
|
||||
```
|
||||
|
||||
## 9. 모니터링 설정
|
||||
|
||||
### 9.1 기본 모니터링
|
||||
|
||||
```bash
|
||||
sudo apt install -y htop
|
||||
```
|
||||
|
||||
### 9.2 로그 모니터링
|
||||
|
||||
```bash
|
||||
# 모든 컨테이너 로그 확인
|
||||
docker compose logs
|
||||
|
||||
# 특정 서비스 로그 확인 (예: PostgreSQL)
|
||||
docker compose logs db
|
||||
```
|
||||
|
||||
## 10. 문제 해결
|
||||
|
||||
### 10.1 Nginx 문제
|
||||
|
||||
```bash
|
||||
# Nginx 상태 확인
|
||||
sudo systemctl status nginx
|
||||
|
||||
# Nginx 로그 확인
|
||||
sudo tail -f /var/log/nginx/error.log
|
||||
```
|
||||
|
||||
### 10.2 Docker 문제
|
||||
|
||||
```bash
|
||||
# Docker 상태 확인
|
||||
docker ps
|
||||
|
||||
# Docker 로그 확인
|
||||
docker logs supabase-db
|
||||
```
|
||||
|
||||
### 10.3 인증서 갱신
|
||||
|
||||
```bash
|
||||
sudo certbot renew --dry-run
|
||||
```
|
||||
|
||||
## 11. 유지 관리
|
||||
|
||||
### 11.1 Supabase 업데이트
|
||||
|
||||
```bash
|
||||
cd ~/supabase/supabase/docker
|
||||
git pull
|
||||
docker compose down
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 11.2 시스템 업데이트
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
```
|
||||
|
||||
## 12. 보안 강화
|
||||
|
||||
### 12.1 SSH 보안 강화
|
||||
|
||||
```bash
|
||||
sudo nano /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
다음 설정을 추가/수정합니다:
|
||||
|
||||
```
|
||||
PermitRootLogin no
|
||||
PasswordAuthentication no
|
||||
X11Forwarding no
|
||||
```
|
||||
|
||||
SSH 서비스 재시작:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart sshd
|
||||
```
|
||||
|
||||
### 12.2 방화벽 확인
|
||||
|
||||
```bash
|
||||
sudo ufw status
|
||||
```
|
||||
|
||||
## 13. 완료
|
||||
|
||||
이제 Nginx와 Supabase가 설치되었습니다. 다음 URL로 접속하여 확인할 수 있습니다:
|
||||
|
||||
- Supabase Studio: https://a11.ism.kr
|
||||
- API 엔드포인트: https://a11.ism.kr/api
|
||||
|
||||
설치 후 생성된 API 키와 JWT 시크릿을 `Supabase_인증_정보.md` 파일에 기록하는 것을 잊지 마세요.
|
||||
80
docs/archive/SUPABASE_ONPREM_MIGRATION_PLAN.md
Normal file
80
docs/archive/SUPABASE_ONPREM_MIGRATION_PLAN.md
Normal file
@@ -0,0 +1,80 @@
|
||||
# Supabase Cloud → On-Premise Migration Plan
|
||||
|
||||
이 문서에는 기존 Supabase Cloud 프로젝트를 On-Premise Self-Host 환경으로 이전하기 위한 단계별 절차를 정리합니다.
|
||||
|
||||
## 1. 개요
|
||||
- 목적: 클라우드 종속성을 제거하고 자체 운영 가능하도록 Supabase 스택을 온프레미스 환경에 배포
|
||||
- 범위: 인증(Gotrue), 실시간(Realtime), 스토리지(Storage), 데이터베이스(Postgres)
|
||||
|
||||
## 2. 사전 준비
|
||||
1. 현재 환경 문서화
|
||||
- 프로젝트 구조, 스키마, RLS 규칙, 함수, 트리거 등
|
||||
- 사용 중인 Supabase CLI/SDK 버전 및 환경 변수 목록
|
||||
2. 인프라 준비
|
||||
- Docker 엔진 또는 Kubernetes 클러스터
|
||||
- 도메인, TLS 인증서 준비
|
||||
- 최소 요구 사양 확인 (CPU, 메모리, 디스크)
|
||||
3. 백업 계획 수립
|
||||
- Cloud DB Dump 스케줄링 방법
|
||||
- 백업 보관 위치 및 암호화 방침
|
||||
|
||||
## 3. On-Premise Supabase Self-Host 배포
|
||||
1. Supabase CLI 설치
|
||||
```bash
|
||||
npm install -g supabase
|
||||
```
|
||||
2. 초기화 및 컨테이너 실행
|
||||
```bash
|
||||
supabase init # 프로젝트 디렉토리에 구성 파일 작성
|
||||
supabase start # Postgres, Kong, Realtime, GoTrue, Storage 컨테이너 실행
|
||||
```
|
||||
3. 버전 호환성 확인
|
||||
- `supabase version`으로 CLI, API, DB 버전 일치 여부 점검
|
||||
|
||||
## 4. 데이터 마이그레이션
|
||||
1. Cloud DB Dump
|
||||
```bash
|
||||
supabase db dump --project-ref <PROJECT_REF> --file cloud_dump.sql
|
||||
```
|
||||
2. On-Premise DB Restore
|
||||
```bash
|
||||
supabase db restore --file cloud_dump.sql
|
||||
```
|
||||
3. 데이터 무결성 검증
|
||||
- 주요 테이블 row 수 체크
|
||||
- RLS 규칙·함수 정상 동작 여부 테스트
|
||||
|
||||
## 5. 애플리케이션 구성 변경
|
||||
1. 환경 변수 업데이트
|
||||
```env
|
||||
SUPABASE_URL=http://<ONPREM_HOST>:8000
|
||||
SUPABASE_ANON_KEY=<새_ANON_KEY>
|
||||
SUPABASE_SERVICE_KEY=<새_SERVICE_KEY>
|
||||
```
|
||||
2. SDK 초기화 점검
|
||||
- `client = createClient(SUPABASE_URL, SUPABASE_ANON_KEY)` 정상 연결 확인
|
||||
|
||||
## 6. 테스트 및 검증
|
||||
1. 로컬 개발서버 테스트
|
||||
- 프론트·백엔드 실행 후 CRUD 기능 확인
|
||||
2. 스테이징 환경 배포
|
||||
- Blue-Green 또는 Canary 배포로 트래픽 분할
|
||||
- 모니터링(로그, 메트릭) 이상 유무 확인
|
||||
|
||||
## 7. 프로덕션 전환
|
||||
1. DNS 레코드 변경 또는 로드밸런서 설정
|
||||
2. SSL/TLS 인증서 적용
|
||||
3. 전환 후 롤백 플랜 준비
|
||||
|
||||
## 8. 롤백 계획
|
||||
- 문제가 발생 시 이전 Cloud 인스턴스로 트래픽 리디렉션
|
||||
- 신규 데이터 백업 및 차분 마이그레이션
|
||||
|
||||
## 9. 모니터링 및 운영
|
||||
- 백그라운드 컨테이너 상태 감시 (Prometheus, Grafana)
|
||||
- 정기 백업·복원 테스트 자동화
|
||||
- 보안 패치 및 버전 업데이트 정책 수립
|
||||
|
||||
---
|
||||
|
||||
*문서 위치: `docs/SUPABASE_ONPREM_MIGRATION_PLAN.md`*
|
||||
657
docs/archive/Supabase_설정_가이드.md
Normal file
657
docs/archive/Supabase_설정_가이드.md
Normal file
@@ -0,0 +1,657 @@
|
||||
# Supabase 설정 가이드 - Debian 12 서버 설치
|
||||
|
||||
## 1. Supabase 소개
|
||||
|
||||
Supabase는 PostgreSQL 데이터베이스를 기반으로 하는 백엔드 서비스입니다. 다음과 같은 기능을 제공합니다:
|
||||
|
||||
- **데이터베이스**: PostgreSQL 데이터베이스
|
||||
- **인증**: 사용자 인증 및 권한 관리
|
||||
- **스토리지**: 파일 저장 및 관리
|
||||
- **API**: 자동 생성되는 RESTful API 및 실시간 구독
|
||||
- **Edge Functions**: 서버리스 함수
|
||||
|
||||
이 가이드에서는 Debian 12 서버에 Supabase를 직접 설치하고 설정하는 방법을 안내합니다.
|
||||
|
||||
## 2. Debian 12 서버에 Supabase 설치
|
||||
|
||||
### 2.1 사전 요구 사항
|
||||
|
||||
1. Debian 12가 설치된 서버
|
||||
2. 루트 또는 sudo 권한이 있는 사용자
|
||||
3. 최소 사양:
|
||||
- CPU: 2코어 이상
|
||||
- RAM: 4GB 이상
|
||||
- 저장공간: 20GB 이상
|
||||
- 고정 IP 주소 (권장)
|
||||
|
||||
### 2.2 Docker 및 Docker Compose 설치
|
||||
|
||||
Supabase는 Docker 컨테이너로 실행되므로 먼저 Docker와 Docker Compose를 설치해야 합니다:
|
||||
|
||||
```bash
|
||||
# 시스템 업데이트
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
|
||||
# 필요한 패키지 설치
|
||||
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
|
||||
|
||||
# Docker 공식 GPG 키 추가
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
|
||||
# Docker 저장소 추가
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
# Docker 설치
|
||||
sudo apt update
|
||||
sudo apt install -y docker-ce docker-ce-cli containerd.io
|
||||
|
||||
# 현재 사용자를 docker 그룹에 추가 (sudo 없이 Docker 사용 가능)
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# Docker Compose 설치
|
||||
sudo apt install -y docker-compose-plugin
|
||||
```
|
||||
|
||||
설치 후 로그아웃했다가 다시 로그인하거나 다음 명령을 실행하여 그룹 변경사항을 적용합니다:
|
||||
```bash
|
||||
newgrp docker
|
||||
```
|
||||
|
||||
### 2.3 Supabase 설치
|
||||
|
||||
1. Supabase 프로젝트 디렉토리 생성:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/supabase
|
||||
cd ~/supabase
|
||||
```
|
||||
|
||||
2. GitHub에서 Supabase Docker 프로젝트 클론:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/supabase/supabase.git
|
||||
cd supabase/docker
|
||||
```
|
||||
|
||||
3. 환경 변수 설정:
|
||||
|
||||
```bash
|
||||
# .env 파일 편집
|
||||
nano .env
|
||||
```
|
||||
|
||||
다음 중요 변수들을 설정합니다. 예시는 적자 탈출 가계부 프로젝트의 실제 설정입니다 (실제 사용 시 보안키는 변경하세요):
|
||||
|
||||
```bash
|
||||
# Supabase 설정
|
||||
POSTGRES_PASSWORD=zellyy_finance_secure_password_2025
|
||||
JWT_SECRET=$(openssl rand -base64 32)
|
||||
ANON_KEY=$(openssl rand -base64 32)
|
||||
SERVICE_ROLE_KEY=$(openssl rand -base64 32)
|
||||
|
||||
# API 및 사이트 URL
|
||||
SITE_URL=https://your-domain.com
|
||||
API_EXTERNAL_URL=https://your-domain.com
|
||||
SUPABASE_PUBLIC_URL=https://your-domain.com
|
||||
STUDIO_PORT=3000
|
||||
|
||||
# 대시보드 인증
|
||||
DASHBOARD_USERNAME=your_username
|
||||
DASHBOARD_PASSWORD=your_secure_dashboard_password
|
||||
|
||||
# PostgreSQL 설정
|
||||
POSTGRES_HOST=db
|
||||
POSTGRES_DB=postgres
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_USER=postgres
|
||||
|
||||
# Kong 설정
|
||||
KONG_HTTP_PORT=8000
|
||||
KONG_HTTPS_PORT=8443
|
||||
|
||||
# 인증 설정
|
||||
JWT_EXPIRY=3600
|
||||
ENABLE_EMAIL_SIGNUP=true
|
||||
ENABLE_EMAIL_AUTOCONFIRM=true
|
||||
ENABLE_PHONE_SIGNUP=true
|
||||
ENABLE_PHONE_AUTOCONFIRM=true
|
||||
DISABLE_SIGNUP=false
|
||||
ENABLE_ANONYMOUS_USERS=false
|
||||
GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED=false
|
||||
|
||||
# 이메일 설정 (필요한 경우)
|
||||
SMTP_ADMIN_EMAIL=admin@example.com
|
||||
SMTP_HOST=mail.example.com
|
||||
SMTP_PORT=587
|
||||
SMTP_USER=smtp_user
|
||||
SMTP_PASS=smtp_password
|
||||
SMTP_SENDER_NAME=Zellyy Finance
|
||||
|
||||
# URL 경로 설정
|
||||
MAILER_URLPATHS_CONFIRMATION=/auth/v1/verify
|
||||
MAILER_URLPATHS_INVITE=/auth/v1/verify
|
||||
MAILER_URLPATHS_RECOVERY=/auth/v1/verify
|
||||
MAILER_URLPATHS_EMAIL_CHANGE=/auth/v1/verify
|
||||
|
||||
# 추가 설정
|
||||
PGRST_DB_SCHEMAS=public,storage,graphql_public
|
||||
SECRET_KEY_BASE=$(openssl rand -base64 32)
|
||||
STUDIO_DEFAULT_ORGANIZATION=Default Organization
|
||||
STUDIO_DEFAULT_PROJECT=Default Project
|
||||
IMGPROXY_ENABLE_WEBP_DETECTION=true
|
||||
FUNCTIONS_VERIFY_JWT=true
|
||||
POOLER_TENANT_ID=tenant1
|
||||
POOLER_DEFAULT_POOL_SIZE=20
|
||||
POOLER_MAX_CLIENT_CONN=100
|
||||
VAULT_ENC_KEY=$(openssl rand -base64 32)
|
||||
POOLER_PROXY_PORT_TRANSACTION=6543
|
||||
```
|
||||
|
||||
4. Supabase 시작:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
이 명령은 모든 Supabase 서비스(PostgreSQL, Kong, GoTrue, PostgREST, Storage 등)를 백그라운드에서 시작합니다.
|
||||
|
||||
### 2.4 SSL/TLS 설정
|
||||
|
||||
프로덕션 환경에서는 HTTPS를 사용하는 것이 필수적입니다. Nginx와 Let's Encrypt를 사용하여 SSL을 설정하세요:
|
||||
|
||||
1. Nginx 및 Certbot 설치:
|
||||
|
||||
```bash
|
||||
sudo apt install -y nginx certbot python3-certbot-nginx
|
||||
```
|
||||
|
||||
2. Let's Encrypt를 통한 SSL 인증서 발급:
|
||||
|
||||
```bash
|
||||
sudo certbot --nginx -d your-domain.com
|
||||
```
|
||||
|
||||
3. Nginx 설정 파일 생성:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/nginx/sites-available/default
|
||||
```
|
||||
|
||||
다음 내용을 추가합니다:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name your-domain.com;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
||||
|
||||
# Supabase Studio
|
||||
location / {
|
||||
proxy_pass http://localhost:3000;
|
||||
}
|
||||
|
||||
# Supabase API (Kong)
|
||||
location /rest/v1/ {
|
||||
proxy_pass http://localhost:8000/rest/v1/;
|
||||
}
|
||||
|
||||
# Supabase Auth
|
||||
location /auth/v1/ {
|
||||
proxy_pass http://localhost:8000/auth/v1/;
|
||||
}
|
||||
|
||||
# Supabase Storage
|
||||
location /storage/v1/ {
|
||||
proxy_pass http://localhost:8000/storage/v1/;
|
||||
}
|
||||
|
||||
# Supabase Realtime
|
||||
location /realtime/v1/ {
|
||||
proxy_pass http://localhost:8000/realtime/v1/;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
4. Nginx 설정 테스트 및 재시작:
|
||||
|
||||
```bash
|
||||
sudo nginx -t
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
※ 주의: Nginx 설정에서 `proxy_set_header` 지시문을 사용할 때 문법에 주의하세요. 필요한 경우 더 복잡한 헤더 설정을 사용할 수 있지만, 기본 설정으로도 충분히 작동합니다.
|
||||
|
||||
### 2.5 방화벽 설정
|
||||
|
||||
필요한 포트만 열도록 방화벽을 설정합니다:
|
||||
|
||||
```bash
|
||||
sudo apt install -y ufw
|
||||
sudo ufw allow ssh
|
||||
sudo ufw allow http
|
||||
sudo ufw allow https
|
||||
sudo ufw enable
|
||||
```
|
||||
|
||||
### 2.6 Supabase 관리
|
||||
|
||||
Supabase 서비스 관리를 위한 기본 명령어:
|
||||
|
||||
```bash
|
||||
# 서비스 상태 확인
|
||||
cd ~/supabase
|
||||
docker compose ps
|
||||
|
||||
# 로그 확인
|
||||
docker compose logs -f
|
||||
|
||||
# 서비스 중지
|
||||
docker compose down
|
||||
|
||||
# 서비스 시작
|
||||
docker compose up -d
|
||||
|
||||
# 서비스 재시작
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
### 2.7 백업 설정
|
||||
|
||||
정기적인 데이터베이스 백업을 설정하는 것이 좋습니다:
|
||||
|
||||
1. 백업 스크립트 생성:
|
||||
|
||||
```bash
|
||||
nano ~/backup-supabase.sh
|
||||
```
|
||||
|
||||
다음 내용을 추가합니다:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
BACKUP_DIR=~/supabase-backups
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# PostgreSQL 백업
|
||||
cd ~/supabase
|
||||
docker compose exec db pg_dump -U postgres -d postgres > $BACKUP_DIR/supabase_$TIMESTAMP.sql
|
||||
|
||||
# 오래된 백업 삭제 (30일 이상)
|
||||
find $BACKUP_DIR -name "supabase_*.sql" -type f -mtime +30 -delete
|
||||
```
|
||||
|
||||
2. 스크립트에 실행 권한 부여:
|
||||
|
||||
```bash
|
||||
chmod +x ~/backup-supabase.sh
|
||||
```
|
||||
|
||||
3. Cron 작업 설정 (매일 백업):
|
||||
|
||||
```bash
|
||||
crontab -e
|
||||
```
|
||||
|
||||
다음 줄을 추가합니다:
|
||||
|
||||
```
|
||||
0 2 * * * ~/backup-supabase.sh
|
||||
```
|
||||
|
||||
### 2.8 모니터링 설정 (선택 사항)
|
||||
|
||||
서버 상태 모니터링을 위해 Prometheus와 Grafana를 설정할 수 있습니다:
|
||||
|
||||
```bash
|
||||
# Prometheus와 Grafana 설치를 위한 Docker Compose 파일 다운로드
|
||||
mkdir -p ~/monitoring
|
||||
cd ~/monitoring
|
||||
curl -L https://raw.githubusercontent.com/stefanprodan/dockprom/master/docker-compose.yml -o docker-compose.yml
|
||||
|
||||
# 서비스 시작
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Grafana는 기본적으로 http://your-server-ip:3000에서 접근할 수 있으며, 기본 사용자 이름과 비밀번호는 admin/admin입니다.
|
||||
|
||||
## 3. 데이터베이스 설정
|
||||
|
||||
### 3.1 데이터베이스 접속
|
||||
|
||||
Supabase 설치 후 PostgreSQL 데이터베이스에 직접 접속할 수 있습니다:
|
||||
|
||||
```bash
|
||||
cd ~/supabase
|
||||
docker compose exec db psql -U postgres
|
||||
```
|
||||
|
||||
### 3.2 테이블 생성 예시
|
||||
|
||||
다음과 같이 SQL 명령을 사용하여 테이블을 생성할 수 있습니다:
|
||||
|
||||
```sql
|
||||
-- 사용자 테이블 생성
|
||||
CREATE TABLE users (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
email TEXT UNIQUE NOT NULL,
|
||||
password TEXT NOT NULL,
|
||||
full_name TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- RLS(Row Level Security) 정책 설정
|
||||
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "사용자는 자신의 데이터만 볼 수 있음" ON users
|
||||
FOR SELECT USING (auth.uid() = id);
|
||||
CREATE POLICY "사용자는 자신의 데이터만 수정할 수 있음" ON users
|
||||
FOR UPDATE USING (auth.uid() = id);
|
||||
```
|
||||
|
||||
## 4. 인증 설정
|
||||
|
||||
### 4.1 이메일/비밀번호 인증 설정
|
||||
|
||||
자체 호스팅된 Supabase에서 이메일/비밀번호 인증을 설정하려면:
|
||||
|
||||
1. `.env` 파일에서 이메일 설정을 구성합니다:
|
||||
```
|
||||
SMTP_HOST=your-smtp-host
|
||||
SMTP_PORT=587
|
||||
SMTP_USER=your-smtp-user
|
||||
SMTP_PASS=your-smtp-password
|
||||
SMTP_SENDER_NAME=Zellyy Finance
|
||||
```
|
||||
|
||||
2. 변경 후 서비스를 재시작합니다:
|
||||
```bash
|
||||
cd ~/supabase
|
||||
docker compose down
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 4.2 소셜 로그인 설정 (선택 사항)
|
||||
|
||||
소셜 로그인을 추가하려면 각 제공업체의 설정을 `.env` 파일에 추가해야 합니다:
|
||||
|
||||
```
|
||||
# Google OAuth
|
||||
GOTRUE_EXTERNAL_GOOGLE_ENABLED=true
|
||||
GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=your-google-client-id
|
||||
GOTRUE_EXTERNAL_GOOGLE_SECRET=your-google-client-secret
|
||||
GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=https://your-domain.com/auth/v1/callback
|
||||
|
||||
# GitHub OAuth
|
||||
GOTRUE_EXTERNAL_GITHUB_ENABLED=true
|
||||
GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=your-github-client-id
|
||||
GOTRUE_EXTERNAL_GITHUB_SECRET=your-github-client-secret
|
||||
GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=https://your-domain.com/auth/v1/callback
|
||||
```
|
||||
|
||||
## 5. 스토리지 설정
|
||||
|
||||
영수증 이미지 등을 저장하기 위한 스토리지 버킷을 설정합니다:
|
||||
|
||||
### 5.1 스토리지 버킷 생성
|
||||
|
||||
SQL을 사용하여 스토리지 버킷을 생성할 수 있습니다:
|
||||
|
||||
```sql
|
||||
-- PostgreSQL에 접속
|
||||
cd ~/supabase
|
||||
docker compose exec db psql -U postgres
|
||||
|
||||
-- 스토리지 버킷 생성
|
||||
INSERT INTO storage.buckets (id, name, public)
|
||||
VALUES ('receipts', 'receipts', false);
|
||||
```
|
||||
|
||||
### 5.2 스토리지 보안 정책 설정
|
||||
|
||||
스토리지 버킷에 대한 접근 권한을 설정합니다:
|
||||
|
||||
```sql
|
||||
-- 사용자는 자신의 파일만 업로드할 수 있음
|
||||
CREATE POLICY "사용자는 자신의 파일만 업로드할 수 있음" ON storage.objects
|
||||
FOR INSERT WITH CHECK (auth.uid() = owner);
|
||||
|
||||
-- 사용자는 자신의 파일만 조회할 수 있음
|
||||
CREATE POLICY "사용자는 자신의 파일만 조회할 수 있음" ON storage.objects
|
||||
FOR SELECT USING (auth.uid() = owner);
|
||||
|
||||
-- 사용자는 자신의 파일만 삭제할 수 있음
|
||||
CREATE POLICY "사용자는 자신의 파일만 삭제할 수 있음" ON storage.objects
|
||||
FOR DELETE USING (auth.uid() = owner);
|
||||
```
|
||||
|
||||
## 6. API 및 클라이언트 라이브러리
|
||||
|
||||
### 6.1 Supabase 클라이언트 설정 (Flutter)
|
||||
|
||||
Flutter 프로젝트에서 자체 호스팅된 Supabase를 사용하기 위한 설정:
|
||||
|
||||
1. 필요한 패키지 추가:
|
||||
|
||||
```yaml
|
||||
# pubspec.yaml
|
||||
dependencies:
|
||||
supabase_flutter: ^1.10.14
|
||||
```
|
||||
|
||||
2. 초기화 코드:
|
||||
|
||||
```dart
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
await Supabase.initialize(
|
||||
url: 'https://your-domain.com', // 자체 호스팅 서버 URL
|
||||
anonKey: 'your-anon-key', // .env 파일에서 설정한 ANON_KEY
|
||||
);
|
||||
|
||||
runApp(MyApp());
|
||||
}
|
||||
|
||||
// 어디서나 클라이언트에 접근
|
||||
final supabase = Supabase.instance.client;
|
||||
```
|
||||
|
||||
### 6.2 기본 API 사용 예시
|
||||
|
||||
```dart
|
||||
// 사용자 등록
|
||||
Future<void> signUp(String email, String password) async {
|
||||
await supabase.auth.signUp(
|
||||
email: email,
|
||||
password: password,
|
||||
);
|
||||
}
|
||||
|
||||
// 로그인
|
||||
Future<void> signIn(String email, String password) async {
|
||||
await supabase.auth.signInWithPassword(
|
||||
email: email,
|
||||
password: password,
|
||||
);
|
||||
}
|
||||
|
||||
// 데이터 조회
|
||||
Future<List<Map<String, dynamic>>> getExpenses() async {
|
||||
final response = await supabase
|
||||
.from('expenses')
|
||||
.select()
|
||||
.eq('user_id', supabase.auth.currentUser!.id);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
// 데이터 추가
|
||||
Future<void> addExpense(Map<String, dynamic> expenseData) async {
|
||||
await supabase
|
||||
.from('expenses')
|
||||
.insert(expenseData);
|
||||
}
|
||||
```
|
||||
|
||||
## 7. 유지 관리 및 모니터링
|
||||
|
||||
### 7.1 서비스 관리 명령어
|
||||
|
||||
Supabase 서비스 관리를 위한 기본 명령어:
|
||||
|
||||
```bash
|
||||
# 서비스 상태 확인
|
||||
cd ~/supabase
|
||||
docker compose ps
|
||||
|
||||
# 로그 확인
|
||||
docker compose logs -f
|
||||
|
||||
# 서비스 중지
|
||||
docker compose down
|
||||
|
||||
# 서비스 시작
|
||||
docker compose up -d
|
||||
|
||||
# 서비스 재시작
|
||||
docker compose restart
|
||||
|
||||
# 특정 서비스만 재시작 (예: PostgreSQL)
|
||||
docker compose restart db
|
||||
```
|
||||
|
||||
### 7.2 데이터베이스 백업 및 복원
|
||||
|
||||
#### 백업
|
||||
|
||||
```bash
|
||||
cd ~/supabase
|
||||
docker compose exec db pg_dump -U postgres -d postgres > backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
#### 복원
|
||||
|
||||
```bash
|
||||
cd ~/supabase
|
||||
cat backup_file.sql | docker compose exec -T db psql -U postgres -d postgres
|
||||
```
|
||||
|
||||
### 7.3 업데이트
|
||||
|
||||
Supabase를 최신 버전으로 업데이트하려면:
|
||||
|
||||
```bash
|
||||
cd ~/supabase
|
||||
docker compose pull
|
||||
docker compose down
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 8. 보안 모범 사례
|
||||
|
||||
1. **API 키 보호**: `service_role` 키는 절대 클라이언트 코드에 포함하지 마세요.
|
||||
2. **RLS(Row Level Security)**: 모든 테이블에 RLS 정책을 설정하세요.
|
||||
3. **환경 변수**: API 키와 같은 민감한 정보는 환경 변수로 관리하세요.
|
||||
4. **정기적인 비밀번호 변경**: 데이터베이스 비밀번호를 정기적으로 변경하세요.
|
||||
5. **최소 권한 원칙**: 각 사용자와 서비스에 필요한 최소한의 권한만 부여하세요.
|
||||
6. **방화벽 설정**: 필요한 포트만 개방하세요.
|
||||
7. **정기적인 업데이트**: 보안 패치를 위해 정기적으로 시스템을 업데이트하세요.
|
||||
|
||||
## 9. 문제 해결
|
||||
|
||||
### 9.1 문제 해결
|
||||
|
||||
1. **데이터베이스 연결 오류**: `.env` 파일의 POSTGRES_PASSWORD 및 관련 데이터베이스 설정을 확인하세요.
|
||||
2. **SSL 인증서 오류**: Certbot 설정 및 Nginx 구성을 확인하세요.
|
||||
3. **스토리지 문제**: `.env` 파일의 STORAGE_BACKEND 설정을 확인하세요.
|
||||
4. **인증 오류**: `.env` 파일의 JWT_SECRET, ANON_KEY, SERVICE_ROLE_KEY 설정을 확인하세요.
|
||||
5. **Pooler 서비스 재시작 문제**:
|
||||
- 문제: `supabase-pooler` 서비스가 계속 재시작되는 문제
|
||||
- 해결: `.env` 파일에 `SUPAVISOR_ENCRYPTION_KEY` 변수를 추가하고 유효한 암호화 키를 설정
|
||||
- 추가 설정: `POOLER_ENABLE_TENANT_SHARDING=true` 옵션 추가로 성능 향상
|
||||
|
||||
6. **Realtime 서비스 Unhealthy 상태**:
|
||||
- 문제: `realtime-dev.supabase-realtime` 서비스가 Unhealthy 상태로 표시됨
|
||||
- 참고: 기본 CRUD 작업에는 영향을 주지 않으며, 실시간 기능을 사용하지 않는 경우 무시 가능
|
||||
- 디버깅: `docker logs realtime-dev.supabase-realtime`로 구체적인 오류 확인 가능
|
||||
|
||||
7. **Nginx 리버스 프록시 502 오류**:
|
||||
- 문제: Nginx에서 502 Bad Gateway 오류 발생
|
||||
- 해결:
|
||||
- Supabase Studio 컨테이너에 포트 매핑 추가 (3000:3000)
|
||||
- Nginx 설정에서 프록시 패스 설정 올바르게 구성
|
||||
- Docker 컨테이너와 Nginx 모두 재시작
|
||||
|
||||
8. **호스트 네임 설정 문제**:
|
||||
- 문제: `SITE_URL` 설정이 올바르지 않아 인증 콜백 오류 발생
|
||||
- 해결: `.env` 파일에서 `SITE_URL`을 정확한 도메인으로 설정 (https://a11.ism.kr)
|
||||
|
||||
### 9.2 지원 받기
|
||||
|
||||
1. [Supabase 문서](https://supabase.com/docs)
|
||||
2. [GitHub 이슈](https://github.com/supabase/supabase/issues)
|
||||
3. [Discord 커뮤니티](https://discord.supabase.com)
|
||||
|
||||
## 10. 다음 단계
|
||||
|
||||
Supabase 설치가 완료되면 다음 단계로 진행하세요:
|
||||
|
||||
1. 데이터베이스 스키마 구현
|
||||
2. API 엔드포인트 개발
|
||||
3. 인증 시스템 테스트
|
||||
4. 프론트엔드 연동 준비
|
||||
|
||||
## 3. 데이터베이스 설정
|
||||
|
||||
### 3.3 Supabase Studio 접근
|
||||
|
||||
Supabase Studio는 데이터베이스 관리, API 탐색, 인증 설정 등을 위한 웹 기반 관리 인터페이스입니다.
|
||||
|
||||
```
|
||||
https://your-domain.com
|
||||
```
|
||||
|
||||
자체 호스팅 환경에서는 Supabase Studio에 별도의 로그인 없이 바로 접근할 수 있습니다. 이는 기본 설정이며, 추가적인 보안이 필요한 경우 Nginx 수준에서 기본 인증을 구성하는 것이 좋습니다.
|
||||
|
||||
> 참고: 클라우드 호스팅 Supabase와 달리, 자체 호스팅 환경에서는 Studio 접근에 대한 인증이 기본적으로 활성화되어 있지 않습니다. 프로덕션 환경에서는 추가 보안 조치를 고려하세요.
|
||||
|
||||
#### Nginx를 통한 기본 인증 추가 (선택 사항)
|
||||
|
||||
보안 강화를 위해 Nginx 설정에 기본 인증을 추가할 수 있습니다:
|
||||
|
||||
```bash
|
||||
# htpasswd 파일 생성
|
||||
sudo apt install apache2-utils
|
||||
sudo htpasswd -c /etc/nginx/.htpasswd your-username
|
||||
```
|
||||
|
||||
Nginx 설정 파일에 다음을 추가:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
# 기존 설정...
|
||||
|
||||
location / {
|
||||
# 기본 인증 추가
|
||||
auth_basic "Restricted Access";
|
||||
auth_basic_user_file /etc/nginx/.htpasswd;
|
||||
|
||||
# 기존 프록시 설정...
|
||||
proxy_pass http://localhost:3000;
|
||||
# ...
|
||||
}
|
||||
|
||||
# 다른 위치 블록...
|
||||
}
|
||||
38
docs/archive/Supabase_인증_정보.md
Normal file
38
docs/archive/Supabase_인증_정보.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# Supabase 인증 정보
|
||||
|
||||
## 서버 접속 정보
|
||||
- **서버 주소**: a11.ism.kr
|
||||
- **접속 방법**: SSH 키 인증
|
||||
- **사용자**: ism-admin
|
||||
- **공개 키**: `ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHXL6O0/Ydj2Tmsu3kjo0ypVPUCjNV/bxgFPMjM1dzHD ism-admin`
|
||||
- **개인 키 파일**: `~/.ssh/id_ed25519_ism`
|
||||
- **간편 접속 명령어**: `ssh a11` (SSH config에 설정됨)
|
||||
|
||||
## Supabase 환경 변수
|
||||
- **SITE_URL**: https://a11.ism.kr
|
||||
- **API_EXTERNAL_URL**: https://a11.ism.kr
|
||||
- **POSTGRES_PASSWORD**: zellyy_finance_secure_password_2025
|
||||
- **DASHBOARD_USERNAME**: hansoo
|
||||
- **DASHBOARD_PASSWORD**: zellyy_secure_dashboard_password_2025
|
||||
|
||||
## Nginx 인증서 정보
|
||||
- **인증서 발급 방법**: Let's Encrypt (Certbot)
|
||||
- **인증서 갱신 주기**: 자동 (90일)
|
||||
- **인증서 저장 위치**: /etc/letsencrypt/live/a11.ism.kr/
|
||||
|
||||
## API 키 정보
|
||||
- **ANON_KEY**: (설치 후 자동 생성됨 - 여기에 기록 필요)
|
||||
- **SERVICE_ROLE_KEY**: (설치 후 자동 생성됨 - 여기에 기록 필요)
|
||||
- **JWT_SECRET**: (설치 후 자동 생성됨 - 여기에 기록 필요)
|
||||
|
||||
## 데이터베이스 접속 정보
|
||||
- **호스트**: localhost
|
||||
- **포트**: 5432
|
||||
- **데이터베이스**: postgres
|
||||
- **사용자**: postgres
|
||||
- **비밀번호**: zellyy_finance_secure_password_2025
|
||||
|
||||
## 방화벽 설정
|
||||
- 허용 포트: 80(HTTP), 443(HTTPS), 22(SSH)
|
||||
|
||||
> **중요**: 이 문서에는 민감한 보안 정보가 포함되어 있습니다. 안전하게 보관하고 공개 저장소에 업로드하지 마세요.
|
||||
Reference in New Issue
Block a user