Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Boost‐SwiftUI‐2024年02月25日(화).md

유정주 JeongJu Yu edited this page Feb 25, 2025 · 1 revision

원본 텍스트 파일

Boost-SwiftUI-2024年02月25日(화).txt


스터디 시간 및 참여자

  • 2025年02月25日 화 오후 9:01 ・ 92분 53초
  • 고병학 권승용 김대황 유정주 윤동주 정종인 홍승현
  • 클로버노트를 이용해 회의 내용을 기록하고, Claude를 이용해 요약, 편집했습니다.

iOS 개발 스터디 노트: 빌드 최적화, 아키텍처, 기술 실무

Xcode 16 빌드 시스템 개선사항

새로운 빌드 프로세스 이해하기

  • Xcode 16은 모듈 빌드 방식과 의존성 관리 방법을 개선한 중요한 빌드 시스템 향상을 제공합니다
    • 이전 빌드 시스템은 의존성을 비효율적으로 처리하여 모듈이 의존성을 기다려야 할 때 지연이 발생했습니다
    • 새로운 시스템은 빌드를 시작하기 전에 먼저 전체 의존성 그래프를 스캔하고 생성합니다
    • 이 비순환적 그래프 생성 방식은 더 효율적인 병렬 처리를 가능하게 합니다

모듈 의존성 관리

  • 새로운 빌드 시스템은 의존성이 적은 모듈을 우선적으로 빌드합니다
    • 이로 인해 프로세스가 의존성을 기다리는 "중단된" 빌드 시간이 줄어듭니다
    • 컴파일러는 의존성 그래프를 기반으로 빌드 순서에 대해 더 지능적인 결정을 내릴 수 있습니다
  • 명시적 모듈 빌드는 컴파일 프로세스 최적화에 도움이 됩니다
    • 헤더와 인터페이스가 미리 생성되어 더 나은 병렬화가 가능합니다

개발 실무에 미치는 영향

  • 이러한 개선사항은 코드에서 더 나은 모듈 분리와 의존성 관리를 장려합니다
    • 명확하게 정의된 의존성을 통해 컴파일러가 빌드 경로를 최적화할 수 있습니다
    • 프로토콜 지향 프로그래밍은 구체적인 구현 간의 직접적인 의존성을 줄여 이점을 제공합니다
    • 명확한 인터페이스가 있는 잘 구조화된 코드는 새로운 빌드 시스템의 이점을 더 잘 활용할 수 있습니다

프로토콜 지향 프로그래밍과 아키텍처

빌드 성능에 대한 이점

  • 프로토콜 지향 프로그래밍은 Xcode의 빌드 최적화와 잘 맞습니다
    • 프로토콜은 구현에 직접적인 의존성 없이 인터페이스를 정의합니다
    • 프로토콜이 정의되면 구현은 독립적으로 컴파일될 수 있습니다
    • 이로 인해 엄격한 빌드 순서의 필요성이 줄어듭니다

역할 분리 고려사항

  • 개발자들은 역할 분리와 코드 유지보수성의 균형에 대한 도전과제를 논의했습니다
    • 과도한 분리는 상용구 코드(boilerplate)를 증가시킬 수 있습니다
    • 충분하지 않은 분리는 유지보수하기 어려운 큰 파일을 만들 수 있습니다
    • 일반적인 합의는 중복이 있더라도 가독성 있는 코드를 우선시하는 것이었습니다

크로스 플랫폼 아키텍처 차이점

  • iOS와 Android 간의 다른 아키텍처 접근 방식에 대한 논의
    • iOS 팀은 미래 서비스 확장성을 위해 여러 개의 작은 모듈을 선호했습니다
    • Android 팀은 더 통합된 접근 방식을 사용했습니다
    • 팀들은 공통 아키텍처 접근 방식에 대한 합의를 이루기 어려웠습니다
    • 이러한 차이는 프로젝트 관리 및 작업 추정에 일부 어려움을 만들었습니다

오디오 처리 최적화

대량 오디오 파일 컬렉션 처리

  • 논의된 도전과제: 1800개의 개별 MP3 파일 로딩으로 인한 상당한 성능 영향
    • 단일 스레드 로딩 프로세스가 약 4초 소요되었습니다
    • 파일들은 순차적으로 재생되어야 하는 긴 오디오의 분할된 세그먼트입니다

제안된 해결책

  • 여러 파일을 동시에 로드하기 위해 태스크 그룹(task group)을 사용한 병렬 처리 구현
    • URL을 해시 키로 사용하여 효율적인 관리가 가능합니다
    • 반복 처리를 피하기 위해 초기 로드 후 지속 시간 및 기타 메타데이터를 캐시합니다
  • 성능 향상을 위한 아키텍처 변경 고려
    • 추출 및 처리 단계를 별도 모듈로 분리
    • 오디오 파이프라인의 다양한 단계를 위한 전용 컴포넌트 생성

