목차

iEvent iOS 앱 개발 블로그의 전체 글 목차입니다. 카테고리별로 정리되어 있습니다.

iOS — Architecture

  1. LocalFirst에서 Server-First로 — 가족 공유 앱에서의 동기화 전략 전환기
  2. TCA(The Composable Architecture)를 선택한 이유 — 예측 가능한 iOS 앱 상태 관리
  3. TCA ifLet 체이닝 7개 이상 시 컴파일 타임아웃 — 레이어 분리 패턴으로 해결하기
  4. LocalFirst에서 Server-First로 — 가족 공유 앱에서의 동기화 전략 전환기
  5. SwiftData + 계정 전환: 로그아웃 시 LocalDB wipe와 Keychain 통일로 데이터 격리 구현
  6. @Dependency를 @Sendable 클로저 안에서 쓰면 안 되는 이유 — TCA Dependency 올바른 패턴

iOS — Push / Live Activity

  1. APNs Push + ActivityKit LiveActivity 전체 아키텍처 — Scheduler 독립 프로세스 분리 이유
  2. iOS 26 LiveActivity에서 GeometryReader 쓰면 앱이 죽는다 — WidgetRenderer 크래시 해부
  3. push-to-start attributes에 알 수 없는 필드 넣으면 liveactivitiesd가 왜 거부할까
  4. LiveActivity 타이머 만료 후 카운트업 버그 — .relative 대신 timerInterval+countsDown 패턴
  5. APNs sandbox/production 환경 불일치 — provisioning profile 파싱으로 기기별 자동 선택
  6. 재로그인 후 push 토큰 미등록 무음 실패 — APNs 토큰 캐싱 + 지연 등록 패턴

iOS — AI / On-Device

  1. Apple Intelligence Foundation Models를 iOS 18 타겟 앱에서 사용하는 방법 — @available 우회 패턴
  2. 학교 알림장 사진 → Vision OCR → Foundation Models: 프라이버시 우선 온디바이스 AI 파이프라인
  3. TCA Action enum에 @Generable 타입 넣으면 안 되는 이유 — iOS 26 타입 격리 전략

iOS — UI/UX & SwiftUI

  1. iOS 26 Liquid Glass 대응 — 시스템 컴포넌트만 쓰는 전략과 그 이유
  2. TCA store.send()와 SwiftUI 페이징 애니메이션 충돌 — 로컬 @State 분리 패턴
  3. 저장 버튼 연속 탭 중복 제출 방지 — UI .disabled는 1차 방어선이 아니다
  4. WeatherKit 실 연동과 Dynamic Island에 날씨 정보 통합하기

Backend (FastAPI/Python)

  1. FastAPI + SQLAlchemy 2.0 Async ORM으로 iOS 앱 백엔드 구축하기
  2. SQLite/MySQL naive datetime + FastAPI → iOS 9시간 오차 — UTC 타임존 처리 완전 해결
  3. 정수 Auto-Increment를 UUID CHAR(36)으로 전환 — Alembic 브랜치 충돌 해결까지
  4. Soft Delete 패턴 — db.delete() 금지와 TimestampMixin cascade 설계
  5. Supabase Auth 없이 Apple + Kakao 소셜 로그인을 직접 구현하는 방법
  6. 가족 그룹 아키텍처 — 한 명이 만든 데이터를 가족이 공유하는 설계

Scheduler

  1. APScheduler를 FastAPI에 내장하지 않고 독립 Scheduler 서비스로 분리한 이유
  2. DB 기반 비동기 Job Queue — Python asyncio와 SQLAlchemy로 구현하는 방법
  3. asyncio.to_thread로 동기 블로킹 코드를 비동기 스레드 풀로 격리하기
  4. 이벤트 드리븐 AI 브리핑 재트리거 — 일정 변경 시 자동으로 브리핑 갱신하기
  5. DB 원자적 UPDATE로 레이스 컨디션 방지 — SELECT FOR UPDATE vs 조건부 UPDATE

Database

  1. Alembic 마이그레이션 전략 — 브랜치 관리, 데이터 마이그레이션, 롤백 설계
  2. MinIO S3 Presigned URL 아키텍처 — iOS가 직접 업로드하고 서버는 URL만 저장
  3. Redis로 LiveActivity 세션 관리 — 활성 Activity 토큰을 서버가 추적하는 방법

Infrastructure / Kubernetes

  1. On-premise Kubernetes로 iEvent 서비스 전체 구조 — 4개 서비스를 1개 클러스터에서 운영하기
  2. K8s ConfigMap으로 .env 마운트하기 — 환경변수 vs 파일 마운트 함정
  3. APNs .p8 키를 Kubernetes Secret으로 안전하게 주입하기
  4. cert-manager + Let’s Encrypt로 K8s TLS 인증서 자동 갱신하기
  5. Nginx Ingress + Prometheus/Grafana로 K8s 서비스 모니터링 구축하기

Admin Console

  1. React + Vite + WebAuthn 패스키 구현 — 비밀번호 없는 어드민 로그인
  2. Tailwind CSS JIT 그라디언트 버그 — 동적 클래스명이 빌드에서 사라지는 원인과 해결
  3. React Query 2초 폴링으로 Job Queue 실시간 모니터링 — 어드민 대시보드 구현