[트러블슈팅] 프로젝트-강아지풀

김동연·2025년 7월 16일

개발기록일지(Flutter)

목록 보기
26/32

1. Android 구글 로그인 실패 (ApiException: 10)

  • 1. 오류 메시지
    PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
  • 2. 원인: Firebase에 SHA-1, SHA-256 키 미등록
  • 3. 실패한 시도: 키 등록 없이 계속 로그인 시도
  • 4. 해결 방법:
    • keytool로 SHA-1, SHA-256 생성:
      keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android
    • Firebase Console > Android 앱 설정 > SHA-1, SHA-256 키 등록 후 다시 빌드

2. 댓글 기능 오류 - 삭제 불가

  • 댓글을 작성한 직후 삭제 버튼을 눌러도 삭제가 되지 않음
  • 앱을 재시작하거나 상태를 다시 불러온 후에는 삭제가 정상적으로 작동함

1. 원인

  • 댓글 추가 시, Firestore에 저장은 되지만 id 필드는 빈 문자열 ''로 설정됨
  • 이후 댓글 목록(state) 업데이트 시, Firestore에서 반환된 문서 ID를 다시 받아오지 않고 기존 id: '' 상태 그대로 유지됨
  • 이로 인해 삭제 시 comment.id 값으로 Firestore에서 문서를 찾을 수 없으므로 delete() 호출이 실패

2. 실패한 시도

  • state = [...state, comment]; 와 같이 id가 없는 댓글을 직접 상태로 추가함
  • Firestore에는 저장됐지만 ID를 몰라서 삭제는 불가능

3. 해결 방법

  1. 댓글을 Firestore에 저장
  2. 다시 fetchComments(postId) 를 호출하여 전체 댓글을 새로 불러옴
  3. state = comments 를 통해 최신 댓글 목록을 다시 반영
Future<void> addComment(Comment comment) async {
  final dto = CommentDto.fromEntity(comment);
  await firestore
      .collection('posts')
      .doc(postId)
      .collection('comments')
      .add(dto.toJson());

  // 댓글 추가 후 다시 불러오기
  final comments = await repository.fetchComments(postId);
  state = comments;
}

3. .env 파일 못 읽음

1. 에러 메시지:

Unhandled Exception: Instance of 'FileNotFoundError'

2. 원인:

  • pubspec.yaml에 .env 명시하지 않음.

3. 해결:

  • .env 파일을 루트에 생성
  • pubspec.yaml에 .env 명시

4. flutter_dotenv 설치했는데도 import 오류

1. 에러 메시지:

Target of URI doesn't exist: 'package:flutter_dotenv/flutter_dotenv.dart'

2. 해결 방법:

  • flutter pub get 실행
  • VSCode에서 Dart: Restart Analysis Server 실행하거나flutter clean

5. 댓글 컬렉션 문제

문제점

  • 실시간 댓글 기능 구현 시, 모든 댓글을 하나의 컬렉션에서 관리하면 특정 게시물의 댓글만 불러오기 비효율적이었습니다.

해결 과정

  • 게시물(Post) Document 내에 댓글(Comment) 서브 컬렉션을 생성하는 구조로 변경했습니다. 이를 통해 각 게시물에 종속된 댓글만 효율적으로 가져오고, Firestore의 데이터 계층 구조를 활용하여 확장성을 확보했습니다.

결과:

  • 댓글 조회 시 쿼리 복잡도를 낮추고 응답 속도를 개선하여 사용자 경험을 향상시켰습니다.

0개의 댓글