블로그 이미지
Peter Note
Web & LLM FullStacker, Application Architecter, KnowHow Dispenser and Bike Rider

Publication

Category

Recent Post

2012. 11. 25. 15:37 Lean Agile Culture
jsfiddle.net 은 브라우져에서 html5, css, javascript를 개발하고 테스트 해볼 수 있는 서비스이다. 사용법을 공부하던중 jsfiddle을 통하여 javascript 코드에 대한 테스트 및 결과를 하기와 같이 embedded 할 수 있는 방법이 있다. 




▶ jsfiddle 코드 웹페이지에 넣기 


  - 공식 참조 문서

  - http://{url_of_the_fiddle}/embedded/[{tabs}/[{style}]]/  구성이고 iframe으로 넣는다 

<iframe
  style="width: 80%; height: 200px"
  src="http://jsfiddle.net/nulpulum/w9NJZ/embedded/js,resources,html,css,result">
</iframe>

  - 위 코드에서 nulpulum은 등록 계정, w9NJZ 은 페이지 그리고 맨뒤의 js,resources,html,css,result 구분자는 탭을 의미한다.

  - Result 탭 옆의 > 아이콘을 클릭하면 Result 탭으로 자동이동하면서 html 수행결과를 볼 수 있다. 


이제 테스트 코드를 jsfiddle을 이용하여 블로그에 넣어보자


posted by Peter Note
2012. 11. 23. 18:07 Dev Environment

ExtJS를 사용하기 위한 최적의 환경을 구축해 보자. Aptana IDE와 Spket Javascript Editor Plugin을 설치해 본다


  • Aptand IDE StandAlone 버전을 다운로드하여 Aptana_Studio_3_Setup_3.2.2.exe 파일을 수행한다  
  • 설치위치에서 실행파일 AptanaStudio3.exe 을 수행하고 원하는 곳에 workspace를 지정한다 (Eclipse기반이므로 동일)
  • Studio 상단 FullDown 메뉴에서 Help -> Install New Software... 선택
  • Spket IDE 추가 : 상단 Work With: 항목에  http://www.agpad.com/update/  입력 (Spket IDE 선택하고 Next 설치완료)
    • Window > Preferences > Spket > JavaScript Profiles > New... (ExtJS 라고 입력)
    • ExtJS 선택 -> Add Library 에서 ExtJS 를 선택하고 OK 클릭
    • ExtJS 라이브러리 선택 -> Add File 에서 라이브러리 선택
  • JavaScript를 만들어 보자

* 참조 사이트 : http://techbug.tistory.com/1

'Dev Environment' 카테고리의 다른 글

[MS Code] Grunt 명령 디버깅하기  (0) 2017.04.03
posted by Peter Note
2012. 11. 23. 16:28 NodeJS/Modules

prototype.js는 AJAX(Asynchronous JavaScript and XML)에서 거의 표준 라이브러리 처럼 사용하는 라이브러리이다. 사용법을 알아보자. 하기 코드는 prototype.js를 사용했을 때 JavaScript 클래스를 만들고 객체화 하는 과정을 보여준다 


var Employee = Class.create(); // Class를 이용하여 클래스 생성 Employee.prototype = { initialize : function( name ){ // prototype.js 사용시 생성자는 initialize로 정의 this.name = name } }; var Dev = Class.create(); Dev.prototype = Object.extend( // Class 상속 extend 이용 new Employee, // 상속받을 Class 선언 { showMember : function() { var list = new Array( '홍길동', '고길동', '김길동' ); document.writeln( '<div id="표시영역">' + this.name + '★사원 명단:' + list + '</div>' ); } } ); var dev = new Dev( '개발부' );

dev.showMember();


<참조>

  - 공식 사이트 :  http://prototypejs.org (버전 1.7.1)

  - 클래스 생성, 상속, Ajax 통신, JSON(JavaScript Object Notation) 사용 튜토리얼 :  http://prototypejs.org/learn/

  - prototype.js 정의 보기 :  https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js 

  - ExtJS를 하기 전 참조지만 JavaScript 하기전 기본지식과 Aptana+Spket 개발환경 설정하기 : http://techbug.tistory.com/1

  - 애니메이션과 Drag에 좋은 라이브러리 :  http://madrobby.github.com/scriptaculous



posted by Peter Note
2012. 11. 23. 10:00 Middleware, Cloud/Linux

jboss source build를 위하여 ubuntu에 maven을 설치해 보자 


1) maven2 설치 하기

2) maven 설치 와 실행 파일 위치

