LG Electronics | LG-F240L | 2013:07:13 13:52:17

NHN 그린팩토리 주변에 보면 고급 아파트들이 둘러쳐져 있다. 

LG Electronics | LG-F240L | 2013:07:13 13:59:57

  처음으로 와본 그린 팩토리. 2층과 1층은 일반인에게 개방되어 있기에 인근 주민들이 찾아와 시간을 보내는 모습이 색다르다. 하지만, 이 주민들 중 누군가는 그린팩토리의 창으로 비치는 태양이 눈부시다고 넣은 민원에 서명을 한 이도 있지 않을까? ㅋㅋ

LG Electronics | LG-F240L | 2013:07:13 14:02:16


  접수창구에는 올드멤버중 한분이신 채수원님이 주말알바로 접수요원을 하고 계셨다. 오랜만에 뵙기에 반갑게 인사드리고 약간의 기념품(스티커, 배지, 군것질류, 생수)을 챙기며 커넥트 홀로 들어섰다.


LG Electronics | LG-F240L | 2013:07:13 14:04:41


LG Electronics | LG-F240L | 2013:07:13 14:05:08


  앞자리로 이동하니, 첫발표자인 정상혁님과 다다음 발표자인 백기선님을 뵐 수 있었다.


LG Electronics | LG-F240L | 2013:07:13 14:08:10

LG Electronics | LG-F240L | 2013:07:13 14:08:42



  정상혁님은 '[Spring 3.0 -> 3.1 -> 3.2 따라하기]'라는 주제로 발표를 시작하신다. 소스코드가 많은 발표이기에 github 에 마크다운으로 작성된 문서를 기반으로 발표를 진행하신다. 이런 방법도 괜찮다 싶다. 개발과 관련된 발표자료를 만들때 소스코드를 이쁘게 표현하기가 참 쉽지 않은데, 그럴바에는 차라리 마크다운 문서로 보여주고 이를 공요하는 것이 적절해보인다. 프리젠테이션 파일로 만들어진 발표자료는 나중에 보기가 쉽지 않고, 시스템에서 텍스트 검색도 되지 않아서 나중에 다시볼 가능성이 극히 희박하다.


  스프링의 버전이 3.0에서 3.1로 넘어가면서 많은 변화가 일어났다. 스프링이 하위호환성(새로 출시된 프레임워크가 이전 프레임워크에 맞춰 개발된 기능을 그대로 유지-지원하는 것)을 강조하는 프레임워크지만, 코드의 개선을 위해서 3.1에서는 꽤 많은 부분이 변경되었다. 이 변경된 항목들에 대해서 찬찬히 짚어가는 시간이 지속되었다. 여전히 스프링 3.0을 이용하고 있는 프로젝트가 많은 상황에서 스프링 3.1 이상으로 업그레이드를 하려고 하는 이들에게 도움이 되었으리라고 본다.


  다음 발표는, 성능테스트 툴로 사람들의 많은 관심을 받고 있는 nGrinder에 관한 발표였다. 'nGrinder 초딩도 하는 성능 테스트'라는 제목으로 윤준호님이 발표하셨다. 낼모레 불혹을 앞두고 있는 '디자이너 출신'의 개발자는 nGrinder의 미려함에 대해서 강조하셨다.

  창조자인 개발자에게 자신의 창조물을 파괴하는 행위인 '테스트'는 참 힘든 일이다. 하지만, 자신이 만든 창조물의 성능과 안정성을 높이는 일은 외면해서는 안될 일이다. 어느 개발자들은 '테스트'는 품질관리QA(Quility Assurance)자에 의해서 진행이 되어야 한다고 말하지만, 나는 개발자가 일정수준 이상의 품질을 갖춘 제품을 만들어낼 의무가 있다고 본다.

  개발자가 일정수준 이상의 품질을 갖춘 제품을 만들어내기 위해서는 '테스트'를 진행해야 하는데, 그 테스트를 개발자 스스로 하게 하려면 어떻게 해야할까? '테스트'가 쉬워야 한다. 쉬워야 테스트를 쉽게 하고 제품의 품질을 높이면 자랑할 수가 있다. 테스트를 하면할수록 성능이 개선된다면 개발자는 자발적으로 테스트를 수행하게 될 것이다.

