엘키의 주절 주절

소소한 개발 이야기

거짓 공유 (false sharing)

캐싱의 기본은 지역성에 근거하는데요, 이는 프로그래밍단의 최적화에서도 유명한 80-20법칙과도 일맥상통하는 이야기죠. 지역성(locality)은 아래 추정에 근거합니다. 지금 읽힌 데이터는 이후에도 자주 사용될 가능성이 높다. 지금 읽힌 데이터와 인접한 데이터는 이어서 사용될 가능성이 높다. 이는 코드 실행시 스택 처리를 통해 얻게 되는...

데이터베이스 이용시 주의 사항

서버 개발시에 DBMS를 사용하지 않는 것은 불가능에 가깝습니다.  특히나 트랜잭션을 C/C++ 레벨에서 구현하기란 보통 어려운게 아닙니다. DBMS에서는 시스템 단에서 지원해주기 때문에 손쉽게 트랜잭션을 사용 할 수 있죠. 데이터를 저장하고 불러 오는 것 역시 파일 시스템보다 DBMS가 훨씬 더 효율이 좋죠. 물론 그것도 잘 만들고, 잘 사용하고...

스티브 잡스의 수퍼 업무력 - 애플의 그리고 잡스의 성공 비결

요새 내 주변에는 모두가 입을 모아 한 기기를 찬양하는 상황이 펼쳐지고 있다. 바로 아이폰이다!  아이팟 터치도 혁신적인 기기였지만, 아이폰은 그 이상이다. 3G망을 이용한 무선 네트웍 기능은 언제 어디서나 원하는 정보를 이라는 컨셉에 매우 잘 부합한다. 과연 이 것을 노린 것일까, 요행일까? 아마도 ‘그’라면 노렸을 지도 모른단 생각이 든다. ...

누워서 읽는 퍼즐북 - 퍼즐의 쾌감

퍼즐이라 하면 많이들 어렵단 생각을 하곤한다. 나 역시 마찬가지였고, 임백준씨의 책이지만 퍼즐북이라는 제목을 보자마자 당황했으니 말 다했다. 임백준씨 책은 하나도 빼먹지 않은 나로써, 이번책도 놓칠 수 없다는 생각에 예약 구매했다. 평소에도 퍼즐에 관심이 많았던 임백준씨 답게 퍼즐북에도 재밌는 퍼즐이 많이 포함되어 있었다. ‘그리’ 어렵지 않은 ...

C++ 오류 발생시 원인 정리

예외가 발생하는 상황 0으로 나누기 나누기를 직접 사용하지 말고, 매크로 함수로 만들어놓고 사용하는 것이 좋다. (0으로 나누기를 시도했을 경우 로그를 남기는 등의 동작) int nDivisor = 0; int nResult = rand() / nDivisor; //Divide zero. 잘못된 메모리 접...

멀티스레드 정책

최적화된 프로그램이란, 유휴 시간없이 하고 싶은 일을 최대한 많이 하는 프로그램을 의미합니다. 여기서 중요한 것은, 하고자 하는 일을 많이 해야 된다는 점이죠.   싱글 스레드 클라이언트 프로그램의 경우는 대게 아래와 같습니다.  입력 받는 작업 연산 작업 화면 그리기  1번으로 돌아감 시간을 재고, 특정 작업 시간이 오래 걸려 재...

멀티스레드 프로그래밍시 유의점

데이터를 동시에 쓰는 상황, 읽는 도중 값이 변경되는 상황, 읽는 도중 delete 되는 상황에 유의하라. 데이터를 동적으로 다뤄야 되는 상황 자체를 줄이는 것이 좋다. NULL 대신 NULL객체 처리를 선호하는 것이 멀티 스레드 프로그래밍에서 크래시를 줄이고 쉽게 예외 핸들링 할 수 있는 방법중 하나다. 생...

C++ 코딩의 정석 - C++ 프로그래머 필독서의 목록에 올라야 할 책

C++을 익히는 데에 주로 사용되는 대부분의 책들은, 문법에 치중되어 있다. 심지어 The C++ Programming Language 마저 그렇다. 우선 이 책은 서점에서 검토해보고 주문한 책이 아니었다. 이 책을 고르며 생각한 이 책의 방향성은 좋은 코딩 좋은 습관처럼 코딩 규칙이나, 가이드 라인에 대한 책인줄 알았다. 실제로 부제목도 코딩 가이...

UDP Hole Punching

홀 펀칭 (Hole Punching) 정확한 명칭은 STUN (Simple Traversal of User Datagram Protocol Through Network Address Translators) 공유기라는 녀석이 라우터의 특성도 함께 가지고 있어 Routing Table 을 작성하기 위해 P2P 통신을 목적으로, 사전에 상대방과 패...

Reliable UDP

Reliable UDP (이하 RUDP)는 신뢰성을 갖는 UDP를 의미합니다. 일반적으로 TCP는 신뢰성을 갖는 대신 느리고, UDP는 신뢰성이 없고 빠르다고 알려져있죠. 여기에 또 하나의 특징은, TCP는 서버 (Listener)와, 클라이언트 (Connector) 관계가 성립한다는 점입니다. 즉, 서버건 클라이언트건 연결 관리가 필요하다는 것...