엘키의 주절 주절

소소한 개발 이야기

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

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

테스트 주도 개발

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

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

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

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

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

네트워크를 훔쳐라 - 그들의 심리를 파악하자

나는 공격하는 자보다는 방어하는 자의 입장이다. 그런데 왜 보안 서적이 아닌 해킹 관련 서적을 보냐고? 보안이란 이미 알려진 취약점을 틀어 막는다고 되는 것이 아니기 때문이다. 해킹이란 단순히 뛰어난 컴퓨터 지식을 기반으로한 공격 기술만을 말하는 것이 아니다. 책의 내용중 해커들이 파고 들 수 있는 시스템 취약점이 많다는 사실은 새삼 놀랠만한 내...

프로그램은 왜 실패하는가? - 체계적인 디버깅 지침서

사실 프로그램 작성 만큼이나, 아니 더 중요할 수도 있는 과정이 디버깅입니다. 보통 버그는 논리적인 오류나 실수에서 자주 발생합니다. 그 코드가 영향을 끼치는 다른 코드에서 세웠던 가정이 깨졌다거나 하는 경우에 발생하기도 하죠. 이 책은 그런 부분의 이야기보다, 실서비스 되기전에 테스트를 어떻게 하면 버그를 잘 찾을 수 있을까, 또 이미 문제가 발...

리팩토링 - 실용적이고, 현실적이며 실천적이었다.

리팩토링이란 좋지 않은 구조의 코드를 좋은 구조로 바꾸는 작업을 말합니다.   돌아가기만 하면 되지 구조가 뭐가 중요하냐고 생각하시는 분들은 아마 유지보수의 악몽을 경험해보시지 않은 분들일 것입니다.   실용주의 프로그래머란 책을 읽어보면 깨진 창문 법칙이란 얘기가 나옵니다.   창문이 하나 깨지고 나면 다른 창문이 깨지는걸 대수롭지 않게 여기게...