용어

Engine

특정 프로그램을 위해 핵심적이고 본질적인 기능을 수행해주는 프로그램

Context

프로그래밍에서의 Context 의미 프로그래밍에서 "context"는 다양한 상황에서 사용되며, 일반적으로 다음과 같은 의미를 가집니다:

1. 실행 컨텍스트 (Execution Context)

프로그램이 실행되는 동안 특정 시점에서의 상태와 관련된 정보를 나타냅니다.

2. 그래픽 컨텍스트 (Graphics Context)

그래픽스 시스템에서 렌더링 설정(예: 색상, 폰트, 브러시 등)을 관리하는 객체입니다.

3. 보안 컨텍스트 (Security Context)

보안 측면에서 사용자의 인증 정보, 권한, 정책 등을 관리하는 데 사용됩니다.

4. 스레드 로컬 컨텍스트 (Thread-local Context)

다중 스레드 환경에서 각 스레드가 개별적으로 유지하는 데이터를 나타냅니다.

5. 어플리케이션 컨텍스트 (Application Context)

애플리케이션 전반에서 공유되는 설정 정보나 상태를 나타냅니다.

6. 데이터베이스 컨텍스트 (Database Context)

데이터베이스와의 상호작용을 관리하는 객체나 구조체입니다.

Hooking

프로그래밍에서 "후킹(hooking)"은 특정 이벤트가 발생했을 때 사용자 정의 코드를 실행할 수 있도록 시스템이나 애플리케이션의 동작을 가로채거나 변경하는 기법을 말합니다. 후킹은 다양한 용도로 사용되며, 주로 다음과 같은 방식으로 구현됩니다:

API 후킹

메시지 후킹

프로세스 후킹

라이브러리 후킹

후킹의 사용 사례

후킹은 매우 강력한 기법이지만, 잘못 사용될 경우 시스템 안정성을 해칠 수 있으며, 악의적인 목적으로 사용될 수도 있습니다. 따라서 후킹을 사용할 때는 신중하게 접근하고, 보안과 안정성을 고려해야 합니다.

Artifact

소프트웨어 개발에서 "아티팩트(artifact)"란 개발 과정 중에 생성되거나 사용되는 다양한 형태의 문서, 코드, 모델 등을 말합니다. 아티팩트는 소프트웨어 개발의 각 단계에서 중요한 역할을 하며, 프로젝트의 효율적인 진행과 관리를 위해 필수적입니다. 다음은 아티팩트의 주요 유형과 그 예시들입니다

아티팩트는 특정 작업(Task)을 수행한 결과로 생성되는 산출물입니다. 이는 프로젝트를 진행하며 발생하는 모든 결과물을 포함하며, 각 작업의 목적과 과정에 따라 다양한 형태를 가질 수 있습니다. 쉽게 말해, 어떤 일을 했을 때 나오는 결과물이 바로 아티팩트입니다.

RichText

"Rich Text"라는 용어는 컴퓨터 과학과 디지털 문서 편집 분야에서 유래했습니다. 이 용어는 텍스트 데이터를 단순한 순수 텍스트(plain text)보다 더 풍부한 형태로 표현하기 위해 사용됩니다. Rich Text는 일반적으로 서식 정보(예: 글꼴, 색상, 굵게, 기울임, 밑줄 등)와 같은 추가적인 메타데이터를 포함합니다. Rich Text의 역사는 1970년대와 1980년대로 거슬러 올라갑니다. 이 시기에는 컴퓨터 기술의 발전과 함께 문서 편집 및 처리 기술도 크게 발전하였습니다. 주요 시기와 용어의 발전 과정을 간략히 살펴보면 다음과 같습니다:

요약하자면, "Rich Text"라는 용어는 텍스트 데이터에 서식 정보를 포함하여 보다 풍부한 표현력을 제공하려는 시도에서 유래되었습니다. 컴퓨터 기술의 발전과 함께 이 개념은 계속해서 진화하고 있으며, 오늘날의 디지털 문서 편집의 핵심 요소로 자리 잡고 있습니다.

런타임 에 대한 개념

언리얼 엔진에서의 런타임이라는 용어는 일반적으로 게임이나 어플리케이션이 실행되괴 있는 동안의 시기를 의미합니다. 프로젝트가 빌드되고 에디터가 실행되고 있는 순간은 런타임이 아닙니다. 빌드 과정과 에디터가 단순히 실행되고 있는 상태는 런타임에 포함되지 않습니다. 빌드 과정은 게임을 실행 가능한 형태로 준비하는 단계이고, 에디터가 실행되고 있는 순간은 게임 개발 환경이 작동 중인 상태일 뿐입니다. 런타임은 실제 게임 로직이 동작하고 게임 플레이가 진행되는 기간을 의미합니다. 이 정의는 두가지 상황에 적용될 수 있습니다.

에디터가 실행되고 있을 때는 일반적으로 "에디터 모드(Editor Mode)"라고 부릅니다. 이 모드는 언리얼 엔진 에디터 내에서 게임이나 애플리케이션을 개발하고, 설정하고, 테스트하는 환경을 의미합니다. 에디터 모드에서는 다양한 툴과 기능을 사용하여 레벨을 디자인하고, 애셋을 배치하며, 게임 로직을 작성하고 디버깅할 수 있습니다. 에디터 모드에서 게임을 실행하면 런타임으로 전환되며, 게임이 멈추면 다시 에디터 모드로 돌아오게 됩니다.

언리얼의 스마트포인터 관련 헤더파일은 Editor 관련 모듈에 있어야 할 거같은데
Runtime 모듈에 있는데 이유가 뭐야?
먼가 프로그램의 기본적인 기반 같은 단계라서 Editor 에 있어야 할거 같은데?

언리얼 엔진에서 스마트 포인터 관련 헤더 파일이 Runtime 모듈에 있는 이유는 스마트 포인터가 게임의 실행과 개발 환경 모두에서 기본적인 메모리 관리 기능을 제공하기 때문입니다. 다음은 이에 대한 구체적인 이유입니다

이러한 이유들로 인해 스마트 포인터 관련 헤더 파일이 Runtime 모듈에 포함되어 있으며, 이는 게임 개발의 기본적인 기반을 제공하기 위한 설계 결정입니다. 이렇게 함으로써 에디터와 런타임 환경 모두에서 일관성 있고 효율적인 메모리 관리가 가능합니다.

런타임과 에디터 모두에서 필요한 기능은 런타임에 구현되어 있고,
에디터에서만 필요한 기능은 에디터에만 있나?

네, 정확합니다. 언리얼 엔진에서는 모듈의 역할과 기능을 명확히 구분하여 관리합니다. 이를 통해 개발 및 실행 환경에서 필요한 기능을 효율적으로 제공합니다. 다음은 이 구조에 대한 상세 설명입니다:

런타임 모듈(Runtime Modules)

런타임 모듈은 게임이 실행되는 동안 필요한 모든 기본 기능과 시스템을 제공합니다. 이 모듈은 게임의 기본 동작을 책임지며, 에디터 환경에서도 사용됩니다. 런타임 모듈은 게임이 실제로 실행될 때 필요한 기본적인 기능들을 제공합니다. 이 기능들은 게임의 핵심 동작을 지원하며, 게임의 성능과 안정성에 직접적인 영향을 미칩니다. 다음과 같은 기능을 포함합니다:

런타임 모듈은 에디터와 독립적으로 동작할 수 있어, 게임이 최종 사용자에게 배포된 후에도 문제없이 작동합니다.

에디터 모듈(Editor Modules)

에디터 모듈은 런타임 모듈 위에 구축되어 있으며, 이 모듈은 주로 개발자들이 게임을 효율적으로 만들고 수정할 수 있도록 지원합니다. 에디터는 런타임 모듈의 기능을 활용하면서, 개발자가 게임을 만들고 테스트하는 데 필요한 추가적인 도구와 인터페이스를 제공합니다. 에디터 모듈은 게임 개발과 디자인을 돕기 위해 제공되는 도구와 기능들을 포함합니다. 에디터 모듈의 기능은 다음과 같습니다: 다음과 같은 기능을 포함합니다:

Developer 모듈

언리얼 엔진에서 "Developer" 관련 코드와 모듈은 주로 엔진의 내부적인 개발 및 확장 기능을 지원하는 부분을 의미합니다. 이러한 모듈은 에디터와 런타임 모듈 외에도 엔진의 기능을 더욱 확장하거나 내부 개발을 지원하기 위해 사용됩니다. "Developer" 모듈은 엔진의 소스 코드를 수정하거나, 새로운 기능을 실험하거나, 특정한 개발 작업을 지원하는 데 필요한 도구와 기능을 제공합니다.

내부 개발 도구 및 기능 제공

기능 실험 및 확장

엔진 소스 코드와의 통합

개발자 도구와 지원

예시

코드 구조 및 위치

결론

"Developer" 관련 코드와 모듈은 엔진의 내부 개발, 확장, 테스트, 디버깅을 지원하기 위한 도구와 기능을 제공합니다. 이는 엔진의 핵심 기능을 더욱 잘 이해하고, 필요한 경우 수정하거나 확장할 수 있도록 돕습니다. 엔진의 기본적인 런타임과 에디터 모듈 외에도 이러한 "Developer" 모듈은 엔진의 깊이 있는 사용과 개발을 지원합니다.

기능 배치의 원칙

공통 기능: 런타임과 에디터 모두에서 필요로 하는 기능은 런타임 모듈에 배치됩니다. 이렇게 함으로써 코드의 중복을 피하고, 두 환경 모두에서 일관되게 동작하도록 보장합니다.

에디터 전용 기능: 개발 도구와 같은 에디터 전용 기능은 에디터 모듈에 배치됩니다. 이는 런타임 모듈이 불필요하게 비대해지는 것을 방지하고, 배포된 게임의 크기와 복잡성을 줄입니다.

예시

이런 구조적 설계는 언리얼 엔진이 높은 성능과 효율성을 유지하면서도 강력한 개발 도구를 제공할 수 있도록 합니다.

포함관계

런타임 모듈은 게임 실행에 필요한 모든 기본 기능을 포함하고 있으며, 이 기능들은 에디터 모듈에서도 사용됩니다. 반면, 에디터 모듈은 주로 개발 도구와 관련된 기능들을 추가로 제공합니다. 따라서, 런타임 모듈이 더 기본적이고 넓은 범위를 포괄하는 개념입니다. 에디터 모듈은 런타임 모듈을 포함하며, 그 위에 개발 도구를 추가한 형태입니다.

NAT

Network Address Translation

관련 : Port forward

Server

다른 컴퓨터에서 연결이 가능하도록 대기 상태로 상시 실행중인 프로그램 영업중인 식당과 유사하다 손님이 올 수 있도록 식당을 열고 대기중인 상태. 손님이 오면 식당 메뉴/정책 에 따라 서비스 제공

서버의 종류

WebServer ( aka.HTTP Server )

GameServer ( aka.TCP Server, Binary Server, StateFull Server)

제작시 고려할 사항
고려할 대상 게임서버의 유사성
손님한도 (몇명까지 받을 수 있는지) 최대 동시 접속자
한방에 들어갈 수 있는 손님의 일행 한도(인테리어) 게임 장르 및 채널링
직원 역할 구분(겸직가능) 게임로직(요리사), 네트워크(서빙), DB(결제)
직원 수 쓰레드 개수
요리사 / 서빙/ 결제직원 비율을 어떻게? 쓰레드 모델
주문을 어떻게 받을까 ( 손님이 눌러서? 벨? ) 네트워크 모델
손님이 기다릴 수 있는 시간 한도(패스트푸트? 파인다이닝?) 반응성(FPS, MMORPG)
장부 및 결제는 어떻게? 데이터베이스

Client

영화를 찍는것과 유사하다?