root@ip-10-146-81-140:/etc/maven2# cd /usr/share/maven2   <-- 설치 위치
root@ip-10-146-81-140:/usr/share/maven2# ls
bin  boot  conf  lib
root@ip-10-146-81-140:/usr/share/maven2# cd /etc/maven2    <-- 환경 파일 저장 위치
root@ip-10-146-81-140:/etc/maven2# ls
m2.conf  settings.xml
root@ip-10-146-81-140:/etc/maven2# ls -alrt /etc/bin/mvn     <-- 실행 파일 symbolic link
ls: cannot access /etc/bin/mvn: No such file or directory
root@ip-10-146-81-140:/etc/maven2# ls -alrt /usr/bin/mvn
-rwxr-xr-x 1 root root 6331 Oct 24  2011 /usr/bin/mvn
root@ip-10-146-81-140:/etc/maven2# cd bin
bash: cd: bin: No such file or directory
root@ip-10-146-81-140:/etc/maven2# cd /usr/share/maven2/bin
root@ip-10-146-81-140:/usr/share/maven2/bin# ls -alrt
total 8
lrwxrwxrwx 1 root root   21 Oct 24  2011 mvnDebug -> ../../../bin/mvnDebug
lrwxrwxrwx 1 root root   16 Oct 24  2011 mvn -> ../../../bin/mvn
lrwxrwxrwx 1 root root   15 Oct 24  2011 m2.conf -> ../conf/m2.conf
drwxr-xr-x 5 root root 4096 Nov 23 00:26 ..
drwxr-xr-x 2 root root 4096 Nov 23 00:26 .
root@ip-10-146-81-140:/usr/share/maven2/bin#


설치하면 현재(2012.11)기준 Maven version 2.2.1 이다. 그러나 최신 버전은 3.0.4 이다 


  - 아파치 메이븐 사이트


Ubuntu에 최신버전을 설치하려면 apt-get으론 안되고 별도의 과정을 거친다.

  - wget http://apache.mirror.cdnetworks.com/maven/maven-3/3.0.4/binaries/apache-maven-3.0.4-bin.zip

  - 압축을 풀고 환경변수 : export M2_HOME=<install dir path> 그리고 export M2=$M2_HOME/bin

  - PATH 환경변수 : export PATH=$M2:$PATH

  - 버전확인 : mvn -version 

dev@ip-10-146-81-140:~/deploy$ wget http://apache.mirror.cdnetworks.com/maven/maven-3/3.0.4/binaries/apache-maven-3.0.4-bin.zip

--2012-11-23 00:55:59--  http://apache.mirror.cdnetworks.com/maven/maven-3/3.0.4/binaries/apache-maven-3.0.4-bin.zip

Resolving apache.mirror.cdnetworks.com (apache.mirror.cdnetworks.com)... 61.110.198.174

Connecting to apache.mirror.cdnetworks.com (apache.mirror.cdnetworks.com)|61.110.198.174|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 4889768 (4.7M) [application/zip]

Saving to: `apache-maven-3.0.4-bin.zip'


100%[============================================================================>] 4,889,768   1.46M/s   in 3.2s


2012-11-23 00:56:02 (1.46 MB/s) - `apache-maven-3.0.4-bin.zip' saved [4889768/4889768]


dev@ip-10-146-81-140:~/deploy$ ll

total 4784

drwxrwxr-x 2 dev dev    4096 Nov 23 00:55 ./

drwxr-xr-x 7 dev dev    4096 Nov 23 00:53 ../

-rw-rw-r-- 1 dev dev 4889768 Sep  5 07:01 apache-maven-3.0.4-bin.zip

dev@ip-10-146-81-140:~/deploy$ unzip apache-maven-3.0.4-bin.zip

Archive:  apache-maven-3.0.4-bin.zip

   creating: apache-maven-3.0.4/

   creating: apache-maven-3.0.4/boot/

  inflating: apache-maven-3.0.4/boot/plexus-classworlds-2.4.jar

   -- 중략 --

   creating: apache-maven-3.0.4/lib/ext/

  inflating: apache-maven-3.0.4/lib/ext/README.txt

dev@ip-10-146-81-140:~/deploy$vi .bashrc 


<.bashrc 삽입 내역> 

export M2_HOME=/home/dev/deploy/apache-maven-3.0.4

export M2=$M2_HOME/bin

export PATH=$M2:$PATH



dev@ip-10-146-81-140:~$ . .bashrc

dev@ip-10-146-81-140:~$ mvn -version

Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)

Maven home: /home/dev/deploy/apache-maven-3.0.4

Java version: 1.7.0_09, vendor: Oracle Corporation

Java home: /usr/lib/jvm/java-7-oracle/jre

Default locale: en_US, platform encoding: UTF-8

OS name: "linux", version: "3.2.0-31-virtual", arch: "amd64", family: "unix"


posted by Peter Note
2012. 11. 22. 16:19 Middleware, Cloud/OSGi

Virgo v3.5.0 RELEASE 버전의 springframework는 3.0.x 버전 번들이 패키징 되어있다. 3.1.x 버전으로 재패키징을 할 경우 대비하여 Springsource에서 번들링 해놓은 파일을 받아서 virgo_home/repositories/ext/ 밑으로 넣으면 될듯! 아직 미 테스트함 


  - 번들의 개념에 대해서 알자 (하단 요약 참조 사이트)

  - SpringSource에서 운영하는 Bundle Repository

  - Spring 방식으로 Bundle을 만들 수 있는 Spring Dynamic Modules



