강좌,팁

[강좌:40] CIS Project를 시작하며...

조회 수 8429 추천 수 0 2011.12.29 19:37:52
2008년 5월에 [팁:19]를 마지막으로 약 2년 반동안 강좌나 팁을 올리지 못하였네요. 프로젝트에 쫓기면서 CVI정보나눔 사이트도 제대로 돌아보지 못하였습니다. 이제는 업무관리능력의 향상으로 인해 다시 안정을 되찾고, 그 동안 마음 속으로만 꿈꾸어오던, 이전보다 더욱 큰 나눔을 실천할 준비가 되었습니다. 이제 큰 발걸음을 다시 걷기 시작합니다.

---------------------------------------------------------------------------------------

[강좌:40] CIS(CVI Informaton Sharing,CVI정보나눔) Project를 시작하며


강좌분류: 개요설명
등급: 중급이상


차례
서론
1. CIS Project란?
2. CIS Project를 시작하게 된 배경
3. CIS Project의 큰 범주

 

서론
이번 강좌는 제가 1999년부터 지금(2011년 12월)까지 12년정도 LabWindows/CVI를 이용하여 각종 프로젝트를 수행하면서 하나씩 갖추어진 프로그래밍 스킬, 스타일 등을 보다 많은 분들과 공유하기 위해 CIS Project라고 이름붙인 프로젝트에 대해 개요를 소개하는 강좌입니다. 이 CIS Project를 통해 우리나라뿐 아니라 전세계적으로 장비 소프트웨어 산업에 이바지함과 동시에 수많은 일자리를 창출하는 데에 일조하기를 원합니다. 저의 이 소망은 반드시 이루어질 것을 확신합니다.(이 글을 쓰고 있는 지금은 거의 모든 분들이 웃으실 지 몰라도, 저는 결코 낙심하지 않습니다. 저는 분명하게 믿기 때문입니다. 화이팅~~)


1. CIS Project란?
CIS란 약어는 CVI Information Sharing에서 따온 것이며, CVI 정보나눔을 영어로 적어본 것입니다. (영어가 모국어가 아니다보니 제대로 된 표현인지는 잘 모르겠습니다. 어슬퍼 보여도 그려러니하고 이해해 주시기 바랍니다. 영어로 적어본 이유는 글로벌화되는 흐름에 부응하기 위해서입니다.)


CIS Project를 설명하려니까, 제 인생여정을 일부 소개하지 않을 수가 없네요.


저는 1988년 대학 2학년때 처음으로 C언어에 대해 지도교수님께로부터 알게 되었고, 혼자 C언어를 터득해 나가며 프로그래밍의 매력에 빠졌습니다. 대학원 시절에는 Borland C++, MATLAB 등을 이용하여 오다가 1999년 한국전기연구원(KERI)에 위촉연구원으로 근무하기 시작하면서 IDL, LabWindows/CVI를 접하게 되었습니다.
산업계 표준으로 자리를 잡아가는 Visual C++을 본격적으로 이용하려던 마음을 일단 접게 되면서 그 이후로 저의 주 개발툴은 LabWindows/CVI (이하 LW, 혹은 CVI)가 되었습니다. 장치와 연관되는 프로그램 분야에 CVI는 매우 매력적이었습니다. 그 전에는 일일이 그래픽함수로 그려대던 그래프가 아예 내장된 컨트롤로 제공이 되니 말입니다.


2001년에 소속된 그룹이 수도권으로 옮겨가면서 저는 극동테크라는 상호로 개인사업을 시작하게 되었습니다. 2009년에 새로운 개인사업체로 재창업하였습니다만, LabWindows/CVI를 주개발툴로 이용하는 프로그램 개발자로서의 길은 변함없이 걸어오고 있습니다.
창업 이후, 여러 분야의 다양한 프로그램 개발을 닥치는대로 했습니다. 대부분은 측정, 검사와 관련된 프로그램이었습니다만, 관공서에 들어가는 산불감시용 프로그램, 연구개발용 풍력발전 모니터링, 주유소 음성안내, 소방방송 운용시스템 등 특이하며 다양한 분야의 프로그램들도 개발하게 되었습니다.
뒤돌아보면, 이렇게 다양한 분야를 접하게 된 이유는 적정한 소프트웨어 개발비에 대해 잘 몰랐기 때문에 일을 가리지 않고 해야만 했던 것 같습니다. 어쨌거나 매번 새로운 프로그램들을 많이 개발하다 보니, 프로그램 개발시에 공통적으로 수행하는 부분들이 눈에 띄게 되었습니다.


