Post

2026-04-06 TIL (30일차)

2026-04-06 TIL (30일차)

C++

프로그래머스 (콜라츠 추측)

원인 분석

  • 홀수일 때의 연산 (temp * 3 + 1) 콜라츠 추측의 규칙 중 홀수일 경우 3을 곱하고 1을 더합니다. 시작 숫자가 800만에 가까운 수이거나, 반복 과정에서 값이 계속 커지는 패턴을 만나면, int가 담을 수 있는 최대치를 넘겨버립니다.
  • 오버플로우(Overflow) 발생
  • 무한 루프의 늪 값이 음수로 변해버렸기 때문에 temp == 1이라는 탈출 조건을 만족할 수 없게 되고, 오답을 내게 된 것입니다.


해결 방법: long long

숫자가 아무리 커지더라도 안전하게 담을 수 있도록, int보다 큰 자료형인 long long을 사용하는 것입니다.

1
2
3
4
5
// 수정 전 
// int temp = num; 

// 수정 후
long long temp = num;

Unreal

C++ 프로젝트 폴더 구조


핵심 폴더

  • Config: 프로젝트의 기본 환경 설정, 단축키(Input), 그래픽 세팅 값(.ini)들이 저장되는 폴더입니다.
  • Content: 블루프린트, 3D 모델링, 텍스처, 사운드, 맵(레벨) 등 게임의 모든 에셋(Asset)이 들어가는 가장 중요한 폴더입니다. (언리얼 에디터의 Content Browser와 연결되어 있음)
  • Source: 직접 작성한 C++ 소스 코드(.cpp, .h)가 저장되는 폴더입니다.
  • [프로젝트명].uproject: 언리얼 프로젝트 실행 파일입니다. 더블 클릭하면 언리얼 에디터가 켜집니다.


임시 및 자동 생성 폴더

  • Binaries: C++ 코드를 컴파일해서 만들어진 실행 파일(.exe, .dll)이 들어있습니다.
  • Intermediate: 컴파일 과정에서 생성되는 중간(임시) 파일들이 모이는 곳입니다. (엔진에 알 수 없는 에러가 꼬였을 때 이 폴더를 지우고 다시 빌드하면 해결되는 경우가 많음.)
  • DerivedDataCache: 텍스처나 셰이더 등을 매번 계산하지 않고 빠르게 로딩하기 위해 엔진이 미리 변환해둔 캐시 파일입니다. 용량을 가장 많이 잡아먹습니다.
  • Saved: 에디터 자동 저장 파일, 백업, 크래시 로그, 로컬 세이브 데이터 등이 저장됩니다. (에러 로그가 저장되는 파일)
  • .vs: 비주얼 스튜디오의 로컬 설정 및 임시 캐시를 보관하는 숨김 폴더입니다.


주요 설정 및 실행 파일

  • [프로젝트명].sln: 비주얼 스튜디오 솔루션 파일입니다. C++ 코드를 작성할 때 이 파일을 엽니다.
  • .vsconfig: 비주얼 스튜디오에서 이 프로젝트를 열기 위해 필요한 컴포넌트 설치 정보가 담긴 파일입니다.

솔루션 구조

사진 자료


Engine (엔진 코어)

  • 역할: 언리얼 엔진 자체의 소스 코드와 리소스가 담긴 곳입니다.
  • 특징: 에디터 작동 및 엔진의 핵심 코어 관련 코드가 포함되어 있습니다. 엔진 자체를 뜯어고치는 고도화된 작업이 아니라면, 일반적인 개발 단계에서는 거의 수정하거나 열어볼 일이 없습니다.

Games

  • 역할: 직접 만든 프로젝트 코드가 모여 있는 가장 핵심적인 폴더입니다.
  • 특징: 내부를 열어보면 윈도우 탐색기에서 봤던 Source, Config 폴더와 .uproject 파일 등이 들어있습니다. 앞으로 C++로 작성하는 모든 게임 로직과 클래스는 무조건 이 폴더 안에서 다루게 됩니다.

Programs (유틸리티)

  • 역할: 언리얼 엔진 동작과 빌드에 필요한 유틸리티 프로그램(UnrealHeaderTool 등)이나 독립적인 서버 모듈이 담겨 있습니다.
  • 특징: 일반적인 게임 클라이언트 개발 단계에서는 거의 볼 일이 없습니다.

Rules (빌드 규칙)

  • 역할: 엔진과 게임 등 각 모듈의 빌드 규칙(Build Rules)을 정의해 놓은 파일(Target.cs 등)들이 모여 있습니다.
  • 특징: 다른 모듈과의 의존성 설정, 플러그인 활성화 여부, 빌드 타겟 등을 제어할 때 사용되는 일종의 설계도 모음집입니다.