▶ 번들 개념에 대하여 간단히 이해하고 가자 

  - OSGi Bundle은 모듈화 단위이다. (unit of moduelarization)

  - Bundle 구성 = resources + mainfest file(META-INF/MANIFEST.MF파일에 의존성 jar, 번들 정보) + OSGI-OPT 디렉토리(부가적인 정보)  

  - manifest.mf : 20 가지 헤더 정보를 가짐

    + Export-Package : package + name, 외부노출됨

    + Import-Package : package + name, 사용할 것들

    + Bundle-SymbolicName : unique name

    + Bundle-Name : human-readable name

    + Bundle-Activator : BundleActivator를 상속받아 구현한 것으로 start/stop 관련

    + Bundle-Classpath : embeddied libraries 의 여러 폴더나 파일 classpath 지정

    + Bundle-ManifestVersion : 1 = OSGi release 3, 2 = OSGi release 4

Bundle-Name: spring-core
Bundle-SymbolicName: org.springframework.bundle.spring.core
Bundle-ManifestVersion: 2
Export-Package:org.springframework.core.task;uses:="org.springframework.core,org.springframework.util";version=2.5.1 org.springframework.core.type;uses:=org.springframework.core.annotation;version=2.5.1[...]
Import-Package:org.apache.commons.logging,edu.emory.mathcs.backport.java.util.concurrent;resolution:=optional[...]



▶ bnd 툴 사용하기 

  - http://www.aqute.biz/Bnd/Bnd  사이트에서 다운로드

  - 하기와 같이 수행하면 manifest 정보가 출력됨 

java -jar bnd.jar print c3p0-0.9.1.2.jar

[MANIFEST c3p0-0.9.1.2.jar]
Ant-Version Apache Ant 1.7.0
Created-By 1.5.0_07-87 (&quot;Apple Computer, Inc.&quot;)
Extension-Name com.mchange.v2.c3p0
Implementation-Vendor Machinery For Change, Inc.
Implementation-Vendor-Id com.mchange
Implementation-Version 0.9.1.2
Manifest-Version 1.0
Specification-Vendor Machinery For Change, Inc.
Specification-Version 1.0


  - 또는 OSGify 로 manifest를 수정하여 준다 (detail)

java -jar bnd.jar wrap c3p0-0.9.1.2.jar


번들 툴을 사용해 보자 

posted by Peter Note
2012. 11. 22. 11:11 Git, GitHub

diff는 commits 된 것들 사이에서 차이를 보기위한 방법이다. (참조

어디에서 수행할 수 있는가?

  • workspace 입장 (Working Directory)
    • git diff : "workspace" <- "index"
    • git diff HEAD or <another branch> : "workspace" <- "local repository"
  • index 입장 (Stage)
    • git diff : "workspace" <- "index"
    • git diff --cached : "index" <- "local repository"
  • local repository 입장
    • git diff HEAD  or <another branch>  : "workspace" <- "local repository"
    • git diff <commit 1> <commit 2> : "local repository" commit 1 -> commit 2
    • git diff --cached : "index" <- "local repository" 


위 내용에 대한 정리를 보자. 

> local repository 내부 비교 : git diff <commit> <commit>  예) git diff da985 b325c
> local repository와 index 비교 : git diff --cached
> local repository 특정 branch와 workspace 비교 : git diff HEAD 또는 git diff maint

> index와 workspace 비교 : git diff



posted by Peter Note
2012. 11. 21. 15:12 Languages/Java

Java란 무엇인가? 그 본질은 무엇인가라는 궁금증에 대하여 심도있고, 상세한 설명과 함께 쓰여진 블로깅이 있어서 링크한다. 엑셈의 WAS성능 관리 솔루션을 만드는 분이 아닐까 추측을 해본다. 


[JVM Internal]Java Performance Fundamental 교재를 공유합니다.

  - JVM = Runtime Data Area + Execution Engine + ClassLoader + Garbage Collection + Native Code (JVM 위키피디아)

  - Runtime Data Area = Java Stack(Frame Data = Operand Stack + Local Variable) + Method Area + Method Area

    + istore : Operand Stack -> Local Variable

    + iload : Local Variable -> Operand Stack

  - ClassLoader = Bootstrap (rt.jar) + Extension (jdk/ext directory) + System ClassLoader (application)

  - ClassLoader Work = Loading -> Linking -> Initializing

  - Execution Engine : byte code를 interpreting 하여 수행

    + JIT (Just In Time) Compiler : 많이 수행되는 것 일부를 Native Code로 Compile 하여 수행

    + HotSpot Compiler = Client or Server Compiler

      + Profile을 이용하여  Native Code Compiler 코드를 결정

      + Native -> Interpet로 돌아갈 수도 있음



