apple/WWDC

Meet distributed actors in Swift - WWDC22

lgvv 2025. 4. 30. 01:02

Meet distributed actors in Swift - WWDC22

 

Swift의 동시성을 단일 프로세스 이상으로 활용하는 방법에 대해 알아볼 것

 

 

Distributed Actor와 상호작용 하는 방식을 바꾸지 않고도 잠재적으로 멀리 있을 수 있는 것을 의미

이는 분산된 Actor가 어디에 있든 간에 동일한 방식으로 소통할 수 actor 간 소통이 가능함을 의미.

이는 테스트에 있어 코드의 구현을 변경할 필요 없이 actor를 이동시킬 수 있음.

 

 

 

분산 Actor를 선언하려면 Swift 5.7에서 도입된 Distributed를 선언해야 함.

 

 

distibuted를 사용하면 actor는 컴파일 타임에 검사 가능함.

 

id는 distibuted actor 시스템에서 actor를 고유하게 식별하는데 사용. 

actor는  distributed actor 시스템에 의해 초기화될 때 시스템에 의해서 관리되기 때문에 우리가 수동으로 설정할 수 없음.

대신에 actor system이 이를 수행함

 

 

 

 

actor 시스템을 사용하고, ID는 액터시스템에 맡기기

 

 

 

distributed 메서드의 호출은 네트워크 경계를 넘을 수 있으므로, 모든 인자와 프로퍼티들이 직렬화 요구사항을 준수하는지 확인해야 한다.

Swift의 경우에 actor 시스템은 Swift의 기본 직렬화 메커니즘인 Codable을 사용하고 있음.

 

 

 

웹소켓 기반으로 actor가 어떻게 동작하는지 알아볼 예정.

 

 

ActorSystem을 웹소켓으로 변경하여 분석

 

 

 

 

distibted actor system은 actor를 생성하는 대신 id를 resolve하려고 함.

여기서 resolve 메서드는 동기적으로 동작하여 빠르게 반환되어야 해서, 네트워킹이나 다른 긴 작업을 수행하지 않아야 함.

 

 

distributed actor는 P2P에서도 사용 가능함.

민감한 정보 유출에 주의!

 

 

 

reception pattern 인데, 모든 actor는 자신의 receptionist 가 존재하고 다름 검색을 위해 가장 적합한 수단을 선택함.

이를 통해 하위 API를 안전하게 보호함.

 

 

 

 

distributed actor를 통해 원래는 하나의 원격 서버에 붙어서 처리해야 했던 것을 이런 형태로 처리할 수 있음.

 

 

(참고)
https://www.youtube.com/watch?v=KwV23ASELQ0