본문 바로가기

SMALL

C++ 개발이야기

(18)
C++ LoadLibrary Null 반환 문제 포스팅 계기 이번 글은 내가 정말 고생해서 해결한 LoadLibrary 관련 오류를 기록해 두고자 작성하게 되었다. 어느 날 평소처럼 LoadLibrary(_T("특정. dll"))을 호출했는데, 특정 PC에서만 NULL을 반환하는 문제가 발생했다. GetLastError()로 확인해 보니 193 (ERROR_BAD_EXE_FORMAT)이라는 낯선 값이 나왔고, 처음엔 단순히 비트 수 불일치 문제인가 했지만… 디버깅은 생각보다 훨씬 깊고 길었다. 혹시 이 글을 보고 계신 분도 비슷한 상황이라면, 제 경험이 힌트가 되기를 바란다. ( 이 글을 읽고 나처럼 많은 시간을 투자하지 않고 해결할 수 있기를 바란다.) LoadLibrary가 NULL을 반환하는 주요 케이스LoadLibrary()는 DLL을 로딩할 ..
C++ 개발자의 반성 포스팅 계기 개발을 하다 보면 문득 이런 생각이 들 때가 있다. “C++만 잘하면 충분하지 않을까?” 얼마전 까지 나의 생각은 그랬다. 성능, 메모리, 하드웨어 자원까지 고려해야 하는 임베디드 환경에서 C++을 파고들며, 다른 언어에 눈을 돌릴 필요가 없다고 생각했다. 하지만 시간이 흐르고 다양한 프로젝트를 경험하면서, 언어보다 더 본질적인 것이 있다는 걸 깨닫게 되었다. 그 이야기를 오늘 풀어보고자 한다. 언어보다 중요한 것은 '분야에 대한 이해'C++은 정말 강력한 언어다. 하지만 개발자는 단순히 언어를 다루는 사람이 아니다. 진짜 중요한 건 ‘무엇을 개발하느냐’에 대한 이해다. 아래 예시 사례는 내가 경험했던 분야와 주변에 있는 개발자 친구들에게 조언을 얻어 작성하였다.EX 1) 자동차 내비게이션..
실무에서 경험한 C++ 멀티스레딩과 스마트 포인터 문제 및 해결 방법 포스팅 계기 C++에서 멀티스레딩을 구현할 때, 스마트 포인터를 활용하면 자원 관리가 편리해질 것 같지만, 오히려 더 복잡한 문제를 초래할 수도 있다. 특히, 직접 스마트 포인터를 구현해서 사용하면서 데드락(Deadlock), 레이스 컨디션(Race Condition), Dangling Reference, Reference Count 문제, 성능 이슈 등을 모두 경험하면서 많은 시행착오를 겪었다. 이 글에서는 직접 스마트 포인터를 구현하면서 발생한 문제와 해결 방법을 공유하고, 실무에서 멀티스레딩을 안전하게 구현하는 팁을 정리해 보겠다. 직접 스마트 포인터를 구현한 이유 일반적으로 std::shared_ptr이나 std::unique_ptr을 사용하면 안전한 메모리 관리를 할 수 있다. 하지만 특정한 환..
C++ 개발자로서 성장하는 법: 나의 경험과 팁 포스팅 계기 C++ 개발자로서 성장하는 과정에서 많은 경험과 시행착오를 겪었습니다. 처음에는 학교에서 배운 대로만 개발하면 될 거라고 생각했지만, 실무에서는 전혀 다른 난관들이 기다리고 있었습니다. 특히 협업, 코드 리뷰, 그리고 지속적인 학습이 중요하다는 것을 깨닫게 되었습니다.이 글에서는 제가 C++ 개발자로 성장하면서 겪었던 경험과 배운 점, 그리고 후배 개발자들에게 도움이 될 수 있는 몇 가지 팁을 공유하려고 합니다. 금번 포스팅은 공손한 말투로 작성해 보았습니다.  처음 C++을 배운 계기사실 C++을 배우게 된 특별한 계기는 없었습니다. 대학교 1학년 때 처음으로 배운 프로그래밍 언어가 C++이었기 때문에 자연스럽게 익숙한 언어가 되었고, 이후에도 계속해서 사용하면서 더 깊이 있게 공부하게 되..
WSAEWOULDBLOCK(10035), WSAEALREADY(10037) 오류 및 RST 패킷 분석과 해결 방법 포스팅 계기 네트워크 프로그래밍을 하다 보면, 소켓 통신에서 예상치 못한 오류가 발생하는 경우가 많다. 특히, 논블로킹 소켓을 사용할 때 자주 마주치는 WSAEWOULDBLOCK(10035)와 WSAEALREADY(10037) 오류는 많은 개발자들에게 혼란을 준다. 최근 현업에서 TCP 클라이언트-서버 환경을 구축하는 과정에서 이 오류를 해결해야 하는 상황이 발생했다. 여기에 더해, 와이어샤크(Wireshark) 패킷 분석을 통해 서버 측에서 RST (Reset) 패킷이 발생하는 문제도 발견하였다. 그래서 해당 포스팅을 작성하게 되었다. 이번 포스팅에서는 WSAEWOULDBLOCK(10035) 및 WSAEALREADY(10037) 오류의 개념과 해결 방법을 정리하고, RST 패킷이 발생하는 원인과 해결책..
고성능 네트워크 프로그래밍 기법 – 실무에서 반드시 알아야 할 최적화 기술 포스팅 계기  이전 포스팅(2025.02.27 - [C++ 개발이야기/Socket 통신] - 보안과 암호화된 소켓 통신 - C++)에서 다룬 멀티스레드 소켓 프로그래밍과 비동기 소켓 프로그래밍은 네트워크 개발을 할 때 필수적인 기법들이었다. 하지만 네트워크 트래픽이 많아지고 성능이 중요한 환경에서는 단순히 멀티스레드를 사용하는 것만으로는 한계가 있는 것이 사실이다. 특히, 실시간 처리가 중요한 게임 서버, 금융 시스템, 분산 시스템에서는 보다 최적화된 네트워크 프로그래밍 기법이 필요하다. 이번 포스팅에서는 고성능 네트워크 프로그래밍의 핵심 기법과 함께 실무에서 사용되는 최적화 기법을 C++ 예제 코드와 함께 설명하도록 하겠다. 고성능 네트워크 프로그래밍이란?고성능 네트워크 프로그래밍이란 최소한의 리소스로..
보안과 암호화된 소켓 통신 - C++ 포스팅 계기 이전 글에 이어 2025.02.26 - [C++ 개발이야기/Socket 통신] - 비동기 소켓 프로그래밍 - C++  비동기 소켓 프로그래밍을 다룬 이후, 네트워크 보안의 중요성도 함께 짚고 넘어갈 필요가 있다고 판단했고 나 또한 잘 모르는 지식이라 공부할 겸 해당 포스팅을 작성하게 되었다. 소켓을 통한 데이터 전송은 다양한 보안 위협에 노출될 수 있으며, 특히 민감한 정보를 주고받을 때 암호화가 필수적이라고 생각한다. 이번 포스팅에서는 보안과 암호화된 소켓 통신의 개념을 설명하고, C++을 이용하여 이를 구현하는 방법을 설명하겠다.보안과 암호화된 소켓 통신 개념소켓 통신이란 네트워크를 통해 데이터를 주고받는 방식이다. 그러나 기본적인 소켓 통신은 데이터를 평문(Plain Text)으로 전송..
비동기 소켓 프로그래밍 - C++ 포스팅 계기 이전 포스팅에 2025.02.26 - [C++ 개발이야기/Socket 통신] - 멀티스레드 기반 소켓 프로그래밍 : 서버 성능 극대화를 위한 필수 개념 - c++에 이어 어떤 심화적인 이야기를 하면 좋을까 생각하다 해당 주제를 선택하게 되었다. 네트워크 프로그래밍에서 동기 방식은 클라이언트의 요청을 순차적으로 처리하기 때문에 성능이 제한될 수 있다. 특히, 다수의 클라이언트가 동시에 접속하는 경우 멀티스레드 방식으로 해결할 수 있지만, 스레드 관리 비용이 증가하는 문제가 있다. 이를 해결하는 대안으로 비동기 소켓 프로그래밍이 있다. 이번 글에서는 비동기 소켓 프로그래밍의 개념과 구현 방법을 다뤄보도록 하겠다.비동기 소켓 프로그래밍 개념 비동기 소켓 프로그래밍은 논블로킹(non-blocking..

LIST