> JVM 과 JavaScript Engine의 차이


posted by Peter Note
2012. 11. 21. 11:33 Lean Agile Culture/Lean Startup

시장 조사를 통하여 모바일 서비스에서 주고자 하는 가치를 찾거나, 가치를 발견하는 것은 기획자가 초기단계에 수행해야 하는 일이다. 검색을 통하여 정적 데이터들을 획득하여 정리 할 수 있지만, 실제 답변을 원하는 항목에 대한 설문 조사(Survey) 또는 투표(Poll)를 쉽게 할 수 있다면  살아있는 데이터를 가지고 분석을 할 수 있으리라 본다. 역시 가치가 의미있으려면 시장(마켓)의 추측이 아닌 사실(팩트)가 중요하다. 사용해 볼만한 onDemand 서비스를 알아보자 


  - http://polldaddy.com  

    + Poll(투표) 사용 예

    + 상세 설명 블로그

  - https://ko.surveymonkey.com 

    + 서베이 몽키 설명


니츠마켓을 만들기 위한 시장 조사(Survey)나, 프로젝트 관리에서 의견 취합용 투표(Poll)등을 적극 사용해 보자. 역시 필요한 것은 서비스로 나오는 세상이다.

posted by Peter Note
2012. 11. 21. 11:19 Lean Agile Culture

나는 전규현님의 블로그 포스팅을 관심있게 읽고 있는 독자이다. 패키지SW 개발을 7년 넘게 해보면서 느꼈던 모순과 방황에 대한 원인과 솔루션을 잘 설명해 주고있기 때문이다. 최근 지인들과 모여서 새로운 모바일 서비스를 기획하면서 어떤식으로 진행을 하고 어떤 시스템들이 필요할지 그리고 어떤 형태로 운영을 할지 고민을 하고 있다. 그 좋은 해답을 해당 블로그에서 이야기 해주고 있다. 


  • 소스저장소, 이슈, 위키, 프로젝트관리 :  http://softwaredev.tistory.com/297
    • 소스저장소 : Git onDemand : BitBucket
    • 이슈 : Jira onDemand
    • 위키 : Confluence onDemand
    • 스크럼 도구: GreenHopper onDemand (추가)
    • 프로젝트 관리 : Podio onDemand (추가)
  • SVN or Git 어느 것을 쓸것인가 :  http://softwaredev.tistory.com/238
    • 분산환경에서 일할 경우 : Git Repository

최근에 Podio로 프로젝트 관리를 하고 스크럼 방식 진행은 Trello를 사용하고 있다. 둘을 연결시켜서 보자가 Zapier를 사용하고 있지만 Zapier 오류로 인해 Trello -> Podio 연동이 잘 되지 않는다. 연동만 잘 된다면 Podio + Trello로도 사용할 만 하다. 물론 기본 전제는 분산환경에서 일할 경우 유용하고, 로컬에서 모여 일한다면 벽에 Post-It을 활용하는 것도 좋다. (GreenHopper 를 사용하면 Trello는 버려도 좋겠다)


posted by Peter Note
2012. 11. 21. 09:53 Middleware, Cloud/Linux

AWS의 Ubuntu 시스템에 ftpd를 설치하는 방법. 구글링하면 너무 많은 정보가 있으므로 좋은 사이트 몇개 링크함


1) 설치 기본 : sudo 설치 방법. https://help.ubuntu.com/10.04/serverguide/ftp-server.html

2) 설정 상세 : 설정에 대한 한글 상세 설명. http://community.365managed.com/10759


JBoss를 curl로 받으려고 하는데 마땅한 곳이 없다. 어디 없을까?

posted by Peter Note
2012. 11. 20. 10:29 Lean Agile Culture/Architecturing

모바일 컨버전스 서비스를 기획하면서 가장 헤메이는 부분이 대용량 데이터에 대한 신뢰성 있는 아키텍쳐를 구축하는 일이다. 이미 대형 포털과 모바일 서비스에서 많은 아키텍쳐 연구를 통하여 최적화를 했겠지만 이를 전수받거나 아니면 뼈대를 살표보는 일은 쉽지 않다. 그러나 AOSA(The Architecture of Open Source Applications) 라는 외국 사이트에서 이에 대한 단초를 제공하고 있고, 네이버 HelloWorld에서 일부 번역한 내용이 있어서 공부를 시작해 본다.


  - AOSA : http://www.aosabook.org/en/index.html

  - Naver 번역 :  http://helloworld.naver.com/helloworld/206816


스터디 모임에서 AOSA의 아키텍쳐 번역과 분석을 해보아야 겠다. TA(Technical Architecture) 설계능력 강화를 위하여 전체적인 조망아래 WAS 및 Open Source Solution 에 대한 접근을 Cloud에 구축/테스트해 보자. 