LG Electronics | LG-F240L | 2013:07:13 15:38:18


  nGrinder는 Grinder에서 시작되었다. Java 이외의 Jython과 Groovy를 지원하며, 테스트에 사용되는 스크립트를 자동생성하고 자체 SVN으로 관리해주고 테스트 결과를 저장하여 살펴볼 수 있는 기능을 제공한다. IDE와 클러스터링을 지원하면서 개발자의 '제품'에 대한 성능 테스트를 용이하게 한다. 이렇게 테스트를 용이하게 하면서 NHN내부에서도 620여명의 사용자가 11,000건의 테스트를 진행하며 성능 테스트 활동이 10배이상 증가하는 테스트를 달성했다고 한다.

  내가 만든 제품에 대해서도 성능테스트를 진행해봐야겠어. ㅡ_-);;


  세번째 발표는, whiteship 이라는 닉네임으로 '스프링 프레임워크'와 관련해서 잘 알려진 백기선님이 'Vert.x와 socket.io 이해 및 활용'이라는 주제로 발표하셨다. 특이하게, 자신의 큰 딸 '서연이'와 함께하는 발표였다. 발표 중간중간에 서연이의 돌발 행동에 참석자들은 흐뭇한 '아빠미소'를 짓고 있지 않았을까?


LG Electronics | LG-F240L | 2013:07:13 16:47:22


  시작에 '왕좌의 게임'에 나오는 말을 인용하며 '개발이 딸보다 쉬웠다' 라는 그의 말을 조금은 이해할 수 있는 순간이었달까?

Vert.x는 매우 쉽게 확장 가능한 차세대 비동기 애플리케이션 개발 플랫폼이다.

  Vert.x는 자바스크립트 엔진을 이용한 node.js와 비교되는 Java를 기반으로 하는 비동기 애플리케이션 개발 플랫폼이다. 백기선님은 Vert.x에 관심을 가지고 관련한 글을 꾸준하게 작성하고 있다. 지금도 꾸준하게 관련한 소식들을 게재하고 있다.

  Vert.x의 핵심요소는 Netty(IO 처리), Hazelcast(메모리형 데이터를 분산처리할 수 있는 그리스 시스템 제공)이다.

  Vert.x 의 주요 개념으로 Verticle, Vert.x. instance, Ployglot, Concurrency 에 대해서 하나하나 짚어나간다.

  Verticle은 Vert.x 에서 배포가능한 애플리케이션 단위이며 개별적인 클래스로더를 사용하여 실행해주며, 손쉽게 클러스터링할 수 있다. 수평적인 확장을 지원하며, 확장된 Verticle 간에는 메시지를 주고 받을 수 있다.

  Polyglot은 JVM에서 실행가능한 다양한 언어들로 작성할 수 있다.JavaScript, Ruby, Java, and Groovy 등의 언어를 지원하고 있으며 추가적으로 Clojure, Scala and Python 등의 다양한 언어를 지원할 것으로 보인다.

  Vert.x 를 이용할 때는 vertx-core, vertx-platform을 이용하면 된다. 버전업 되면서 사용하는 방법이 달라졌다고 한다. 라이브코딩을 하다가 당황하셨지만 능숙하게 대처하는 모습에서 그의 발표경험의 연륜을 짐작하게 만든다.


LG Electronics | LG-F240L | 2013:07:13 16:29:17


  node.js가 많은 인기를 끌게 만든 모듈 중 하나가 socket.io(전송 방식을 추상화하여 모든 브라우저와 모바일 기기용 실시간 애플리케이션을 개발가능하도록 하는 것이 목적)다. Socket.io를 이용해서 실시간 웹 기술을 이용하여 요즘 많이 관심받는 푸쉬Push 기술을 구현하기가 용이해진다. Socket.io 는 node.js의 모듈이다보니 자바쪽에서 아쉬워하는 녀석 중에 하나였는데, 기선님이 keesun/mod-socket-io 를 만들어내어 오픈소스로 제공하고 있다.

  스프링 4.0에서는 자체로 웹소켓WebSocket을 지원하는데, SockJS 구현체가 들어 있어 지원한다고 한다. SockJS가 서버의 연결이 끊어졌을 때 서버와 클라이언트가 서로 그 정보를 주고 받는 핑퐁(Ping-Pong, 이걸 핑퐁이라고 하는 것이군!)을 지원하지 않아 아쉽다고 하였는데, 과연 스프링에 포함되었을 때는 어떤 모습을 가질 수 있을지... 궁금하군.


개인적인 일정으로 여기까지만 듣고 Helloworld 세미나장을 나온다.

비가 내리는 날에도 많은 사람들이 참여한 세미나였고, 나로서는 처음 그린팩토리를 살펴볼 수 있는 좋은 기회였다. ㅎㅎ 하지만, 우리집(경기도 남양주시)에서 정자동까지는 멀고먼 여정이었다. Orz... 집에 돌아와서는 10시에 체력저하로 다운.

