본문으로 건너뛰기
Previous
Next
C++ 도메인별 요구 역량 차이 완벽 가이드 | 네카라쿠배·금융·게임·임베디드 [#46-3]

C++ 도메인별 요구 역량 차이 완벽 가이드 | 네카라쿠배·금융·게임·임베디드 [#46-3]

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중상⭐⭐
금융 HFT1μs (마이크로초)Lock-free, FPGA, 네트워크최상⭐⭐⭐
임베디드256KB RAMRTOS, 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 엔진

면접 포인트

  1. 메모리 관리: “메모리 풀을 직접 구현해 본 경험?”
  2. 멀티스레딩: “게임 로직과 렌더링 분리 경험?”
  3. 프로파일링: “프레임 드랍을 어떻게 디버깅했나요?”
  4. 그래픽 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++

면접 포인트

  1. 지연 최적화: “1ms를 1μs로 줄인 경험?”
  2. Lock-free: “CAS (Compare-And-Swap) 구현?”
  3. 네트워크: “TCP vs UDP 지연 차이?”
  4. 하드웨어: “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: 임베디드 툴체인

면접 포인트

  1. 메모리 제약: “동적 할당 없이 어떻게 관리하나요?”
  2. 하드웨어 제어: “volatile 키워드 용도는?”
  3. RTOS: “Task 스케줄링 원리는?”
  4. 디버깅: “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++)
  • 당근마켓: 검색·추천 시스템

면접 포인트

  1. 동시성: “10만 동시 접속을 어떻게 처리하나요?”
  2. 데이터베이스: “트랜잭션 격리 수준은?”
  3. 캐싱: “Cache Stampede를 어떻게 방지하나요?”
  4. 모니터링: “장애 발생 시 어떻게 추적하나요?”

커리어 경로

주니어 (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 커널 기여

면접 포인트

  1. 운영체제: “페이지 테이블 구조는?”
  2. 파일 시스템: “inode란?”
  3. 네트워크: “TCP 3-way handshake 커널 동작은?”
  4. 컴파일러: “SSA (Static Single Assignment)란?”

커리어 경로

주니어 (0-2년): 시스템 프로그래머

미들 (3-5년): 커널 개발자, 드라이버 엔지니어

시니어 (6년+): 시스템 아키텍트

7. 도메인 비교표

기술 스택 비교

도메인언어프레임워크/라이브러리빌드 도구배포
게임C++17Unreal, UnityMSBuild, CMakeSteam, 앱스토어
금융C++20Boost, CustomCMakeBare metal
임베디드C++11FreeRTOS, ZephyrMake, CMakeFlash 직접
서버C++17Boost.Asio, gRPCBazel, CMakeDocker, K8s
시스템C++20LLVM, BoostCMake, Meson패키지 관리자

연봉 비교 (국내, 경력 5년 기준)

도메인평균 연봉최고 연봉비고
금융 HFT1억 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]」)를 배포·운영 흐름에 맞춰 옮긴 체크리스트입니다. 도메인에 맞게 단계 이름만 바꿔 적용할 수 있습니다.

  1. 입력 계약 고정: 스키마·버전·최대 페이로드·타임아웃·에러 코드를 경계에 둔다.
  2. 핵심 경로 계측: 요청 ID, 단계별 지연, 외부 호출 결과 코드를 로그·메트릭·트레이스에서 한 흐름으로 본다.
  3. 실패 주입: 의존성 타임아웃·5xx·부분 데이터·락 대기를 스테이징에서 재현한다.
  4. 호환·롤백: 설정/마이그레이션/클라이언트 버전을 되돌릴 수 있는지 확인한다.
  5. 부하 후 검증: 피크 대비 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 스냅샷 비교
빌드·배포만 실패환경 변수, 권한, 플랫폼 차이, lockfileCI 로그와 로컬 diff, 런타임·이미지 버전 핀
설정 불일치프로필·시크릿·기본값, 리전스키마 검증된 설정 단일 소스와 배포 매트릭스 표준화
데이터 불일치비멱등 재시도, 부분 쓰기, 캐시 무효화 누락멱등 키·아웃박스·트랜잭션 경계 재검토

권장 순서: (1) 최소 재현 (2) 최근 변경 범위 축소 (3) 환경·의존성 차이 (4) 관측으로 가설 검증 (5) 수정 후 회귀·부하 테스트.

배포 전에는 git addgit commitgit pushnpm run deploy 순서를 권장합니다.


같이 보면 좋은 글 (내부 링크)

이 주제와 연결되는 다른 글입니다.


이 글에서 다루는 키워드 (관련 검색어)

C++, 도메인, 커리어, 게임, 금융, 임베디드, 서버, HFT 등으로 검색하시면 이 글이 도움이 됩니다.