프로젝트

선택 프로젝트 — 개인 프로젝트

더 프리즘

여러 앱에 흩어진 관심사를 프리즘처럼 한 곳에 모아, 내가 원하는 것들만 골라서 보고 싶었습니다. 읽을거리를 스스로 고르고 미리 받아 두면 통신이 불안정한 곳에서도 정보 접근이 끊기지 않습니다. 연결 상태와 추천에 좌우되지 않는 읽기 환경을 목표로 만들었습니다.

1인 개발 · iOS / Android/개인 프로젝트/React Native 0.81 / Expo SDK 54 (New Architecture) / React 19 / Drizzle ORM / SQLite / SecureStore
더 프리즘

01 / 03

위험한 태그를 걷어내는 새니타이저

상용 파서 대신 script·style·iframe 같은 위험 태그와 인라인 이벤트 핸들러를 걷어내는 새니타이저를 직접 만들어, 외부 RSS를 그대로 렌더링해도 XSS 위험이 없습니다.

데모 확인 ↗

해결한 문제

  • 외부 RSS를 그대로 렌더링하면 XSS 위험이 있고, 모바일에서 네트워크가 끊기면 보던 데이터가 사라졌습니다. 다른 앱의 콘텐츠를 담으려면 앱을 오가야 하는 마찰도 있었습니다.

내가 기여한 것

  • 번들을 키우고 RN 렌더링과 충돌하는 상용 파서 대신, script·style·iframe 같은 위험 태그와 인라인 이벤트 핸들러를 걷어내는 새니타이저를 직접 만들었습니다.
  • 로컬 SQLite 스키마를 설계해 네트워크가 없어도 열람이 되게 했습니다. 비밀번호는 DB에 평문으로 두지 않고 OS 보안 저장소(Keychain/Keystore)의 UUID 참조 키만 매핑하는 2계층 구조로 분리했습니다.
  • iOS Share Extension을 붙여, 다른 앱에서 공유하면 URL 분류기가 메타데이터를 파싱하고 곧바로 해당 탭으로 딥링크합니다.

임팩트

100%

네트워크 없이 로컬 실행

60fps

flash-list · 대량 콘텐츠 스크롤