프로그램 실행시에 초기화와 관련된 부분들, 실행시의 설정을 다음 실행시에도 그대로 유지하기 위한 체계(초기설정파일, 저는 INI 체계라고 부름), 프로그램 종료시에 처리할 부분들, 그리고 자주 이용되는 기능을 모아서 라이브러리로 만들어 두는 것들, Identifier (식별자: 변수명, 함수명, 컨트롤 및 Panel 명 등) 부여 규칙 등이 보다 더 효율적인 방향으로 점차 정립되어 갔습니다. 그리고 이러한 제 나름의 스타일이 반영된 Prototype 프로그램을 만들어 두어서, 새로운 프로그램 개발을 시작할 때, 이 Prototype 프로그램 소스로부터 파일명, 변수명, 함수명 등을 일괄적으로 바꾸어서 새로운 프로젝트를 빠르게 구성하는 방법을 사용하게 되었습니다.


간단히 정리하면, 보다 효율적인 프로그램 개발을 위해 Protorype Program Source, 나중을 위해 차곡차곡 만들어나간 정적 및 동적 Library, Identifier 부여규칙을 비롯한 각종 Programming Style 등이 쌓이게 되었습니다.


이러한 저 나름의 방법들이 쌓여 나감에 따라 많은 기반을 갖게 되었지만, 이것들은 극동테크라는 제 개인업체의 명칭을 주로 사용하였으므로, 다른 개발자들에게 소개하기에는 좀 멋적은 일이라고 생각되었습니다.
예를 들어보면, KDManip.dll 이라는 DLL 파일은 KD(극동테크)의 Manipulation 함수들을 모아둔 라이브러리입니다. KD라는 약어는 극동테크라는 의미를 가지므로 보편적으로 이용하려는 분들에게는 명칭부터 공공성이 결여되어 부담스러울 뿐 아니라, 프로그램의 소스도 공개되어 있지 않아 신뢰감을 주기에도 걸림돌이 되었습니다. 그리고, 많은 함수가 추가되고, 자꾸 쌓이다 보니 과감히 손질해야할 부분도 생기게 되었습니다.


그리하여, 보다 보편적이며, 친근하며, 신뢰감도 줄 수 있는 CIS Project를 생각하게 되었습니다. CVI 정보나눔이라는 보다 공익적인 목적의 사이트 명칭을 이용하게 된 것입니다.


2. CIS Project를 시작하게 된 배경
앞에서도 말씀드렸지만, 현재까지 저는 개인사업자입니다. 프리랜서라는 용어는 그 의미가 포괄적이라서 저를 설명하기에는 애매~합니다.
정식으로 사업자등록을 한 일반과세자인 개인사업자이지요. 사업자등록을 하지 않고, 자유롭게 계약하고 프로그램을 개발하는 사람들을 생각하면 왠지모를 뿌듯한 자부심도 가지고 있습니다. (사업자등록은 누구나 할 수 있습니다. 세무서에 가서 사업자등록 신청서만 내면 곧바로 사업자가 됩니다.)


프로그램 개발업을 하는 개인업체이다보니, 주로 거래하게 되는 업체는 장비를 만드는 업체입니다. 기구부, 기계, 전기, 전자장치, 컴퓨터 등을 이용하여 측정 및 검사 장비를 만들면 그 장비를 운용할 프로그램이 필요하게 되죠!
좀 큰 장비제조업체에서는 프로그래머도 고용해서 운용 프로그램을 개발하지만, 프로그래머를 고용해서 유지해 나간다는 것이 쉽지는 않은 것 같습니다. 프로그래머의 이직은 장비업체로서는 큰 손실로 이어지기도 하는 것을 많이 보아 왔습니다. 그래서 전문적으로 프로그램을 개발하는 업체도 필요한 것이겠지요.
그런데, 프로그램 개발업체도 나름대로 어려움이 있습니다. 개발의뢰가 꾸준하게 들어온다는 것을 기대하기 어렵고, 개발하는 프로그램이 그때 그때 다르며, 적정한 개발비를 받는 계약을 하기가 쉽지 않다는 것입니다. 개발범위도 애매한 경우가 많습니다. 이런 문제들은 사업경험이 쌓이지 않고는 좀처럼 풀기 어려운 문제이기도 합니다.