예전 Queue, NIO에 대한 간단한 개념 정립을 위해서 공부했던 Jenkov의 사이트를 다시 방문했다. Java API들에 대한 기본 개념정리가 잘 되어 있다.


  - http://tutorials.jenkov.com


posted by Peter Note
2012. 11. 19. 15:34 Lean Agile Culture/Lean Startup

스토리는 개인, 기업(조직), 소프트웨어, 서비스 모두에 필요한 초기단계의 전략과도 같다. 스토리가 없으면 재미가 없다. 앙꼬없는 찐빵을 무슨 맛으로 먹으랴. 소프트웨어쪽으로 눈을 돌리면 처음 이 제품을 만들게 된 동기가 있어야 한다. 동기를 유발한 사건이 있고 그 사건의 해결방안을 소프트웨어적으로 아니면 컨버전스적으로 해결 할 수 있는 생각의 흐름 또는 프레임을 가지고 있다면 좋은 아이디어가 나오지 않을까?


오늘 읽은 조성문님의 "스토리가 중요한 이유"를 읽고 많은 것을 생각하게 되었고, 생각을 스토리로 만들어 표현하는 훈련이 필요함을 느낀다.




posted by Peter Note
2012. 11. 16. 14:32 Lean Agile Culture/Architecturing

그동안 간간히 트윗되는 서비스 기업들의 아키텍쳐를 살펴보면서 향후 비슷한 서비스를 할 때 어떤 요소 기술들이 필요할까 생각해 보았다.


  - Netflix 온라인 VOD 서비스 Netflix의 AWS로 옮겨가기 까지의 아키텍쳐 변화 (Java 기반)

  - Evernote 자바 기반 아키텍쳐링 (Hibernate를 사용했다는 것이 흥미롭다, 참조)

  - Instagram SytleShare와 비슷한 구조인듯 하다 그리고 좀 더 세심한 아키텍쳐링  (Python 기반)

  - StyleShare AWS에서 어떤 서비스를 사용하는지 설명 (Python  기반)

  - Etc Search :  http://highscalability.com


향후 만들어갈 Mobile Service에 대해 Netflix 모델과 더불어 기업문화까지 본받을 필요가 있겠다. 자신의 성숙한 기술을 OSS로 공개하고 공유하는 정신을 높게 사고 싶다.




 모바일 컨버젼스 서비스를 만들기 위하여 어떤 단계를 거쳐가야 하는지 생각해 본다. 

  - Big Picture : 서버(미들웨어) 아키텍쳐를 서비스의 요구조건에 맞게 고려한다

  - Framework Picture : 어플리케이션 레벨의 구현에 필요한 Framework들을 고려한다 

  - Project Picture : 프로젝트를 어떻게 진행할 것인지 고려한다.


<Big Picture>
조대협님의 블로그에 소개된 대용량 시스템의 레퍼런스 아키텍쳐와 Netflix의 사례를 고려하여 각 단계의 필요 미들웨어와 배치등을 어떻게 할 것인지 생각해 보자

  - 클라우드 서비스 이용하기 : AWS Pacific zone 이용하기 (각 서비스에 대한 이해와 사용경험을 가져야 한다)

  - 미들웨어 선정 : 현재는 Virgo 위에 Tomcat + SpringDM 사용 예상 (OSGi Bundle 이용)

  - 메모리 캐싱 : Redis를 고려해 보고 있다. 역시 설치와 테스트가 필요하고 어느 부분에 쓰일지도 검토해야 한다)

  - 프레임워크 : 

    + 통신용 프레임워크는 Vert.x 를 Bundle로 올려서 NIO 처리 (apache 대체로 생각하지만 각 필요한 요구조건에 대한 테스트가 필요하다)

    + 도메인 업무처리용 프레임워크는 Spring Roo를 통해 빠르게 개발을 진행하고 싶다 


  - 데이터베이스 : RDBMS를 고려한다면 MySQL, NoSQL을 본다면 Cassandra와 MongoDB를 사용하려 한다. 

  - 상호 연결 : Apache Trift를 통하여 서로 틀린 부분에 대한 Communication을 해소하려 한다 (ESB와 비슷하게 이용 가능할까?)

  - 클라이언트 Push : Vert.x의 Socket.io를 이용한다

  - 모니터링 : Netflix의 오픈소스를 이용하거나 필요시 별도로 만든다

  - 개발, 테스트, 배포 : 운영서버와 유사한 AWS 클라우드 기반으로 가져가며 AMI(Amazone Machine Image)를 이용하여 만들고, 개발, 테스트, 배포 각각 별개의 인스턴스를 가져간다

    + 개발 : 운영과 동일 환경구성

    + 테스트 : JUnit 단위 테스트는 개발단계에서 수행하고, FitNeese 통하여 인수테스트 수행등 종합적인 테스트 방안을 마련한다


