C++ 도메인별 요구 역량 차이 완벽 가이드 | 네카라쿠배·금융·게임·임베디드 [#46-3]
이 글의 핵심
같은 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++ 도메인별 요구 역량 차이 완벽 가이드 | 네카라쿠배·금융·게임·임베디드 [#46-3]」)를 구현·런타임·운영 관점에서 다시 압축합니다. 도메인별 세부 구현은 글마다 다르지만, 입력 검증 → 핵심 연산 → 부작용(I/O·네트워크·동시성) → 관측의 흐름으로 장애를 나누면 원인 추적이 빨라집니다.
내부 동작과 핵심 메커니즘
flowchart TD A[입력·요청·이벤트] --> B[파싱·검증·디코딩] B --> C[핵심 연산·상태 전이] C --> D[부작용: I/O·네트워크·동시성] D --> E[결과·관측·저장]
sequenceDiagram participant C as 클라이언트/호출자 participant B as 경계(런타임·게이트웨이·프로세스) participant D as 의존성(API·DB·큐·파일) C->>B: 요청/이벤트 B->>D: 조회·쓰기·RPC D-->>B: 지연·부분 실패·재시도 가능 B-->>C: 응답 또는 오류(코드·상관 ID)
- 불변 조건(Invariant): 버퍼 경계, 프로토콜 상태, 트랜잭션 격리, FD 상한 등 단계별로 문장으로 적어 두면 디버깅 비용이 줄어듭니다.
- 결정성: 순수 층과 시간·네트워크·스케줄에 의존하는 층을 분리해야 테스트와 장애 분석이 쉬워집니다.
- 경계 비용: 직렬화, 인코딩, syscall 횟수, 락 경합, 할당·GC, 캐시 미스를 의심 목록에 둡니다.
- 백프레셔: 생산자가 소비자보다 빠를 때 버퍼·큐·스트림에서 속도를 줄이는 신호를 어디에 둘지 정의합니다.
프로덕션 운영 패턴
| 영역 | 운영 관점 질문 |
|---|---|
| 관측성 | 요청 단위 상관 ID, 에러율·지연 p95/p99, 의존성 타임아웃·재시도가 대시보드에 보이는가 |
| 안전성 | 입력 검증·권한·비밀·감사 로그가 코드 경로마다 일관적인가 |
| 신뢰성 | 재시도는 멱등 연산에만 적용되는가, 서킷 브레이커·백오프·DLQ가 있는가 |
| 성능 | 캐시·배치 크기·커넥션 풀·인덱스·백프레셔가 데이터 규모에 맞는가 |
| 배포 | 롤백 룬북, 카나리/블루그린, 마이그레이션·피처 플래그가 문서화되어 있는가 |
| 용량 | 피크 트래픽·디스크·FD·스레드 풀 상한을 주기적으로 검증하는가 |
스테이징은 데이터 양·네트워크 RTT·동시성을 프로덕션에 가깝게 맞출수록 재현율이 올라갑니다.
확장 예시: 엔드투엔드 미니 시나리오
앞선 본문 주제(「C++ 도메인별 요구 역량 차이 완벽 가이드 | 네카라쿠배·금융·게임·임베디드 [#46-3]」)를 배포·운영 흐름에 맞춰 옮긴 체크리스트입니다. 도메인에 맞게 단계 이름만 바꿔 적용할 수 있습니다.
- 입력 계약 고정: 스키마·버전·최대 페이로드·타임아웃·에러 코드를 경계에 둔다.
- 핵심 경로 계측: 요청 ID, 단계별 지연, 외부 호출 결과 코드를 로그·메트릭·트레이스에서 한 흐름으로 본다.
- 실패 주입: 의존성 타임아웃·5xx·부분 데이터·락 대기를 스테이징에서 재현한다.
- 호환·롤백: 설정/마이그레이션/클라이언트 버전을 되돌릴 수 있는지 확인한다.
- 부하 후 검증: 피크 대비 p95/p99, 에러율, 리소스 상한, 알림 임계값을 점검한다.
handle(request):
ctx = newCorrelationId()
validated = validateSchema(request)
authorize(validated, ctx)
result = domainCore(validated)
persistOrEmit(result, idempotentKey)
recordMetrics(ctx, latency, outcome)
return result
문제 해결(Troubleshooting)
| 증상 | 가능 원인 | 조치 |
|---|---|---|
| 간헐적 실패 | 레이스, 타임아웃, 외부 의존성, DNS | 최소 재현 스크립트, 분산 트레이스·로그 상관관계, 재시도·서킷 설정 점검 |
| 성능 저하 | N+1, 동기 I/O, 락 경합, 과도한 직렬화, 캐시 미스 | 프로파일러·APM으로 핫스팟 확인 후 한 가지씩 제거 |
| 메모리 증가 | 캐시 무제한, 구독/리스너 누수, 대용량 버퍼, 커넥션 미반납 | 상한·TTL·힙/FD 스냅샷 비교 |
| 빌드·배포만 실패 | 환경 변수, 권한, 플랫폼 차이, lockfile | CI 로그와 로컬 diff, 런타임·이미지 버전 핀 |
| 설정 불일치 | 프로필·시크릿·기본값, 리전 | 스키마 검증된 설정 단일 소스와 배포 매트릭스 표준화 |
| 데이터 불일치 | 비멱등 재시도, 부분 쓰기, 캐시 무효화 누락 | 멱등 키·아웃박스·트랜잭션 경계 재검토 |
권장 순서: (1) 최소 재현 (2) 최근 변경 범위 축소 (3) 환경·의존성 차이 (4) 관측으로 가설 검증 (5) 수정 후 회귀·부하 테스트.
배포 전에는 git add → git commit → git push 후 npm run deploy 순서를 권장합니다.
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
- C++ 개발자 로드맵: 주니어에서 시니어로 가기 위한 필수 역량 총정리 [#45-3]
- C++ 도메인별 요구 역량 | 네카라쿠배·금융·게임 [#46-3]
- BFS와 DFS | 그래프 탐색 알고리즘 완벽 정리
이 글에서 다루는 키워드 (관련 검색어)
C++, 도메인, 커리어, 게임, 금융, 임베디드, 서버, HFT 등으로 검색하시면 이 글이 도움이 됩니다.