엘키의 주절 주절

소소한 개발 이야기

C++ 오류의 원인들

strcpy 등의 길이제한이 없는 함수는 사용하지 않는다 strncpy, memcpy와 같은 함수를 사용하고, 스트링 맨 끝에, 0을 넣어주는 것이 안전하다. 특히나 클라이언트에서 올라온 데이터는 더더욱 그렇다. 포인터 검사는 반드시 하라 포인터 사용시에는 무조건 NULL포인터 검사를 하는 것이 좋다. 바로 쓰고 싶을 경우는 참조자를 사...

패치의 악몽을 피하기 위해

패치시에 문제가 하나도 발생하지 않는다면 얼마나 좋겠냐만은… 패치 과정에서 실수가 생기는 경우가 많은 것이 사실이다. 패치 준비과정에서의 피로와, 수작업으로 인해 사소한 실수가 큰 파장을 일으키는 것이 현실. 주로 점검시에 발생하는 문제는 패치 준비가 제대로 되지 않아 생기는 문제가 많다. 다음은 실 서비스 적용시 문제를 덜 일으키기 위한 방법이다...

서버 프로그래밍시 주의 사항

멀티 쓰레드 시 동기화는 주의 깊게 하라 멀티 쓰레드에서 같은 데이터를 동시에 접근하지 못하도록 동기화는 필수다. 현재 사용중인 데이터가 특정 시점까지 변해선 안 된다면, 데이터 사용이 끝나기 전까지 다른 쓰레드에서 접근이 불가능 하도록 해야 한다. 물론, 동기화를 항시 고려하지 않게끔 이를 구조적으로 분리해두는 것이 더 좋다.   ...

클라이언트 요청 처리에 대한 주의 사항

프로그램은 기본적으로 조건과 상황에 따른 판단과, 결정으로 이루어진다. 네트워크 프로그램은 클라이언트와 상호 작용하기 마련인데, 처음 서버 프로그램을 작성할 때 할 수 있는 실수는 클라이언트를 너무 쉽게 믿어버린 다는 것이다. 클라이언트가 이 약속을 안지키면 어떻게 할 것인가? 클라이언트에 버그가 있다면 어떻게 할 것인가? 정상적인 클...

테스트 주도 개발

사실 저는 테스트를 별로 좋아하지 않습니다. 테스터 분들이 보시면 기분나빠하실지도 모르지만, 개발보다 지루한 작업이기 때문이죠. 하지만 테스트는 언젠가 해야하고, 프로그램의 품질에 지대한 영향을 끼칩니다. 프로그래머는 모든 상황을 생각할 수 없습니다. 현재의 코드가 미칠 여파를 모두 생각해내는건 사실상 불가능하죠. 프로그래머의 논리적 빈틈은 테...

함수의 리턴 값의 주소를 사용하려 할 때 생기는 문제

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 char* GetStr() { static char szStr[] = "Hello"; return szStr; } void PrintStr(char **str) { printf("%s",*str); } int main(int argc, char **a...

코딩시 유념할 점 들

추가 하는 코드에 대해 명확히 이해하라 코드를 추가할 때, 그 코드가 어떤 기능을 하는지 간단한 테스트라도 해라. 처음 시도, 사용하는 알고리즘이나 라이브러리 사용시에는 특히 주의하라. 그 기능을 명확히 이해하지 못하고 사용한다면, 그 것은 우연에 맡기는 프로그래밍을 하는 것이다.   적은 조건을 만족해도 잘 돌아가는 코드를 작성해라 (복...

레이몬드 첸의 윈도우 개발 282 스토리 - 윈도우의 현재를 말해주는 비하인드 스토리

윈도우 개발 스토리? 저는 매우 궁금했습니다. 맥이나 리눅스에 비해 윈도우가 압도적인 점유율을 갖고 있지만 그만한 인정은 못받고 있지만, 저는 윈도우가 매우 뛰어나고 M$라 불릴만큼 악덕 기업은 아니라고 생각하기 때문입니다.  그들은 비주얼 스튜디오 만으로도 존경 받을만하죠. (MS만세~) 레이몬드 첸씨의 이름을 달고 나온 책인 만큼 그가 누구인지...

Art of Unix Programming - 프로그래머가 가져야 할 마음 가짐을 알려주는 좋은 책

제가 프로그래밍을 접한 시기가 97년이고, 윈도우 프로그래밍에 대한 정보를 얻기도 쉽지 않은 시기였습니다. (도서관도 시립 도서관외에는 힘들었고, 집 근처에 도서관이 없던지라 서점에 파는 책들이 전부였죠) 그런 상황에서 유닉스나, 리눅스 프로그래밍은 더 접하기 어려웠고, 그렇다보니 자연스레 윈도우 프로그래머가 되었습니다. 굳이 리눅스를 접해야만 할...

패턴 그리고 객체지향적 코딩의 법칙 - 그들의 경험을 쉽게 이해하는 한가지 방법

이 책은 경험이 쌓이면서 알게되는 진리들 (성급한 최적화, 객체지향 설계가 필요한 이유, 중복 제거가 필요한 이유 등등) 을 쉽게 설명해주고 있습니다. 전공이 컴퓨터 공학이었다보니 선후배나 동기들이 프로그래밍을 어떻게 하면 쉽게 배울 수 있느냐고 물어봅니다. 그런 부분에서는 이 책도 해답이 되긴 힘들다고 생각합니다. 이 책은 프로그래밍의 방법을...