<Framework Picture>
모바일 컨버전스 서비스 성격에 맞는 프레임워크를 선택하는 것이 관건으로 보인다

  - UI Layer : 하이브리드 웹앱으로 가고, 성능향상이 필요한 부분이 있다면 고객 확보시점에 따라 네이티브로 간다. Rapid Development를 위하여 선택

  - UI Framework : Sencha Touch, JQuery Mobile, PhoneGap등을 사용, PC 버전은 Sencha의 ExtJS를 사용한다. Unit Test와 개발환경때문에 GWT를 고려해 보았으나, 기초장벽을 어느 정도 해소하면 ExtJS로 하는 것이 좋겠다는 판단임 (요즘 열심히 JavaScript 파고 있다)

  - Server Framework : Vert.x, Spring, Spring roo 등을 사용할 예정

  - Test Framework : JUnit, FitNeese

  - Deploy : Maven 또는 Gradle 고려중, Jenkins + HuBot (GTalk 통하여 deploy 명령) 사용

  - Open API 지향 설계 : Restful 서비스 



<Project Picture>
프로젝트는 Agile의 Scrum 방식으로 진행을 하면 이를 위하여 다음과 같은 협업도구를 사용한다

  

- Issue, Wiki 는 Atlassian의 Jira와 Confluence를 SaaS로 이용

  - Scrum 방식 개발위해 Atlassian GreenHopper 이용

  - 소스서버는 DVC로 GitHub private 신청하여 이용

  - 오프라인 정기 모임

  - 온라인 협업 도구 최대하 활용 : Atlassian 제품, Podio, CaCao Agit, GMail 등


그 동안 살펴본 기능들을 잘 엮어서 프로토타입 모바일 컨버전스 서비스를 내년 초까지 만들어 볼 계획이다.



posted by Peter Note
2012. 11. 15. 18:10 Middleware, Cloud/Cloud

그동안 브라우져에서 코딩하기 위하여 사용해본 툴들중에 Cloud9IDE가 가장 최적이지 않을까 생각된다. 그 동안 웹에서 코딩할려고 시도해본 IDE를 열거해 본다. 



GitHub 이나 Bitbucket에 올린 소스를 clone하여 개발할 수 있고, Node.js에서 돌릴 수 있는 개발 IDE와 PaaS를 제공하는 Cloud9IDE를 앞으로 사용해 보자.


posted by Peter Note
2012. 11. 15. 16:35 Middleware, Cloud/Cloud

 

AWS의 우분투위에 Vert.x를 사용해 보려고 한다. Vert.x는 기본 JDK 1.7 를 사용한다

 

  - Oracle JDK1.7 설치하기 : root 계정 또는 sudo를 수행하여 설치한다

  

1. apt-get 보완 하기

prompt> sudo add-apt-repository ppa:webupd8team/java 

prompt> sudo apt-get update


2. jdk 1.7 설치

prompt> apt-get install oracle-jdk7-installer 

prompt> java –version 

java version "1.7.0_09" 
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

'Middleware, Cloud > Cloud' 카테고리의 다른 글

Cloud9IDE 사용하기  (0) 2012.11.15
[CloudFoundry] 개발한 Node.js 프로그램 배포하기  (0) 2012.11.03
posted by Peter Note
2012. 11. 15. 15:05 Middleware, Cloud/OSGi

5주간의 주말 강좌를 통하여 OSGi의 개념을 정리해 보고, 어떤 것이 나의 목적에 가장 잘 부합되는지 고민해 보았다.

  - Felix : OSGi의 커널은 잘 동작하지만 HTTP Server 등의 사용하고자 하는 기능에 대해서는 sub project에서 bundle을 설치해 주어야 했다.

  - Virgo : SpringSource의 dm Server를 Eclipse 재단에 기부하고 OSGi kernel과 HTTP Server(Tomcat or Jetty 선택가능), war 파일 배포, Spring framework 등이 내장된 POJO를 위한  Enterprise Application Server

 

Virgo를 찾았을 때의 흥분이란.. 이제 서버에서 만들 기능들을 서비스 개념의 번들로 나누어서 Virgo OSGi Server의 Bundle로 등록할 수가 있게 된다.

  - 서비스별로 버전관리가 가능하고

  - 모듈 프로그래밍이 되고

  - POJO 기반의 Spring DM을 적용할 수 있고

  - 서비스의 Life Cycle을 관리한다

Ecliipse의 Plugin이 Equinox  OSGi bundle인 것을 생각하다면 이제 패키지 솔루션의 서버 Layer의 서비스 단들을 번들로 관리하면서 외부적으로는 Plugins 형태로 유지보수할 수 있게되는 것이다.

  

<오늘 읽은 기사>

  - Vert.x를 OSGi에 올리기 : Vert.x 번들 만들기와 Spring DM 기증으로 나온 blueprint 적용법까지 자세히 설명하고 있다


'Middleware, Cloud > OSGi' 카테고리의 다른 글

