Skip to content

Boost‐SwiftUI‐2024.09.03(화).md

유정주 JeongJu Yu edited this page Sep 8, 2024 · 5 revisions

원본 텍스트 파일

Boost-SwiftUI-2024.09.03(화).txt


스터디 시간 및 참여자

  • 2024.09.03 화 오후 9:03 ・ 68분 24초
  • 권승용 김대황 정다함 유정주 이준복 홍승현
  • 클로바노트를 이용해 회의 내용을 기록하고, AI를 이용해 요약, 편집했습니다.

Swift의 Sendable 프로토콜과 Actor에 대한 이해

Sendable 프로토콜의 의미와 역할

  • Sendable은 단순히 스레드 안전성을 보장하는 것이 아님
  • 컴파일러에게 동시성 환경에서 안전하게 전달될 수 있는 타입임을 알려주는 키워드
  • Sendable 채택의 의미
    • 컴파일러에게 특정 규칙을 일시적으로 무시하도록 요청하는 것
    • 실제로 스레드 안전성을 제공하지는 않음

Actor와 격리(Isolation)에 대한 이해

  • Actor는 격리된 "섬"과 같은 개념으로 이해됨
  • Actor 내부의 메서드와 클로저도 격리된 상태를 유지함
  • UIViewController 등이 메인 actor의 역할을 할 수 있음

Swift 6의 변화

  • 동시성 검사(Concurrency checking)가 더 엄격해짐. 기본 설정이 "Complete"로 변경됨
  • Swift 5와 6 사이에 선택 가능성 존재

~Copyable과 ~Escapable

  • ~는 Not의 의미
  • ~Copyable는 복사할 수 없음을 의미함
  • ~Escapable은 지연 실행할 수 없음을 의미함
    • 컴파일 타임에 생명 주기를 제어해서 성능 최적화가 가능함

기타 논의 사항

  • Apple이 Sendable을 도입한 이유에 대한 의문
  • 구조체(Struct)의 사용 증가와 데이터 레이스 방지 가능성
  • 컴파일러 옵션의 변화와 그 영향

Swift의 동시성과 Actor 모델에 대한 심층 토론

웹소켓 구현에 대한 논의

  • Point-Free의 소켓 객체를 기반으로 한 웹소켓 구현 설명
  • 글로벌 액터를 사용한 버킷 정의 및 작업 위임 방식
  • 디펜던시 관리를 위한 딕셔너리 사용

액터 사용의 실제 적용

  • 채팅 기능 구현 시 웹소켓 사용 방식
  • 소켓 열기/닫기 타이밍 (화면 진입/퇴출 시)
  • REST API와 웹소켓의 혼합 사용 전략

동시성 관련 새로운 개념 및 문법

  • AsyncStream 사용에 대한 설명
  • 글로벌 액터(@globalActor) 사용에 대한 논의
  • 컴파일러 에러 메시지 변화에 대한 관찰

액터 내부 상태 변경 관련 이슈

  • 액터 외부에서 내부 상태 변경 시 발생하는 문제
  • 동기적 코드로의 변환 필요성

Swift의 새로운 키워드 '@preconcurrency'

  • @preconcurrency 키워드의 도입 배경
  • 동시성 미지원 라이브러리와의 호환성을 위한 사용 예측

Swift 동시성 및 성능 최적화에 대한 심층 토론

오픈소스 라이브러리의 동시성 구현

  • Composable Architecture(TCA) 라이브러리의 동시성 지원 현황
  • Effect와 throttle 구현에 대한 분석
  • 컴바인(Combine)과 동시성 경계(Concurrency Boundary) 관련 이슈

NSLock과 NSRecursiveLock의 차이

  • NSLock: 동일 스레드에서 중복 락 시 데드락 발생
  • NSRecursiveLock: 동일 스레드에서 중복 락 허용
  • 재귀 함수 등에서의 NSRecursiveLock 사용 사례

락(Lock)의 성능 비교 (참고)

  • NSLock과 NSRecursiveLock의 성능 차이
  • 다양한 동기화 메커니즘의 성능 비교
    • OSUnfairLock이 가장 빠른 성능 보여줌
    • DispatchQueue.sync와의 큰 성능 차이

img img2

게임 개발에서의 성능 최적화

  • 게임 개발에서 weak reference 사용 등 극단적 최적화 언급
  • 클라이언트 레벨에서의 세밀한 최적화 필요성

기타 논의 사항

  • 일반 앱 개발에서 극단적 성능 최적화의 필요성 의문
  • 다양한 동기화 메커니즘의 성능 차이에 대한 그래프 분석
Clone this wiki locally