Visualizers (디버깅 보조)

  • 역할: Visual Studio 디버거를 사용할 때 도움을 주는 시각화 설정 파일(.natvis)이 들어 있습니다.
  • 특징: 언리얼 엔진 특유의 복잡한 자료구조(FVector, FString, TArray 등)를 디버깅 창에서 사람이 읽고 이해하기 쉽게 변환해 주는 폴더입니다.


언리얼 엔진 C++ 빌드 파이프라인

“C++ 파일 수정 ➡️ 빌드 (컴파일 + 링크) ➡️ DLL 파일 ➡️ 언리얼 에디터”


1. C++ 파일 수정 (코드 작성)

  • 과정: Visual Studio 등에서 프로그래머가 게임 로직(캐릭터 이동, 스킬 구현 등)이 담긴 .cpp.h 파일을 수정하고 저장합니다.
  • 특징: 이 코드는 사람이 읽을 수 있는 언어(Human-readable)이므로 컴퓨터는 아직 이해하지 못합니다.


2. 빌드 (컴파일 + 링크)

  • 과정: 비주얼 스튜디오에서 빌드를 실행하면, 언리얼 엔진의 전용 빌드 도구인 UBT(Unreal Build Tool)가 작동합니다.
    • 컴파일(Compile): 우리가 짠 C++ 코드를 컴퓨터가 알아들을 수 있는 기계어(01)로 번역하여 목적 파일(.obj)들을 만듭니다.
    • 링크(Link): 번역된 여러 개의 조각 파일들과 언리얼 엔진의 기본 기능(라이브러리)들을 하나의 완성된 결과물로 연결하고 묶어줍니다.


3. DLL 파일 생성 (중요한 차이점)

  • 과정: 링크 과정이 끝나면 단독 실행 파일인 .exe가 아니라, 동적 링크 라이브러리인 .dll (Dynamic Link Library) 파일이 만들어집니다.
  • .exe가 아닌 이유: 우리가 작업하는 ‘언리얼 에디터(UnrealEditor.exe)’ 자체가 실행 파일이기 때문입니다. 우리가 작성한 게임 코드는 에디터라는 프로그램 안에 부품처럼 끼워져서 돌아가는 ‘모듈(Module)’ 형태로 만들어져야 하므로 .dll로 추출됩니다.


4. 언리얼 에디터 반영 (라이브 코딩 / 핫 리로드)

  • 과정: 생성된 새로운 따끈따끈한 .dll 파일을 언리얼 에디터가 실시간으로 받아들여서 메모리에 올립니다.
  • 결과: 엔진을 껐다가 다시 켤 필요 없이, 방금 비주얼 스튜디오에서 수정한 코드가 에디터 상의 캐릭터나 시스템에 즉각적으로 반영됩니다. 이 강력한 기능을 라이브 코딩(Live Coding) 또는 핫 리로드(Hot Reload)라고 부릅니다.


요약

“우리가 작성하는 C++ 게임 프로젝트는 그 자체로 독립적인 프로그램이 아니라, 언리얼 에디터라는 거대한 공장에 납품하는 부품(.dll)을 만드는 과정이다. 그래서 코드를 수정하고 빌드하면, 에디터가 새 부품을 실시간으로 갈아 끼워주는 것이다!”

빌드 구성 (Configuration) 종류

사진 자료


빌드 구성명실행 환경특징 및 주요 용도
DebugGameStandalone
(독립 실행)
게임 로직만 디버그 정보를 포함하고, 엔진 자체는 최적화된 상태로 빌드합니다.
언리얼 에디터 없이 독립된 실행 파일 환경에서 내 게임 로직을 효과적으로 디버깅할 때 사용합니다. (엔진 코드는 디버깅 제한적)
DebugGame EditorEditor
(에디터용)
에디터 환경에서 게임 로직을 디버깅하기 가장 편한 설정입니다.
에디터 플레이(PIE) 중에 C++ 로직을 세밀하게 추적하거나 중단점(Breakpoint)을 걸고 테스트할 때 사용합니다.
DevelopmentStandalone
(독립 실행)
디버그 정보를 최소화해 실행 속도를 높인 개발용 빌드입니다.
에디터 없이 독립 실행 파일 환경에서 전반적인 테스트 및 개발을 진행하는 단계에서 주로 쓰입니다.
Development Editor
(⭐ 기본 모드)
Editor
(에디터용)
에디터에서 개발·테스트를 원활히 할 수 있는 기본 빌드 모드입니다.
언리얼의 핵심 기능인 라이브 코딩(Live Coding)과의 궁합이 가장 좋으며, 초·중급자를 포함해 평상시 가장 많이 사용하는 세팅입니다.
ShippingStandalone
(독립 실행)
최종 사용자에게 배포(Release)할 때 사용하는 릴리스 빌드입니다.
모든 디버그 정보를 완전히 제거하여, 용량을 줄이고 성능 최적화가 극대화됩니다.


