2005년 10월 15일
PDA프로그래밍을 하다...
그럭 저럭 회사에 어느 정도 적응을 하게 될 무렵 나에게 새로운 임무가 주어졌다.
바로 PDA 프로그래밍...
그 당시 진행 중인 프로젝트가 모 이동통신 업체의 통신 접속 프로그램을 개발하는 것이었는데 개발 플랫폼 대상이 Windows 2000/XP 및 Windows CE 였다.
그런데 회사에 PDA 프로그래밍을 할 줄 아는 사람이 전혀 없었기에 이왕 이렇게 된거 신입한테 맡겨 보자...뭐 이런 심산이었나 보다.
어쨌든 그 때부터 나는 embeded VC++를 가지고 PDA 프로그래밍을 공부하기 시작했다. 다행히 개발툴 및 언어 자체는 VC++와 큰 차이가 없었지만 전혀 생각지 못한 부분들에서 문제를 일으키곤 했다. 예를 들어 PC에서는 전혀 문제가 없던 프로그램이 PDA에서는 실행하자마자 죽어서 디버깅을 해보니 함수 내부에서 다소 큰 사이즈의 구조체 배열을 선언한 부분이 스택 오버 플로우를 일으킨 다거나 메모리 참조 오류가 발생해야 할 부분에서 그냥 함수가 리턴되어 버린다거나 하는 것들이 그것이었다.(지금도 그런지 모르겠지만 그 당시 embeded VC++ 3.0에서는 오류가 난 부분에서 프로그램이 죽지 않고 그냥 함수가 리턴되버리는 현상이 있었다.)
어쨌든 그런 일들이 몇 번 벌어지자 나는 PDA 자체를 불신하기 시작했다. 그리고 그 때부터 뭔가 내가 예상하지 못했던 기이한 현상들이 벌어지면 무조건 PDA 탓으로 돌리기 시작했다.
한 번은 메인 스레드에서 이벤트 처리를 위한 별도의 스레드를 생성하였는데 스레드를 생성하고 나면 메인 스레드가 정상적인 메시지 처리를 하지 못하는 현상이 발생했다. 고민 끝에 이벤트 처리 스레드의 권한을 메인 스레드보다 낮췄더니 그런 현상이 사라졌다. 그래서 난 역시 CE 플랫폼이 성능이 떨어져서 스레드 스케쥴링을 잘 못하나 보다...하고 플랫폼 탓을 하고 있었다. 그런데 알고 보니 이벤트 처리 스레드에서 WaitForMultipleObjects() API의 파라미터를 내가 잘못 준 바람에 계속 무한 루프를 돌며 에러를 리턴하고 있었던 것이고 그래서 이벤트 스레드가 CPU의 거의 대부분을 점유하고 있었던 것이다.
그 이후에도 비슷한 일이 자주 발생했다. 내가 짠 소스를 제대로 검증하지 않은채 뭔가 이상한 현상이 생기면 무조건 CE 플랫폼을 의심한 것이다.
물론 팀장님도 PDA 프로그래밍을 해보지 못했기에 내가 PDA탓이라고 우기면 그냥 그런가 보다 생각했었다. 그러나 실재 내가 PDA 탓으로 돌렸던 거의 대부분의 문제점들이 나중에는 내가 잘못 프로그래밍한 것이 원인이었다. 결국 내가 무지한 것은 생각하지 않고 엉뚱한 플랫폼 탓만 한 것이다.
아마도 지금 그 당시 짰던 프로그램 소스를 본다면 웃음만 나올지 모르겠다.(어쩌면 욕이 나올지도 모르고...) 프로그래밍을 제대로 시작한지 몇 달이나 됐다고 모든 문제를 플랫폼 탓이나 하고 있었으니 참으로 기고 만장, 건방진 생각이었던 것이다.
그 이후에도 비슷한 경험이 있었다. 처음 STL을 접했을 때 난 VC++6.0의 STL에 버그가 있다는 이야기를 어디선가 들었었다. 때문에 STL을 제대로 알지 못하는 상태에서 혹시라도 STL을 사용한 구문에 뭔가 문제가 생기면 STL의 버그가 아닐까? 하는 의심부터 했었다. 물론 2년 가까이 STL을 사용하면서 실제 STL의 버그로 인해 프로그램에 문제가 생긴 적은 없다. 그러나 내가 STL을 잘못 사용해서 버그가 발생한 적은 아마 수백 번이 넘을 것이다.
'실용주의 프로그래머'라는 책을 읽어 보니 이와 비슷한 이야기가 나온다.
어쨋든 내 소스를 의심하기 전에 시스템이나 라이브러리를 의심하는 일은 절대적으로 경계해야 할 일이다. 그리고 그것을 PDA 프로그래밍 경험을 통해 깨달을 수 있었다.
바로 PDA 프로그래밍...
그 당시 진행 중인 프로젝트가 모 이동통신 업체의 통신 접속 프로그램을 개발하는 것이었는데 개발 플랫폼 대상이 Windows 2000/XP 및 Windows CE 였다.
그런데 회사에 PDA 프로그래밍을 할 줄 아는 사람이 전혀 없었기에 이왕 이렇게 된거 신입한테 맡겨 보자...뭐 이런 심산이었나 보다.
어쨌든 그 때부터 나는 embeded VC++를 가지고 PDA 프로그래밍을 공부하기 시작했다. 다행히 개발툴 및 언어 자체는 VC++와 큰 차이가 없었지만 전혀 생각지 못한 부분들에서 문제를 일으키곤 했다. 예를 들어 PC에서는 전혀 문제가 없던 프로그램이 PDA에서는 실행하자마자 죽어서 디버깅을 해보니 함수 내부에서 다소 큰 사이즈의 구조체 배열을 선언한 부분이 스택 오버 플로우를 일으킨 다거나 메모리 참조 오류가 발생해야 할 부분에서 그냥 함수가 리턴되어 버린다거나 하는 것들이 그것이었다.(지금도 그런지 모르겠지만 그 당시 embeded VC++ 3.0에서는 오류가 난 부분에서 프로그램이 죽지 않고 그냥 함수가 리턴되버리는 현상이 있었다.)
어쨌든 그런 일들이 몇 번 벌어지자 나는 PDA 자체를 불신하기 시작했다. 그리고 그 때부터 뭔가 내가 예상하지 못했던 기이한 현상들이 벌어지면 무조건 PDA 탓으로 돌리기 시작했다.
한 번은 메인 스레드에서 이벤트 처리를 위한 별도의 스레드를 생성하였는데 스레드를 생성하고 나면 메인 스레드가 정상적인 메시지 처리를 하지 못하는 현상이 발생했다. 고민 끝에 이벤트 처리 스레드의 권한을 메인 스레드보다 낮췄더니 그런 현상이 사라졌다. 그래서 난 역시 CE 플랫폼이 성능이 떨어져서 스레드 스케쥴링을 잘 못하나 보다...하고 플랫폼 탓을 하고 있었다. 그런데 알고 보니 이벤트 처리 스레드에서 WaitForMultipleObjects() API의 파라미터를 내가 잘못 준 바람에 계속 무한 루프를 돌며 에러를 리턴하고 있었던 것이고 그래서 이벤트 스레드가 CPU의 거의 대부분을 점유하고 있었던 것이다.
그 이후에도 비슷한 일이 자주 발생했다. 내가 짠 소스를 제대로 검증하지 않은채 뭔가 이상한 현상이 생기면 무조건 CE 플랫폼을 의심한 것이다.
물론 팀장님도 PDA 프로그래밍을 해보지 못했기에 내가 PDA탓이라고 우기면 그냥 그런가 보다 생각했었다. 그러나 실재 내가 PDA 탓으로 돌렸던 거의 대부분의 문제점들이 나중에는 내가 잘못 프로그래밍한 것이 원인이었다. 결국 내가 무지한 것은 생각하지 않고 엉뚱한 플랫폼 탓만 한 것이다.
아마도 지금 그 당시 짰던 프로그램 소스를 본다면 웃음만 나올지 모르겠다.(어쩌면 욕이 나올지도 모르고...) 프로그래밍을 제대로 시작한지 몇 달이나 됐다고 모든 문제를 플랫폼 탓이나 하고 있었으니 참으로 기고 만장, 건방진 생각이었던 것이다.
그 이후에도 비슷한 경험이 있었다. 처음 STL을 접했을 때 난 VC++6.0의 STL에 버그가 있다는 이야기를 어디선가 들었었다. 때문에 STL을 제대로 알지 못하는 상태에서 혹시라도 STL을 사용한 구문에 뭔가 문제가 생기면 STL의 버그가 아닐까? 하는 의심부터 했었다. 물론 2년 가까이 STL을 사용하면서 실제 STL의 버그로 인해 프로그램에 문제가 생긴 적은 없다. 그러나 내가 STL을 잘못 사용해서 버그가 발생한 적은 아마 수백 번이 넘을 것이다.
'실용주의 프로그래머'라는 책을 읽어 보니 이와 비슷한 이야기가 나온다.
어쨋든 내 소스를 의심하기 전에 시스템이나 라이브러리를 의심하는 일은 절대적으로 경계해야 할 일이다. 그리고 그것을 PDA 프로그래밍 경험을 통해 깨달을 수 있었다.
# by | 2005/10/15 12:42 | 개발일기 | 트랙백 | 덧글(1)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
매우 옳으신 말씀입니다. 헬기조종 처음 배울 때 제자리비행(하버링) 잘 안되는 원인에 대해 바로잡으려는 노력보다 다른 곳에서 원인을 찾으려고 했었죠. 역시 시간이 지나면서 내가 정말 잘못했었고 어리석었구나 하는 것을 알게되더군요.
이제는 노트북 넷북의 시대가 아니라 모바일 문화가 활짝 열릴텐데 저도 PDA프로그래밍을 이제 막 시작하였답니다. 컴퓨터는 정말 일찍 만졌지만 프로그래밍은 정말 늦게 시작했답니다. 종종 들러서 한 수 배워가겠습니다. ^^