PROGRAMMING WORKSHOP

VB.Net | 왜 엑셀에서 VB.Net으로 좀 더 확장하려는 욕구가 생길까?

VB.Net을 시작하면서 먼저 하여야 할 이야기를 이제 한다..
왜 VB.Net을 통하여 .Net FrameWork의 프렛폼을 활용하고 싶어지게 되나??
우선 사람은 발전지향적이고..성장지향적이고..또한 그런 욕구속에서 산다
라는 거창한 소리보다는..
엑셀프로그래밍을 어느 정도 하다 보면 하나의 욕구가 생긴다
내가 작성한 코드를 어떻게 보안을 하여 남이 못보도록 할 수 있을까?
그냥 허접한 코드가 아닌..
내가 수십년간 일을 하면서 얻은 특정한 일에 대한 노하우를
표현한 코드인데 ..남이 쉽게 보고 카피하면 문제다..
이런 욕구에 대한 답중의 하나가 바로 VB.Net으로의 확장인 셈이다
사람들은
이삼십년간 쐐빠지게 일하고 직장을 은퇴하니 아무것도 건진것이 없다
이것은 잘 못된 생각이다
아무리 무가치하여 보이는 일이라도
일을 하는 곳은 정보가 계속 발생한다
정보의 발생이란 남이 겪지 못한 경험의 발생인 것이다
이런 정보를 체계적으로 잘 관리한다면 이것은 필요한 사람들에게는
귀중한 비싼 정보가 된다
에이..이것..모두 다 아는 정보인데..뭐 가치가 있겠어요??
본래 쓰레기속에서 보물을 건지는 것이다
아주 험하고 열악한 곳에서 보물을 건지는 것이다
그냥 험하고..열악한 곳을 별로 관심있게 보려고 하지 않아서
아무것도 건지지 못하고 사는 것이다
좀 다르게 보는 눈을 갖고 세상을 본다면 아무 쓰잘데 없는 정보라도 가치있는
정보가 된다..
에이..영업한다고 허구헌날 술상무노릇만 하는데 뭔 정보를
관리합니까!@# 말이 되는 소리를 허슈..!!
라고 하는 말 자체가 스스로 가치없는 것을 만드는 소리다
그런 속에 아무도 얻지 못하는 정보들이 숨어 있다

또한 일을 하다 보면 나름대로의 계산 로직이 선다..
이럴 경우에는 어떤 요소가 판매에 지대한 영향을 주고
어떤 경우에는 또 다른 요소가 관리상에 문제가 되고..
나름대로의 계산 요소(다양한 변수들)들이 파악되고 그렇게
일을 하면서 지낸다..
경험에서 얻어낸 변수들이다..
이것이 어떤 결과를 얻어내는 로직이 되고 이것은 남에게
보여주고 싶지 않은 계산 로직이 되는 것이다

그래서 엑셀로 프로그래밍을 했는데..하자 마자 언놈이 베껴버렀다
이러면 되겠는가??!!안된다...!!
언젠가..엑셀로 화학생산공정시스템이 돌아가는 회사의 것을
직원놈이 경쟁사로 갖고 들구 튀어서 소송이 붙어서
관련 법조인들에게..엑셀프로그래밍이란 뭔가??를
설명하여 주었던 기억이 난다
들고 튄놈의 주장은 이렇다..
"이거 엑셀은 아무나 하는 것인데..이게 뭐 그렇게 대단합니까??"
엑셀수식은 그냥 아무나 사용하는 것 아닙니까??
전혀 개념이 없었다..
단순한 함수가 문제가 아니다..함수는 누구나 사용하라고 만든것이다
그러나 함수를 조합한 수식은 수식을 만든 사람의 노하우이고
지적재산이다
예를 들어서 매일 올리는 Daily Snippet은 단순한 사용방법의 예제이다
이것을 조합하여 목적하는 바를 만드는 것은 만든 사람의 재산인것이다
너무 안타까운 일이였다..
그래서 자신이 만든 것은 [자신이 보호해야할 의무]가 있는 셈이다
사장이 미국유학에서..미국회사에서..경험치를 엑셀의 변수에
모두 걸고 상황에 따라 생산품의 제원이 결정되는 좋은 도구인데..
생산원가와 공정기간을 엄청 단축하는..
철따구니 없는 직원이 갖고 튄 것이다..

그래서 자신의 열정과 경험이 담긴 코드..그런 코드들은 보호되어야 하고
그렇게 코드를 잘 보호하는 차원에서의 확장이 VB.Net으로
확장이 되는 셈이다
그러니 관심을 갖을 만한 대상이 되는 셈이다

또한 소루션을 판매를 목적으로 하거나 외부크라이언트에게 소루션을
만들어서 제공해주거나 할때는 VBA+.Net FrameWork이 되어야
가치가 올라간다
대개의 크라이언트들은 웹에 뭔가 만들어주어도..
윈도우폼으로 무엇을 만들어 주어도..
항상 찜찜한 표정이다..
뭔가 불편한 것이다
저어기요..엑셀같이 만들수는 없나요???
라는 이야기가 결론이 된다
그러니 엑셀+웹+윈도우폼같은 복합형태가 되는 것이고
사용자의 화면에는 엑셀이 제일 친화적인 모습이 되는 것이다
그러니..좀더 파워를 붙이기 위하여서는 가는 코스가 되는 셈이다

