반응형

전체 글 758

C++ Copy Elision과 RVO/NRVO 제대로 이해하기

C++에서 함수가 객체를 반환할 때마다 copy나 move가 발생한다고 생각하기 쉽습니다.그래서 성능을 걱정한 나머지 return 문에 std::move를 붙이는 코드를 종종 보게 됩니다.하지만 C++17 이후에는 prvalue 반환에서 copy elision이 보장되는 경우가 있고, named local object 반환에서도 compiler가 NRVO를 적용할 수 있습니다.오히려 return std::move(local)처럼 작성하면 NRVO가 막히고 move가 강제로 발생할 수 있습니다. 객체를 값으로 반환할 때는 먼저 copy elision과 NRVO 가능성을 이해하고, local object에 습관적으로 std::move를 붙이지 않는 것이 중요합니다. copy elision은 값 반환 코드를 ..

C++/Concepts 2026.07.30

Google Pay의 Ask GPay, 금융 앱 AI는 어디까지 해야 할까?

금융 앱 안으로 AI assistant가 들어오는 흐름이 더 뚜렷해지고 있습니다.2026년 7월 29일 보도에 따르면 Google Pay는 인도에서 Ask GPay를 소개하고, 사용자가 자신의 소비 패턴과 금융 정보를 대화형으로 이해할 수 있도록 하는 기능을 확대하고 있습니다.이 기능은 단순한 챗봇이라기보다 결제 앱 안의 transaction history, personalization control, AI-generated answer, privacy boundary가 만나는 사례입니다.개발자 관점에서는 “금융 앱에 AI를 붙였다”보다 “AI가 민감한 금융 데이터에 접근할 때 어떤 안전 경계를 둬야 하는가”가 더 중요한 포인트입니다. Ask GPay 뉴스의 핵심은 금융 앱의 AI assistant가 개..

IT News 2026.07.30

DB 장애 복구를 이해하는 WAL 기본기

Database는 매 요청마다 disk의 data page를 즉시 안전하게 고쳐 쓰지 않습니다.대부분의 storage engine은 memory 안에서 page를 먼저 바꾸고, 변경 기록을 log에 남긴 뒤, 실제 data page flush는 나중에 처리합니다.이때 장애가 나면 자연스럽게 질문이 생깁니다.“COMMIT이 성공했다고 응답했는데 서버 전원이 꺼지면 데이터는 어디까지 살아남을까?”이 질문의 핵심에 있는 개념이 WAL, 즉 Write-Ahead Log입니다. WAL의 핵심은 data page를 영구 저장소에 반영하기 전에, 그 변경을 복구할 수 있는 log record를 먼저 durable 하게 기록하는 것입니다. WAL은 commit durability와 crash recovery를 연결하는..

CS 2026.07.28

std::vector reallocation과 noexcept move constructor

C++에서 move constructor를 작성할 때 noexcept를 붙여야 하는지 고민되는 순간이 있습니다.단순히 “예외를 던지지 않으니까 붙인다” 정도로만 이해하면 std::vector 같은 container에서 중요한 성능 차이를 놓칠 수 있습니다.std::vector는 capacity가 부족해져 reallocation이 발생하면 기존 element를 새 memory buffer로 옮겨야 합니다.이때 move constructor가 noexcept인지 여부는 기존 element를 move할지 copy할지 결정하는 중요한 힌트가 됩니다. std::vector reallocation에서 noexcept move constructor는 “이 객체는 안전하게 move해도 된다”는 신호가 됩니다. move..

C++/Concepts 2026.07.27

Consistent Hashing, cache sharding에서 key 이동을 줄이는 방법

서비스가 커지면 하나의 cache node나 storage node에 모든 key를 넣기 어렵습니다.그래서 여러 node로 key를 나누는 sharding을 사용합니다.가장 단순한 방식은 hash(key) % node_count이지만, node가 추가되거나 제거되는 순간 많은 key가 한꺼번에 이동하는 문제가 생깁니다.Consistent hashing은 이 문제를 줄이기 위해 hash space를 ring처럼 보고, key가 이동해야 하는 범위를 제한하는 방법입니다. Consistent hashing의 핵심은 node 수가 바뀌어도 전체 key를 다시 나누지 않고, 바뀐 node 주변의 key만 이동시키는 것입니다. Consistent hashing은 cache sharding, distributed s..

CS 2026.07.25

C++ lock ownership 제대로 이해하기

