728x90
VMware, Xen 을 비롯한 다양한 가상화 솔루션들이 널리 쓰이고 있습니다.
그렇지만 여전히 오라클을 비롯한 비즈니스 소프트웨어들은
다양한 라이선스 제약조건 등으로 가상화 환경에서 쉽게 쓰이기 힘든 것 같습니다.

https://community.emc.com/community/connect/everything_oracle/blog/2012/03/26/vmwares-official-support-statement-regarding-oracle-certification-and-licensing 

한동안 많은 VMware 커뮤니티에서는 CPU Affinity (특정 CPU 코어를 Dedicate 하게 쓰는 옵션) 를 통해 오라클 라이센스를 위반하지 않으면서 사용할 수 있을 거라는 이야기가 많았습니다. 하지만 이 방법은 오라클이 제안하는 하드웨어 파티셔닝(Hardware Partitioning)을 충족하는 듯 하면서도 결론적으로 공식적으로 인정된 방법은 아니라는 문제가 있는 것 같습니다.

우리나라의 VMware 커뮤니티에서도 비슷한 이야기가 정리된 적이 있었습니다. 하지만 정확히 이 내용이 오라클이 허용하는 범위인지는 확인을 해봐야 하는 부분일 것 같습니다. 자칫 잘못하면 VM 이 구동되는 전체 물리 Processor 의 갯수만큼 (물론 Factor를 곱해서 수를 줄일 수 있겠지만) 라이선스를 구비해야 하는 상황이 될 수도 있을 것 같습니다.

http://cafe.naver.com/vmwareesx/2933 

참 쉬운게 없는 세상입니다 ^^

- NoPD -
 
728x90
728x90
XE는 사용자가 꽤 많은 CMS (Content Management System) 임에도 불구하고 열악한 기술지원과 매뉴얼 때문에 커스터마이징을 필요로 하는 사람들에게 참 많은 숙제를 안겨주고 있다. 제로보드 시절만 해도 그렇지 않았는데 네이버가 인수한 이후에는 뭔가 부드럽지 않은 분위기다.

오늘 올리는 내용은 사실 포스팅으로 남겨 두기도 참 뻘쭘한 내용이다. XE 개발자 매뉴얼에 제대로 기술이 되어 있지 않아 삽질한 내용이기 때문이다. MySql 에서 쿼리 크기를 제한할 때는 쿼리 뒷부분에 limit [숫자] 형태로 쿼리 갯수를 제한할 수 있다. MS-SQL 에서 select 문 바로 뒤에 top [숫자] 를 적어주는 것과 동일한 효과다.

select * 
  from xe_documents 
 where module_srl=3038
   and voted_count > 5
 limit 5


특정한 게시판 모듈에서 추천수가 5 이상인 게시물을 가져오되 5개를 넘지 않도록 만든 아주 간단한 쿼리다. 이 쿼리를 XE 가 사용하는 XML 형태로 변경하면 어떻게 될까? 구현하는 사람에 따라 차이가 있겠지만 아래와 같은 XML 로 만들어질 것 같다. 


	
        
		
	
		
		
		
	
	
		
	
	


삽질을 했던 이유는 바로 마지막의 <list_count> 부분이다. 개발자 매뉴얼 그 어디에도 <list_count> 엘레멘트가 <navigation> 엘레멘트의 하위 엘레멘트라는 표기가 없다. 물론 <navigation> 엘레멘트 설명에는 "정렬 순서나 페이징을 지원" 이라고 되어 있지만 그 설명을 "따라서 <list_count> 는 <navigation> 의 자식입니다"로 해석할 수 있는 사람은 몇 안될것 같다. 누군가 동일한 삽질을 할까봐 포스팅으로 남겨둔다.

- NoPD - 
728x90
728x90
요즘 IT 좀 하신다는 분들은 로컬 PC 에 VMware Workstation 이나 Virtual Box, Parallels 같은 어플리케이션을 이용해서 여러가지 운영체제를 동시에 사용하는 경우가 많다. 개인 PC 에서 이렇게 사용하는 것은 분명 메리트가 있지만 해당 컴퓨터 에서만 쓸 수 있다는 단점이 있다.

기업에서는 이런 인프라스트럭쳐를 자체적으로 구축하여 (Private VDI Infrastructure) 사내 직원들의 탄력 근무제 및 오피스 (Flexible Office) 라던가 스마트 워킹 센터 (Smart Working Center) 도입에 사용하는 경우가 많다. 하지만 이것 역시 이런 제도와 시스템을 구축한 회사에 한정되는 혜택에 불과했다.

