Boost‐SwiftUI‐2024.04.22(화).md - BoostSwiftUI/SwiftUI GitHub Wiki

원본 텍스트 파일

Boost‐SwiftUI‐2024.04.22(화).txt


스터디 시간 및 참여자

  • 2025.04.22 화 오후 9:05 ・ 42분 57초
  • 김대황 김인환 유정주 이창준 정종인
  • 클로버노트를 이용해 회의 내용을 기록하고, Claude를 이용해 요약, 편집했습니다.

iOS와 안드로이드 개발 비교

개발 환경 및 프레임워크 차이

  • iOS는 의존성 주입(DI)을 수동으로 구현해야 하는 반면, 안드로이드는 자동화 도구 제공

    • 안드로이드는 Hilt나 Dagger와 같은 DI 프레임워크가 잘 갖춰져 있음
    • 스코프와 오너 지정만 해주면 ViewModel이 자동으로 주입되는 편리함
  • 안드로이드는 구글에서 개발한 라이브러리 생태계가 풍부함

    • Room(SQLite 추상화 라이브러리)은 Swift의 CoreData와 유사하나 사용이 더 간편
    • 문서화가 잘 되어 있고 자료도 풍부하여 개발이 수월함

언어적 특성

  • Kotlin은 개발자들에게 매우 좋은 평가를 받는 언어로 인식됨
    • 자바보다 현대적이고 간결한 문법 제공
    • "72와 45보다는 있는 게 낫다"는 의견 공유 (특정 기능 비교 언급)

iOS 버전 지원 전략

최소 지원 버전 선택과 영향

  • 다양한 앱의 최소 지원 버전 사례 공유

    • 크림 앱은 iOS 17을 최소 지원 버전으로 설정 (젊은 층 타겟팅)
    • 일반적으로 iOS 15-16이 현재 많이 사용되는 최소 지원 버전
  • 최소 지원 버전 상향에 따른 이점과 도전

    • 버전이 높을수록 최신 API 사용 가능하지만 사용자 범위 제한
    • iOS 15는 동작이 때로 이상하게 작동하는 문제 있음
    • iOS 15, 16, 17, 18 모두 동작이 달라 대응이 어려움

버전별 기능 제약 해결 전략

  • 개발자들의 실용적 접근법
    • 버전 분기 처리를 통해 유사한 UX 제공
    • 기획자와 타협: "애플의 문제로 완벽 구현이 불가능하니, 최신 버전에 맞춰 구현하고 구버전은 유사하게만 제공"
    • 최소 지원 버전이 상향되면 분기 처리 코드 제거

주요 버전별 사용 가능 기능

  • iOS 16부터 가능한 기능

    • 모든 뷰에 refreshable 수식어 적용 가능
    • iOS 15에서는 List에만 적용 가능했던 제약 해소
  • iOS 16.4의 특정 기능 언급

    • 일부 작은 기능들이 부분 버전에서 추가됨
  • iOS 17의 주요 기능

    • Observation 매크로와 Observable 프로토콜 도입

모바일 광고 시스템 인사이트

ATT(App Tracking Transparency) 프레임워크

  • iOS 14부터 도입된 사용자 활동 추적 동의 시스템

    • 사용자 데이터 추적을 위해 명시적 동의를 요구
    • 코드상으로는 간단하지만 비즈니스 영향이 큼
  • iOS와 안드로이드의 핵심적 차이

    • iOS: 평균 동의율 35%, 명시적 팝업으로 동의 요청
    • 안드로이드: 약 90% 동의율, 설정에서 직접 비활성화하지 않으면 기본 동의 상태
    • 이 차이로 인해 광고 단가가 두 배까지 차이남

