UE5

ESPMode

게임 개발 2024. 5. 10. 18:25

 

 

 

언리얼 엔진에 있는 ESP 모드가 있는데

그 모드를 이해하고자 해당 글을 포스팅 하기로 했다.

 

사실 언리얼 스마트 포인터가 가지는 이점이 멀티 스레드를 이용한다면

언리얼 스마트 포인터의 ESPMode를 설정해줘야 한다.

 

자주 쓰이고 꼭 알아야하는 언리얼 스마트 포인터에도 ESP가 쓰인다.

즉 언리얼 스마트 포인터를 잘 이용하려면 ESP가 뭔지 잘 알아야 한다.

 

일단 Windows에서 제공하는 ESP의 설명을 정리하기 전에,

언리얼에서 제공하는 ESP을 간단히 설명해보겠다.

 

ESPMode는 'fast' 또는 'thread safe' 두 가지 중 하나의

공유 포인터 타입을 선택해서 사용해야 한다.

 

Name Description
NotThreadSafe Forced to be not thread-safe. (= 강제적으로 스레드 안전성을 깨트린다.)
( 사용 예는 스레드간 공유되지 않은 객체를 관리할 경우 사용한다.
단일 스레드에서만 작동하는 객체를 관리할 경우
객체가 더 이상 참조되지 않을 때 자동으로 파괴되어야 하는 경우이다.)
Fast 속도가 빠르며, atomic interlocks를 사용하지 않는다.
ThreadSafe 조건부 작동하는 것으로, 스레드에 안전하고 잠금을 회전시키지 않으면 속도가 느리다.

 

++Plus++

 

Interlock이 뭐냐?

 

상호간의 동작에 대한 보완장치이다.

1자세하게 말하자면

  1.  제한을 벗어난 프로세스 응답 상태 혹은 조건에 의해
    시작되는 보호 조치를 취하는 반응을 말한다.
  2. 다른 부분이 작동하지 않는 한, 프로세스의 한 부분이 작동하지 않도록 하는 장치이다.
  3. 위험이 발생하면 장비가 작동하지 못하도록 하는 스위치와 비슷하게 작동한다.
    이 역시 안전하게 작동하기 위해 설계된 것이다.
  4. 두 부분을 물리적으로 겹쳐서, 소프트웨어나 전자적인 방식으로 서로 결합하여
    안정적인 작동을 유지한다.
  5. 필수 조건의 물리적 상태를 감지하고, 해당 정보를 주요 안전 제어 회로(시스템)
    전달하여 시스템이 안전한 상태인지 확인한다.

 

++

 

ESPMode는 fast 또는 ThreadSafe 공유 포인터 유형 중에서

쉐어드 포인터 타입에서 하나를 선택할 수 있도록 사용된다.

이것은 컴파일 타임에 템플릿에 의해서 하나의 코도 경로 또는 다른 코드 경로를 생성하는 데 사용된다.

 

 

언리얼 공식 문서로 ESPMode가 쓰레드의 안전성과 속도를 결정짓는데 사용한다는 것을 유추할 수 있다.

 

그럼 즉 마소의 공식문서와 대조해서 이해하자면,

자체 배포 모드 즉, 자동으로 등록 상태를 처리하는 것이다.

 

Autopilot 자체 배포 모드 단계에는 총 6단계가 있다.

  • 1단계 : Windows 자동 Intune 등록 설정
  • 2단계 : Autopilot 디바이스로 디바이스 등록
  • 3단계 : 디바이스 그룹 만들기
  • 4단계 : AUTOpilot ESP(등록 상태 페이지) 구성 및 할당
  • 5단계 : Autopilot 프로필 만들기 및 할당
  • 6단계 : 디바이스 배포

 

이를 통해 ESP는 어떠한 상태를 결정짓는 것 내용임을 알 수 있다.

 

그럼 MS 공식문서에 써져있는 ESP는 무엇일까?

 

Windows Autopilot 시나리오 - 자체 배포 모드 : ESP
ESP(등록 상태 페이지 = Enrollment Status Pase)

ESP(등록 상태 페이지)의 기본 기능은 
Autopilot 프로세스를 통해 디바이스를 설정하고 등록하는 동안 
최종 사용자에게 진행률 및 현재 상태 표시하는 것이다.

 

 

위 내용처럼 어떠한 디바이스를 설정하고 등록하는 동안

현재 상태를 표시하는 것이라고 설명하고 있다.

 

상태를 표시하며 데이터의 안전성을 확보할 지, 속도를 확보할 지 정하는 것이다.

 

ESP의 다른 기본 기능은 모든 필수 정책 및 애플리케이션이 설치될 때까지

사용자가 디바이스에 로그인하고 사용하지 못하도록 차단하는 것이다. (안전성 검수)

다양산 설정으로 ESP 프로필을 만들고

다양한 요구 사항 및 시나리오에 따라 적절하게 할당할 수 있다.(타입 유동성)

 

기본적으로 모든 디바이스에 할당된 기본 ESP가 있다.

기본 ESP의 기본 설정인 Autopilot 프로세스 중에 앱 및 프로필 진행률을 표시하지 않는 것이다.

그러나 앱 및 프로필 진행률을 표시하려면

별도의 사용자 지정 ESP를 통해 이 기본값을 변경하는 것이 좋다.

ESP를 사용하도록 설정하고 구성하면

최종 사용자 디바이스가 설정되는 진행 상황을 제대로 확인할 수 있으며

디바이스가 완전히 구성되고 프로비전될 때까지 디바이스를 사용할 수 없다.

디바이스가 완전히 구성되고 프로비전이 되기 전에 사용자가 디바이스에 로그인하면

문제가 발생할 수 있는 것이다.

 

ESP에는 다음 두 단계가 있다.

 

  • 디바이스 ESP 
    OOBE 프로세스 중에 실행되고 디바이스 정책을 적용하고
    디바이스 애플리케이션을 설치하는 ESP의 부분이다.
  • 사용자 ESP
    사용자 계정을 설정하고,
    사용자 정책을 적용하고, 사용자 애플리케이션을 설치하는 ESP의 부분이다.

 

 

즉 언리얼에서도, MS Build 에서도 ESP는 상태에 따라

해당 메모리의 안전성 여부를 나타내는 것이다.

지금 실행되도 되는지 아닌지를 말이다.

 

그럼 이러한 것을 다시 언리얼에 적용하면 뭐가 될까?

ThreadSafe는 다중 스레드 코드로부터 안전하도록 설계되었음을 나타낸다.

이 과정에서는 직접 다중 스레드 코드를 다룰 필요가 없게된다.

 

하지만 프로그램이 여러 스레드를 사용할 때는 병렬 라인으로 동시에 실행되기 때문에

변수가 여러 스레드를 돌면서 의도치 않은 상황(오류)을 일으키지 않도록 유의해야 한다.

 

이 때 상태를 변환해가며 오류 상황을 피하도록 유도하는 것이다.

 

 

위 코드와 같이 이용하면 된다.

 

위 코드는 그럼 위 내용을 응용한다면,

IOnlineSeession class를 TSharedPtr을 통해 ESPMode의 ThreadSafe 타입을 사용하여

관리할 데이터라는 것을 알 수 있다.