# 적자 탈출 가계부 - 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 성능 최적화**
   - [ ] 복잡한 분석 쿼리 최적화 필요
   - [ ] 캐싱 전략 구현 고려
   - [ ] 우선순위: 중간 (기본 기능에는 영향 없음)
