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

7.0 KiB

Git 이슈 트래킹 시스템 설정

개요

Zellyy Finance 모바일 앱 개발 과정에서 발생하는 다양한 이슈를 체계적으로 관리하기 위해 Gitea 기반의 이슈 트래킹 시스템을 설정했습니다. 이 문서는 이슈 트래킹 시스템의 설정 과정과 사용 방법을 설명합니다.

설정 과정

1. Gitea 저장소 연결

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.dartsettings_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에 registerlogin 타입이 추가되었지만, 여러 파일의 switch 문에서 이 케이스들을 처리하지 않고 있었습니다.

해결 방법

다음 파일들의 switch 문에 registerlogin 케이스를 추가했습니다:

  • sync_status_screen.dart
  • api_service.dart
  • sync_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을 생성할 때 createdAtupdatedAt 필드에 String 타입의 값(DateTime.now().toIso8601String())을 전달하고 있었지만, UserModel 클래스에서는 이 필드들이 DateTime 타입으로 정의되어 있었습니다.

해결 방법

auth_service.dart 파일에서 createdAtupdatedAt 필드를 String 대신 DateTime 객체로 전달하도록 수정했습니다.

코드 변경

// 변경 전
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를 통한 이슈 관리 방법

이슈 조회

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 웹 인터페이스를 통해 이슈를 관리할 수도 있습니다:

  1. 웹 브라우저에서 https://gitea.ism.kr/ZELLYY/Zellyy_Finance/issues 접속
  2. 이슈 목록 확인 및 관리
  3. 이슈에 라벨, 담당자, 마일스톤 설정
  4. 이슈 상태 변경 (열림/닫힘)
  5. 이슈에 댓글 추가

향후 계획

  1. 이슈 라벨 체계 구축 (버그, 기능 요청, 개선 등)
  2. 마일스톤 설정을 통한 릴리스 계획 관리
  3. 자동화된 이슈 보고 시스템 구축
  4. 이슈와 커밋 연동을 통한 변경 사항 추적 개선