최근 모바일에서 마크다운 파일을 읽을 일이 생겼습니다. 기존에 서비스 중인 앱들이 많이 있지만, 이 주제가 최근에 관심 있던 React Native를 배우기 위한 가벼운 토이 프로젝트로 적절하다고 생각되어 자체적으로 앱을 개발해보기로 했습니다.

기능 정의

첫 단계로 클로드와 함께 이번 앱에 필요한 기능을 아래와 같이 정리하였습니다.

필수 기능

  • 파일 불러오기 (갤러리, 파일 탐색기)
  • 마크다운 렌더링
  • 스크롤 가능한 뷰어

심화 기능

실용성 측면

  • 최근 열어본 파일 목록: 자주 보는 파일에 빠르게 접근
  • 즐겨찾기 / 북마크: 중요한 문서를 따로 저장
  • 다크모드 / 라이트모드: 야간 및 환경에 따라 보기 편하게

편의성 측면

  • 목차(TOC) 생성: 긴 문서 내에서 빠른 네비게이션
  • 검색 기능: 문서 내 텍스트 검색
  • 폰트 크기 조절: 가독성 향상

개발 학습 측면

  • 클라우드 동기화 (Google Drive, Dropbox): 외부 API 연동 경험
  • 파일 편집 모드: 간단한 마크다운 에디터 구현
  • 내보내기 (HTML, PDF): 파일 포맷 처리 경험

개발 계획 수립

위 기능을 기반으로 아래와 같이 개발 계획을 세웠습니다.

  • 1단계: 기본 뷰어 구현 + 최근 파일 목록 + 다크모드 지원
  • 2단계: 목차(TOC) + 문서 내 검색 기능 추가

이후 시간이 허락 된다면, 클라우드 동기화나 내보내기 기능까지 확장해볼 예정입니다.

작업 분할: 태스크 기반 개발 시도

최근 LLM 기반 에이전트를 사용해 개발을 자동화하거나 보조하는 사례가 많아졌습니다. 저도 해당 기능을 잘 활용할 수 있도록 관심있게 지켜보고 또 유용해 보이는 방식은 직접 사용해보고 있습니다.

그 중에서도 LLM 기반 에이전트가 잘 이해할 수 있도록 프로젝트를 메인 태스크와 하위 태스크로 나눠서 단계별로 작업 지시를 내리는 방식이 인상 깊었습니다. 이 방식은 LLM 기반 에이전트에게 업무를 명확하게 지시하는 것 뿐만 아니라, 실제로 개발을 진행할 때도 개발 생산성에 큰 도움이 될 것 같다고 느꼈습니다. 그래서 이번 프로젝트는 태스크 기반의 개발도 같이 시도해볼 예정입니다.

아래는 클로드와 함께 작성한 태크스 목록입니다. 아래 태스트에 따라 개발을 진행하며 개발기를 공유하도록 하겠습니다.

1단계: MVP (핵심 기능)

메인 태스크 1: 프로젝트 환경 구축

  • React Native 개발 환경 셋업
  • Expo CLI 설치 및 프로젝트 생성
  • 필요한 라이브러리 설치
  • 기본 프로젝트 구조 설계

메인 태스크 2: 파일 읽기 및 마크다운 렌더링

  • 파일 선택 기능 구현
    • 갤러리/파일 탐색기에서 .md 파일 선택
    • 파일 권한 처리
  • 파일 내용 읽기 기능
    • 선택한 파일의 텍스트 내용 로드
    • 인코딩 처리 (UTF-8)
  • 마크다운 렌더링 구현
    • 마크다운 텍스트를 HTML로 변환
    • 스타일링 적용 (기본 테마)
  • 스크롤 가능한 뷰어 UI 구성

메인 태스크 3: 최근 파일 목록 기능

  • 최근 열어본 파일 저장 로직
    • AsyncStorage에 파일 경로와 메타데이터 저장
    • 중복 제거 및 개수 제한 (예: 최대 10개)
  • 최근 파일 목록 화면 구현
    • 파일명, 수정일시 표시
    • 탭하면 해당 파일 열기
  • 최근 파일 삭제 기능 (스와이프 투 딜리트)

메인 태스크 4: 다크모드/라이트모드

  • 테마 상태 관리 구현
    • Context API 또는 useState로 테마 상태 관리
    • AsyncStorage에 테마 설정 저장
  • 다크/라이트 테마 스타일 정의
    • 배경색, 텍스트 색상, 마크다운 스타일 각각 정의
  • 테마 토글 버튼 UI 구현
  • 앱 시작 시 저장된 테마 설정 로드

2단계: 고급 기능

메인 태스크 5: 목차(TOC) 자동 생성

  • 마크다운 헤딩 파싱 로직
    • 정규식으로 # ## ### 헤딩 추출
    • 헤딩 레벨과 텍스트 매핑
  • 목차 네비게이션 UI 구현
    • 드로어 또는 사이드바 형태
    • 계층 구조로 헤딩 표시
  • 목차 클릭 시 해당 섹션으로 스크롤
    • ScrollView ref 활용
    • 부드러운 스크롤 애니메이션

메인 태스크 6: 문서 내 검색 기능=

  • 검색 UI 구현
    • 검색창 (TextInput)
    • 검색 결과 개수 표시
    • 이전/다음 결과 네비게이션 버튼
  • 텍스트 검색 로직
    • 대소문자 구분 없는 검색
    • 정규식 활용한 패턴 매칭
  • 검색 결과 하이라이팅
    • 매칭된 텍스트 강조 표시
    • 현재 선택된 결과 구분
  • 검색 결과 네비게이션
    • 다음/이전 검색 결과로 자동 스크롤