기술적 제약

  • 팀은 상위 요구사항으로 인해 미리 분할된 오디오 파일로 작업하고 있습니다
    • 조직적 제약으로 인해 소스 형식을 변경하는 것은 불가능합니다
    • 스트리밍 콘텐츠가 아닌 로컬 파일을 사용하므로 특정 최적화 옵션이 제한됩니다

SwiftUI 구현 도전과제

뷰 크기 조정 문제

  • 개발자들은 SwiftUI에서 동적 뷰 크기 조정의 어려움에 대해 논의했습니다
    • UIKit과 달리 SwiftUI는 뷰가 자식 뷰의 크기와 정확히 일치하도록 만드는 직관적인 방법을 제공하지 않습니다
    • 팀은 이것이 UIKit의 더 직접적인 크기 제어에 비해 특히 어렵다고 언급했습니다

Refreshable 수정자 호환성

  • iOS 15에서 refreshable 수정자의 호환성 문제
    • iOS 15에서 refreshable 수정자는 List 뷰에서만 작동하지만 다른 뷰에 적용되었을 때 오류를 표시하지 않습니다
    • 이로 인해 개발 중에 발견되지 않은, 프로덕션에서의 런타임 문제가 발생했습니다
    • 이 동작은 iOS 16에서 수정되었지만, iOS 15를 지원하는 팀은 이 제한사항을 알고 있어야 합니다

마이그레이션 도전과제

  • Swift 6로의 마이그레이션에 대한 논의
    • 팀은 새로운 Swift 언어 기능에 적응하는 데 어려움이 있다고 언급했습니다
    • 마이그레이션 가이드가 잠재적으로 도움이 될 수 있는 자료로 언급되었습니다

개발 실무 및 기술 역량

문서화 접근법

  • 기업마다 문서화 관행이 다양합니다
    • 일부는 Notion, Swagger, JIRA 티켓을 사용합니다
    • 다른 곳은 Excel 스프레드시트에 의존하거나 최소한의 문서화만 합니다
    • 부실하거나 오래된 문서는 중요한 문제점으로 확인되었습니다
    • Swagger는 백엔드 팀이 적절히 유지관리할 때 가치 있다고 강조되었습니다

버전 관리 시스템

  • 팀들은 다양한 버전 관리 경험에 대해 논의했습니다
    • Git과 GitHub가 가장 일반적이었습니다
    • 일부 개발자들은 SVN과 같은 구식 시스템 경험이 있었습니다
    • 한 개발자는 이전 직무에서 코드 전송을 위해 USB 드라이브를 사용한 극단적인 예를 공유했습니다

지속적 학습 도전과제

  • 일상 업무와 지속적인 학습의 균형 유지가 공통적인 고민이었습니다
    • 개발자들은 업무 후 개인 학습에 에너지를 찾는 데 어려움을 느꼈습니다
    • 일부는 흥미로운 기술을 다루는 업무가 자연스럽게 더 많은 학습으로 이어진다고 언급했습니다
    • 한 개발자는 경력 발전에 대한 스트레스보다 일을 즐기는 데 중점을 두는 시니어 개발자의 조언을 공유했습니다

레거시 코드 현대화

Objective-C UI를 Swift로 변환

  • Interface Builder가 있는 Objective-C에서 SwiftUI로의 마이그레이션에 대한 논의
    • 코드 얽힘이 주요 도전과제로 언급되었습니다
    • 이 프로세스는 한 개발자의 프로젝트에서 약 1.5개월이 소요되었습니다
    • 리팩토링 후, 중복되고 구조가 좋지 않은 코드를 제거하여 코드 크기가 크게 줄었습니다

빌드 시간 최적화

  • 코드 구성이 빌드 시간 효율성에 영향을 미칩니다
    • 많은 의존성을 가진 대형 클래스는 빌드 속도를 늦춥니다
    • 명확한 인터페이스가 있는 작고 집중된 모듈로 코드를 분할하는 것이 도움이 됩니다
    • 프로토콜 지향 접근 방식은 직접적인 의존성을 최소화하여 빌드 병목 현상을 줄일 수 있습니다

메모리 관리

  • 팀은 메모리 누수를 잡는 접근 방식에 대해 간략히 논의했습니다
    • Xcode 16.2는 누수 감지 기능이 향상되었다고 언급되었습니다
    • CI/CD 파이프라인에 누수 감지 기능을 통합하는 방법에 대한 관심이 있었습니다

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /