unreal 8기

2026-6-19 TIL

왕건 2026. 6. 19. 21:04

TIL: Unreal Engine 프로젝트 구조와 플러그인의 특성 이해하기

오늘 배운 내용

오늘은 Unreal Engine 프로젝트 구조에서 Config, Content, Source, Plugins, .uproject 파일이 각각 어떤 역할을 하는지, 그리고 그중에서도 플러그인(Plugin) 이 어떤 특성을 가지는지 자세히 정리했다.

이번 과제의 핵심은 단순히 폴더 이름을 외우는 것이 아니라, Unreal Engine 프로젝트가 어떤 단위로 구성되고, 기능을 어떻게 분리해서 관리할 수 있는지 이해하는 것이다.

특히 Plugin은 프로젝트에 기능을 추가하는 독립적인 패키지이며, 하나 이상의 모듈과 콘텐츠, 설정 파일을 포함할 수 있다.

핵심은 다음과 같다.

프로젝트
→ 게임 전체를 실행하는 가장 큰 단위

모듈
→ C++ 코드가 컴파일되는 최소 단위

플러그인
→ 모듈, 콘텐츠, 설정을 묶어 재사용 가능한 기능 단위로 만든 것

즉 플러그인은 프로젝트 안에 붙였다 뗄 수 있는 기능 패키지라고 이해하면 된다.

1. Unreal 프로젝트의 기본 구조

Unreal Engine 프로젝트에는 보통 다음과 같은 폴더와 파일이 있다.

Config
Content
Plugins
Source
LyraStarterGame.uproject

각각의 의미는 다음과 같다.

Config
→ 프로젝트 설정 파일이 들어가는 폴더

Content
→ 블루프린트, 머티리얼, 텍스처, 사운드 같은 에셋이 들어가는 폴더

Source
→ C++ 소스코드가 들어가는 폴더

Plugins
→ 프로젝트에 추가 기능을 넣는 플러그인들이 들어가는 폴더

.uproject
→ Unreal 프로젝트 자체를 나타내는 파일

처음에는 Content와 Source 정도만 익숙했지만, 실제 Unreal 프로젝트는 설정, 코드, 에셋, 플러그인 구조가 서로 연결되어 구성된다.

2. 프로젝트의 의미

프로젝트는 Unreal Engine에서 게임 전체를 구성하는 가장 큰 단위다.

프로젝트에는 게임 실행에 필요한 코드, 에셋, 설정, 플러그인 정보가 들어간다.

예를 들어 LyraStarterGame.uproject 파일은 이 프로젝트가 Unreal Engine 프로젝트라는 것을 알려주는 파일이다.

LyraStarterGame.uproject
→ LyraStarterGame 프로젝트의 중심 파일

프로젝트는 독립적으로 빌드하고 실행할 수 있다.

즉, 프로젝트는 게임 자체라고 볼 수 있다.

프로젝트
= 게임 전체를 담고 있는 실행 가능한 단위

3. 모듈의 의미

모듈(Module)은 Unreal Engine에서 C++ 코드가 컴파일되는 단위다.

쉽게 말하면 모듈은 Unreal 프로젝트 안에서 C++ 코드가 묶이는 최소 단위다.

예를 들어 프로젝트의 Source 폴더 안에 하나의 모듈이 있을 수 있다.

Source
└─ MyGame
   ├─ MyGame.Build.cs
   ├─ Public
   └─ Private

여기서 MyGame이 하나의 모듈이다.

MyGame.Build.cs는 이 모듈이 어떤 Unreal 기능을 사용할지, 어떤 다른 모듈에 의존할지를 정하는 빌드 설정 파일이다.

모듈은 레고 블록처럼 생각할 수 있다.

모듈
= Unreal Engine에서 C++ 기능을 조립하는 코드 블록

4. 플러그인의 의미

플러그인(Plugin)은 프로젝트에 추가할 수 있는 독립적인 기능 패키지다.

플러그인은 하나 이상의 모듈을 포함할 수 있고, 필요하다면 콘텐츠도 포함할 수 있다.

예를 들어 다음과 같은 기능들을 플러그인으로 만들 수 있다.

인벤토리 시스템
대화 시스템
퀘스트 시스템
미니맵 시스템
아이템 데이터 관리 시스템
공통 UI 시스템
온라인 로그인 기능
에디터 편의 기능

이런 기능들은 특정 프로젝트에만 박아두는 것보다 플러그인으로 분리하면 다른 프로젝트에서도 재사용하기 쉽다.

즉 플러그인은 다음처럼 이해할 수 있다.

플러그인
= 프로젝트에 붙였다 뗄 수 있는 재사용 가능한 기능 패키지

5. 플러그인은 혼자 실행되지 않는다

프로젝트와 플러그인의 중요한 차이는 실행 가능 여부다.

프로젝트는 독립적으로 실행할 수 있다.

하지만 플러그인은 혼자 실행될 수 없다.

프로젝트
→ 독자적으로 빌드하고 실행 가능

플러그인
→ 혼자 실행 불가능
→ 프로젝트나 엔진에 포함되어야 동작

비유하면 다음과 같다.

프로젝트
= 자동차 전체

플러그인
= 내비게이션, 블랙박스, 오디오 장치

모듈
= 그 장치 안의 부품 또는 회로

내비게이션은 자동차에 붙으면 기능을 하지만, 내비게이션 혼자 도로를 달릴 수는 없다.

플러그인도 마찬가지로 프로젝트에 포함되어야 동작한다.

6. 플러그인의 기본 구조

플러그인은 보통 Plugins 폴더 안에 들어간다.

예를 들어 MyPlugin이라는 플러그인이 있다면 구조는 대략 다음과 같다.

Plugins
└─ MyPlugin
   ├─ MyPlugin.uplugin
   ├─ Source
   │  └─ MyPlugin
   │     ├─ MyPlugin.Build.cs
   │     ├─ Public
   │     └─ Private
   └─ Content

각 폴더와 파일의 의미는 다음과 같다.

MyPlugin.uplugin
→ 플러그인의 설명서 역할

Source
→ 플러그인 C++ 코드가 들어가는 폴더

MyPlugin.Build.cs
→ 플러그인 모듈의 빌드 설정 파일

Public
→ 외부에서 include할 수 있는 헤더 파일

Private
→ 내부 구현 cpp 파일

Content
→ 플러그인에서 사용하는 에셋

이 구조를 보면 플러그인은 단순한 코드 묶음이 아니라, C++ 코드와 콘텐츠, 설정을 함께 가질 수 있는 독립적인 기능 단위라는 것을 알 수 있다.

7. .uplugin 파일의 역할

플러그인에는 .uplugin 파일이 있다.

예를 들어 다음과 같은 파일이다.

MyInventoryPlugin.uplugin

이 파일은 Unreal Engine에게 이 플러그인이 어떤 플러그인인지 알려주는 설명서 역할을 한다.

.uplugin 파일에는 보통 다음 정보가 들어간다.

플러그인 이름
버전
설명
제작자
포함된 모듈
Runtime용인지 Editor용인지
기본 활성화 여부

예를 들어 개념적으로 보면 다음과 같은 구조를 가진다.

{
  "FileVersion": 3,
  "VersionName": "1.0",
  "FriendlyName": "My Inventory Plugin",
  "Description": "Inventory system plugin",
  "Modules": [
    {
      "Name": "MyInventory",
      "Type": "Runtime"
    }
  ]
}

여기서 중요한 부분은 Modules이다.

Modules
→ 이 플러그인 안에 어떤 모듈이 들어 있는지 알려준다.

즉 .uplugin 파일은 플러그인을 Unreal Engine에 등록하고 설명하는 핵심 파일이다.

8. 플러그인은 하나 이상의 모듈을 가질 수 있다

플러그인은 하나의 모듈만 가질 수도 있고, 여러 개의 모듈을 가질 수도 있다.

예를 들어 인벤토리 플러그인을 만든다면 다음처럼 나눌 수 있다.

InventoryPlugin
├─ InventoryRuntime Module
├─ InventoryEditor Module
└─ Content

InventoryRuntime은 게임 실행 중 필요한 기능을 담당하고, InventoryEditor는 에디터에서만 필요한 도구를 담당할 수 있다.

즉 플러그인은 단순히 하나의 코드 덩어리가 아니라, 여러 모듈을 묶어서 하나의 기능 패키지로 관리할 수 있다.

플러그인
→ 더 큰 기능 패키지

모듈
→ 플러그인 안에서 실제 C++ 코드가 컴파일되는 단위

9. Runtime 모듈과 Editor 모듈

플러그인 안의 모듈은 사용되는 상황에 따라 Runtime과 Editor로 나눌 수 있다.

Runtime 모듈
→ 게임 실행 중에도 필요한 기능

Editor 모듈
→ Unreal Editor에서만 필요한 기능

예를 들어 인벤토리 시스템은 실제 게임 중에도 필요하다.

아이템 획득
아이템 사용
인벤토리 UI 표시
장비 장착

이런 기능은 Runtime 모듈에 들어가는 것이 자연스럽다.

반대로 에디터에서 버튼을 추가하거나 자동 데이터 생성 도구를 만드는 기능은 Editor 모듈에 들어간다.

에디터 전용 툴
자동 데이터 생성 버튼
레벨 배치 도구
커스텀 에디터 창
디버그용 에디터 기능

이런 기능은 게임 실행 파일에는 필요 없고, 에디터에서만 필요하다.

따라서 Runtime 모듈과 Editor 모듈을 나누면 불필요한 코드가 게임 빌드에 포함되는 것을 줄일 수 있다.

10. 플러그인은 콘텐츠도 포함할 수 있다

플러그인은 C++ 코드만 담는 것이 아니다.

필요하다면 Content 폴더를 가지고 블루프린트, 머티리얼, 텍스처, 데이터 에셋 등을 포함할 수 있다.

예를 들어 인벤토리 플러그인은 다음과 같은 콘텐츠를 가질 수 있다.

Plugins
└─ InventoryPlugin
   ├─ Source
   └─ Content
      ├─ BP_InventoryWidget
      ├─ DA_ItemData
      ├─ M_ItemIcon
      └─ T_ItemIcon_Sword

이렇게 하면 인벤토리 기능에 필요한 코드와 UI 블루프린트, 아이템 데이터, 아이콘을 플러그인 안에 함께 넣을 수 있다.

즉 플러그인은 코드 플러그인일 수도 있고, 콘텐츠를 포함한 플러그인일 수도 있다.

11. 플러그인은 켜고 끌 수 있다

플러그인의 큰 특징 중 하나는 프로젝트 설정에서 활성화하거나 비활성화할 수 있다는 점이다.

Unreal Editor에서는 보통 다음 경로에서 플러그인을 관리할 수 있다.

Edit
→ Plugins
→ 원하는 플러그인 Enable / Disable

즉 프로젝트에 직접 기능을 박아 넣는 것보다 더 유연하다.

필요하면 켠다.
필요 없으면 끈다.
다른 프로젝트로 옮긴다.
기능 단위로 관리한다.

이 점 때문에 플러그인은 프로젝트 구조를 유연하게 만드는 데 도움이 된다.

12. 플러그인은 재사용성이 좋다

플러그인을 쓰는 가장 큰 이유 중 하나는 재사용성이다.

예를 들어 RPG 프로젝트에서 퀘스트 시스템을 만들었다고 해보자.

이 기능을 프로젝트의 Source 폴더 안에만 만들면 다른 프로젝트에서 다시 쓰기 번거롭다.

ProjectA/Source 안에 QuestSystem 작성
    ↓
ProjectB에서 쓰려면 코드 복사 필요
    ↓
경로 수정 필요
    ↓
의존성 꼬일 수 있음

하지만 플러그인으로 만들면 더 깔끔하게 재사용할 수 있다.

Plugins/QuestPlugin
    ↓
다른 프로젝트의 Plugins 폴더에 복사
    ↓
플러그인 활성화
    ↓
사용

그래서 여러 프로젝트에서 반복해서 쓸 수 있는 기능은 플러그인으로 분리하는 것이 좋다.

13. 플러그인은 의존성을 가질 수 있다

플러그인은 독립적인 기능 단위이지만, 아무것에도 의존하지 않는다는 뜻은 아니다.

필요한 Unreal 모듈이나 다른 플러그인에 의존할 수 있다.

예를 들어 인벤토리 플러그인에서 UI를 사용한다면 UMG 모듈이 필요할 수 있다.

이 경우 Build.cs에 의존성을 추가한다.

PublicDependencyModuleNames.AddRange(new string[]
{
    "Core",
    "CoreUObject",
    "Engine",
    "UMG"
});

이 코드는 다음과 같은 의미다.

이 모듈은 Core, CoreUObject, Engine, UMG 기능을 사용한다.
따라서 빌드할 때 이 모듈들을 참조해야 한다.

즉 플러그인은 기능 단위로 분리되어 있지만, 필요한 기능을 사용하기 위해 다른 모듈과 연결될 수 있다.

14. 플러그인과 프로젝트 코드의 차이

프로젝트의 Source 폴더에 모든 기능을 넣을 수도 있다.

예를 들어 다음과 같은 구조가 가능하다.

Source
└─ MyGame
   ├─ Inventory
   ├─ Quest
   ├─ Dialogue
   ├─ Combat
   ├─ UI
   └─ Save

이 구조는 작은 프로젝트에서는 괜찮을 수 있다.

하지만 프로젝트가 커지면 기능들이 서로 섞여 관리가 어려워질 수 있다.

반대로 플러그인으로 나누면 다음처럼 기능 단위가 명확해진다.

Plugins
├─ InventoryPlugin
├─ QuestPlugin
├─ DialoguePlugin
├─ SaveSystemPlugin
└─ CommonUIPlugin

이렇게 하면 각 기능의 책임이 분리된다.

인벤토리 관련 코드
→ InventoryPlugin 안에 위치

퀘스트 관련 코드
→ QuestPlugin 안에 위치

대화 관련 코드
→ DialoguePlugin 안에 위치

따라서 대규모 프로젝트일수록 플러그인 구조가 유용하다.

15. 프로젝트와 플러그인의 차이

프로젝트와 플러그인은 모두 Unreal Engine 안에서 기능과 파일을 관리하는 단위지만, 역할이 다르다.

 

구분                                         프로젝트                                            플러그인

실행 가능 여부 독립적으로 실행 가능 혼자 실행 불가
역할 게임 전체를 구성 특정 기능을 추가
대표 파일 .uproject .uplugin
Source 폴더 게임 코드 플러그인 코드
Content 폴더 게임 에셋 플러그인 전용 에셋
재사용성 상대적으로 낮음 높음
활성화/비활성화 프로젝트 자체 Plugins 메뉴에서 가능
예시 RPG 게임 프로젝트 인벤토리 플러그인, 퀘스트 플러그인

정리하면 프로젝트는 게임 전체이고, 플러그인은 그 게임에 추가되는 기능 부품이다.

16. 플러그인과 모듈의 차이

플러그인과 모듈도 헷갈리기 쉽다.

핵심은 다음과 같다.

모듈
→ C++ 코드가 컴파일되는 단위

플러그인
→ 모듈과 콘텐츠, 설정을 묶은 기능 패키지

즉 플러그인이 더 큰 개념이고, 플러그인 안에 모듈이 들어갈 수 있다.

Plugin
└─ Module

예를 들어 다음처럼 볼 수 있다.

InventoryPlugin
├─ InventoryRuntime Module
├─ InventoryEditor Module
└─ Content

이 구조에서 InventoryPlugin은 플러그인이고, InventoryRuntime, InventoryEditor는 각각 모듈이다.

17. 플러그인을 쓰면 좋은 상황

플러그인은 다음과 같은 경우에 사용하기 좋다.

다른 프로젝트에서도 재사용하고 싶은 기능
기능 단위로 분리하고 싶은 시스템
팀 단위로 독립 개발하고 싶은 기능
에디터 도구를 만들고 싶은 경우
프로젝트 코드와 분리하고 싶은 공통 기능
켜고 끌 수 있는 기능으로 만들고 싶은 경우