[OSGi] Bundle 정의내리기  (0) 2012.11.22
[SpringDM] Dynamic Module 만들기  (0) 2012.11.10
[Eclipse Virgo] 사용하기  (0) 2012.11.03
[OSGi] 서비스 Layer 만들기  (0) 2012.10.30
[OSGi] BundleContext에 의한 LifeCycle 관리  (0) 2012.10.30
posted by Peter Note
2012. 11. 14. 21:44 MongoDB

AWS의 ubuntu 시스템에 MongoDB를 설치하여 사용해 보자. 



<설치하기>
  • root권한 얻기 : sudo su
  • /etc/apt 디렉토리에 대한 권한이 있어야 하기 명령이 제대로 수행된다 
prompt> sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
prompt> echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | tee -a /etc/apt/sources.list.d/10gen.list
prompt> sudo apt-get -y update


  • mongoDB를 설치해 보자 
sudo apt-get -y install mongodb-10gen


  • MongoDB config File 위치
/etc/mongodb.conf 


  • MongoDB script File 위치 : log, data file 디렉토리 생성
/etc/init/mongodb.conf


  • Data Files과 Log 디렉토리 위치
data files : /var/lib/mongodb 
log files   :  /var/log/mongodb


  • MongoDB 시작하기
시작 : sudo service mongodb start
종료 : sudo service mongodb stop
재시작 : sudo service mongodb restart

CLI 접속 : mongo



* 만일 CLI 접속에서 에러가 발생하면 AWS의 Security Groups에서 mongodb 속한 Instance 의 security에서 27017 tcp port를 적용해 주면 된다.


* 사용하기 초간단 예 : 명령어 - mongo


'MongoDB' 카테고리의 다른 글

[MongoDB] Node.js에서 mongoose 통하여 MongoDB 접속하기  (0) 2013.01.05
posted by Peter Note
2012. 11. 14. 16:55 Git, GitHub

AWS에 Ubuntu 12버전 이미지를 설치하고 개발환경 구성을 하고 있다. 개발소스의 버전관리는 Git을 사용할 것이고, Git 설치하는 과정을 정리한다

 

<Ubuntu 설치하기>

  • ci 계정을 하나 만든다 : prompt> useradd ci
  • sudo 권한이 없다면 : root 권한에서 prompt> sudo useradd –m ci –G admin
  • 기본 라이브러리들 설치 : prompt> sudo apt-get install expat curl zlib1g-dev libssl-dev openssl make
  • git을 설치 한다 (현재 1.7.9.5-1 버전) : prompt> sudo apt-get install git-core 
  • git 버전 확인 : prompt> git –version
  • binary 위치 : /usr/bin/git

 

<Git 환경설정>

ci@ip-10-146-81-140:~$ which git
/usr/bin/git
ci@ip-10-146-81-140:~/git_repositories$ git config --global user.name "dowon"
ci@ip-10-146-81-140:~/git_repositories$ git config --global user.email nulpulum@gmail.com
ci@ip-10-146-81-140:~/git_repositories$ git config --global --list
user.name=dowon
user.email=nulpulum@gmail.com

* gDoc Link

* 전체 설정 정보 : http://www.kernel.org/pub/software/scm/git/docs/git-config.html#_variables

'Git, GitHub' 카테고리의 다른 글

[Git] commit 사용하기  (0) 2012.11.26
[Git] diff 사용하기  (0) 2012.11.22
[Git] Branch 전략  (1) 2012.11.14
SVN에 대하여 이해하기  (0) 2012.09.20
[Git] 레퍼런스 모음  (0) 2012.09.10
posted by Peter Note
2012. 11. 14. 08:50 Git, GitHub

Git을 가장 효율적으로 사용할 수 있는 방법에 대하여 번역해 놓은 글을 읽었다. 가장 합리적이면서 다양한 경우의 수에 대비한 적용 방식이  아닐까 하는 생각이 든다

원문 : Git Branch 전략

  • origin/master <-> origin/develop 영원히 가져가는 핵심 브랜치
    • master –>(create) develop –>(merge) master
    • 이름 : develop-*, master-*
    • master : production ready 코드
    • develop : integration 코드 (통합) – daily CI build
    • master 로 merge 할 때 배포 버전 태그 달음 : master commit 시 자동 빌드 수행
    • develop –> master로 가기 전 release 브랜치를 반드시 거친다
  • feature / release / hotfix 보조 브랜치
    • feature 브랜치
      • 조만간 배포할 기능을 개발 (배포할 수도 안 할 수도 있는 기능)
      • 이름 : feature-*
      • develop –>(create) feature –>(merge) develop
      • 맘에 안드는 기능이면 delete 한다.
      • feature는 개발자 저장소에 commit 하고,  origin에 push하지 않는다
    • release 브랜치
      • 제품 배포를 준비하는 브랜치
      • 이름 : release-*
      • 버전 번호를 부여함
      • develop->(create) release –>(merge) develop, master
      • 발견된 버그가 있다면  release에서 해결하고 develop에 merge
      • 진짜 배포할 상태가 되었을 때 master로 merge 하고 tag를 단다 (명령어들은 원문 참조)
    • hotfix 브랜치
      • 이미 배포한 운영버전에 문제를 해결하기 위해 만듦
      • 이름 : hotfix-*
      • master –> (create) hotfix –> (merge) develop, master
      • 치명적 버그의 발견 즉시 해결하기 위해 master 브랜치의 tag에서 create 한다

 

