응용프로그램은 혼자 돌아가지 않는다.

개발을 하다보면 이런저런 일이 많이 생기겠지만, 제가 겪은 일 중에 가장 황당한 일은 하드웨어와 연동된 응용프로그램을 개발하면서 겪은일이었습니다. 
** **
**하드웨어로부터 데이터를 받아서 윈도우 프로그램에서 실시간으로 보여줘야하는 프로그램. **
펌웨어 단에서는 실제 많은 필터와 함께 로직이 들어가 있지만, 수 많은 데이터를 처리하기에는 아무래도 PC보다는 당연히 처리속도에 대한 성능이 느린것이 사실입니다. 그렇다면, 과부하가 걸리는 모든 로직이나 필터알고리즘을 PC의 윈도우 프로그램으로 올리는 것이 해답일까요?
**느린것은 사실이다. 그러나, Conversion 이 해답은 아니다. **
 
[![DIY USB Remote Shutter Trigger v2](http://farm4.static.flickr.com/3285/2859564622_d0c8b52dab.jpg)](http://www.flickr.com/photos/65701179@N00/2859564622 "DIY USB Remote Shutter Trigger v2") DIY USB Remote Shutter Trigger v2 by [Roger Smith](http://www.flickr.com/photos/65701179@N00)[![저작자 표시](http://cfs.tistory.com/static/admin/editor/ccl_black01.png)![비영리](http://cfs.tistory.com/static/admin/editor/ccl_black02.png)![변경 금지](http://cfs.tistory.com/static/admin/editor/ccl_black04.png)](http://creativecommons.org/licenses/by-nc-nd/2.0/kr/)
분명 펌웨어 라는것은 성능상의 한계를 가지고 있습니다. 때문에 데이터를 처리하는 과정에서 과부하가 심하게 걸리는 로직이나 그러한 부분은 PC에서 처리하는게 맞겠지요. 하지만, PC와 작은 하드웨어를 비교할때 단순히, CPU와 Ram의 숫자놀이로만 비교해서는 안됩니다. 그러한 비교를 통해서 펌웨어의 로직을 너무 많이 응용프로그램 단으로 가져오게 되면 반드시 문제가 생기게 됩니다. 특히, 실시간이 생명이 응용프로그램은 말이죠. 
**우린 사용자의 환경을 모른다. **
**
 
**
[![Working](http://farm4.static.flickr.com/3258/2400635097_c0d3bd7e64.jpg)](http://www.flickr.com/photos/8357376@N04/2400635097 "Working") Working by [totalAldo](http://www.flickr.com/photos/8357376@N04)[![저작자 표시](http://cfs.tistory.com/static/admin/editor/ccl_black01.png)](http://creativecommons.org/licenses/by/2.0/kr/)
가장 큰 문제는 바로 사용자의 PC 환경입니다. 단순히, PC의 하드웨어 스펙이 아니라, 실제 사용자가 윈도우 상에 우리회사의 소프트웨어 말고 다른 어떤 응용프로그램을 실행 시켜놨냐가 관건이라는 것입니다. 메신저도 돌아가고, 윈도우 파일 검색도 돌아가고, 조각모음도 하면서, 자사의 실시간 소프트웨어를 실행시켜서 좋은 Performance를 기대하기란 쉽지 않습니다. 특히, 실시간으로 사용자에게 무엇인가 보여주어야 하는 프로그램이라면 더더욱 그렇습니다. 
**사용자 중심의 소프트웨어 최적화가 필요하다. **
**
 
[![Kitchen Cupboard Make-Over: After](http://farm4.static.flickr.com/3621/3350514337_93c08d1f78.jpg)](http://www.flickr.com/photos/49488259@N00/3350514337 "Kitchen Cupboard Make-Over: After") Kitchen Cupboard Make-Over: After by [Pieter Pieterse](http://www.flickr.com/photos/49488259@N00)[![저작자 표시](http://cfs.tistory.com/static/admin/editor/ccl_black01.png)![비영리](http://cfs.tistory.com/static/admin/editor/ccl_black02.png)](http://creativecommons.org/licenses/by-nc/2.0/kr/)
**
**
**
**
**
**
**
**
**
**
**            사용자 중심의 소프트웨어 최적화가 필요하다는 생각이 듭니다. ****
 
**
**
**
**
**
**
**
사용자가 우리가 만든 프**
**
**
**
로그램에서 기**
**
대하는 것이 무엇인지 먼저 고민을 해 봐야 합니다. 실시간 그래프를 보여주는 것이 목적인 심전도 디스플레이 프로그램이라면, 정확한 실시간성이 보장되어야 겠지요. 그렇다면, 사용자가 어떤 환경에 있더라도 실시간 성이 보장될 수 있도록 최적화 해야 한다고 생각합니다. 
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
사용자의 PC는 개발자의 PC와 다릅니다. 때문에 많은 응용프로그램을 켜두고 테스트 하면서, 사용자가 우리 프로그램에 대해서 어떻게 느낄지를 곰곰히 생각해 나가면서, 응용 프로그램의 최적화를 시작해야 한다고 생각합니다