오랜만에 글을 쓰네요.
재취업을 하고 처음으로 현장에서 근무를 할 기회를 갖게 되었습니다.
금융권이고 C# Windows Form 프로그램을 유지관리 하는 역할입니다.
이미 완성되어 있는 프로그램인데 동작이 잘 안되는 부분이 있다면 수정해 가는 단계에 투입이 되었습니다.
이 과정에서 제가 실질적으로 알아야 할 내용들을 간단하게 정리하려고 합니다.
우선은 생각나는 순서대로 적을 생각이며 순서나 내용은 글이 올라간 뒤에도 추가 및 수정될 수 있습니다.
프로그램 코딩을 잘 하려면 아래의 내용들을 공부해야 합니다.
소프트웨어 개발방법론
리팩토링 및 디자인 패턴
인수받은 코드가 가독성이 떨어지고 유지보수가 어려운 상황을 Dirty Code라고 합니다. 이를 Clean Code로 만드는 과정이 Refactoring 입니다. 처음부터 Clean Code로 만드는 것이 중요하고 기존 개발한 코드도 Refactoring 과정을 활용하여 점점 clean 한 code로 만들수 있습니다.
소프트웨어 디자인 패턴(software design pattern)은 소프트웨어 공학에서 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다.
참고자료https://ko.wikipedia.org/wiki/소프트웨어_디자인_패턴
사수로 계신 부장님이 추천해 준 사이트 입니다. 시간될때 영어공부도 할 겸 번역하면서 읽어봐야 겠네요...
머리속에 프로그램 개념 및 기본 로직 개발이 되어야 함
그동안 개발할 때에는 인터넷이 되는 환경에서 개발을 하다 보니 기본적인 것도 인터넷으로 예제를 찾아서 복사 후 바꾸는 방식으로 진행을 했었다. 그러다가 현장에 인터넷이 전혀 안되는 환경에서 하다 보니 개발하는 속도가 현저하게 떨어졌다. 대부분의 금융권 회사는 보안이슈로 노트북, 태블릿의 출입 허가가 안나기 때문에 이 환경에서 빠른 개발을 하려면 머리속에 기술 분야 별로 기본적인 코딩은 바로바로 할 수 있어야 한다.
개발도구 - Visual Studio
보통 통합 개발 환경(Integrated Development Environment, IDE)이라고 하는데요 쉽게 말해서 개발을 할 수 있게 도와주는 소프트웨어입니다. C# Windows Form 을 개발하려면 제가 아는 수준에서는 Microsoft Visual Studio가 유일하다고 생각합니다. 특히 모든 메뉴가 한글로 되어 있기 때문에 영어를 모르시는 분에게는 최고에 IDE 입니다.
글 작성 기준으로의 최신버전은 2019 입니다. 하지만 무조건 최신버전이 좋지는 않습니다. 저는 2010으로 시작해서 현재 2017 버전을 사용하고 있습니다. 현장에서는 2015 버전을 사용중입니다.
https://docs.microsoft.com/ko-kr/visualstudio/releasenotes/vs2017-relnotes
소스비교 프로그램 WinMerge
소스병합 또는 기존 소스 컨버팅, 커스터마이징할 때 유용한 프로그램입니다.
https://winmerge.org/downloads/?lang=en
서브버전 - SVN
서브버전(Subversion)은 자유 소프트웨어 버전 관리 시스템이다.
참고자료: https://ko.wikipedia.org/wiki/서브버전
Visual Studio SVN을 사용하였고 플러그인은 AnkhSVN 을 사용했습니다. Git도 사용할 만합니다. 버전관리는 필수입니다.
컴퓨터 사양 - VDI, Zero Client 환경
클라우드 계정을 부여받고 Zero Client 에서 접속해서 사용합니다. CPU i5(Intel(R) Xeon(R) CPU E5-2667 램은 8G, 저장공간은 100기가 정도 주어집니다. 클라우드 환경임에도 Visual Studio로 프로그래밍 하기에는 무리가 없었습니다. 제 생각에 Visual Studio로 프로그래밍만 하는 노트북 또는 컴퓨터 사양으로는 CPU i5급, 램은 8g, SSD 128gb 정도되면 적당하게 사용이 가능해 보입니다. 하지만 1인 사업으로 문서작업, 사진 및 영상편집 등을 같이 하려면 더 높은 사양이 필요할 수도 있습니다.
로컬에서 파일을 저장하는 방법
현장에서는 ini, mdb를 주로 사용하였습니다. ini는 간단한 설정 값의 정보를 쉽게 읽고 쓸 수 있습니다. mdb 는 쿼리문을 사용할 수도 있고 office를 사용하면 access 프로그램으로 쉽게 접근이 가능합니다.
다른 dll 호출방법 - 참조추가, 마샬링
Visual Studio 에서 C# 윈도우폼에서 프로그램에서 다른 솔루션의 기능을 활용하려면 참조추가, 마샬링(marshaling)으로 프로젝트에서 활용할 수 있습니다. ActiveX dll 파일도 가져와 사용합니다.
글꼴
코딩에 좋은 글꼴이 있습니다. 숫자1(일)과 소문자l(엘) 그리고 한글 ㅣ(이) 와 같이 혼동이 올 수 있는 글자들을 구분할 수 있습니다. 아래 링크에서 다운로드 받아서 설치하면 사용 가능합니다. 현장에서는 "나눔고딕코딩"을 사용했습니다.
Visual Studio 기능들 - 명령줄인수, 조건부 컴파일, 단축키 등
명령줄 인수를 사용하면 웹이나 다른 프로그램에서 해당 프로그램을 실행할 때 필요한 정보를 전달해서 실행될 때 사용하거나 명령을 내릴 수 있습니다. 간단한 예를 들면 프로그램.exe "abc" 를 하면 프로그램 시작 시 abc를 가져와서 작업할 수 있습니다.
Visual Studi 프로젝트에서 조건부컴파일은 #if A 와 같이 특정 조건에서 실행되게 할 수 있습니다.
Visual Studio 단축키를 익히면 좀 더 빠른 코딩이 가능합니다. 실제로 쓰면서 유용한 단축키는 추후에 정리해 보겠습니다. 자주 쓰면서 유용하다고 생각했던 단축키 2개만 정리하면 아래와 같습니다.
1. Ctrl + K, R: 선택 부분의 참조 찾기 / 2. Ctrl + -(마이너스): 이전 위치로 돌아가기
그리고 함수(Method)를 작성하고 사용을 한 다음에 다시 해당 함수로 이동을 하면 함수 이름 위에 참조 1개 라고 글씨가 뜨고 그걸 클릭하면 해당 함수를 참조하고 있는 함수들을 볼 수 있습니다. 이 기능이 괜찮아서 집에서 프로그램을 실행해 보니 뜨지 않는 겁니다. 해당 기능을 code lense 에서 참조(references) 기능인데 해당 기능은 무료 버전인 community 에는 없고 프로 이상 버전에만 제공하는 기능인 것 같습니다.
https://stackoverflow.com/questions/20823805/codelens-not-showing-references
DLL 파일 때문에 죽는 문제를 해결하려면... agent 프로그램을 만들어야 함...
아무리 예외 처리를 잘 해도 외부에서 가져온 dll 함수를 수행하다가 오류가 발생할 경우에는 프로그램이 비정상 적으로 종료될 수도 있습니다. 이를 방지하려면 외부 dll 함수를 쓸 경우에 agent 프로그램을 만들어서 호출하는 방식으로 가서 오류가 발생하더라도 agent 프로그램만 죽고 개발 프로그램은 안 죽고 계속 진행할 수 있게 만들 수 있다고 합니다.
ActiveX 디버그하기
C#으로 개발한 ActiveX를 디버그하려면 dll을 디버그 모드로 빌드하고, ActiveX를 실행한 다음에 Visual Studio 프로그램에서 프로세스에 연결프로세스에 연결하기를 하면 디버그할 수 있습니다.
AS-IS, TO-BE
현장에서 이 이야기를 들었을 때 난 이전 프로그램의 이름이 AS-IS(에즈이즈) 이고 현재 진행중인 프로그램 별명이(분명 현재 프로그램 이름은 다른 것이었기에...) TO-BE(투비) 인줄 알았다. 알고 보니 에즈이즈는 이전 프로그램, 투비는 현재 개발 및 유지보수 중인 프로그램을 말하는 것이었다. 해당 프로젝트는 기존 Visual Basic 언어로 개발되어 있던 프로그램을 C# 언어로 컨버전 한 프로그램이었던 것이었던 것이다!!!
https://blog.shovelman.dev/840
소캣 프로그래밍, MCI?
난 소캣 통신, MCI 는 이번 현장에서 처음 경험했다.
MCI는 뭐야?
이전 회사에서는 .net framework, asp.net 등으로 직접 MS-SQL에 접속해서 데이터를 송수신 했기 때문이다. 알고보니 소켓 클래스는 Low Level 클래스이었다. 이전에 개발할 때는 High Level 클레스들을 사용하기 때문에 Low Level 인 소켓을 경험할 일이 없었다.
C# 환경에서 MS-SQL에 접속하려면? 구글 검색 -> 오호 아래 글 보고 하면 되겠다. using System.Data.SqlClient 를 쓰면 되겠군!!
출처: C#에서 데이터 베이스에 연결하고, 쿼리를 실행하는 방법 (Mssql, .net)
https://kinanadel.blogspot.com/2018/10/c-mssql-net.html
현장에서 처음 접하게 된 개념으로 이를 제대로 이해하려면, 소켓, 인터페이스 등 기존 개발 경력에서 잘 사용하지 않았던 개념들을 체계적으로 공부할 필요가 있어 보인다.
로그는 필수!
저는 개발할 때 로그를 남기지는 않았습니다. 대부분 사용자들이 보고 처리할 수 있도록 메시지로만 처리를 했습니다. 현장에서 일 하면서 로그가 중요하다는 것을 알았습니다. 그리고 로그도 레벨을 설정하고 원하는 수준의 로그를 출력할 수도 있습니다. 로그 레벨에 대한 내용은 아래 글들을 참고해 주세요.
백업 및 동기화 프로그램
이전 회사에서 작업했을 때는 처음에는 무식하게 솔루션 버전 별로 전체 zip 파일로 압축을 해서 로컬 컴퓨터, 공유 컴퓨터 2중으로 백업을 했었습니다. 그리고 현상관리 없이 폴더들을 동기화 하는 무료 프로그램인 freefilesync 를 사용했습니다. 이 프로그램을 사용하면 초보자도 쉽게 로컬, FTP 내용을 동기화 할 수 있습니다.
워드, 엑셀 등의 문서는 원드라이브를 사용하고 있습니다. 여기에 자료를 정리하면 집 컴퓨터, 노트북. 태블릿, 휴대폰 등 내가 가지고 있는 어느 장치에서도 내용을 확인할 수 있습니다.
나머지 큰 영상, 사진 등의 자료는 개인적으로 시놀로지 나스를 구매서 사용중에 있습니다. 현재까지 랜섬웨어에 한번 공격을 당해서 하드디스크를 분해 후 암호를 강화했습니다. 보안에 더 신경쓰려면 포트들도 기본 포트를 쓰면 안되고 변경해서 사용해야 합니다.
현장에서는 소스만 클라우드 관리를 하고 문서 등 기타 자료는 공유 드라이브에 두고 메신저로 자료를 공유합니다.
현재 다니기 시작한 회사는 자료 공유가 잘 되지 않는 거 같습니다. 회사 솔루션 자산에 대한 보호(?) 때문일 지도 모른다는 생각을 해봅니다.
개발한 프로그램 배포하기
개발한 프로그램을 배포하려면 셋업 파일을 만들어야죠~ 셋업 파일을 만드는 방법은 다양합니다.
이전에 사용해본 방법으로는 국산 프리웨어인 Install Factory, Visual Studio 플러그인 Microsoft Visual Studio Installer Projects 이렇게 2가지를 사용해 봤습니다.
현장에서는 NSIS로 셋업파일을 만들어서 배포합니다. 아래 언어를 배우면 배포할 때 원하는 방식으로 업데이트 버전을 배포할 수 있습니다. NSIS(Nullsoft Scriptable Install System, 널소프트 스크립터블 인스톨 시스템)는 스크립트 기반으로 동작하는 윈도용 설치 시스템으로, 윈앰프를 만든 것으로 알려져 있는 널소프트가 지원하는 가벼운 설치 시스템이다.
프로그램은 아래 사이트에서 다운로드 받을 수 있습니다.
https://sourceforge.net/projects/hmne/
처음부터 끝까지 프로그램 완성을 하려면 위의 내용들을 체계적으로 공부해야 합니다.
각 각의 부분에 대해서도 시간이 되면 작성해 보도록 하겠습니다.
글 내용 중에서 틀린 부분이 있다면 댓글로 남겨주시면 수정하겠습니다.
감사합니다.