프론트엔드 개발자의 기록

React + Firebase 프로젝트 실전 디버깅: 트위터 클론 앱에서 발생한 문제들과 해결 과정 본문

카테고리 없음

React + Firebase 프로젝트 실전 디버깅: 트위터 클론 앱에서 발생한 문제들과 해결 과정

think53 2025. 6. 24. 01:26

🎨 3. 사용자 경험 개선: 세부사항이 만드는 차이

개선 1: 접근성(Accessibility) 향상

 
javascript
// 개선 전
<img src={nweetObj.attachmentUrl} />

// 개선 후
<img src={nweetObj.attachmentUrl} alt="Nweet attachment" />

접근성 개발 지식:

  • WCAG 가이드라인: 모든 이미지에는 적절한 alt 텍스트가 필요
  • 스크린 리더 지원: 시각 장애인 사용자를 위한 배려
  • SEO 효과: 검색 엔진 최적화에도 도움

개선 2: 에러 처리 강화

 
javascript
// 개선된 삭제 함수
const onDeleteClick = async () => {
    const ok = window.confirm("Are you sure you want to delete this nweet?");
    if (ok) {
        await deleteDoc(NweetTextRef);
        // 파일이 있을 때만 삭제 시도
        if (nweetObj.attachmentUrl) {
            await deleteObject(ref(storageService, nweetObj.attachmentUrl));
        }
    }
};

에러 처리 패턴:

  • Graceful Degradation: 일부 기능이 실패해도 전체 앱이 중단되지 않도록
  • 사용자 피드백: 작업 결과를 사용자에게 명확히 전달
  • 예외 상황 처리: null, undefined 값에 대한 안전한 처리

개선 3: 사용자 상태 관리

 
javascript
// Profile.js에서 안전한 사용자 정보 접근
const Profile = ({refreshUser, userObj}) => {
    const [newDisplayName, setNewDisplayName] = useState(userObj?.displayName ?? "USER");
    
    const getMyNweets = async () => {
        if (!userObj?.uid) return;  // 사용자가 없으면 early return
        
        const q = query(
            collection(dbService, "nweets"),
            where("creatorId", "==", userObj.uid)
        );
        // ...
    };
};

상태 관리 베스트 프랙티스:

  • Null Safety: 항상 객체의 존재 여부를 확인
  • 기본값 설정: ?? 연산자를 활용한 안전한 기본값 처리
  • 조건부 렌더링: 데이터가 준비된 후에만 UI 렌더링

🔍 디버깅 과정에서 얻은 교훈

1. 체계적인 디버깅 접근법

  1. 에러 메시지 분석: Firebase 콘솔의 정확한 에러 메시지 확인
  2. 데이터 플로우 추적: props 전달 경로를 단계별로 확인
  3. 브라우저 개발자 도구 활용: console.log()를 통한 값 확인
  4. 재현 가능한 테스트: 일관된 테스트 시나리오 구성

2. 프로덕션 환경 고려사항

  • 배포 파이프라인: Vercel 자동 배포 시 캐시 무효화 시간 고려
  • 환경별 테스트: 로컬, 스테이징, 프로덕션 환경에서의 차이점 인식
  • 실사용자 시나리오: 다양한 사용자 행동 패턴 시뮬레이션

3. 코드 품질 향상 방법

  • 린팅 도구: ESLint 경고 메시지를 무시하지 말고 적극 해결
  • 타입 안전성: TypeScript 도입 고려
  • 테스트 코드: Jest, React Testing Library를 활용한 단위 테스트
  • 코드 리뷰: 팀원과의 코드 리뷰를 통한 문제점 사전 발견

마무리

이번 디버깅 과정을 통해 React와 Firebase를 사용한 실시간 웹 애플리케이션 개발에서 중요한 것들을 배웠습니다:

  1. 작은 실수가 큰 문제가 될 수 있다: props 구조 분해 할당 같은 기본적인 문법 실수
  2. 보안은 선택이 아닌 필수: 클라이언트와 서버 양쪽에서의 권한 검증
  3. 사용자 경험은 세부사항에서 나온다: 접근성, 에러 처리, 상태 관리

개발자로서 성장하는 과정에서 이런 문제들을 직접 해결해보는 경험이 매우 중요하다고 생각합니다. 완벽한 코드는 없지만, 지속적인 개선을 통해 더 나은 소프트웨어를 만들어 갈 수 있습니다.