어쨌거나 장비업체 사장님들로서는 프로그램에 대해 많은 고민을 안고 있습니다. 그 고민 중 상당부분은 개발자가 바뀌었을 때, 대부분은 처음부터 새로 개발해야 한다는 부담입니다. 앞번 개발자의 내용을 그대로 이어받아 안정적인 프로그램으로 완성하기는 경험상 매우 힘들기 때문입니다. 특히 장비 관련 프로그램에서는 말이죠!


프로그램 개발자의 입장에서도 앞번 개발자의 프로그램을 별다른 해설 없이 파헤쳐 나간다는 것이 정말로 머리 아픈 일이죠! 복잡해서 머리 아프고, 안풀려서 골 아픈 것이죠!


그래서 저는 생각했습니다. 장비업체 사장님께도, 장비 프로그램 개발자에게도 도움을 줄 수 있는 방법이 없을까 라고 말입니다.
그 동안의 프로그램 개발경험과 사업경험을 통해 LabWindows/CVI를 개발툴로 이용하는 개발자들과 프로그래밍 스타일을 공유함으로써 보다 안정적인 프로그램 개발 환경을 구성해 나갈 수 있다는 것입니다. 즉, CVI 프로그램 개발자들이 서로 공감하는 스타일로 프로그램 구조를 구성해나간다면, 프로그래머 간에 소스 코드를 쉽게 통용해서 사용할 수 있으며, 이렇게 공감하는 스타일의 프로그램 소스라면 개발자가 바뀌어도 이전보다 훨씬 쉽게 적응하고 개발 완료 방향으로 나갈 수 있으리라고 봅니다. 이는 개발자와 사업자, 그리고 발주자 모두에게 이익이 되는 것입니다.


3. CIS Project의 큰 범주
이제 제가 구상하는 CIS Project의 범주, 혹은 방향에 대해 간단히 언급하려고 합니다. 다음 세가지를 제시하는데요, 서로가 밀접하게 연관되어 있어서 완전히 분리하여 생각하기는 어렵습니다. 크게 아래의 세 가지가 되겠습니다.


- CIS Programming Style
초기화 과정, 마무리 과정, INI 체계, 통합헤더파일의 사용, 구조체 전역변수의 활용, Panel 명 부여규칙, Control 명 부여규칙, 파일명 부여규칙, C언어로 객체 구성하기, 상태처리(State Machine이라고 주로 불리는) 등의 주제들을 다룹니다. 포괄적이고, 원론적인 내용이 많을 것이며 이것이 구체화된 것이 CIS Prototype Program이 됩니다.


- CIS Protype Program
언제든지 복제해서 새로운 프로그램을 쉽게 구성해 나갈 수 있는 쓸 만한 Prototype Program Source를 구성해두는 것입니다. 이 Prototype Program Source는 계속해서 추가되고, 수정되며 발전되어 나갈 것입니다. 경우에 따라서는 용도별로 별개의 Prototype Program으로 구비해 두는 것도 좋을 것입니다. 이러한 Prototype Program들은 일반적으로 소프트웨어공학에서 말하는 디자인 패턴 개념으로 이해할 수 있을 것 같습니다. 대표적인 프로그램 프로젝트 명은 CISDEFPROG.prj 입니다.


- CIS Library
프로그램 개발자라면 누구나 나중을 위해 자신만의 함수들을 만들어서 라이브러리로 모아 나갈 것입니다. 저(혹은 저희들)도 CIS 라는 이름으로 통일된 라이브러리를 만들어 가면서 효율적인 프로그래밍 환경을 만들어 나가게 됩니다. 대표적인 라이브러리 파일이 CISManip.dll 이 될 것입니다.

 


이 글을 쓰는 현재, CISDEFPROG v1.0.001(2011.12.23)과 CISManip.dll v1.0.002(2011.12.23)이 만들어져 있습니다. 기존에 극동테크에서 자체적으로 만들어 사용하던 DEFPROG와 KDManip.dll을 조금씩 추출해서 차근차근 갖추어나갈 것이며, CVI 정보나눔의 여러 고수님들과 사용자분들의 의견을 반영하며 나가기를 희망합니다.

 

