프로젝트를 하다 보니, 자연스럽게 log4net을 사용하게 되었다.
Visual Studio의 IDE 기반으로 된 디버그 기능은 매우 훌륭해서, 브레이크 포인트를 잡고 하는 디버깅을 사용하면 보다 쉽고 편하게 할 수 있지만, 간혹 백그라운드로 동작하는 기능이나, 데이터 흐름의 끊김 없이 쭉 보고자 할 때는 역시 로그 기능은 필수이다.
대개 실행 프로그램 프로젝트( WinForm 프로젝트, 콘솔 프로그램 프로젝트 )의 경우 app.config 라는 XML 기반 설정 파일을 잘 구성해서 넣어주면 log4net을 바로 쓸 수 있다. 설정도 바로 app.config 내에서 수정하면 즉시 즉시 발동되니 편하다.
그런데, 이번 프로젝트는 DLL 기반의 프로젝트로, 해당 DLL은 외부 프로그램에서 Run을 해주게 된다. 이러다 보니, 외부 프로그램에서 log4net을 활성화 시켜주지 않는 이상 내가 만드는 c# dll 안에서는 도무지 로그를 쌓을 수 없었다.

고민 고민하다가, 이전에 만들어 놓았던, log4net용 관리 클래스를 꺼내봤는데, 생각보다 그다지 썩 좋지 않은 방법을 이곳 저곳을 써서 그대로 쓸 수 없었다. 게다가, 설정 기능을 이리저리 끊어놔서 생각보다 쉽지는 않았다.

그래서 아예 Log 기능을 활성화시키는데 주안점을 두고 정리해봤다.

아래의 코드가 log4net을 활성화 시키는 코드들이다.

// log4net의 기본 구조를 꺼낸다.
// log4net의 기본 구조를 꺼낸다.
log4net.Repository.Hierarchy.Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository();
// log4net의 설정 기능을 활성화 시킨다.
hierarchy.Configured = true;

// log4net을 이용하여 로깅을 할 때, 어떤 방식으로 로그를 남길지를 설정한다.
// 파일, DB, 이벤트로그, 등등 다양한 위치에 로그를 쌓을 수 있는데,
// 아래의 예제는 RollingFile 기반 ( 일정 사이즈가 되거나, 날짜가 변경되면 자동으로 새로운 파일을 생성해서 로그를 
// 남기는 방식 )으로 구현했다.
// 만약 다른 방식으로 변경하려면, rollingAppender의 클래스와 설정을 변경하면 된다.
log4net.Appender.RollingFileAppender rollingAppender = new log4net.Appender.RollingFileAppender();
rollingAppender.File = @"C:\DEV\Log\cupps.log";
rollingAppender.AppendToFile = true;
// RollingFile 방식을 설정한다.
rollingAppender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Composite;
// 로그 파일 최대 크기를 설정한다.
rollingAppender.MaxFileSize = 1024 * 1024 * 2;
// 로그 파일 작성시, 동시 Write 방지 Locking Model 방식을 설정한다.
rollingAppender.LockingModel = new log4net.Appender.FileAppender.MinimalLock();
// 날짜 변경시 기존 로그 파일이름을 어떤식으로 변경할지에 대해서 설정한다.
rollingAppender.DatePattern = "_yyyyMMdd\".log\"";
// 로그 파일 내에 로그(한 줄)를 어떤식으로 기록할지에 대한 Format을 설정한다.
log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout("%date %-5level %logger - %message%newline");
rollingAppender.Layout = layout;
// 위에서 설정한 Appender 섲렁을 활성화시킨다.
rollingAppender.ActivateOptions();
// Logger에다가 위에서 설정한 Appender를 추가한다.
hierarchy.Root.AddAppender(rollingAppender);
// 여기까지가 Appender 추가 방법.

// 로그를 남기는 레벨 설정 ( INFO, DEBUG, WARN, ERROR, ALL 등이 있다 )
hierarchy.Root.Level = log4net.Core.Level.All;

이 활성화는 프로그램 맨 처음에 한번만 해주면 된다.

로그를 남기려면 클래스 맨 앞에 static 형태로 변수 하나 설정한 뒤, 그 변수를 이용하여 로그를 남기면 된다.
다음 예제 클래스가 그 용도다.

class Class1
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    public Class1()
    {
        log.Debug("Enter Constructer~");
    }
}

static을 이용해 log 라는 변수를 생성한 뒤, 로그를 쌓고 싶은 곳에서 log. 이라는 것으로 시작하여 로그를 기록하면 된다. 매 클래스에서 저 static 변수를 모두 넣는 것이 좋다. 그 이유는 로그를 쌓을 때, 어느 클래스에서 발생된 로그인지를 바로 알 수 있기 때문이다.

앞서 로그를 설정할 때, PatternLayout 이라는 값을 설정했다.

 %date %-5level %logger - %message%newline 

이 값들 중, %logger 부분이 로그를 발생시킨 대상을 표시하는 영역이 되는데, %logger 에 들어갈 문장을 "System.Reflection.MethodBase.GetCurrentMethod().DeclaringType"를 통해 넣게 되는 것이다.
그러면 아래와 같은 로그가 쌓이게 된다.