그러니 ..엑셀프로그래밍을 하면서 부족함을 채워주는 것이 나올 때가 되었는데..
되었는데...하였던 것이 .Net framework이고, VB.Net인 셈이다

예를 들어서 웹으로 만들서 데이타도 입력하고 수정하고
분석도 하고 하는 것을 만들어 주었는데..
고객은 아무래도 웹상에서 뭔가 입력하고 편집하는 것이 낯섫은 것이다
엑셀로 할수 없어요???
당연 할수 있다
문제는 보안이다
웹써버에 접근하려면 패스워드도 넣고 아이디도 넣어야 한다
그런데 VBA로만 만들고 아무리 잠궈놓아도 시중에 있는
패스워드깨는 도구(외국제품)를 사서 돌리면 한방에 깨진다
이 써버는 완존 노출되어 버리는 셈이 되는 것이다
그래서 앞페이지에서 만든 크래스라이브러리에 단순한 패스워드와 아이디만
있는 정보를 COM라이브러리를 만들거나 Assembly화일을 만들어서
엑셀이 참조하게 되면 이 보안문제는 해결이 되는 것이다

참..VBA로만 작성하고 패스워드가 깨진다면 이것도 약올르는 일이다
아래는 VBA패스워드도깨지만 VBA패스워드를 좀더 강력하게 잠구는
소루션을 제공하는 곳이다
참고하시면 좋을 것이다



잠구는 툴로 잠구고 깨보려고 하니 안깨지는 것을 보니 쓸만하다
패스워드를 잃어먹어서 코드수정에 낭패를 보는 일이 있다면
몇불 안하니..사서 깨면 고민 끝이고..
잘 작성한 프로그램의 코드를 감추고 싶다면
몇불 안하니 사서 잠궈버리면 어느 것으로 깨도 안깨지더군..

dll화일은 바이너리로 콤파일된 것이라서 깨볼수가 없는 것이다..
물론..세상에 안깨지는 것이 없겠지만
현재까지는 제일 안전한 것이다
그래야 안전하게 팔수 있는 물건이 되는 것이다
물론 데스크탑에서 회사자체내에서 사용하는 도구들은
VBA하나면 짱이다...
그러나 이것도 직원이 경쟁사로 들구 튄다면 문제이고..

또..다른 하나는
엑셀 VBA코드는 눈감고도 한다..라는 자만심에서 빠지지 않기 위함이다
또 다른 확장영토가 있다는 것을 안다는 것은 참으로 행복한 일이다
VBA이전에는 Excel 4 Macro language 라고 하는 것이 있었다
매크로 랭귀지..지금도 시트탭을 오른쪽마우스로 크릭하면
[삽입..] 이 있고 이것을 크릭하면 대화상자가 나타나고 이곳에는
지금은 아무도 사용하지 않으면서 자원만 차지하고 있는
Macro 4.0 Sheet도 있고 Macro 5.0 Dialog Sheet도 있다
초창기에는 이 것때문에 엑셀짱!!소리를 하면서 살았다더라..
우노도 이시대가 아니였다..
우노가 컴을 시작할때 1995년도에 엑셀 5.0과 더불어 혁신적으로
VBA가 첨 나오기 시작하였으니까..
당시에 Macro 4.0이 있는데 뭐할라구..VBA인지 뭔지를 하느냐고..
갈등들이 있었다..
그리고 화려한 VBA시대가 열린것이고..
이것으로 많은 사무자동화가 이루어졌고..지금도 이루어 지고 있다
발전과 성장은 그런 것이다

VBA에서 VB.net ...Net Framework로의 발전은
강가에서 배타고 놀다가, 큰 크루즈타고 태평양으로 나가는 격이라고나 할까..
그러나 그런 변화의 성장통을 좀 앓아야 하는 것!!!
그런 성장통을 권하고 싶은 것이다!!

또한 코딩에 있어서 문법이 철저하다..
VBA에서의 헐렁한 습관을 VB.Net에서는 용납하지 않는다
그래서 좀더 꼼꼼해질수 있는 환경이 된다
아래와 같이 함수도 Return값의 Type을 지정해주지 않으면
콤파일(Build버튼) 못하겠다고 버틴다



VBA에서는 타입을 정하지 않으면 Default로 그냥
Variant타입으로 정해주니까..그냥 헐렁하게 지내는 편이다
실은 VBA에도 VB.Net의 Build버튼 같은 것이 있는데
왠만큼 VBA를 하시는 분들도 이 버튼이 있는지도 모른다
왜냐면 별 제약이 없으니까..그냥 헐렁한 코드를 작성하게
되는 셈이다
여러분들이 사용하고 있는 VBA모듈창의 디버그메뉴밑의 그림과 같은 버튼을
크릭하여 보시기 바란다..
지적사항이 많이 발생할 것이다
또한 코드줄이 몇줄 안된다면 느끼지 못하지만
코드줄이 무지 많을때는 많이 빨라짐을 느낄 수 있을 것이다
아무튼 코딩후 컴파일하고 저장하는 습관을 갖으면 좋을 것이다
이것이 VBA에서 VB.Net으로 확장하는데 좀더 껄끄러움없이 넘어오는 길이다