Files
zellyy-finance/docs/04_참고자료/Git_이슈_트래킹_시스템.md
2025-03-21 16:08:43 +09:00

203 lines
7.0 KiB
Markdown

# Git 이슈 트래킹 시스템 설정
## 개요
Zellyy Finance 모바일 앱 개발 과정에서 발생하는 다양한 이슈를 체계적으로 관리하기 위해 Gitea 기반의 이슈 트래킹 시스템을 설정했습니다. 이 문서는 이슈 트래킹 시스템의 설정 과정과 사용 방법을 설명합니다.
## 설정 과정
### 1. Gitea 저장소 연결
- 저장소 URL: https://gitea.ism.kr/ZELLYY/Zellyy_Finance.git
- 저장소 상태: 정상 연결됨
### 2. API 토큰 생성
Gitea API를 사용하여 이슈를 관리하기 위해 API 토큰을 생성했습니다.
1. Gitea 웹사이트(https://gitea.ism.kr)에 로그인
2. 사용자 설정 > 애플리케이션 > 액세스 토큰 생성
3. 토큰 이름 입력 및 권한 설정:
- repo: 저장소에 대한 전체 접근 권한
- issue: 이슈 관리 권한
- write:repository: 저장소 쓰기 권한
4. 토큰 생성 및 안전한 장소에 저장
### 3. 이슈 등록
API를 통해 다음과 같은 이슈들을 등록했습니다:
1. ConnectivityProvider 클래스의 getter 이름 불일치
2. SyncOperationType enum의 switch 문 불완전 처리
3. UserModel 생성 시 타입 불일치
4. 오프라인 모드 및 테스트 모드 안정화
## 이슈 목록
### 이슈 1: ConnectivityProvider 클래스의 getter 이름 불일치
#### 문제 설명
앱 실행 시 `ConnectivityProvider` 클래스의 `isConnected` getter를 찾을 수 없다는 오류가 발생했습니다.
#### 오류 메시지
```
Error (Xcode): lib/screens/home_screen.dart:178:50: Error: The getter 'isConnected' isn't defined for the class 'ConnectivityProvider'.
```
#### 원인 분석
`ConnectivityProvider` 클래스에는 `isConnected` getter가 없고 대신 `isOnline` getter가 정의되어 있었습니다.
#### 해결 방법
`home_screen.dart``settings_screen.dart` 파일에서 `isConnected` 대신 `isOnline`을 사용하도록 수정했습니다.
#### 코드 변경
```dart
// 변경 전
final bool isOffline = !connectivityProvider.isConnected;
// 변경 후
final bool isOffline = !connectivityProvider.isOnline;
```
### 이슈 2: SyncOperationType enum의 switch 문 불완전 처리
#### 문제 설명
앱 빌드 시 `SyncOperationType` enum의 모든 케이스를 처리하지 않는다는 오류가 발생했습니다.
#### 오류 메시지
```
Error (Xcode): lib/screens/sync_status_screen.dart:294:23: Error: The type 'SyncOperationType' is not exhaustively matched by the switch cases since it doesn't match 'SyncOperationType.register'.
```
#### 원인 분석
`SyncOperationType` enum에 `register``login` 타입이 추가되었지만, 여러 파일의 switch 문에서 이 케이스들을 처리하지 않고 있었습니다.
#### 해결 방법
다음 파일들의 switch 문에 `register``login` 케이스를 추가했습니다:
- `sync_status_screen.dart`
- `api_service.dart`
- `sync_status_widget.dart`
#### 코드 변경
```dart
// 추가된 케이스
case SyncOperationType.register:
operationType = '회원가입';
break;
case SyncOperationType.login:
operationType = '로그인';
break;
```
### 이슈 3: UserModel 생성 시 타입 불일치
#### 문제 설명
앱 빌드 시 String 타입의 값을 DateTime 타입의 매개변수에 할당하려고 시도하는 오류가 발생했습니다.
#### 오류 메시지
```
Error (Xcode): lib/services/auth_service.dart:73:37: Error: The argument type 'String' can't be assigned to the parameter type 'DateTime'.
```
#### 원인 분석
`auth_service.dart` 파일에서 `UserModel`을 생성할 때 `createdAt``updatedAt` 필드에 String 타입의 값(`DateTime.now().toIso8601String()`)을 전달하고 있었지만, `UserModel` 클래스에서는 이 필드들이 DateTime 타입으로 정의되어 있었습니다.
#### 해결 방법
`auth_service.dart` 파일에서 `createdAt``updatedAt` 필드를 String 대신 DateTime 객체로 전달하도록 수정했습니다.
#### 코드 변경
```dart
// 변경 전
createdAt: DateTime.now().toIso8601String(),
updatedAt: DateTime.now().toIso8601String(),
// 변경 후
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
```
### 이슈 4: 오프라인 모드 및 테스트 모드 안정화
#### 기능 설명
앱의 오프라인 모드와 테스트 모드 기능을 안정화하여 네트워크 연결 없이도 앱을 사용할 수 있도록 했습니다.
#### 구현 내용
1. 인증 관련 개선:
- 회원가입 및 로그인 메서드에 테스트 모드 추가
- 오프라인 상태에서도 로그인/회원가입 가능하도록 구현
- 서버 오류 발생 시 자동으로 테스트 모드로 전환되는 기능 추가
2. 로컬 데이터베이스 개선:
- 사용자 정보 저장 및 조회 기능 추가
- 이메일 기반 사용자 검색 기능 구현
- Hive 초기화 과정에 users 박스 등록
3. 동기화 큐 서비스 개선:
- 회원가입 및 로그인 작업을 동기화 큐에 추가하는 기능 구현
- 온라인 상태가 되면 자동으로 동기화되는 메커니즘 구현
4. 모델 클래스 수정:
- UserModel의 id 필드 타입을 int에서 String으로 변경하여 테스트 모드 지원
- Hive 어댑터 추가 및 등록
#### 주요 수정 파일
- `/mobile/lib/services/api_service.dart`
- `/mobile/lib/services/auth_service.dart`
- `/mobile/lib/services/local_database_service.dart`
- `/mobile/lib/services/sync_queue_service.dart`
- `/mobile/lib/models/user_model.dart`
- `/mobile/lib/main.dart`
## API를 통한 이슈 관리 방법
### 이슈 조회
```bash
curl -X GET "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues" \
-H "Authorization: token YOUR_ACCESS_TOKEN"
```
### 이슈 생성
```bash
curl -X POST "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues" \
-H "Authorization: token YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "이슈 제목", "body": "이슈 내용"}'
```
### 이슈 수정
```bash
curl -X PATCH "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues/{issue_id}" \
-H "Authorization: token YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "수정된 이슈 제목", "body": "수정된 이슈 내용", "state": "closed"}'
```
### 이슈 댓글 추가
```bash
curl -X POST "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues/{issue_id}/comments" \
-H "Authorization: token YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"body": "댓글 내용"}'
```
## 웹 인터페이스를 통한 이슈 관리
Gitea 웹 인터페이스를 통해 이슈를 관리할 수도 있습니다:
1. 웹 브라우저에서 https://gitea.ism.kr/ZELLYY/Zellyy_Finance/issues 접속
2. 이슈 목록 확인 및 관리
3. 이슈에 라벨, 담당자, 마일스톤 설정
4. 이슈 상태 변경 (열림/닫힘)
5. 이슈에 댓글 추가
## 향후 계획
1. 이슈 라벨 체계 구축 (버그, 기능 요청, 개선 등)
2. 마일스톤 설정을 통한 릴리스 계획 관리
3. 자동화된 이슈 보고 시스템 구축
4. 이슈와 커밋 연동을 통한 변경 사항 추적 개선