---------------------------------------------------------------------------------------

오랜만에 강좌를 다시 시작하게 된 것을 감사합니다. 2011년도가 넘어가기 전에 새로운 첫 발걸음을 뗄 수 있게 되어서 다행입니다.
장비를 제조하는 업체와 LabWindows/CVI를 이용하는 프로그램 개발자 모두에게 사랑받는 CVI정보나눔이 될 것입니다. 단언컨대, 장비업체는 유능한 CVI 개발자들을 확보하게 될 것이고, CVI 개발자들은 많은 안정적이고 근사한 일자리 중에서 자신의 자리를 고를 수 있게 되고 높은 연봉을 받게 될 것입니다.


본 강좌 문서작성 소요시간: 3시간 25분

2011.12.29 목


극동테크(www.kdtechno.com), CVI 정보나눔(www.cvi.kr) 허창원 드림


고려대 카시모프

2012.01.03 21:10:59
*.152.55.11

와아!!! 여기서 열심히 정보를 얻고 있는 학생입니다! 강의 재개 해주셔서 너무 감사해요 ㅋㅋㅋㅋ

허창원

2012.01.03 22:27:59
*.22.131.199

감사합니다. 큰 격려가 되고 힘이 됩니다. 지금 CISDEFPROG 관련 강좌글을 열심히 작성하고 있는 중입니다. 너무나 감사합니다.

작은곰자리

2012.01.16 16:30:45
*.45.30.154

저도 강의 기대합니다.

 감사합니다.

KCO

2012.01.26 23:16:12
*.70.20.71

저도 이곳을 CVI 프로그램 의지 처로 삼고 있습니다.

나눔의 좋은 의지, 좋은 결실로 아름다운 열매가 되기를 기원합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
116 [팁] 컨트롤의 tooltips 지정하기 file 허창원 2020-05-08 389
115 멀티쓰레드 사용 시, 메모리 관련 참고사항입니다. [1] 요돌이 2017-10-24 1092
114 [팁]타이머 사용시 주의할점. file 이현화 2014-02-13 2535
113 Lable 세로쓰기 [1] 초보 2013-12-21 2668
112 [강좌:45] ini 파일 이용하기(CISManip.dll 활용) [2] 허창원 2013-05-29 3876
111 [강좌:44] ini 파일 이용하기(기본 활용) [1] 허창원 2013-05-29 5159
110 [강좌:43] Panel 크기 변경시에 컨트롤의 위치나 크기 조절하기(CISManip.dll 활용) 허창원 2013-03-12 6456
109 [강좌:42] Panel 크기 변경시에 컨트롤의 위치나 크기 조절하기(기본 활용) 허창원 2013-03-12 7072
108 [팁21] 그래프를 지우고 그릴때의 plotHandle을 구하는 방법 [1] 야리싸내 2012-05-25 7457
107 [강좌:41] Prototype 프로그램 CISDEFPROG 소개 [1] [1] 허창원 2012-01-03 8670
» [강좌:40] CIS Project를 시작하며... [4] 허창원 2011-12-29 8429
105 ------------- 이제 새로운 지평이 열립니다 ------------- 허창원 2011-12-29 8835
104 [팁]그룹명령(고수님들은 패스~ ^^;) file [2] 이현화 2009-06-15 23113
103 [KD스타일규칙] Panel, Control, Function 에 대한 이름부여규칙 file 허창원 2008-10-15 20960
102 [팁]Elaped Time [1] 이현화 2008-10-15 26401
101 [팁:19] 시리얼 포트 모니터링(Serial Port Monitoring) 유틸리티 소개 [9] [1] 허창원 2008-05-12 95060
100 [팁:18] CVI에서 ActiveX 컨트롤 사용하는 절차 file [2] 허창원 2008-04-07 30959
99 [강좌:39] 입맛대로 좀더 편리하게 배포용 설치 프로그램 만들기(CVI 8.5 이용) [1] [1] 허창원 2008-03-14 22994
98 [강좌:38] 배포용 설치 프로그램 만들기(CVI 8.5 이용) 허창원 2008-03-14 22899
97 [팁]간단한 최소화 기능개선입니다. 김민수 2007-10-05 24105