누구나 체험해 볼 수 있는 VDI 서비스

이런 와중에 SK텔레콤이 운영하는 T cloud biz 에서 가상데스크탑, 즉 VDI 를 체험해 볼 수 있는 기회를 제공하기 시작했다. 동시접속자 10명까지 수용할 수 있는 규모로 가상 데스크탑 체험 서비스를 진행하고 있는데, 개념으로만 알던 가상 데스크탑 서비스 (VDI) 를 직접 이용해 볼 수 있는 기회다.

 
 
가상 데스크탑의 구동원리는 간단하다. NoPD 의 전문 분야이기도 했던 세션 기반의 가상화 서비스 (리모트 데스크탑 서비스, 어플리케이션 가상화 서비스 등) 와 마찬가지인데 개별 사용자별로 자신의 가상 PC 를 할당받아 사용한다는 점이 작은 차이점이다. 기술적으로 뒷단에 숨겨진 이야기들은 많지만 사용자 입장에서는 이렇게 이해하는 것이 더 편하다.

SK텔레콤의 가상 데스크탑 체험 서비스는 T cloud biz 에서 Cloud App 서비스의 원천 기술 제공사로 활약하고 있는 틸론에서 기술적인 지원을 하고 있다고 한다. Citrix 나 VMware 가 아닌 국내 업체라 성능이 혹시 떨어지지는 않을까 싶은 생각에 동영상을 구동하면서 테스트를 해봤는데 성능의 저하를 느끼기 힘들었다.

태.티.서~!

 
별도의 회원 가입 절차나 인증 절차 없이 간단한 클라이언트 설치만으로 가상 데스크탑 체험 서비스를 이용할 수 있다. 글 초두에 적어 둔 링크로 이동하여 Active X 및 클라이언트 설치후에 바로 이용해 볼 수 있다. 그 정도로 가상 데스크탑 서비스는 간단하게 체험해 볼 수 있다.

아직까지 마이크로소프트의 라이선스 미제공등의 이슈로 사업자들이 본격적인 서비스를 하지 못하고 있는 영역이 바로 가상 데스크탑 서비스 영역이다. 체험 형태로밖에 제공되지 않는 이유도 라이선스의 이슈 때문이라고 한다. 아이패드를 이용해서도 가상 데스크탑 서비스를 이용해 볼 수 있다고 하니 일상 생활에 참 편할 것 같은 서비스인데 정책적인 이슈로 아직까지 본격화되지 못한다는 점이 참 안타까울 뿐입니다.

  
- NoPD - 
728x90
728x90
새로운 언어나 개발환경에 익숙해 지는데에는 간단한 실습만한 것이 없다. Hello World 를 출력하는 프로그램이 모든 언어의 첫번째 예제가 되는 것은 다 이유가 있다. Hello World 를 출력하는 프로그램을 통해 언어가 가지고 있는 기본적인 코드 구성 방법을 이해할 수 있고 표준 입출력을 이용하여 결과값을 출력해 볼 수 있기 때문이다. 

node.js 역시 마찬가지 방법으로 접근을 해보고자 한다. 다만 javascript 에 익숙치 않은 사람들을 위하여 점진적으로 코드를 완성해 나가는 방식을 이용해 앞으로 설명을 하고자 한다. NoPD 역시 OOP 기반의 언어들에 익숙한 상태라 처음 javascript 에 익숙해 지는데 시간이 무척 오래 걸렸다. javascript 가 궁극의 개발 언어라고 주장하는 사람들은 이런 javascript 의 코드 개발 방식을 들기도 하니 유심히 살펴볼 필요도 있을 것 같다


자바스크립트로 서버를 만든다고?

node.js 는 서버 혹은 클라이언트에서 사용될 수 있는 스크립트임을 앞선 포스팅에서 이야기 했다. 클라이언트야 그렇다 치고 서버에서는 도대체 무슨 역할을 할 수 있는 것일까? node.js 는 로직을 가지고 있는 javascript 로서의 역할도 충분히 하겠지만 그 보다는 웹 서버, 소켓 서버 등의 역할로 사용되는 경우가 더 많다. 서버에 설치된 웹 서버 (예> IIS, Apache) 의 유무와 상관없이 독립적으로 동작이 가능하다.