2014-10-23 17:23:11 DEBUG MyApps.Class1 - Enter Constructor ~

"MyApps.Class1" 이라는 부분이 그 부분이다.

귀찮더라도, 매 클래스 마다 아래의 줄을 추가하면 최소한 그 클래스 내부에서 로그를 쌓을 때 편하게 로그를 작성해서 구성할 수 있게 된다.

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
728x90

예전 개발자들의 대부분의 성향은 자신이 개발하는 것에 대한 책임감이 무척 강해서, 자신이 만든 소스들이 자신의 자식인양 애지중지 한적이 많았다. 그래서 자신의 코드 부분에서 버그가 발생되면 누구보다 앞장서서 수정하고, 전반적인 책임을 가지고 진행을 하는 모습을 많이 보아왔다.

그런데, 당시에는 Unix내 모듈단위 개발이라, 실제 컴파일하기 위한 Object 파일은 많아도 50개 내외였다. 물론 코드 라인 수는 많아서, 복잡하게 보이기는 했지만, 역할이나, 기능은 요즘 통합 시스템 로직에 비하면 매무 심플한 구조였다. 요즘은 하나의 시스템 내에서 동작되는 규칙은 매우 복잡해지고, 다양한 기능을 수행하다보니, 예전 처럼 1인 프로그래머로 개발하기에는 버거운 구조를 갖추게 되었다. 최소한 2~3인이 팀이 여러 개의 팀으로 구성되어 하나의 시스템을 구축하곤 한다. 그러다 보니, 점점 자신의 코드라는 개념은 서서히 사라지고, 버그는 모두 함께 해결해야 하는 로직적 버그가 많아지기 시작했다. 혼자 해결하기는 점점 어려워지고, 같이 협업해서 없애려고 노력한다.

그런데, 간혹 구세대 프로그래머처럼 자신이 손댄 코드들은 모두 자기 것이라고 판단하고 공유하지 않은 채 혼자만 안고 가는 프로그래머들이 종종 눈에 띈다. 이해는 할 수 있다. 이 코드들은 자신이 이해해서 구성/수정하면서 구축해왔고, 자신 밖에 모르기 때문에, 자신의 자리보전을 위한 중요한 무기가 될 수 있다고 생각하는지도 모르겠다. 점점 노쇠해가는 자신의 능력 대비 서서히 줄어가는 자신의 업무를 바라보면서 말이다.

개인을 바라보면 이해는 하지만, 이것이 팀 그리고 회사의 입장에서 보면, 매우 암적인 존재라는 사실이다. 들어가면 나오지 않는 블랙홀 같은 소스 저수지가 되어가고, 그 만큼 그 사람에게 의존은 하는데, 원하는 퀄리티는 나오지 않아, 매번 회사는 고객에게 욕을 먹는다. 퀄리티가 좋아도, 기한을 맞추지 못하는 괴이한 상황에 빠진다. 그렇다고, 인원을 충원해도 방법이 없다. 블랙홀에서 나오지 않는 코드와 기술은 후임자에게 전달되지 않으니까. 결국 남는 것은 자신에게만 쌓이는 일거리들 ( 유지보수, 개선 사업 등등 )이고, 빠르게 해소되지 않는 병목의 주요한 원인이 되버리는 것이다. 프로젝트는 이 개인에 집중하게 되고, 해결, 개선은 보이지 않게 되는 것이다.

냉정하게 바라보자. 결과적으로도 문제지만, 애초의 시작자체가 잘못되었다는 것을 확인할 수 있다. 마치 자신이 손댄 코드나, 자신의 기여한 코드는 자신의 코드이므로, 이 제품자체의 소유가 자신의 것이 되었다고 생각하는 그 자체를 말이다.

진짜 자신이 손댄, 기여한 코드는 자신의 것인가? 이 질문을 던지는 원인은 바로 그 소스코드들이 생긴 흐름 전체를 바라볼 때 생각을 해보도록 하자는 것이다. 먼저 그 소스코드를 만들 때, 자신의 돈과, 시간이 전부 들었는가? 부터 시작할 수 있다. 애초에 자신이 가진 돈을 가지고 자신을 고용하고, 자신의 개인적인 시간을 투자하여 개발했냐는 것이다. 대부분 회사 내 소속된, 팀에 소속된 경우에는 애초에 이 부분에 해당되지 않는다. 돈은 고객에서부터 나와 회사에서 지급된다. 그리고 온전히 자신만의 소스라고 말하기 어려운 것은, 소규모 1인 프로젝트와 같은 것이 아닌 이상, 1인 개발로 처음부터 끝까지 하는 프로젝트는 거의 없다는 사실이다. 대부분 선임자, 혹은 후임자가 함께 설계하고, 코딩을 하고, 같이 고민해서 해결하게 된다. 물론 일부 로직은 전부 자신이 짜기도 하지만, 제품 단위로 볼 때, 과연 제품 전체 자신만의 코드들로 가득 차 있냐는 것이다.  결국 당위성을 말하기 어렵다는 것이다.