광고 최적화 전략

  • 동의율 향상을 위한 방법

    • 공식 ATT 알림 전에 맞춤형 광고의 이점을 설명하는 사전 안내 화면 제공
    • "당신의 선택으로 최적화된 서비스를 제공하기 위함" 같은 설명 추가
  • 광고 시스템 작동 방식

    • 실시간 입찰 시스템: 앱이 광고 요청 시 실시간 경매로 낙찰된 광고 표시
    • 시간대별 단가 차이: 점심시간(12:30) 같은 트래픽 많은 시간대는 단가 상승

광고 정책 및 제한사항

  • 타겟팅 제한

    • 미성년자에게는 주류 광고 등 특정 광고 필터링 필요
    • 사용자 생년월일 기반으로 광고 필터링 로직 구현
  • 광고 정책이 비즈니스에 미치는 영향

    • ATT 도입 이후 페이스북 주가 급락 사례
    • iOS와 안드로이드 간 광고 수익 격차 발생

디버깅 도구 및 개발 유틸리티

FLEX 디버깅 라이브러리

  • 강력한 iOS 디버깅 라이브러리 소개

    • Objective-C 기반이지만 Swift 지원
    • 바텀 시트 형태로 UI에 오버레이되어 디버깅 정보 제공
  • 주요 기능

    • 뷰 계층 및 뷰 사이즈 실시간 확인
    • 네트워크 통신 모니터링
    • UserDefaults 조회
    • 메모리 사용량 확인
    • 파일 브라우저 제공
  • 구현 방법

    • 개발 모드에서만 활성화되도록 #if DEBUG 조건문 사용
    • 흔들기 또는 개발자 모드 버튼을 통해 활성화
    • 프로덕션 빌드에는 포함되지 않도록 설정 가능

뷰 디버깅 기법

  • SwiftUI에서 뷰 디버깅의 어려움

    • 계층 구조가 복잡하고 많은 중간 뷰가 자동 생성됨
    • UI 하이어라키 도구가 UIKit보다 덜 직관적
  • 대안적 디버깅 방법

    • FLEX를 통한 실시간 뷰 사이즈 및 좌표 확인
    • 자체 디버깅 코드 추가

ProxyMan 네트워크 디버깅 도구

  • 네트워크 요청 모니터링 도구

    • API 통신 내용 확인 용이
    • 무료 버전은 보기 제한 있음 (최신 버전은 2개로 제한)
  • 기업 사용 시 라이센스 이슈

    • 기업용 제품을 무료로 사용하면 법적 문제 발생 가능
    • "감사 나오면 차라리 창 밖으로 노트북을 집어던지는 게 더 싸다"는 우스갯소리
    • 월 $69의 팀 라이센스 비용

개발 조직 및 업무 환경

팀 구성 및 인력 현황

  • 개발팀 구조 사례

    • iOS 개발자 10명, 안드로이드 개발자 7명 구성
    • iOS 개발자 수요가 더 많은 상황
  • 인력 변동 패턴

    • 안드로이드팀은 인원 변동이 잦은 반면, iOS팀은 상대적으로 안정적
    • 인턴 인력 활용 (특정 팀에서는 iOS보다 안드로이드에 인력이 필요한 상황)

업무 강도와 프로젝트 관리

  • 교육 관련 앱 개발의 특징적 패턴

    • 학기 전에 신기능 개발로 바쁨
    • 학기 중에는 버그 수정이나 광고 관련 작업으로 상대적으로 여유
  • 다중 프로젝트 관리 어려움

    • 3개 이상의 프로젝트 동시 담당 시 업무 과부하
    • 라이브러리 전면 리팩토링 작업의 도전성

개발 프레임워크 선택

  • 상태 관리 접근법 다양성

    • iOS용 Redux 라이브러리 사용 사례
    • UIKit 기반 앱에서 TCA(The Composable Architecture) 사용
    • SwiftUI 앱에서 다양한 상태관리 접근법
  • 최신 기술 적용 트렌드

    • 채널 앱 사례: SwiftUI 기반 전면 리뉴얼
    • 다양한 아키텍처 패턴의 공존