7.0 KiB
Git 이슈 트래킹 시스템 설정
개요
Zellyy Finance 모바일 앱 개발 과정에서 발생하는 다양한 이슈를 체계적으로 관리하기 위해 Gitea 기반의 이슈 트래킹 시스템을 설정했습니다. 이 문서는 이슈 트래킹 시스템의 설정 과정과 사용 방법을 설명합니다.
설정 과정
1. Gitea 저장소 연결
- 저장소 URL: https://gitea.ism.kr/ZELLYY/Zellyy_Finance.git
- 저장소 상태: 정상 연결됨
2. API 토큰 생성
Gitea API를 사용하여 이슈를 관리하기 위해 API 토큰을 생성했습니다.
- Gitea 웹사이트(https://gitea.ism.kr)에 로그인
- 사용자 설정 > 애플리케이션 > 액세스 토큰 생성
- 토큰 이름 입력 및 권한 설정:
- repo: 저장소에 대한 전체 접근 권한
- issue: 이슈 관리 권한
- write:repository: 저장소 쓰기 권한
- 토큰 생성 및 안전한 장소에 저장
3. 이슈 등록
API를 통해 다음과 같은 이슈들을 등록했습니다:
- ConnectivityProvider 클래스의 getter 이름 불일치
- SyncOperationType enum의 switch 문 불완전 처리
- UserModel 생성 시 타입 불일치
- 오프라인 모드 및 테스트 모드 안정화
이슈 목록
이슈 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을 사용하도록 수정했습니다.
코드 변경
// 변경 전
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.dartapi_service.dartsync_status_widget.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 객체로 전달하도록 수정했습니다.
코드 변경
// 변경 전
createdAt: DateTime.now().toIso8601String(),
updatedAt: DateTime.now().toIso8601String(),
// 변경 후
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
이슈 4: 오프라인 모드 및 테스트 모드 안정화
기능 설명
앱의 오프라인 모드와 테스트 모드 기능을 안정화하여 네트워크 연결 없이도 앱을 사용할 수 있도록 했습니다.
구현 내용
-
인증 관련 개선:
- 회원가입 및 로그인 메서드에 테스트 모드 추가
- 오프라인 상태에서도 로그인/회원가입 가능하도록 구현
- 서버 오류 발생 시 자동으로 테스트 모드로 전환되는 기능 추가
-
로컬 데이터베이스 개선:
- 사용자 정보 저장 및 조회 기능 추가
- 이메일 기반 사용자 검색 기능 구현
- Hive 초기화 과정에 users 박스 등록
-
동기화 큐 서비스 개선:
- 회원가입 및 로그인 작업을 동기화 큐에 추가하는 기능 구현
- 온라인 상태가 되면 자동으로 동기화되는 메커니즘 구현
-
모델 클래스 수정:
- 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를 통한 이슈 관리 방법
이슈 조회
curl -X GET "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues" \
-H "Authorization: token YOUR_ACCESS_TOKEN"
이슈 생성
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": "이슈 내용"}'
이슈 수정
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"}'
이슈 댓글 추가
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 웹 인터페이스를 통해 이슈를 관리할 수도 있습니다:
- 웹 브라우저에서 https://gitea.ism.kr/ZELLYY/Zellyy_Finance/issues 접속
- 이슈 목록 확인 및 관리
- 이슈에 라벨, 담당자, 마일스톤 설정
- 이슈 상태 변경 (열림/닫힘)
- 이슈에 댓글 추가
향후 계획
- 이슈 라벨 체계 구축 (버그, 기능 요청, 개선 등)
- 마일스톤 설정을 통한 릴리스 계획 관리
- 자동화된 이슈 보고 시스템 구축
- 이슈와 커밋 연동을 통한 변경 사항 추적 개선