혼자 문제 수정 및 개선 작업을 했으니 이제 내 제품이 되었다고 반론하고 싶은가? 그렇다면, 무엇을 근거로 수정하고, 개선 작업을 했다는 것인가? 만일 그렇다면, 해당 소스 코드 없이, 완전히 빈 프로젝트(솔루션)을 열어 지금 자신이 수정/개선하는 프로젝트를 비슷하게라도 만들어 낼 수 있을까? 애초에 이런 것이 불가능하다면, 온전히 자신의 소스라고 말할 수 없다는 것이다.

개발작업이나 개선작업은 쭉 수행해온 부분에 대해서 존중 받아야 되며, 그 기술에 대해서 인정해주어야 한다. 하지만, 그 소스와 기술은 홀로 안지 말고, 회사 구성원, 팀 구성원과 공유해야 한다. 자신의 기술을 뺏기는 것이 아니고 나눈다고 생각하도록 한다. 평생 그 프로젝트만 하면서 노닥거릴 생각이라면 모르겠지만, 자신의 직위와 급여가 오르고, 다양한 경험을 요구 받는 입장이면, 이제 과거에 만들었던, 개선, 수정 했던 프로젝트들은 같은 구성원에게 건네 주고, 새로운 업무에 뛰어들어 더 발전된 모습을 보여주어야 한다. (그냥 무턱되고, 왜 내 급여는 왜 안 오르냐고 따지지 말고 말이다. )

이번에 사내에 프로젝트 관리 솔루션을 하나 작게 구축했다. 개인적으로 사용하던 프로젝트 관리 솔루션을 통해 얻은 경험들을 기반으로 이번에 무료 솔루션 중, 이질감이나 관리의 편의성이 좋은 제품을 도입해봤다. 구축해보고, 테스트해보고, 내가 담당한 프로젝트를 등록해봤다. 사실 프로젝트의 성공적인 수행을 위한 관리라는 포커스 보다, 프로젝트 이력 관리라는 측면을 강조한 구축이라고나 할까…
구두로 형식적인 인수인계가 아닌 실질적인 히스토리를 공유할 수 있는 그런 공간 말이다.

제발 이제 이런 암적인 존재인 프로그래머들이 이런 솔루션 속에 녹아내리면서 암적인 유전자 변이가 좀 제 정신을 차릴 수 있도록 할 예정이다..(뭐 말기면 쳐내야 겠지만 )

728x90

요즘 응용 프로그램을 만들면서, 이런 저런 배포 방법을 고민하다가,
한동안 등한시 했던 ClickOnce를 보았다.
일단 빌드 서버 없이, 웹 서버만 있으면 빌드에서 배포까지 다 되니 생각보다 편하다고 생각했다.

그런데, 오늘 내 태블릿 PC에다 내가 만든 메모 프로그램을 설치해서 사용하려는데, 실행이 안된다.
물론 보안적인 이슈로 인해 MS에서도 더 이상의 기술지원은 없다는 풍문을 듣기는 했지만, 이렇게 단칼에 거부될 줄은… 사실 구글 크롬도 ClickOnce 기술로 배포되고 있다고 알고 있다.

일단 Google과 같은데서는 잘 되는게, 내 쪽에 안되는 이유를 굳이 들자면, 응용프로그램 인증서가 없어서다. 배포자의 이름이 Unknown이니 배포시 악의적인 배포자인지 여부 때문에, 결국 실행이 안되는 문제다.

물론 편법으로 실행가능하게 하는 방법이 있긴 하지만, 이것은 역시 방법이 아닌 것 같다.

(사실 정식 인증서를 만들고 싶어도, 돈이 없어서 –_-;;; 파는 것도 아닌 것에 매년 돈 내가면서 제공할 의무는 없지 않은가?? )

나중에 시간될 때 다시 빌드서버나 구성해서, 자동으로 배포본 까지 만들 수 있도록 해야겠다.

이렇게 날 당황하게 만들 줄은 몰랐다…

728x90

지금 Esxi 서버를 돌리고 있다.
그 중, 가장 중요한 데이터들을 담고 있는 NAS VM을 들고 있는 Esxi 서버의 HDD#1이 Fault 상태에 빠졌다.
서버 외관의 HDD에 녹색 불이 아닌, 주황색 불..

비상이라고 생각되어, HDD 교체를 했다.
문제는 HDD 교체 후의 상태인데, Windows 같은 경우 HP에서 제공하는 서버 감시 드라이버 및 응용 프로그램을 통해 Build 상태를 볼 수 있다. ( 디스크 관리자에서도 표시 )

그런데, ESXi 서버가 되니.. 난감.

어디서 확인할 수 있을까 했더니, Health Status에서 볼 수 있다.

물론 조건은 있다.

지금 돌리고 있는 서버가 HP DL360 G6 인데, 바로, HP 에서 커스터마이징한 ESXi 버전을 설치해야 한다.
만일 Dell 서버면 Dell 에서 제공하는 커스터마이징된 ESXi 버전이 설치되어 있어야 이런 확인이 가능하다.