이 장소를 Daum지도에서 확인해보세요.
경기도 성남시 분당구 정자1동 | NHN그린팩토리
도움말 Daum 지도

첨부파일 : 

invalid-file


동일한 개발환경을 지닌 가상머신(인스턴스) 의 배포를 손쉽게할 수 있다면, 얼마나 좋을까! 라는 생각을 구현한 멋진 서비스가 아닐까? 서버 리소스를 스케일업하는 클라우드 컴퓨팅 환경에서 인스턴스 관리를 위한 도구로 사용할 수 있지 않을까라는 상상을 잠시 해본다. 사용하려는 서버환경을 구축한 후에 이것을 box로 만들어 확장하는 서버 이미지를 대신하도록 만들어두고, 처음 가동할 때 chef에 의해서 기본적인 추가작업(내가 우분투를 설치하고 로그인하여 처음 실행하는 sudo apt-get update; sudo apt-get upgrade; 도 자동화할 수 있겠지.)이 실행되도록 할 수 있으니, 증설한 서버에 대한 반복적인 작업이 확실히 줄어들 것이다. 스터디가 진행될수록, 개발PC 가상머신을 배포하기 위한 용도보다는 클라우드 컴퓨팅에서 사용할 인스턴스 배포용으로 적합할 것 같다는 생각을 가지게 되었다.


Vagrant

  • 사이트 : http://www.vagrantup.com/
  • 동일한 서버 개발환경 꾸미기
    • 개발과 실서버의 일치를 위해 로컬 가상머신을 손쉽게 관리하자.
    • 로컬 개발서버를 가상머신으로 관리하나? ㅡ_-)? 그러고보니, 전에 몇번 그랬던 적은 있다.
  • 관련 정보
    • 작성자 : @mitchellh
    • 오픈소스 MIT 라이센스
    • Ruby로 작성됨
    • 현재 1.0.5
    • 사용OS : ubuntu 12.04까지 나왔심.
  • Vagrant Command Line Interface
    • package : 지금까지 구성된 인스턴스를 vox로 만들어서 배포
    • halt : shutdown
    • provision :
    • up : start!
  • 실행방법
    1. vagrant box add <config.vm.box name> http://files.vagrantup.com/<box-image>.box
    2. vagrant init <config.vm.box name>
      • 선택적으로 config.vm.box 에 지정되는 value를 지정할 수 있다.
      • <config.vm.box name>을 지정하지 않으면 base로 기본등록된다.
      • 이 명령이 실행된 위치에 Vagrantfile 라는 설정파일이 생성된다.
    3. vagrant up : 실행!!

      Bringing machine ‘default’ up with ‘virtualbox’ provider…
        [default] Setting the name of the VM…
        [default] Clearing any previously set forwarded ports…
        [default] Creating shared folders metadata…
        [default] Clearing any previously set network interfaces…
        [default] Preparing network interfaces based on configuration…
        [default] Forwarding ports…
        [default] – 22 => 2222 (adapter 1)
        [default] Booting VM…
        [default] Waiting for VM to boot. This can take a few minutes.
        [default] VM booted and ready for use!
        [default] Configuring and enabling network interfaces…
        [default] Mounting shared folders…
        [default] – /vagrant
        ihoneymon:vagrant ihoneymon$

      • 실행이 완료된 후 vagrant ssh 를 입력하면 실행된 가상머신에 터미널로 접속가능하다.
      • port forwarding : 22 => 2222
    4. vagrant halt : 가상머신 끄기
  • 기타명령
    • package
      • vagrant package –help
        • VirtualBox에 이미 등록되어 있는 가상머신을 vagrant box로 패키징하여 바이너리 파일로 만들어 배포가능하도록 만든다.
      • vagrant package –base vagrant_1368646716 –output ubuntu-lucid32.box
        • ubuntu-lucid32.box
    • vagrant package 로 box 만들기

      • vagrant package –base vagrant_1368621809 –output ubuntu-lucid32.box

      ihoneymon:temp ihoneymon$ vagrant package –base vagrant_1368621809 –output ubuntu-lucid32.box
        [vagrant_1368621809] Clearing any previously set forwarded ports…
        [vagrant_1368621809] Creating temporary directory for export…
        [vagrant_1368621809] Exporting VM…
        [vagrant_1368621809] Compressing package to: /ihoneymon/temp/ubuntu-lucid32.box
        ihoneymon:temp ihoneymon$ ls
        vagrant_lucid32.box

      package로 생성한 ubuntu-lucid32.box를 test라는 이름으로 추가하고 확인

      • vagrant box add test ./ubuntu-lucid32.box

      ihoneymon:temp ihoneymon$ vagrant box add test ./ubuntu-lucid32.box
        Downloading or copying the box…
        Extracting box…te: 200M/s, Estimated time remaining: –:–:–)
        Successfully added box ‘test’ with provider ‘virtualbox’!
        ihoneymon:temp ihoneymon$ vagrant box list
        lucid32 (virtualbox)
        test    (virtualbox)
        ihoneymon:temp ihoneymon$