C++에서 mutex를 직접 lock하고 unlock하는 코드는 짧아 보이지만, 예외나 early return이 끼어드는 순간 실수하기 쉽습니다.그래서 실무 C++에서는 mutex를 직접 관리하기보다 RAII object로 lock ownership을 관리하는 방식을 자주 사용합니다.대표적인 도구가 std::lock_guard와 std::unique_lock입니다.둘 다 scope가 끝날 때 unlock을 보장하지만, 사용할 수 있는 상황과 표현하는 의도는 다릅니다. std::lock_guard는 단순한 scope lock이고, std::unique_lock은 lock ownership을 상태로 들고 다니는 더 유연한 RAII lock object입니다. lock_guard와 unique_lock의 차..

C++/Concepts 2026.07.25

GitHub Code Quality GA, AI 시대의 코드 리뷰는 어떻게 바뀔까?

AI coding tool이 코드를 더 빠르게 만들어주는 시대가 되면서, 팀이 마주하는 질문도 조금 바뀌고 있습니다.이제는 “코드를 얼마나 빨리 만들 수 있는가”뿐 아니라 “빨리 만들어진 코드를 merge 전에 얼마나 안정적으로 검증할 수 있는가”가 중요해졌습니다.GitHub는 2026년 7월 20일 GitHub Code Quality를 GitHub Enterprise Cloud와 GitHub Team에서 generally available로 전환했습니다.이 글에서는 이번 발표의 핵심 내용, 개발팀에 미치는 영향, 그리고 실제 도입 전에 확인해야 할 지점을 정리해보겠습니다. GitHub Code Quality GA의 핵심은 CodeQL 기반 deterministic analysis와 AI-assisted..

IT News 2026.07.22

DNS Lookup 흐름, Recursive Resolver부터 Authoritative DNS까지

브라우저 주소창에 도메인을 입력하면 애플리케이션은 곧바로 서버에 연결하는 것처럼 보입니다.하지만 실제로는 먼저 도메인 이름을 IP address로 바꾸는 DNS Lookup 과정이 필요합니다.이 과정은 보통 매우 빠르게 끝나지만, 장애가 나면 “서버는 살아 있는데 접속이 안 된다”, “일부 사용자만 예전 서버로 간다”, “배포 후 트래픽 전환이 예상보다 늦다” 같은 문제로 나타납니다.오늘은 DNS Lookup이 어떤 순서로 일어나는지, Cache TTL이 왜 중요한지, 실무에서 어떤 지점을 봐야 하는지 정리해보겠습니다. DNS Lookup은 도메인 이름을 IP address로 바꾸는 과정이고, TTL은 그 결과를 resolver와 client가 얼마나 오래 cache할 수 있는지 정하는 값입니다. DNS..

CS 2026.07.21

if constexpr는 일반 if와 무엇이 다를까?

Template 코드를 처음 작성하면 타입에 따라 다른 코드를 실행하고 싶어지는 순간이 자주 옵니다.예를 들어 숫자 타입은 std::to_string으로 처리하고, std::string은 size를 함께 출력하고, std::vector는 front 값을 읽고 싶은 식입니다.C++17 이전에는 이런 분기를 SFINAE, tag dispatch, partial specialization으로 풀어야 하는 경우가 많았습니다.C++17의 if constexpr는 이런 compile-time branch를 함수 본문 안에서 더 직접적으로 표현할 수 있게 해줍니다. if constexpr의 핵심은 조건이 compile time에 결정되면 선택되지 않은 branch가 해당 template instantiation에서 ..

C++/Concepts 2026.07.20

C++ Callback 코드에서 Lambda Capture를 안전하게 쓰는 법

C++ lambda는 문법만 보면 짧고 편합니다.하지만 lambda가 std::function에 저장되거나 callback queue, event handler, async task로 넘어가면 capture한 값의 lifetime이 훨씬 중요해집니다.특히 reference capture는 코드가 짧아 보이지만, lambda가 local variable보다 오래 살아남는 순간 dangling reference를 만들 수 있습니다.이번 글에서는 C++17 기준으로 lambda capture의 lifetime을 예제 코드와 함께 정리해보겠습니다. lambda capture에서 중요한 질문은 “무엇을 capture했는가”보다 “lambda가 capture 대상보다 오래 살아남을 수 있는가”입니다. lambda가..

C++/Concepts 2026.07.16
반응형