물론 Windows처럼 Progress가 나타나면 좋을 텐데, 그렇지 않은 점은 좀 아쉽다.

Recovery.... 잘 끝나길 비는 수 밖에 없을 듯 싶다.

728x90

요즘 하루 하루 업무를 하면서 내가 무슨일을 하고 있는지 기록을 남기고 싶었다.
업무 뿐만 아니라, 간단하게 주고 받은 개인적인 정보라든가, 요청 내용, 그 외에 상황들
일기장 까지는 아니지만, 그 순간 잠깐 기록하고 싶은 마음이 들었다.
단! SNS와는 전혀 다른 방향으로,
뭔가 남에게 노출되는건 정말 꺼리는 정말 개인적인 정보들로만 남발된!
그런 메모!

그래서 마이크로소프트의 원노트도 꺼내보고, 에버노트도 꺼내보며, 포스트잇 프로그램들도 깔아서 써보고, 그외 각종 노트, 메모 프로그램을 깔아서 써보았다. 다양한 사용자들과 다양한 욕구들을 만족 시키기 위해서 여러가지 기능들이 남발하거나, 겹쳐져 존재 했다.

매번 제목 넣으라는 것도 마음에 들지 않았고, 중구난방 화면 가득 붙여져 나가는 포스트잇 스타일의 메모도 탐탁치 않았다. 뭐 종류 별로 정리해서 담으라고 각종 분류 도구를 주는 것도 탐탁치 않았다.

그냥 몇줄의 메모를 남기고 싶은데, 매번 쓸 때마다 제목을 적으라고 해서 내 생각을 매번 요약해야 되니 이것도 일.
또, 내 생각이 어느 순간은 업무, 어느 순간은 취미, 어느 순간은 집안 일 이렇게 바뀌는데, 매번 그 순간 순간 마다 기록을 하다 보니, 결국 분류 실패로 메모들이 정리가 안되었다. 게다가 포스트잇 스타일은 화면 가득 방해 놓는 것도 영, 싫었다.

난 그저, 그냥 쓰고 싶을 뿐인데 말이다.
순간 생각 나거나, 순간 기록을 위한 그냥 텍스트로 입력해서 저장하고,
나중에 날짜나 시간대 별로, 쭉~ 나열해 볼 수 있는 그런 단순한 메모장이 필요했다.

그를 위해서 만들어봤다.

프로그램 사전 정보

  • 프로그램 이름 : KNOIE Memo
  • 용도 : 개인 기록 저장용.
  • 권장 사항 : Windows XP 이상,
                    RAM 1G 이상,
                    HDD 10M, .
                   NET Framework 4.0 이상

 

설치 방법

Click Once로 배포를 간단하게 만들었다.

http://neohind.cafe24.com/deploy/memooff

사이트에 접속해서, “Install” 혹은 “설치” 버튼을 눌러
설치 파일을 다운 받거나 직접 실행하면 된다.

가난한 개발자다 보니, 별도 배포용 인증서가 없다. ( 년 10~20만원을 지불해야 하는데, 무료 배포 버전에 무슨.. 인증서를 -_-;; )
그래서, “알 수 없는 배포자”로 나오기 때문에, 마치 설치 금지 처럼 나오기는 하지만, 대충 무시하고 설치하면 된다.
( 다만, .NET Framework 가 없으면 설치도 안되고, 실행도 안된다. -_-;;; )

사용법

정상적으로 설치되고 실행 되었으면, 오른쪽 아래 트레이 아이콘이 나온다.

이 프로그램은 모두 이 트래이아이콘에서 출발한다.

 

1. 메모기록

여기서 단순 클릭을 하면 메모 입력 창이 뜬다.

적당한 날짜와 시간을 설정하거나, 그대로 둔 뒤, 텍스트 박스 안에 로그를 넣는다.

다 썼으면 “Upload” 버튼을 누른다.

그러면 자동으로 메모장 화면이 닫힌다.

끝.

2. 기록 내용 보기

트레이 아이콘에서 오른쪽 버튼을 누르면 나오는 메뉴에서, View List를 클릭한다.


그러면 다음과 같은 창이 뜬다.

오늘 날짜를 기준으로 모든 기록 내용이 날짜 순으로 나오게 된다.

처음 날짜는 시작 일자, 나중 날짜는 끝 일자이다. 적당히 선택한 뒤, 조회를 누르면 해당 일자 사이의 모든 기록을 볼 수 있다. 성능 및 표시 방법의 문제로 인해 메모 내용이 모두 펼쳐지진 않는다.

원하는 기록을 클릭하면 자동으로 펼쳐지는 정도만 된다.

 

3. 종료

트래이 아이콘에서 오른쪽 버튼을 클릭해서 나오는 메뉴에서

Exit 를 선택하면 끝!

 

정리