Chef

  • vagrant up 실행시 최초실행되는 매크로(간단하게 말하면, 스크립트를 조건에 맞춰서 자동실행하는 것이랄까?
  • 운영체제에 종속적인 편이다.
    • 스터디 중에 능력자가 운영체제를 식별하여 실행환경에 맞는 명령을 수행하는 것이 하지 않을까 하는 이야기를 나누었지만, 그런 수고스러운 삽질을 하는 것을 권장하고 싶지는 않다. 운영체제에 맞춰서 작성하면 간결하고 깔끔하겠다는 개인적인 생각을 했다.
  • Chef Solo Provisioning
    • Chef Server 없이 미리 opscode-cookbooks organization 에서 설정하려고 하는 운영체제에 맞춰서 receipe를 내려받은 후 가상머신 실행 후 추가명령 실행을 지원하는 기능이다. 이걸 잘 설정해두면, 여러 개의 인스턴스를 만들어서 실행할 때, 서버의 업데이트 상태를 최신상태로 갱신하고 사용하는데 필요한 패키지를 설치하도록 만들 수 있다.


참고자료


### 문제발생

vagrant box add "lucid32" http://files.vagrantup.com/lucid32.box

명령으로 lucid32.box를 내려받고 실행할려고 하는 순간 아래의 메시지가 보여지며 실행되지 않는다.

The box 'base' could not be found.

'base' box를 찾을 수 없단다. 내가 추가한 box는 'lucid32'인데?


### 해결책

box를 내려받은 위치에보면 

Vagrantfile

라는 파일이 있다. 이 파일을 열어보자.

파일의 내용 중 

config.vm.box = "base"

로 되어 있는 항목이 보일 것이다.

config.vm.box = "lucid32"

로 변경하자.


box 'base' not fond 문제 처리 후 실행화면


### 설명

vagrant box를 내려받으면서 "lucid32"라는 이름을 부여했는데, vagrant 설정파일Vagrantfile에 기본설정에는 "base"로 되어 있어서 발생한 문제다.



프로그래머로 사는 법

저자
샘 라이트스톤 지음
출판사
한빛미디어 | 2012-10-04 출간
카테고리
컴퓨터/IT
책소개
성공하는 소프트웨어 프로그래머를 위한 경력 관리 비결!『프로그래...
가격비교 글쓴이 평점  

  어제 정기적으로 모이는 스터디가 있었다. 그 스터디에는 다양한 분야, 다양한 회사의 사림들이 모여들었다. 그들은 저마다의 목표를 가지고 늦은 밤, 희의실에 모여 스터디를 시작했다.


  개발자가 자신의 몫을 할 수 있는 위치로 성장하기 위해서는 배워야 하는 것이 많다. 

  학교나 학원에서 프로그래밍에 필요한 것들을 가르쳐줄 수 있다. 개발 환경을 잡고 개발툴을 설치하는 방법을 알려줄 수는 있다. 그러나 어떻게 코딩하고 요구사힝을 어떻게 구현할 지는 순수히 개발자 자신의 능력에 달려있다고 할 수 있다. 처음 프로그래밍을 시작하는 개발자가 능숙하게 알고리듬을 이해하고 문제를 해결할 수 있을리는 없다. 이 프로그래밍 능력은 학습과 경험에 의해 지속적으로 성장할 수 있다. 개인에 따라서 진척도의 차이는 있겠지만, 꾸준히 노력하면 성장되는 것은 분명하다.


  어제 스터디를 하면서 느꼈던 안타까운 점이 하나 있었다.

  발표 내용이, 내가 처음 이 바닥에 들어와 고민했던 내용들이라는 점들이라는 것이다. 왜 안타까웠느냐 하면, 저런 시행착오나 설정에 대해서 잘 알고 있는 사람이 곁에 있었다면 겪지 않았을 시행착오인 것들이라 누군가가 곁에 있었다면, 손쉽게 해결하고 다음단계로 진행힐 수 있는 것인데 그러지 못하고 많은 시간을 지체하면서 손해를 본 것이 안타까웠다. 시간은 그들에게나 회사에게나 소중한데.

  스터디에 참여하려는 노력을 하는 사람들은 그 안에서 다른 사람의 경험을 공유받을 수 있겠지만, 스터디 등의 활동을 하지 않는 사람들은 그런 경험을 공유받을 기회 조차 가지지 못한다.


  아직 우리나라 개발자들은 자신의 경험을 공유하는 것에 인색하거나 낯설어 하는 이들이 많다. 상당한 회사들에서 선임개발자가 후임개발자들에게 많은 것을 전해주고 싶지만, 그 방법을 체계적으로 익히지 못했기에 대부분 주먹구구식으로 전달해줄 수밖에 없다. 이렇게 될 경우 종종 중요한 포인트들을 빠뜨리고 예시들에 대해서만 설명하거나 말로 두리뭉실하게 설명하는 것에 그치게 될 가능성이 높다. 

  

faith
faith by jenny downing 저작자 표시

  이 바닥에 뛰어들었을 때는 모든게 낯설었다. 어떤 일을 하면서 일어나는 것들에 화들짝 놀라는 경우도 있었다. 


  '내가 잘못 건드려서 시스템 전체에 영향을 미치는 경우가 생기면 어쩌지??'

  라는 불안감을 안고서 한동안은 조심히 시스템을 살폈다.  딱히 나에게 어떻게 하라고 가이드 해주는 사람들도 없었다. (방치되고 있었다고나 할까?) 그러다가 주변의 것이 익숙해지기 시작하자 나름의 시도들을 해봤다. 구버전의 이클립스를 최신버전(이때는 헬리오스가 최신버전이었다!)으로 바꾸고 로컬개발환경을 조금더 깔끔하게 만들고, 별도의 버전관리도구(SVN)를 도입하고 새로운 것들을 계속 배우려고 했다. 

  그 때 그런 경험을 가진 사람들이 곁에 있었다면, 시행착오를 줄이고 조금 더 많은 것을 배우고 익혔을텐데 라는 아쉬움이 아직도 남아있다. '이 회사에서는 배울게 없겠다'는 생각이 들면서 그것을 이유로 그 회사를 나오기를 결심했다. 나는 여전히 배움에 목적이 있다. 

  그 회사에 들어갈 때 개발(SI)쪽으로 넣어주길 바란다고 했지만, 회사에서는 나를 유지보수(SM)으로 꽂아넣었다. 회사의 사정과 내 사정이 서로 다르다. 서로 다른 사정에 대해서 이해하고 넘어갈 수도 있겠지만, 그렇지 못할 경우도 있다. 그럴 경우에는 자연스럽게 회사를 떠나게 되는 것이다.

  대부분의 개발자가 처음에 겪는 시행착오는 선배개발자들이 겪은 것들이 대부분이다. 조금만 관심을 기울여주면 그런 시행착오를 겪고 해결하기 위해 들이는 시간과 노력을 줄여줄 수 있고, 빠르게 성장할 수 있는 계기를 만들어줄 수가 있다. 그런데 그렇지 못하는 경우가 너무나 많다.


days of yore
days of yore by brainware3000 저작자 표시

  '나도 겪었으니까 너도 겪어봐!'

  라는 못된 심보를 가지게 되는 것이랄까?

  내가 가진 경험을 다른 사람에게 전달해줄 수 있다면, 다른 사람은 조금 더 빠르게 성장할 수 있다고 생각한다. 나 역시 아직은 이런 경험을 전달하는 것에 익숙치 않은 탓에 많은 부분에서 헛점들이 존재한다. 


  이런 시행착오를 줄여줄 수 있도록 도와줄 수 있는 노력들을 해보려고 한다. 당장은 구체적인 것들을 보여주기는 어렵겠지만, 블로그에 기록들을 남기고 필요하다면 세미나장에서 발표도 하고 공유할 수 있는 흐름을 만들어보고 싶다.

내가 밥벌어먹고 사는 프로그래밍 언어인 '자바'에 대한 내용들을 정리하기 위해 만든 이 블로그.

한동안 잠들어 있었는데, 이제 다시 이 녀석을 활성화하기로 한다.

4~5개월 동안 진행하는 SLiPP 스터디와 관련한 내용은 이 카테고리 내에 기록하겠다.

관련한 내용도...

+ Recent posts