전체 글 106

[UE5] Iris DefaultEngine.ini

[ UE5 : Iris DefaultEngine.ini ] UE5.3.0 Preview-1부터, Lyra에서 DefaultEngine.ini를 통해 설정가능한 Config 요소들 대부분이 BaseEngine.ini로 옮겨짐DefaultEngine.ini가 이후에 BaseEngine.ini 값을 덮어쓰기 때문에, 변경하려면 DefaultEngine.ini에서 수정 값을 추가하면 된다. BaseEngine.ini - UE5.6.0;Iris - begin [/Script/IrisCore.PartialNetObjectAttachmentHandlerConfig] MaxPartCount=4096 [/Script/IrisCore.NetBlobHandlerDefinitions] +NetBlobHandlerDefin..

UE5/Iris 2025.06.08

前 야후 엔지니어가 말하는 신입의 성장을 저해하는 5가지 나쁜 습관

출처 : https://qiita.com/ryoheiiwamoto/items/25851a3663c5b224d275 元ヤフーエンジニア社長が考える、新人エンジニアの成長を阻害する悪習5選 - Qiita自己紹介株式会社PRUMという会社の代表をしています。岩本です。PRUM公式サイトSES企業でエンジニアとして就業したのち、ヤフーでもエンジニアとして働いておりました。2019年、PRUMを…qiita.com ---------------- ---------------- ---------------- ---------------- ---------------- 주식회사 PRUM이라는 회사의 대표를 하고 있습니다.SES 회사에서 엔지니어로 일한 후 Yahoo! JAPAN에서도 엔지니어로 일했습니다. 2019년에 그는 PRUM을 설립하고 다..

잡담 2025.04.20

[UE5] Iris Replication System Background

[ UE5 : Iris Replication System Background ] Iris는 UE5.1에서 Experimental 기능으로 추가된 차세대 리플리케이션 시스템이다.현재 에픽게임즈 내부에선 포트나이트의 리플리케이션 그래프를 Iris로 교체하여 라이브 검증 중이며, 기존 리플리케이션 그래프의 장점이던 캐시 및 Persistent Data Structure 활용과 더불어 멀티스레드 및 멀티 서버를 지원한다.Iris를 이해하려면, Legacy NetDriver - Replication Graph - Iris로 이어지는 NetDriver의 발전 과정에 대해 알아야 한다.왜냐하면 현재 Iris에서도 Replication Graph의 GridSpatialization2D 노드 기반인 NetObjectGr..

UE5/Iris 2025.03.18

Synchronization Without Locks

https://youtu.be/5sZo3SrLrGA?si=BnFuL5phi4nNDfUN (42:00~)Hardware Reorderingyou have a processor on the left edge here, and you have a network that connects it to the memory system, a memory bus of some kind.여기 왼쪽 가장자리에 프로세서가 있고, 그것을 메모리 시스템에 연결하는 네트워크, 일종의 메모리 버스가 있습니다.Now it turns out that the processor can issue stores faster than the network can handle them. So the processor can go store, st..

11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자

[ Effective C++ ]자기대입(self assignment)이란, 객체가 자기 자신에 대해 대입 연산자를 적용하는 것을 말한다.class Widget { ... };Widget w;...w = w; // 자기에 대한 대입 이 코드는 의외로 legal한 코드이다. 더 큰 문제는, 이 대입이란 연산은 그렇게 눈에 잘 띄지도 않는다는 것이다.예를 들면,a[i] = a[j]; // [1] 자기대입 가능성 존재// ---------------- //*px = *py; // [2] 자기대입 가능성 존재 [1]은 인덱스인 i 와 j 가 같을 경우, [2]는 포인터가 가리키는 주소가 같을 경우 자기대입이 발생할 수 있다. 객체 포인터에 주소를 담는 것은 반드시 원본 객체의 타입에 담아야 하는 것이 아니다.파생..

10. 대입 연산자는 *this의 참조자를 반환하게 하자

[ Effective C++ ] C++의 대입 연산은 다음과 같이 여러 번 사슬처럼 엮일 수 있는 성질을 갖고 있다.int x, y, z;x = y = z = 15; // x = (y = (z = 15)); 위 연산은 또한 우측 연관(right-associative) 연산이라는 점인데, 우측에서 부터 대입이 이루어지는 것이다.이러한 연산이 이루어지게 하려면 "좌변 인자"에 대한 참조자를 리턴하도록 구현해야 한다.class Widget{public: ... Widget& operator=(const Widget& rhs) // 리턴타입은 현재 클래스에 대한 { // 참조자 //... return *thi..

9. 객체 생성 및 소멸 과정 중에는 절대 가상 함수를 호출하지 말자

[ Effective C++ ] 객체 생성 및 소멸 과정에는 절대로 가상 함수를 호출하면 안된다.주식 거래 객체가 생성될 때 마다 감사 로그가 생기는 클래스가 있다고 가정해보자.class Transaction{public: Transaction(); virtual void logTransaction() const = 0; // -> 타입에 따라 달라지는 로그 기록 생성 // ...};Transaction::Transaction(){ // ... 기본 구현 동작 ... logTransaction(); // 마지막에 로깅}class BuyTransaction : public Transaction{public: virtual void logTransation() const..

8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자

[ Effective C++ ] class Widget{public: ... ~Widget() { ... } // 이 함수로부터 예외가 발생된다고 가정};void doSomething(){ std::vector v; ...} // v는 여기서 자동으로 소멸 위 예제에서, Widget들을 소멸시킬 책임은 vector에게 있다.만약 10개의 Widget이 저장되어 있는데, 첫 번째를 소멸시키는 도중에 예외가 발생되었다고 가정하자.  나머지 9개는 memory leak을 막기 위해 반드시 소멸되어야 하므로, 이들에 대해 소멸자를 호출해야 할 것이다.만약 두 번째 Widget의 소멸자에서도 예외가 던져지면 어떻게 해야 할까? 이 경우에, Undefined-..