이 프로그램을 사용하는데 필요한 추가적인 내용은 다음과 같다.

  • 모든 데이터는 내 문서 폴더에 있는 knoiememo.db 파일에 저장된다.
    ( 반드시 이 데이터베이스 파일을 백업해야 한다.)
  • 쓰기 창을 띄웠는데도 화면에 나타나지 않은 경우 ALT + TAB을 눌러 아이콘을 선택하면 된다.

지금은 시작 프로그램이기 때문에, 아직은 개선할 사항이 많다.
현재 버전에서 개선해야 할 점이나, 추가해볼 필요가 있는 내용은 다음과 같다.

  • 첨부파일 기능
  • DB 파일 자동 백업 기능 ( 클라우드 등 )
  • DB 파일 통합 기능
  • 암호화 처리
  • RTF 형식의 입력 처리

일단은 이렇게 생각은 했지만, 사실 당장 내가 쓰는데는 지장이 없어 시간이 될 때 하나씩 업데이트 할 예정이다.

만일 사용 중 버그가 있으면 댓글을 통해 알려주면 수정해서 업데이트 할 예정이다.

728x90

각종 서버상에서 남는 로그는 일반적으로 500M 정도는 훌쩍 넘는다.
그래서 일전에도 대용량 데이터를 처리하기 위한 Logger Viewer를 만든 적이 있었는데,
기능에 비해 제약사항이 큰 바람에 결국 중도 하차한 프로그램이다.
(나중에 틈 되는 대로 손볼 예정이다. )

이번에 받은 Text 파일도 의외로 커서, 일반 Text Editor로 제대로 열지를 못한다.
(강세 Swap 처리하는 Ultra Editor도 있긴 하지만, 일단 여는데 너무 많은 시간을 소요한다.)

단순 Text 조회 ( 절대 수정하지 않는다는 조건 )일 경우에 가장 쓸만한 Tool이 있어 소개한다.

그 프로그램 이름은 단순하게도 Large Text File Viewer 줄여서 LTF Viewer라고 한다.

사이트 URL은 다음과 같다.

http://www.swiftgear.com/ltfviewer/features.html

현재 (2014-08-23 기준)으로 5.2 버전까지 나왔다.
License 문제는 애초에 언급되어 있지않고, 별도 설치도 필요없고, 그 크기도 500K 내외에 불과하다.

설치 및 사용방법은 다음과 같다.

  1. 상단의 Download를 통해서 프로그램 파일을 다운 받는다.
  2. LTFViewer.zip 파일을 다운 받을 수 있는데, 그 압축 파일을 적당한 위치에 풀도록 한다.
  3. 압축을 다 풀었으면, 압축을 푼 곳에서 LTFViewer5u.exe 를 실행한다.
  4. (보안 경고가 나오면 무시하고 연다.)
  5. 끔찍한 배경 화면은 무시하고, 좌측 상단에 위치한 열기버튼()을 클릭한다.
  6. 원하는 파일을 연다.

사용해 본 결과 상당히 매끄러운 스크롤을 지원하며, 파일 Open 역시 매우 빠르게 열린다.

배경화면이나, 표시하는 Font 등을 변경하고 싶으면, 설정 버튼()을 누르면 이 프로그램의
각종 설정이 가능하다.

로그파일 뷰어로는 이거 만큼 훌륭한 것을 찾기는 어려울듯…

728x90

서두 ( 넋두리 )

ESXi 서버를 운영할 때, 사실 ESXi 클라이언트 프로그램만 있다면, 큰 문제 없이 사용할 수 있다. Guest PC의 제어는 물론 Console창까지.. 다양한 기능을 제공하는 종합 관리 도구라고 볼 수 있다.
이미지 20140723_130018_001

하지만, 이 ESXi 서버가 방화벽안에 들어가 있어, 외부에서 접속을 하려면, 생각보다 난제점이 많다. 다양한 기능을 제공하는 만큼 다양한 네트워크 리소스가 필요한데, 아래와 같은 다양한 네트워크 포트를 열어야 한다.

이미지 20140723_104203_001

사용할 네트워크의 종류를 나눠서 필수적으로 열어야 하는 포트만 정리하여 구성할 수 있지만, 그것도 1대의 ESXi 서버에서만 해당되고, 여러 대인 경우에는 불가능 할 수 밖에 없다. 최종적으로는 VMWare 측에 vSphere 를 한꺼번에 관리하는 서버 라이센스를 구매해서 관리하는 방법 밖에는 없다.

하지만, 가난한 작은 회사에서 2~3대의 ESXi 서버를 관리하기 위한 솔루션으로 구매하기는 그리 쉽지 않다. ( 상신 올려도 승인 받기까지의 과정은 정말이지… )

차선으로 생각한 방법은 아래와 같다.

ESXi서버네트워크

인터넷 공유기에 ESXi 서버 두대와 별도 PC를 연결한다. 그래서 별도 PC에 ESXi 클라이언트를 설치하고, 해당 PC의 원격 연결 (MS-RDP : MS 원격데스크톱)을 통해서 두대의 EXSi 서버를 관리하게 끔 했다. 즉 원격에서는 3389 포트를 사용하는 원격 데스크톱을 이용해 접속하여, 각각 존재하는 ESXi 서버를 관리하고, 그 안에서 Console 을 열어 관리한다.