각 브랜치 정책에 따라 개발을 해보자 

'Git, GitHub' 카테고리의 다른 글

[Git] commit 사용하기  (0) 2012.11.26
[Git] diff 사용하기  (0) 2012.11.22
[Git] Ubuntu 에 설치하기  (0) 2012.11.14
SVN에 대하여 이해하기  (0) 2012.09.20
[Git] 레퍼런스 모음  (0) 2012.09.10
posted by Peter Note
2012. 11. 12. 16:26 Languages/JavaScript

JavaScript를 하면서 어려웠던 새로운 개념이 Closure이다. 이참에 조금 정리해 보도록 하자 


▶ Closure 개념

  - 로컬 변수를 참조하고 있는 함수 내의 함수 (JavaScript 마스터북, Jpub출판, p180)

  - 즉, 클로저는 자신의 범위(Scope) 밖에 있는 변수들에 접근할 수 있는 함수를 의미한다 

  - inner function을 return 할때 closure가 된다 (원문)

function outerFn() {

var count=1;

return function (cnt) {

      count += cnt;

console.log(count);

}

}


var func = outerFn();

func(10); // 결과 값 11

func(10); // 결과 값 21

  1) func가 closure가 됨 : 내부 변수들 closure, private 변수 생성됨

  2) func(parameter) 호출해 줘도 내부 변수들은 다시 생성되는 것이 아니라 상태를 유지시켜서 참조 됨 

  3) 즉, 클로저가 만들어 지면서 내부 변수들은 별도로 유지되면서 상태값을 유지함

  4) 클로저의 참조를 제거하고 GC할려면 명시적으로 func=null; 함



다른 예제를 보자 
예) closure가 아님 
function foo(x) {
  var tmp = 3;
  function bar(y) {
    console.log(x + y + (++tmp));
  }
  bar(10);
}
foo(2); // 결과 값 16
foo(2); // 결과 값 16
foo(2); // 결과 값 16

예) closure 임
function foo(x) {
  var tmp = 3;
  return function (y) {
    console.log(x + y + (++tmp));
  }
}
var bar = foo(2); // bar is now a closure.
bar(10); // 결과 값 16
bar(10); // 결과 값 17
bar(10); // 결과 값 18

var bar2 = foo(2);
bar2(10); // 결과 값 16
bar2(10); // 결과 값 17

  - 로컬 변수를 계속 생성하지 않고 상태를 유지하면 사용할 수 있다 (마치 객체처럼 var bar2 = foo(2); 하면 또 다른 closure가 생성되면서 bar와 별도의 상태공유 변수 x와 tmp가 생성된다. 마치 클래스에서 객체생성하는 것 처럼 된다. closure 생성시에 arguement와 var로 선언된 variable 에 대한 참조가 가능해 진다. 결국 참조자들-x, tmp-가 일정 메모리에 저장되어 상태를 유지한다)


  - 위의 예에서 var bar = foo(2);를 하는 순간 foo function 객체의 x, tmp 변수의 레퍼런스를 closure 가 가진다 (즉, x, tmp 에 대한 변수 상태값이 유지되고, y 값은 bar(10)을 호출할 때 넘겨주는 값이 된다)


  - 클로저는 간단한 객체이다 (엄밀히 따져서 객체는 아니지만 객체식으로 치환해서 살펴보면 다음과 같다)

    + 클로저 : 객체 = 클로저를 감싸고 있는 부모 함수 foo : 생성자

    + 클로저 : 객체 = 클로저로 부터 참조되는 로컬 변수 tmp :  프로퍼티

    + 클로저 : 객체 = 클로저 자신 bar, bar2 : 메소드

    + 클로저 : 객체 = var bar = foo(2) 함수 호출 : 인스턴스화

    + 클로저 : 객체 = 클로저를 대입하는 변수 bar(10), bar2(10) : 인스턴스 <-- 요거 애매함


  - function 내부에 for문을 돌면서 function을 호출하여 callback 을 셋팅하는 오류 제거 (원문1, 원문2)


실제 사용해 보면서 좀 더 이해를 해나가야 겠다. JavaScript Master북의 글이 좀 더 쉽게 이해가 가니, 햇갈릴 때 책을 다시 정독해 보자. 


<참조>

  - 소스니 코브 : Closure 이해하기

  - Closure 정리 : 한글이라 이해하기 쉬울것임

  - Inside.JS : 한글 정리 예제 포함

posted by Peter Note