예를 들어 다음 기능들은 플러그인 후보가 될 수 있다.

공통 인벤토리 시스템
공통 대화 시스템
공통 세이브 시스템
공통 네트워크 유틸
공통 UI 프레임워크
자동 맵 배치 에디터 툴
데이터 테이블 자동 생성 도구

이런 기능들은 특정 프로젝트에만 묶어두기보다 플러그인으로 만들면 다른 프로젝트에서도 활용하기 쉽다.

18. 플러그인으로 만들지 않아도 되는 상황

반대로 모든 기능을 무조건 플러그인으로 만들 필요는 없다.

특정 게임에만 강하게 묶인 기능은 프로젝트 코드에 두는 것이 더 자연스러울 수 있다.

예를 들면 다음과 같다.

이 게임의 주인공 전용 스킬
특정 보스의 패턴
특정 맵의 이벤트
이 프로젝트에서만 쓰는 임시 테스트 코드
재사용 가능성이 거의 없는 기능

이런 기능은 굳이 플러그인으로 분리하지 않아도 된다.

기준은 다음과 같이 잡으면 된다.

다른 프로젝트에서도 쓸 수 있다.
기능 단위로 독립성이 높다.
켜고 끌 수 있으면 좋다.
→ 플러그인 후보

이 프로젝트에만 강하게 종속된다.
재사용 가능성이 낮다.
→ 프로젝트 코드에 두어도 됨

19. 플러그인을 쓰는 이유

플러그인을 쓰는 이유는 단순히 폴더를 나누기 위해서가 아니다.

가장 중요한 목적은 기능을 독립적으로 관리하고 재사용성을 높이기 위해서다.

기능을 독립된 단위로 분리한다.
다른 프로젝트로 옮기기 쉽게 만든다.
필요한 기능만 활성화할 수 있다.
팀 단위로 개발 영역을 나눌 수 있다.
프로젝트 구조를 깔끔하게 유지할 수 있다.

즉 플러그인은 대규모 프로젝트에서 기능을 체계적으로 설계하고 관리하기 위한 구조다.

20. 이번 과제에서 플러그인을 배우는 이유

이번 과제에서 플러그인과 모듈을 배우는 이유는 Unreal 프로젝트 구조를 더 깊게 이해하기 위해서다.

처음에는 Content 폴더에 에셋을 넣고, Source 폴더에 C++ 코드를 넣는 정도만 알아도 프로젝트를 만들 수 있다.

하지만 프로젝트가 커지면 모든 코드를 한 곳에 두는 방식은 관리가 어려워진다.

그래서 Unreal Engine은 모듈과 플러그인 구조를 통해 기능을 더 체계적으로 분리할 수 있게 한다.

작은 프로젝트
→ Source 안에 기능을 직접 작성해도 충분할 수 있음

큰 프로젝트
→ 모듈과 플러그인 단위로 기능을 나누는 것이 유리함

따라서 이번 과제는 단순히 플러그인을 만드는 법만 배우는 것이 아니라, Unreal 프로젝트를 기능 단위로 설계하고 재사용 가능한 구조로 만드는 방법을 배우는 과정이라고 볼 수 있다.

오늘 헷갈렸던 점

오늘 헷갈렸던 부분은 플러그인과 모듈의 차이였다.

처음에는 플러그인과 모듈이 둘 다 기능을 나누는 단위처럼 보여서 비슷하게 느껴졌다.

하지만 모듈은 C++ 코드가 컴파일되는 단위이고, 플러그인은 그런 모듈과 콘텐츠, 설정을 묶은 더 큰 기능 패키지였다.

모듈
→ C++ 코드가 컴파일되는 단위

플러그인
→ 모듈, 콘텐츠, 설정을 묶은 기능 패키지

또 플러그인은 프로젝트처럼 혼자 실행되는 것이 아니라, 프로젝트나 엔진에 포함되어야 동작한다는 점도 중요했다.

프로젝트
→ 게임 전체이므로 실행 가능

플러그인
→ 기능 부품이므로 혼자 실행 불가능

마지막으로 모든 기능을 무조건 플러그인으로 만들 필요는 없다는 점도 알게 되었다.

재사용 가능성이 높고 독립적인 기능은 플러그인으로 만들기 좋지만, 특정 게임에만 강하게 묶인 기능은 프로젝트 코드에 두어도 된다.

오늘의 핵심 정리

  1. Unreal 프로젝트는 Config, Content, Source, Plugins, .uproject 파일로 구성된다.
  2. Config는 프로젝트 설정 파일이 들어가는 폴더다.
  3. Content는 블루프린트, 머티리얼, 텍스처 같은 에셋이 들어가는 폴더다.
  4. Source는 C++ 소스코드가 들어가는 폴더다.
  5. Plugins는 프로젝트에 추가 기능을 넣는 플러그인들이 들어가는 폴더다.
  6. .uproject는 Unreal 프로젝트 자체를 나타내는 파일이다.
  7. 프로젝트는 게임 전체를 구성하는 실행 가능한 단위다.
  8. 모듈은 Unreal Engine에서 C++ 코드가 컴파일되는 단위다.
  9. 플러그인은 프로젝트에 붙였다 뗄 수 있는 재사용 가능한 기능 패키지다.
  10. 플러그인은 혼자 실행될 수 없고 프로젝트나 엔진에 포함되어야 동작한다.
  11. 플러그인은 하나 이상의 모듈을 포함할 수 있다.
  12. 플러그인은 C++ 코드뿐 아니라 콘텐츠도 포함할 수 있다.
  13. .uplugin 파일은 플러그인의 이름, 버전, 설명, 모듈 정보 등을 관리하는 설명서 역할을 한다.
  14. Runtime 모듈은 게임 실행 중 필요한 기능을 담당한다.
  15. Editor 모듈은 Unreal Editor에서만 필요한 기능을 담당한다.
  16. 플러그인은 Unreal Editor의 Plugins 메뉴에서 활성화하거나 비활성화할 수 있다.
  17. 플러그인은 다른 프로젝트로 옮겨 재사용하기 쉽다.
  18. 플러그인은 필요한 Unreal 모듈이나 다른 플러그인에 의존할 수 있다.
  19. 플러그인의 의존성은 보통 Build.cs에서 관리한다.
  20. 프로젝트 코드는 게임 전체에 직접 포함되는 코드이고, 플러그인 코드는 특정 기능 단위로 분리된 코드다.
  21. 플러그인은 대규모 프로젝트에서 기능별 구조를 깔끔하게 관리하는 데 유용하다.
  22. 프로젝트는 .uproject 파일을 가지고, 플러그인은 .uplugin 파일을 가진다.
  23. 모듈은 플러그인보다 작은 개념이고, 플러그인 안에 모듈이 들어갈 수 있다.
  24. 다른 프로젝트에서도 사용할 수 있는 기능은 플러그인으로 만들기 좋다.
  25. 특정 게임에만 강하게 종속된 기능은 프로젝트 코드에 두어도 된다.
  26. 플러그인은 기능 단위의 독립성, 재사용성, 확장성을 높이기 위해 사용한다.
  27. 이번 과제는 Unreal 프로젝트 구조를 모듈과 플러그인 단위로 이해하기 위한 과정이다.

정리하면 플러그인은 Unreal 프로젝트에 기능을 추가하는 독립적인 확장 단위다.

프로젝트는 게임 전체를 실행하는 단위이고, 모듈은 C++ 코드가 컴파일되는 단위이며, 플러그인은 이런 모듈과 콘텐츠, 설정을 묶어서 재사용 가능한 기능 패키지로 만든 것이다.

따라서 플러그인을 이해한다는 것은 단순히 폴더 구조를 아는 것이 아니라, Unreal Engine에서 기능을 어떻게 분리하고, 재사용하고, 확장 가능한 구조로 설계하는지 이해하는 것이다.

'unreal 8기' 카테고리의 다른 글

2026-6-23 TIL  (0) 2026.06.23
2026-6-22 TIL  (0) 2026.06.22
2026-6-18 TIL  (0) 2026.06.19
2026-6-17 TIL  (0) 2026.06.17
2026-6-16 TIL  (0) 2026.06.16