만일 GUEST PC가 Windows라면, 마찬가지로, 각 Guest PC별로 MS-RDP 포트를 열고, 공유기에서도 그에 맞게 포트를 열어 관리했다. (물론 3389대신 다른 포트로 Open )

이처럼 했더니, 원격에서도 나름 원활하게 각 가상 PC들을 관리하는데 그나마 수월하게 할 수 있었다.

문제 발생

사실 운영에는 큰 문제가 없었는데, 갑자기 Linux를 Guest PC로 추가하려다 보니, 이게 또 다른 난제를 불러왔다. ESXi 관리 PC를 원격에서 연결한 상태에서 Console을 띄우니, 상당히 불편함을 가져왔다. 단순히 운영체제를 설치하는 정도면 그냥 저냥 참고 진행하면 되는데, 실제 운영체제 내부를 사용하려 할 때는 무척 불편함을 느낄 수 있다. 화면이 껌뻑임도 문제였고, 마우스나 키보드 잠김은 정말이지 짜증이 발생한다.
Windows 기반의 Guest PC는 그냥 MS-RDP 포트를 열어 직접 연결을 하면 되지만, Linux의 경우에는 그렇게 되기 힘들다. 물론 MS-RDP를 흉내넨 xRDP라는 것도 있지만, 매번 Guest OS가 Linux일 때마다 설치하기에는 한계가 있기 때문에, 이 작업은 아니다 싶다.

VNC

Open-Source로 원격에서 GUI 화면을 그대로 접속할 수 있는 Console 개념의 프로토콜이다. Open되어 있는 프로토콜이라, 이 유형을 가지고 제작된 제품군들은 생각보다 많다. 당연히 Linux 계통의 원격 접속은 대부분 이 VNC를 통해 접속하여 관리하게 한다.

다양한 제품군들이 있지만, 그 중 TigerVNC를 사용한다. 다른 여러 제품들이 있지만, 상용으로 전환된 제품도 있고, 성능상 이슈가 발생되는 제품들도 있다. 그 중 이 tigervnc는 현재도 지속적으로 업데이트되고 있으며, Linux 진영에서도 밀어주고 있는 제품이라고 한다.

http://tigervnc.org/

여기서는 VNC 서버는 ESXi 가 되고, 클라이언트만 있으면 된다.

준비 작업

