C++ 도메인별 요구 역량 차이 완벽 가이드 | 네카라쿠배·금융·게임·임베디드
들어가며: 같은 C++, 완전히 다른 세계
C++을 배우고 나면 “어디로 가야 하지?”라는 고민이 생긴다. 게임 회사, 금융권, 임베디드, 서버 개발, 시스템 소프트웨어—같은 언어를 쓰지만 요구하는 역량, 일하는 방식, 연봉 수준이 완전히 다르다.
이 글은 5대 도메인(게임·금융·임베디드·서버·시스템)의 실제 업무, 기술 스택, 면접 포인트, 커리어 경로를 정리한다. 각 분야에서 일하는 개발자들의 경험을 바탕으로 “이 도메인은 이런 사람에게 맞다”는 가이드를 제공한다.
왜 도메인별로 나눠야 하나?
// 같은 C++이지만...
// 게임: 60fps 유지가 생명
void GameEngine::Update(float deltaTime) {
// 16.67ms 안에 모든 것을 처리
PhysicsWorld::Step(deltaTime);
RenderSystem::DrawFrame();
}
// 금융 HFT: 마이크로초가 돈
void OrderBook::ProcessOrder(const Order& order) {
auto start = rdtsc(); // CPU cycle 측정
// 1마이크로초 안에 처리해야 경쟁력 유지
if (rdtsc() - start > 1000) { // 1us 초과 시 경고
Logger::Warn("Order processing too slow");
}
}
// 임베디드: 256KB RAM에서 동작
constexpr size_t BUFFER_SIZE = 128; // 메모리 제약
static uint8_t buffer[BUFFER_SIZE]; // 동적 할당 금지
동일한 언어, 완전히 다른 제약 조건. 각 도메인은 C++의 다른 측면을 극한까지 활용합니다.
1. 도메인 선택 가이드
나에게 맞는 도메인 찾기
flowchart TD
A[C++ 개발자로 어디로?] --> B{실시간 그래픽·물리
관심 있나?}
B -->|Yes| C[게임 개발]
B -->|No| D{극한 성능 최적화
좋아하나?}
D -->|Yes| E[금융 HFT]
D -->|No| F{하드웨어 제어
관심 있나?}
F -->|Yes| G[임베디드]
F -->|No| H{대규모 트래픽 처리
관심 있나?}
H -->|Yes| I[서버 백엔드]
H -->|No| J[시스템 소프트웨어]
도메인별 핵심 특징 (한눈에 보기)
| 도메인 | 핵심 제약 | 주요 기술 | 연봉 수준 | 워라밸 |
|---|---|---|---|---|
| 게임 | 16ms (60fps) | Unreal, Unity, 그래픽 API | 중상 | ⭐⭐ |
| 금융 HFT | 1μs (마이크로초) | Lock-free, FPGA, 네트워크 | 최상 | ⭐⭐⭐ |
| 임베디드 | 256KB RAM | RTOS, bare-metal, MISRA | 중 | ⭐⭐⭐ |
| 서버 | 10만 TPS | 비동기 I/O, 분산 시스템 | 상 | ⭐⭐⭐⭐ |
| 시스템 | OS/컴파일러 수준 | 커널, 드라이버, LLVM | 상 | ⭐⭐⭐ |
2. 게임 개발
핵심 요구사항
성능 목표: 60fps (16.67ms/frame) 또는 120fps (8.33ms/frame)
메모리 특징
- 메모리 풀 필수: 매 프레임 할당/해제 시 프레임 드랍
- 캐시 친화적 설계: SoA (Structure of Arrays)
- 레퍼런스 카운팅:
shared_ptr대신 커스텀 ref-counting
필수 기술 스택
// 1. 메모리 풀 (매 프레임 할당 금지)
class ObjectPool {
std::vector<GameObject*> pool_;
std::vector<bool> inUse_;
public:
GameObject* Allocate() {
for (size_t i = 0; i < pool_.size(); ++i) {
if (!inUse_[i]) {
inUse_[i] = true;
return pool_[i];
}
}
return nullptr; // 풀 고갈
}
};
// 2. SoA (Structure of Arrays) - 캐시 친화적
struct TransformSoA {
std::vector<glm::vec3> positions; // 연속 메모리
std::vector<glm::quat> rotations;
std::vector<glm::vec3> scales;
void UpdateAll() {
// SIMD 최적화 가능
for (size_t i = 0; i < positions.size(); ++i) {
positions[i] += velocities[i] * deltaTime;
}
}
};
// 3. 고정 시간 스텝 (Fixed Timestep)
void GameLoop() {
constexpr double FIXED_DT = 1.0 / 60.0; // 60fps
double accumulator = 0.0;
while (running_) {
double frameTime = Timer::Delta();
accumulator += frameTime;
// 물리는 고정 시간 스텝
while (accumulator >= FIXED_DT) {
PhysicsUpdate(FIXED_DT);
accumulator -= FIXED_DT;
}
// 렌더링은 가변 시간 스텝
Render(accumulator / FIXED_DT); // 보간
}
}
주요 회사 및 기술
국내
- 넷마블, 펄어비스, 넥슨: Unreal Engine (C++)
- 스마일게이트: 자체 엔진 + Unreal
- 크래프톤 (PUBG): Unreal Engine 4/5
해외
- Epic Games: Unreal Engine 개발
- Blizzard: 자체 엔진
- Riot Games: League of Legends 엔진
면접 포인트
- 메모리 관리: “메모리 풀을 직접 구현해 본 경험?”
- 멀티스레딩: “게임 로직과 렌더링 분리 경험?”
- 프로파일링: “프레임 드랍을 어떻게 디버깅했나요?”
- 그래픽 API: “OpenGL/DirectX/Vulkan 경험?”
커리어 경로
주니어 (0-2년): 게임플레이 프로그래머
↓
미들 (3-5년): 시스템 프로그래머, 엔진 프로그래머
↓
시니어 (6년+): 리드 프로그래머, 테크니컬 디렉터
게임 개발 장단점
장점
- 자신이 만든 게임을 직접 플레이 가능
- 최신 그래픽·물리 기술 경험
- 창의적 문제 해결
단점
- 크런치 모드 (출시 전 야근)
- 상대적으로 낮은 연봉 (금융 대비)
- 프로젝트 취소 리스크
3. 금융·HFT (High-Frequency Trading)
핵심 요구사항
성능 목표: 1마이크로초 이하 (1μs = 0.000001초)
특징
- 시스템 콜 최소화:
clock_gettime()대신 RDTSC - Lock-free 자료구조: Mutex 사용 시 지연 발생
- 네트워크 직접 제어: Kernel bypass (DPDK)
필수 기술 스택
// 1. RDTSC (Read Time-Stamp Counter)
inline uint64_t rdtsc() {
uint32_t lo, hi;
__asm__ volatile("rdtsc" : "=a"(lo), "=d"(hi));
return ((uint64_t)hi << 32) | lo;
}
// 2. Lock-free Queue
template<typename T>
class LockFreeQueue {
std::atomic<Node*> head_;
std::atomic<Node*> tail_;
public:
void enqueue(const T& data) {
Node* node = new Node{data};
Node* prev = tail_.exchange(node, std::memory_order_acq_rel);
prev->next.store(node, std::memory_order_release);
}
};
// 3. 메모리 정렬 (캐시 라인)
struct alignas(64) Order {
double price;
uint64_t quantity;
uint64_t timestamp;
char symbol[16];
};
// 4. Inline Assembly (극한 최적화)
inline void pause() {
__asm__ volatile("pause" ::: "memory");
}
// 5. TCP Kernel Bypass (DPDK)
void ProcessMarketData(dpdk::Packet* pkt) {
// 커널을 거치지 않고 직접 패킷 처리
auto* data = pkt->data<MarketData>();
OrderBook::Update(*data);
}
주요 회사 및 기술
국내
- 미래에셋, 한국투자증권: 트레이딩 시스템
- 업비트, 빗썸: 암호화폐 거래소 매칭 엔진
- 케이프투자증권: HFT
해외
- Jane Street, Two Sigma: OCaml도 사용하지만 C++ 핵심
- Citadel Securities: Ultra-low latency
- Jump Trading: FPGA + C++
면접 포인트
- 지연 최적화: “1ms를 1μs로 줄인 경험?”
- Lock-free: “CAS (Compare-And-Swap) 구현?”
- 네트워크: “TCP vs UDP 지연 차이?”
- 하드웨어: “CPU 캐시 라인 크기는?”
커리어 경로
주니어 (0-2년): 트레이딩 시스템 개발
↓
미들 (3-5년): 저지연 인프라 엔지니어
↓
시니어 (6년+): 퀀트 개발자, 아키텍트
금융 HFT 장단점
장점
- 최고 수준 연봉 (국내 1억+, 해외 $300K+)
- 극한 성능 최적화 경험
- 최신 하드웨어 (FPGA, 10Gbps NIC)
단점
- 높은 스트레스 (실수 시 금전적 손실)
- 24시간 온콜 가능성
- 금융 도메인 지식 필요
4. 임베디드·펌웨어
핵심 요구사항
메모리 제약: 256KB RAM, 1MB Flash (일반적)
특징
- 동적 할당 금지:
new/malloc사용 불가 - 예외 처리 금지:
-fno-exceptions - RTTI 금지:
-fno-rtti
필수 기술 스택
// 1. 정적 메모리 할당만 사용
constexpr size_t MAX_SENSORS = 16;
Sensor sensors[MAX_SENSORS]; // 스택 또는 .bss
// 2. volatile (하드웨어 레지스터)
volatile uint32_t* const GPIO_ODR =
reinterpret_cast<uint32_t*>(0x40020014);
void SetLED(bool on) {
if (on) {
*GPIO_ODR |= (1 << 5); // PA5 High
} else {
*GPIO_ODR &= ~(1 << 5); // PA5 Low
}
}
// 3. 인터럽트 서비스 루틴 (ISR)
extern "C" void TIM2_IRQHandler() {
if (TIM2->SR & TIM_SR_UIF) {
TIM2->SR &= ~TIM_SR_UIF; // 플래그 클리어
// 타이머 인터럽트 처리 (최소한의 작업만)
flag = true;
}
}
// 4. MISRA C++ 준수
// MISRA 규칙: 다중 상속 금지, goto 금지 등
class SafeClass final { // final로 다중 상속 방지
// ...
};
// 5. RTOS (FreeRTOS)
void TaskSensor(void* pvParameters) {
while (1) {
ReadSensor();
vTaskDelay(pdMS_TO_TICKS(100)); // 100ms 대기
}
}
주요 회사 및 기술
국내
- 삼성전자: 가전, 반도체 펌웨어
- LG전자: 가전, 자동차 (LG Magna)
- 현대모비스, 만도: 자동차 ADAS, ECU
해외
- Tesla: 자동차 펌웨어
- Apple: iOS 디바이스 펌웨어
- ARM: 임베디드 툴체인
면접 포인트
- 메모리 제약: “동적 할당 없이 어떻게 관리하나요?”
- 하드웨어 제어: “
volatile키워드 용도는?” - RTOS: “Task 스케줄링 원리는?”
- 디버깅: “JTAG 디버거 사용 경험?”
커리어 경로
주니어 (0-2년): 펌웨어 개발자
↓
미들 (3-5년): 시스템 펌웨어 엔지니어
↓
시니어 (6년+): 임베디드 아키텍트
임베디드 장단점
장점
- 하드웨어 제어의 즐거움
- 안정적인 커리어 (자동차, 가전)
- 워라밸 양호
단점
- 상대적으로 낮은 연봉
- 디버깅 어려움 (실제 하드웨어 필요)
- 최신 C++ 기능 사용 어려움
5. 서버·백엔드 (네카라쿠배)
핵심 요구사항
처리량: 10만 TPS (초당 트랜잭션)
특징
- 비동기 I/O:
epoll,io_uring - 수평 확장: 로드 밸런싱, 샤딩
- 관측성: 로깅, 메트릭, 트레이싱
필수 기술 스택
// 1. Boost.Asio 비동기 I/O
boost::asio::io_context io_context;
void AsyncRead(tcp::socket& socket) {
boost::asio::async_read(
socket, buffer,
[](boost::system::error_code ec, size_t bytes) {
if (!ec) {
ProcessRequest(buffer);
}
}
);
}
// 2. 연결 풀 (Connection Pool)
class ConnectionPool {
std::queue<Connection*> pool_;
std::mutex mtx_;
public:
Connection* Acquire() {
std::lock_guard lock(mtx_);
if (pool_.empty()) {
return CreateConnection();
}
auto* conn = pool_.front();
pool_.pop();
return conn;
}
};
// 3. 캐싱 (Redis 연동)
class CacheManager {
redis::client client_;
public:
std::optional<std::string> Get(const std::string& key) {
try {
return client_.get(key);
} catch (const redis::exception&) {
return std::nullopt;
}
}
};
// 4. 메트릭 수집 (Prometheus)
void RecordRequest(const std::string& endpoint, double latency) {
prometheus::Histogram& hist =
registry_.Get("http_request_duration_seconds");
hist.Observe(latency);
}
// 5. 구조화된 로깅
spdlog::info("Request processed: endpoint={} latency={}ms user_id={}",
endpoint, latency, user_id);
주요 회사 및 기술
네카라쿠배
- 네이버: 검색 엔진 (C++), AI 추론 서버
- 카카오: 메시징 서버, 광고 플랫폼
- 라인: 메시징, 광고
- 쿠팡: 물류 시스템, 재고 관리
- 배민: 주문 처리 서버
기타
- 토스: 금융 백엔드 (주로 Kotlin, 일부 C++)
- 당근마켓: 검색·추천 시스템
면접 포인트
- 동시성: “10만 동시 접속을 어떻게 처리하나요?”
- 데이터베이스: “트랜잭션 격리 수준은?”
- 캐싱: “Cache Stampede를 어떻게 방지하나요?”
- 모니터링: “장애 발생 시 어떻게 추적하나요?”
커리어 경로
주니어 (0-2년): 백엔드 개발자
↓
미들 (3-5년): 시니어 백엔드, 인프라 엔지니어
↓
시니어 (6년+): Staff Engineer, 아키텍트
서버 백엔드 장단점
장점
- 높은 연봉 (네카라쿠배 평균 7천만+)
- 양호한 워라밸
- 다양한 기술 스택 경험
단점
- 온콜 (On-call) 가능성
- 레거시 코드 유지보수
- 트래픽 급증 시 스트레스
6. 시스템 소프트웨어
핵심 요구사항
안정성: 99.999% 가용성
특징
- 커널 수준 프로그래밍
- 드라이버 개발
- 컴파일러/툴체인
필수 기술 스택
// 1. 커널 모듈 (Linux)
#include <linux/module.h>
#include <linux/kernel.h>
static int __init my_init(void) {
printk(KERN_INFO "Module loaded\n");
return 0;
}
module_init(my_init);
MODULE_LICENSE("GPL");
// 2. 시스템 콜
long sys_my_syscall(int arg) {
// 커널 공간에서 실행
return arg * 2;
}
// 3. LLVM IR 생성 (컴파일러)
Value* CreateAdd(IRBuilder<>& builder, Value* lhs, Value* rhs) {
return builder.CreateAdd(lhs, rhs, "addtmp");
}
// 4. 가상 파일 시스템 (VFS)
struct file_operations my_fops = {
.owner = THIS_MODULE,
.read = my_read,
.write = my_write,
.open = my_open,
.release = my_release,
};
주요 회사 및 기술
국내
- 삼성전자: Tizen OS, Bada
- LG전자: webOS
- 네이버: Whale 브라우저
해외
- Microsoft: Windows 커널
- Apple: macOS/iOS 커널
- Google: Chrome/Chromium, Fuchsia
- Red Hat: Linux 커널 기여
면접 포인트
- 운영체제: “페이지 테이블 구조는?”
- 파일 시스템: “inode란?”
- 네트워크: “TCP 3-way handshake 커널 동작은?”
- 컴파일러: “SSA (Static Single Assignment)란?”
커리어 경로
주니어 (0-2년): 시스템 프로그래머
↓
미들 (3-5년): 커널 개발자, 드라이버 엔지니어
↓
시니어 (6년+): 시스템 아키텍트
7. 도메인 비교표
기술 스택 비교
| 도메인 | 언어 | 프레임워크/라이브러리 | 빌드 도구 | 배포 |
|---|---|---|---|---|
| 게임 | C++17 | Unreal, Unity | MSBuild, CMake | Steam, 앱스토어 |
| 금융 | C++20 | Boost, Custom | CMake | Bare metal |
| 임베디드 | C++11 | FreeRTOS, Zephyr | Make, CMake | Flash 직접 |
| 서버 | C++17 | Boost.Asio, gRPC | Bazel, CMake | Docker, K8s |
| 시스템 | C++20 | LLVM, Boost | CMake, Meson | 패키지 관리자 |
연봉 비교 (국내, 경력 5년 기준)
| 도메인 | 평균 연봉 | 최고 연봉 | 비고 |
|---|---|---|---|
| 금융 HFT | 1억 2천 | 2억+ | 외국계 더 높음 |
| 서버 (네카라쿠배) | 8천만 | 1억 5천 | 스톡옵션 포함 |
| 시스템 | 7천만 | 1억 2천 | 외국계/오픈소스 |
| 게임 | 6천만 | 1억 | 대형사 기준 |
| 임베디드 | 5천 5백만 | 9천만 | 자동차 > 가전 |
학습 곡선
난이도 (입문 → 실무 투입):
임베디드: ▓▓▓▓▓▓▓▓░░ (하드웨어 지식 필요)
금융 HFT: ▓▓▓▓▓▓▓▓▓░ (금융+성능 최적화)
시스템: ▓▓▓▓▓▓▓░░░ (OS 깊은 이해)
게임: ▓▓▓▓▓▓░░░░ (그래픽 API)
서버: ▓▓▓▓▓░░░░░ (웹 기술 이미 알면 수월)
8. 커리어 전환 가이드
도메인 간 전환 난이도
| From \ To | 게임 | 금융 | 임베디드 | 서버 | 시스템 |
|---|---|---|---|---|---|
| 게임 | - | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| 금융 | ⭐⭐⭐ | - | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
| 임베디드 | ⭐⭐⭐⭐ | ⭐⭐⭐ | - | ⭐⭐⭐ | ⭐⭐ |
| 서버 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | - | ⭐⭐ |
| 시스템 | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ | - |
(⭐ 많을수록 전환 어려움)
전환 전략
게임 → 서버:
- 공통점: 멀티스레딩, 네트워크
- 부족한 부분: 데이터베이스, 분산 시스템
- 준비 기간: 3-6개월 (토이 프로젝트 1-2개)
서버 → 금융:
- 공통점: 네트워크, 동시성
- 부족한 부분: 극한 최적화, lock-free
- 준비 기간: 6-12개월 (C++ 최적화 집중)
임베디드 → 게임:
- 공통점: 메모리 제약, 최적화
- 부족한 부분: 그래픽 API, 물리 엔진
- 준비 기간: 6-12개월 (OpenGL/DirectX 학습)
최종 요약
도메인 선택 체크리스트
게임 개발이 맞는 사람
- 실시간 그래픽·물리 시뮬레이션 관심
- 창의적 문제 해결 선호
- 크런치 모드 감수 가능
금융 HFT가 맞는 사람:
- 극한 성능 최적화 좋아함
- 고연봉 최우선
- 스트레스 관리 가능
임베디드가 맞는 사람
- 하드웨어 제어 흥미
- 제약 조건 속 문제 해결 선호
- 안정적 커리어 선호
서버 백엔드가 맞는 사람
- 대규모 트래픽 처리 관심
- 다양한 기술 스택 경험 선호
- 워라밸 중요
시스템 소프트웨어가 맞는 사람
- OS/컴파일러 내부 동작 궁금
- 오픈소스 기여 관심
- 깊이 있는 기술 추구
한 줄 정리
같은 C++이지만 도메인마다 완전히 다른 제약, 기술, 문화가 있습니다. 본인의 흥미, 가치관, 커리어 목표를 명확히 하며, 각 도메인의 실제 업무와 요구사항을 이해한 뒤 선택하세요. 전환도 가능하지만 준비 기간과 노력이 필요합니다.
참고 자료
게임 개발
금융 HFT
임베디드
서버 백엔드
시스템 소프트웨어
다음 글: [C++ vs 타 언어 #47-1] C++ vs Go: 성능·동시성 모델 비교
자주 묻는 질문 (FAQ)
Q. 이 내용을 실무에서 언제 쓰나요?
A. 같은 C++라도 도메인(게임·금융·임베디드·서버·시스템)마다 요구하는 역량이 완전히 다릅니다. 각 분야의 핵심 기술 스택, 성능 요구사항, 면접 포인트, 연봉 수준, 커리어 경로를 실전 경험 기반으로 총정리합니다. 실무에서는 위 본문의 예제와 선택 가이드를 참고해 적용하면 됩니다.
Q. 선행으로 읽으면 좋은 글은?
A. 각 글 하단의 이전 글 또는 관련 글 링크를 따라가면 순서대로 배울 수 있습니다. C++ 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.
Q. 더 깊이 공부하려면?
A. cppreference와 해당 라이브러리 공식 문서를 참고하세요. 글 말미의 참고 자료 링크도 활용하면 좋습니다.
이전 글: [C++ 면접·시스템 설계 #46-2] 자주 틀리는 C++ 기술 면접 질문 50선
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
- C++ 개발자 로드맵: 주니어에서 시니어로 가기 위한 필수 역량 총정리 [#45-3]
- C++ 도메인별 요구 역량 | 네카라쿠배·금융·게임 [#46-3]
- BFS와 DFS | 그래프 탐색 알고리즘 완벽 정리
이 글에서 다루는 키워드 (관련 검색어)
C++, 도메인, 커리어, 게임, 금융, 임베디드, 서버, HFT 등으로 검색하시면 이 글이 도움이 됩니다.