웹 서버라는 것이 결국은 특정한 포트 (예> 80) 를 통해 TCP 통신을 받아들일 수 있도록 해주는 역할이라고 해석한다면 소켓 서버를 특정한 포트로 만드는 것과 별반 다른 것이 아니라는 점을 이해할 수 있을 것이다. 이제 간단한 웹 서버를 만드는 코드를 통해 node.js 의 구조를 이해하고 얼마나 생산성 높은 개발 환경인지를 알아보도록 하자.

var http = require('http');

먼저 위와 같이 코드를 입력해 보자. var 는 자바스크립트에서 변수를 선언할 때 사용되는 키워드이다. http 라는 변수를 선언하고 이 변수에는 require('http') 라는 문장을 통해 node.js 의 http 모듈의 객체 인스턴스를 생성하도록 했다. node.js 은 다양한 모듈을 가지고 있는데 모듈을 사용하기 위해서는 위와 같은 코드를 이용한다. 다른 언어에서 include 나 using, import 와 같은 역할을 한다고 보면 된다.

코드의 구조를 잡아보기

객체 인스턴스를 생성했으면 이제 이 인스턴스가 제공하는 다양한 메소드를 이용하기만 하면 된다. node.js 의 서버 모듈이 제공하는 다양한 메서드와 이벤트는 공식 웹사이트의 도움말을 참고하면 좋다 (바로가기 :  http://nodejs.org/api/http.html) 우리는 일단 간단한 웹 서버를 만들어 볼 예정이니 문서가 제공하는 방대한 내용을 다 이해할 필요는 없다. 이제 코드에 살을 좀 붙여보자.

var http = require('http');

http.createServer(function (request, response) {

});

생성한 http 인스턴스가 제공하는 createServer 메소드를 호출하는 코드이다. createServer 메소드는 파라메터로 requestListener 를 받는다고 공식 문서에 정의되어 있다. requestListener 는 특별한 것은 아니고 공식 문서에도 기술되어 있는 것처럼 request 이벤트의 이벤트 핸들러 형태를 따르는 함수면 된다. 그런데 이 서버는 어떤 포트를 통해 요청을 받을 것인지가 명시 되어 있지 않다. http 객체가 제공하는 listen 메소드를 이용해 1234번 포트로 요청을 받는 서버를 만들어 보도록 하자.

var http = require('http');

http.createServer(function (request, response) { 

}).listen(1234);

참 간단하다. 이제 이 코드에 우리가 추가해야 할 것은 요청(request) 가 들어 왔을 때 무엇을 회신(response) 할 것이냐이다. 웹 서버라는 것이 별 것은 아니고 사용자의 요청이 들어왔을 때 적절한 회신을 해주는 것임을 생각해 보면 이해하기는 어렵지 않다. 회신할 내용을 만드는 코드를 넣고 서버가 동작중임을 알리는 콘솔 메세지를 추가해보자.

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World~!\n');
}).listen(1234);

console.log('Server running at http://127.0.0.1:1234/');
결과 확인해 보기! 

어렵지 않게 웹 서버를 무사히 만들어 냈다. 물론 진짜 웹 서버에 비하자면 동적인 웹 페이지의 생성, 적절한 결과의 응답등이 빠져 있지만 이런 부분들은 앞으로 여러 포스팅을 통해 다양한 모듈을 활용하여 풀어나갈 수 있는 부분이니 여기선 구조를 이해하는 선이면 충분할 것 같다. 이제 node.js 에서 만든 코드를 실행해 보도록 하자.  

 
서버가 동작중임을 알려주는 메세지가 화면에 출력되어 있다. 기본적으로 createServer 는 별도로 종료하지 않는한 계속 구동되고 있게 된다. 서버를 종료하는 별도 로직을 추가하거나 (특정한 요청에 응답?) Ctrl-C 등을 눌러 프로세스를 종료 시키면 서버는 종료되게 된다. 물론 서버가 종료되면 안되는게... 기본 동작 요구사항일 것이므로 그냥 그렇다고만 알고 있자. 이제 웹 브라우저를 이용하여 웹 서버에 접근을 해보도록 하자.


놀랍지 않은가? 단 몇줄의 코드로 웹 서버를 구동시켜 보았다. 앞서 이야기 한 것처럼 보완할 부분이 많은 말 그대로 껍데기 밖에 없는 웹 서버이지만 node.js 의 원리를 이해하고 강력한 기능을 맛보기에는 충분한 예제였다. 앞으로 node.js 를 이용하여 재미있는 것들을 많이 만들어 나가도록 하자.


- NoPD -

 
728x90

+ Recent posts