이제 VNC를 통해 원격에서 해당 콘솔 화면을 열 수 있도록 한다. 이를 위해서는 몇 가지 준비 작업 및 권한들이 필요하다.

  1. 방화벽 관리
    인터넷 공유기나, 기타 방화벽 관련된 서비스 안에 ESXi 서버가 있는 상태에서 외부에서 접근할 때는 반드시 방화벽 관련 권한이 있어야 한다. 특정 포트를 열어주어야 하기 때문에, 그에 상응 하는 기술 능력이나, 접근 권한이 필요하다.
  2. SSH 접속 프로그램
    ESXi 서버 내부에 들어가 접근해야 하는데, 전용 클라이언트 도구가 아닌, Linux 로 된 EXSI 서버 자체를 접속해야 된다. 이 때문에, Telnet 기반의  SSH 접속 프로그램이 필요하다. 다양한 SSH 접속 프로그램이 있지만, 그중 무료로 제공되는 작은 제품인 Putty ( http://www.chiark.greenend.org.uk/~sgtatham/putty/ ) 을 사용하면 된다.
  3. ESXi 클라이언트
    기초적인 설정 작업은 EXSi 클라이언트를 통해서 진행하게 된다.

 

작업 ( VNC 활성화  )

기본적으로 설치는 되어 있지만, VNC에 대한 활성화가 안되어 있다. 이를 위한 몇 가지 작업을 수행해야 한다.
이 작업은 VNC로 연결할 VM 마다 해줘야 한다.

  1. EXSi 클라이언트를 실행한다.
    이미지 20140723_130018_001
  2. 설정을 할 VM을 선택 한 뒤, Edit Settings를 선택해서 Virtual Machine Properties 화면으로 들어간다.
    ( 단, 이미 실행 중인 VM인 경우 Shutdown 하고 난 뒤에 해야 한다.! )
    이미지 20140723_130158_001
  3. Virtual Machine Properties 화면에서 2번째 탭의 “Options” 안에 있는 General을 선택 한 뒤, “Configuration Paramters .. “ 버튼을 클릭한다.
    이미지 20140723_125723_001
  4. Configuration Paramters 창에서 하단에 위치한 “Add Row” 버튼을 눌러 새로운 줄을 생성한 뒤에, 다음 내용을 넣도록 한다.
    이미지 20140723_125920_001
    1. Name : RemoteDisplay.vnc.enabled
      Value : TRUE
    2. Name : RemoteDisplay.vnc.port
      Value : {원하는 연결 포트 번호 : 여기서는 15900 }
    3. Name : RemoteDisplay.vnc.password
      Value : {원하는 접속 암호 : 여기서는 P@ssw0rd

만일 VNC를 활성화할 VM이 더 있다면, 해당 VM을 선택해서 “2”번 단계를 반복하면 된다.

작업 ( SSH 연결 기능 활성화)

ESXi 서버를 SSH로 연결이 불가능한 경우를 위해서 작업하는 내용으로, 기존에 SSH로 연결할 수 있도록 설정되어 있다면 다음 작업으로 넘어간다.

  1. ESXi 클라이언트를 실행한다.
  2. Inventory 트리에서 최상위 노드를 선택한다.
    그리고 오른쪽 탭에서 Configuration을 선택한다.
    이미지 20140723_132737_001
  3. Configuration 탭 내에서 “Security Profile”을 선택한 뒤에 Services 영역에 위치한 “Properties”를 선택한다.
    이미지 20140723_132934_001
  4. Service Properties 창에서 SSH를 선택 한 뒤, Options를 선택한다.
    이미지 20140723_133125_001
  5. SSH Options 창에서 “Start” 버튼을 눌러주고 “OK” 하면 된다. (만일, 이후에도 계속 SSH 서비스를 이용할 예정이면, “Start and stop with host”를 선택하면 된다. )
    이미지 20140723_141507_001

작업 ( 방화벽 Open )

기본적으로 VPN을 위한 방화벽이 열려있지 않다. 그래서 이를 위해 별도로 방화벽을 열기 위한 구성을 해주어야 한다.

  1. SSH를 통해 ESXi 서버를 연결한다. (Putty 같은 SSH 연결 프로그램 사용 )
    이미지 20140723_141942_001
  2. root 계정으로 로그인한다
    이미지 20140723_142043_001
  3. firewall 디렉토리로 이동한다.
    cd /etc/vmware/firewall
  4. 다음 명령을 넣어, vnc.xml 파일을 만들어 연다.
    cat > vnc.xml
  5. 이제 다음 XML 파일 내용을 붙여 넣은 뒤, Ctrl + D를 눌러 저장한다.
    ( 안의 내용 중, port의 Begin과 End에 들어간 부분이 Open될 Port 번호의 시작과 끝 이므로, 적절하게 변경한다. )

  6. 다음 명령을 넣어, 저장한 XML 파일을 EXSi 서버에 등록한다.
    esxcli network firewall refresh
  7. 이제 EXSi 클라이언트로 돌아와, Host 최상위 노드 –> Configuration 탭 –> Security  Profile을 열어서, 하단에 위치한 Firewall을 보면, vnc라는 항목이 나타난다. ( 안나타났다면, XML 파일 오류일 가능성이 크므로, 3번 단계 부터 하나씩 다시 확인해봐야 한다.

 

작업 ( 방화벽 Open )

이 작업은 공유기 및 방화벽 S/W의 구성에 따라 다르므로, 별다른 언급은 하지 않는다. 다만, 해당 공유기에 맞게 위에서 설정된 Port 번호에 해당되도록 Open 해주어야 한다.

현재 필자의 경우 15900 ~ 15910 까지 Open되어 있어, 그에 맞게 방화벽을 수정했다.

 

연결 해보기

VNC 연결은 오로지 화면 콘솔만 제공되기 때문에, 실질적으로 연결을 하려면, VM 자체를 시작해야 한다.

  1. VNC로 연결할 VM을 실행한다.
  2. TightVNC를 실행한다.
  3. VNC 서버에 방화벽 밖에서 접근이 가능한 IP 주소를 입력하고, “:”를 사용하여 포트번호까지 입력한다.
    예를 들어 방화벽 바깥의 실제 IP가 121.223.10.5 이고, VNC Port를 15900으로 설정했으면,
    121.223.10.5:15900 이라고 주소 창에 입력하면 된다.

  4. Password 입력 창에 앞서 설정한 암호 값을 넣는다.

 

최종적으로 연결이 성공되면 아래 화면같이 현재 VM이 떠 있는 화면이 그대로 노출된다.


 

 

결론

처음 출발은 MS-RDP가 안되는 리눅스 콘솔들을 접속하는 방법 때문에 찾아서 적용해봤는데, 해보고 보니, 각종 Geust OS를 설치할 때도 유용하다는 생각이다. VNC 프로토콜 자체가 보안에 취약한 문제점이 있지만, 간단 간단하게 접근해서 사용한다면 나쁜 선택만은 아닌 것 같다. 만일 보안이 우려된다면, 방화벽 내에 VNC을 구성해서 연결하는 것도 방법일 것 같다.

VM 설정이나 변경 작업에는 유용하지 않다. 결국 방화벽 내에 EXSi 클라이언트가 동작하는 관리 PC는 어쩔 수 없이 존재해야 한다. 하지만, 외부에서 콘솔로 해당 PC의 화면을 그대로 보려고 할 때는 정말 유용한 것 같다.

글 내용 중, 일부 노출되기 꺼리는 부분을 모자이크 처리를 한 점에 대해 양해의 말씀을 드린다. 다만, 모자이크 내용으로 인해 설정이 어렵거나 힘든 부분은 없으므로, 모자이크 부분은 그냥 무시하시면 된다.

728x90

Windows Vista 부터 보안 정책이 대거 변경 되었다.
먼저 로그인 자체 구조 부터 아예 변경되어 과거 Windows XP에서는 로그인하면,
시작 부터 아예 Administrator였다. 이것을 완전히 뜯어 고쳐서 현재는 진짜 Administrator 그룹에 포함되어도, Administrator가 아니게 되었다.

지금은 중요 자원을 손대려면, UAC(User Access Control)이라는 구조를 통해 일시적으로 Administrator의 권한을 할당 받아 처리되게 된다. 주요 자원이란, 레지스트리 중 Local Machine 이라고 하는 부분( 모든 사용자, 컴퓨터 모든 자원에 대한 설정 )이라든가, Windows 폴더, Program Files 폴더 등, 모든 사용자들에게 적용 받거나, 동작에 있어 가장 중추적인 역할을 하는 자원들을 말한다.

UAC를 거치게 되면 아래의 화면 처럼, 팝업 주위가 모두 꺼멓게 반전되면서, 계속 실행할지를 묻게 된다.
image

사용자 허락도 없이 마구잡이로 실행되어 시스템을 강간(?)하던 과거 구조 보다, 훨씬 안전하게 사용할 수 있다. 시스템 자원을 변경하려면,, 어떻게 하든 저렇게 UAC가 뜨기 때문에, 철저하게 막는다고 할 수 있다.

매번 불필요할 정도로 저런 화면이 뜨게 되면 성질이 날듯… 물론 Windows 7은 Windows Vista 보다 저런 화면이 덜 뜬다. 그나마 사용자 배려를 하기 위해 최소한으로 중요하다가 판단되는 시스템 영역이 아니면 일단 저런 화면 없이 진행은 계속 된다. 하지만, Active X의 경우 실행할 때 마다 위와 같은 화면이 뜰 때 슬슬 사람들은 승질 내기 시작한다. 설치 때 마다 물어보고, 뭔가 수정할 때마다 물어보고, 이런 저런 팁들을 적용하려고 할 때 마다, Run as Administrator ( 관리자 모드로 실행 )을 하지 않으면 안되고..

시스템이 털리던 말던, 불편함을 감소시키고 싶다면 아래의 방법을 사용해보는 것도 좋다.

( UAC 옵션에 들어가서 묻지 않기로 하는 방법이 있지만, 그 방법 보다는 필자가 제시한 방법이 가장 XP에 근접한 방법이다. UAC 옵션에서 아예 묻지 않기로 하는 경우, 대개의 경우에는 되기도 하지만, 관리자 모드로 실행하기를 하지 않는 경우 제대로 실행 안되는 경우도 자주 발생된다. )

1.임시 계정 만들기.

먼저 사용자 관리에 들어가서 임의의 사용자를 만든다. 물론 관리자 권한을 갖는 사용자를 만든다.

image

img_20140428_121950001

image

image

위의 그림대로 한다면 test 라는 계정이 생기데 되는데, 이 계정으로 로그인을 한다.

2. 임시 계정으로 로그인.

Log Off(로그 오프)를 한 뒤, 이제 test 계정으로 로그인 한다.

3. Administrator 계정 활성화.

기본적으로 Windows를 설치하면 Administrator 계정이 비활성화 되어 있는데, 이 계정을 활성화 시켜야 한다.
계정 관리자를 띄워야 하는데, 아래와 같은 순서로 접근한다.

내 컴퓨터에서 우클릭을 해서 컨텍스트 메뉴를 띄운 후, 컴퓨터 관리를 선택한다.

image

왼편 트리에서 로컬 사용자 및 그룹을 선택하고, 그 하위에 있는 사용자를 클릭하면 오른쪽에 Administrator 계정을 볼 수 있다. 자세히 보면 사람 아이콘 앞에 화살표가 아래로 향한 아이콘이 덧붙여져 있다.

image

이제 Administrator 에서 우클릭을 한 뒤, 속성 창을 연다.
그리고 그 안에 “계정 비활성화” 체크 부분을 꺼준다.

image

그리고 난 뒤, 재 부팅을 해서 Administrator로 로그인을 한다.

4.정리

장황하게 캡쳐화면과 설명을 난무 했지만, 실질적으로는 Administrator라는 계정을 활성화 한 것이 전부다.
이 계정을 활성화 한 뒤에 해당 계정으로 로그인 하면, 무조건 관리자 모드다.

보안에서는 꽝이지만, 최소한 UAC등의 권한 문제로 인한 문제점은 깡그리 사라진다.

덧붙여 만일 자신이 원하는 계정이름으로 사용하고 싶으면, 저 Administrator라는 이름을 변경하면 된다.
변경하는 방법은 3번에서 나온 화면에서 Administrator위에서 우 클릭 한 뒤, 이름 변경을 하면 된다.

image

원하는 이름으로 변경하고, 재 시작하면, Administrator가 아닌 자신이 변경한 이름으로 로그인이 가능하다.

728x90

+ Recent posts

728x90