전체 솔루션 빌드 vs. 부분 빌드


전체 솔루션 빌드

엔진, 유틸리티, 게임 모듈 등 솔루션 내의 모든 프로젝트를 통째로 묶어서 빌드하는 방식입니다.

  • 실행 방법
    • 비주얼 스튜디오 상단 메뉴: 빌드(Build) ➡️ 솔루션 빌드(Build Solution)
    • 단축키: Ctrl + Shift + B
  • 사용 시기
    • 프로젝트를 생성하고 가장 처음 빌드할 때
    • 언리얼 엔진 자체의 소스 코드를 수정했을 때
    • 빌드가 꼬여서 엔진 전체 파일을 갱신해야 할 때
  • 특징: 규모가 방대한 언리얼 엔진의 특성상 모든 모듈을 검사하므로 빌드 시간이 오래 걸릴 수 있습니다.


부분 빌드

무거운 엔진이나 다른 모듈은 무시하고, 우리가 작성한 게임 프로젝트 코드(내 게임 로직)만 타겟으로 지정해 빠르게 빌드하는 방식입니다.

  • 실행 방법
    • 비주얼 스튜디오 우측 솔루션 탐색기(Solution Explorer) 창에서
    • Games 폴더 안에 있는 내 프로젝트 이름(루트 폴더)을 우클릭 ➡️ 빌드(Build) 클릭
  • 사용 시기
    • 일반적인 개발 상황에서 C++ 게임 로직(캐릭터 이동, 스킬 등)만 수정했을 때
  • 특징: 내가 수정한 게임 코드만 뽑아서 컴파일하므로 전체 솔루션 빌드에 비해 속도가 빠르고 효율적입니다.

언리얼 엔진으로 개발하다 보면 “어제까진 분명히 잘 됐는데 갑자기 코드가 안 먹히네?” 하는 이른바 ‘빌드가 꼬인’ 상황을 무조건 겪게 됩니다. 이때 꺼낼 수 있는 궁극의 해결책인 ‘클린 빌드(Clean Build)’ 과정을 블로그에 올리기 좋게 마크다운(.md) 코드로 깔끔하게 정리해 드립니다!

말씀하신 Gener뭐시기는 Generate Visual Studio project files를 의미하는데, 이 부분도 자연스럽게 연결해 두었습니다.

Markdown

언리얼 C++ 빌드가 꼬였을 때

언리얼 엔진에서 C++ 코드를 수정했는데 에디터에 적용되지 않거나, 알 수 없는 컴파일 에러가 쏟아질 때 복구하는 방법입니다.


1단계: 임시 및 캐시 폴더 삭제

프로젝트 폴더로 이동하여, 엔진이 빌드 과정에서 만들어낸 임시 찌꺼기 파일들을 직접 날려줍니다.

  • 삭제해야 할 폴더 목록:
    • Binaries
    • Intermediate
    • DerivedDataCache
    • Saved


2단계: Visual Studio 솔루션 파일 재생성

  • 프로젝트의 .uproject 파일을 우클릭합니다.
  • 메뉴에서 Generate Visual Studio project files를 클릭하여 .sln 파일을 새롭게 갱신합니다.


3단계: Visual Studio 클린 빌드

폴더를 지우고 Generate를 했는데도 문제가 여전하다면, 비주얼 스튜디오 내부에서 확실하게 청소를 해줘야 합니다.

  1. 방금 새로 생성된 .sln 솔루션 파일을 Visual Studio로 엽니다.
  2. 상단 메뉴에서 빌드(Build) ➡️ 솔루션 정리(Clean Solution)를 클릭하여 혹시라도 남아있을 기존 빌드 산출물을 완벽하게 정리합니다.
  3. 정리가 완료되면, 다시 빌드(Build) ➡️ 솔루션 빌드(Build Solution)를 클릭하여 처음부터 깨끗하게 재빌드를 수행합니다.
  4. 에러 원인 파악: 만약 빌드가 실패한다면 하단의 출력(Output) 창오류 목록(Error List)을 열어 실제 코드의 어느 부분에서 문제가 터졌는지 확인하고 수정합니다.
This post is licensed under CC BY 4.0 by the author.