블로그 이미지
윤영식
Full Stacker, Application Architecter, KnowHow Dispenser and Bike Rider

Publication

Category

Recent Post

2012. 10. 23. 20:55 Testing, TDD/Tools, FitNesse
▶ Test Framework 갖추기  

  - 형상관리 -> CI (빌드) -> 테스트 서버로 애플리케이션이 배포된 후 애플리케이션에 대한 자동화 테스트 수행

  - 테스트 서버에서 자동 테스트를 위한 Test Framework이 필요

    + DB schema의 최기화/원복 : DBA 하지 말고, DDL 가지고 테이블 관리 

    + 입력 파라미터 공급

    + 테스트 케이스에 대한 오류를 개발자 포털에 자동 등록 및 메일링 : 개발자 feedback 필요 (jira 자동 등록)

    + 테스트 서버 = HW/DB + Real Framework + Test Framework + 애플리케이션 + 테스트 코드 + 테스트 실행 stack이 필요함 


대부분 형상관리서버+빌드시스템까지는 구축하지만 적절한 Test Framework을 갖추는 것이 핵심이다. 



▶ 참조사이트

Using Fit Open Source Framework

Test Frameworks

Fitness


▶ Fit Test 하기 

  1. PC Local에 JDK 설치한다. 

  2. JDK bin 디렉토리는 환경변수 path에 설정한다. 

  3. Fitness를 다운로드한다. :  http://fit.c2.com/wiki.cgi?DownloadNow  -> JavaPlatform

  4. fit-java-1.1.zip파일 압축을 풀면 폴더안에 : fit.jar 파일이 있다. 

  5. fit.jar 파일을 환경변수에 classpath = .;<directory>\fit.jar  설정을 한다. (설정하지 않으면 java 수행시 -classpath를 늘 잡아준다)

  6. word를 열어서 다음과 같이 표를 만들어 .htm으로 저장한다 

  7. java 파일을 하기와 같이 만든다. (주의:htm파일 내역중 fixture명칭 CalculateDiscount 명칭과 java파일 명칭과 일치해야함)

  8. eclipse에 만든 *.java 파일을 TestDiscount.htm 파일이 있는 곳에 위치 시킨다. 예) d:/Test_framework/fit_testing/TestCase-1

  9. d:/Test_framework/fit_testing/TestCase-1 > javac *.java  명령으로 java 파일을 컴파일 한다. 
  10. d:/Test_framework/fit_testing/TestCase-1 > java fit.FileRunner TestDiscount.htm result.htm 명령을 수행한다.



  11. 결과 result.htm 파일을 열어본다. 

  12. 1000에서 결과값을 0.00 으로 기대했지만 50.0 값이 나왔고, 밑에도 50.51을 기대했지만 50.5가 나와서 amount라는 인수값을 discount()라는 메소드에 대입하였을 때 인수 테스트 2개에 오류 (2 wrong)가 있었음을 result.htm 결과 화면에 표현해 준다. 


▶ 결과 파일 


'Testing, TDD > Tools, FitNesse' 카테고리의 다른 글

[JMeter] 성능 테스트툴 간단 사용기-1  (0) 2012.10.26
[테스트 실습-3] FitNesse-2  (0) 2012.10.24
[테스트 실습-3] FitNesse-1  (0) 2012.10.24
[테스트 실습-2] Fit-3  (0) 2012.10.23
[테스트 실습-2] Fit-2  (0) 2012.10.23
posted by 윤영식
2012. 10. 22. 19:51 Testing, TDD
▶ 테스트의 일반적인 사항
  • 테스트 : 결함을 찾아 내는 것 (정치적으로 이용하게 되면 회비용 도구가 될 수도 있다)
  • QA : 기능상 정상 작동함을 증명 
  • 설계:개발:테스트 = 30:30:40 노력 분포도 
  • 테스트는 개발 초기에 수행
  • 1시간 이상 테스트에 몰두 하지 말라 (살충제 패러독스 : 결함에 내성이 생겨서 못찾는다. 쉬면서 또는 동료검토)
  • QC가 테스트와 비슷하고 QA와 테스트는 틀리다. 즉, QC & 테스트는 개발자나 PMO가 진행할 수 있다. 
  • UI 테스트 말고 핵심 로직에 대한 테스트를 얼마나 효과적으로 하는가가 중요함 
  • 단위 테스트 -> 통합 테스트 -> 시스템 테스트 -> 인수 테스트 -> 설치 테스트 : 단위 테스트가 제일 중요하다. 



'Testing, TDD' 카테고리의 다른 글

On Going Reliability Test란 무엇인가?  (0) 2012.08.17
posted by 윤영식
2012. 10. 21. 21:13 Middleware, Cloud/DBMS

org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

 )

        at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)

        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)

        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)



위와 같은 메세지가 나오면 다음과 같이 수정하여 Listener를 restart 시킨다. 


  • ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 이 메세지 구글링 해보면 lsnrctl services 수행해서 SID가 잘 나오는지 확인해 보라고 하는데 백날 해봐야 SID 안나오고 UNKNOWN 이라고 나온다. 
  • 그럼 listener.ora 파일을 열어보자. 하기와 같이 나올 것이다. 

SID_LIST_LISTENER =

  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

  • 위의 문구를 하기와 같이 수정한다. 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = XE)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (SID_NAME  = XE)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

  • 서비스에서 Listener를 restart 해보고, lsnrctl services 명령어 날려보자. 하기 빨간색 문구가 새롭게 나온다. 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0
         LOCAL SERVER
Service "XE" has 1 instance(s).
  Instance "XE", status UNKNOWN, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:3 refused:0
         LOCAL SERVER
The command completed successfully

기술적인 부분은 구글링해 보자.

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

MySQL 에 데이터베이스 만들고 테이블 만들기  (0) 2012.11.27
posted by 윤영식
2012. 10. 12. 17:45 Languages/JavaScript

드미트리 소스니코브의 JavaScript Core에 대한 내용을 간략히 요약해 보자. 




▶ 오브젝트 (객체, An Object)

  - 오브젝트는 한개의 프로토타입 오브젝트를 가지고 있으면서 프로퍼티들의 집합이다. 

  - 오브젝트의 프로토타입은 내부 [[Prototype]] 프로퍼티에 의해 참조된다.

  - [[Prototype]] 보다는 __<internal-property>__ 를 사용하나, 특별히 프로토타입 오브젝트는 __proto__ 프로퍼티 변수로 표시한다.


예)

  var foo={

          x: 10,

          y: 20

   }

   해당 객체에는 3개의 프로퍼티가 존재하게 된다.

 



▶ 프로토타입 체인


  - 프로토타입 체인은 상속/공유되는 프로퍼티들의 구현에 사용되는 객체들의 유한 연결이다. 

  - ECMAScript는 자바와 같은 일반적인 class-based 상속이 아니라 prototype chain을 통하여 상속은 한다. 이를 위임형 상속(delegation based inheritance) 또는 프로토타입형 상속(prototype based inheritance)이라 한다. 

  - 이는 ECMAScript에는 class라는 개념이 없기 때문이다. 속성(프로퍼티)/메소드등을 동적으로 할당할 수 있기 때문에 class정의 자체가 필요없음

  - 예로 b, c의 공통영역에 a 객체를 저장하면, b, c는 자신에게 추가적인 프로퍼티와 메소드를 저장할 수 있는 것이다.  


  - b가 calculate 메소드를 찾아가는 방법 : b 객체안에 메소드가 없을 경우, prototype chain을 거쳐서 찾는다. 메소드를 찾는다. 찾지 못할 경우 undefined 값이 리턴된다.  (최상위 오브젝트 Object.prototype 값은 null 이다.) 

  - 주의 할것중 상속하여 사용시 this는 원래 객체를 가르킨다. 

  - 예로 this가 가르키는 객체로 this.y 는 b, c 객체이고, this.x는 a 객체를 가르킨다.  



▶ 생성자 (Constructor)


  - 생성자를 통해 객체를 생성시 유용한 것들이 있다. 

생성자를 사용하면 펑션의 prototype 프로퍼티가 <생성자 함수명칭>.prototype 객체를 가르킨다.  (그림 3.A)

예로 constructor function을 사용하여 b, c에 생성한 객체의 주소를 할당하면 b, c의 __proto__는 Foo.prototype 객체를 참조하게 된다. Foo.prototype 객체의 constructor는 원형의 constructor function 인 Foo를 가르키게 된다.

* 참조 : 자바스크립트의 new 의미 (http://zero.diebuster.com/zero/?p=36)



그림으로 그리면 다음과 같다 


  - Foo 자신의 __proto__는 Function.prototype 을 갖는다. 

  - Foo.prototype 오브젝트의 constructor는 자동 생성되어 Foo를 참조한다

  - Foo.prototype은 b, c 오브젝트의 prototype에 참조되는 Foo의 프로퍼티이다. (프로퍼티에 .x .calculate가 붙으면서 별도 객체가 되었다)


▶ Execution Context Stack

  - runtime program execution에 대해서 알려면 ECMAScript의 실행컨텍스트스택의 동작방식을 알아야 한다 

  - 3가지 타입 존재 : global code, function code, eval code 

  - 3가지 code는 execution context 인스턴스안에서 검증되어 진다. 

  - global context는 1개만 있고, function과 eval execution context들이 여러개 있게 된다. 만일 function이 호출되면 function execution context안으로 들어가 function code가 검증되어 진다. eval function은 특별히 eval execution context안에 들어서 eval code를 검증한다.  

  - Execution Context(EC)는 Stack에 담겨서 EC1 -> EC2 로 호출할 때마다 자기자신은 caller와 callee가 되어 코드 끝까지 수행이 되는 것이다. 

  글로벌 EC가 최소 caller가 되어 다음 foo(10) EC callee를 활성화 하고, foo(10) EC가 caller 되어 foo(20) EC callee를 활성화 하는 식으로 옮겨가는 구조를 Stack안에 구현되어 수행되는 것이다. 이른 execution context stack이라 한다. 


  - ECMAScript의 코드 동작방식에서 Global EC는 하나가 생성되어 있고, 펑션 EC는 Stack이 넣어져서 수행되고 완료되면 다시 Stack에서 빠지게 된다. 

  - 모든 EC를 Object로 간주되고, EC안의 code를 수행하는 주체가 된다. 



▶ Execution Context


  - EC는 context상태를 저장하기 위한 프로퍼티와 관련 코드 수행 경로 추적을 위한 프로퍼티등을 가지고 있는 단순 객체(오브젝트)이다.  

  - Variable Object (VO)는 EC와 관련된 scope of data 이다. (A variable object is a scope of data related with the execution context.)

  - 변수(variable)과 펑션선언(function declaration)을 저장한다. function expression은 저장하지 않는다. 



baz는 function expression이어서 Global Variable Object 에 저장되지 않는다. 


  - Activation Object (AO)는 Function context에서의 Variable Object이다. 

  - caller에 의해 function context가 활성화 되면 activation object가 생성되고 function이 호출된다. 

  - 호출시에 arguments객체-indexed map-에 파라미터 값를 담아서 넘겨준다.

  - activation object도 variable object이므로 variable, function declaration, 일반 파라미터, arguments 객체를 저장한다. 




▶ Scope Chain


  - 스코프 체인은 컨텍스트의 코드를 표현하는 식별자(identifiers)를 찾기위한 오브젝트 목록이다. (A scope chain is a list of objects that are searched for identifiers appear in the code of the context)

  - 규칙인 prototype chain과 동일하다. 

  - 즉, 자신의 스코프에서 variable/activation object를 못찾으면 부모의 VO/AO를 찾는다.

  - 스코프 체인은 일반적으로 부모 VO들의 목록(list)이다. 

  - context입장에서 식별자는 variable, function declaration, formal parameter들의 명칭이다. 


  - scope chain은 __parent__ 내장 프로퍼티로 연결된다. 또는 [[Scope]]로 나타내기도 한다.

이를 통해서 내부의 펑션이 외부의 변수 값을 참조할 수 있게 된다. 

반대로 만일 내부 펑션이 외부로 리턴되어 부모가 해당 펑션을 활성화하여 VO를 사용한다면 어떻게 될까? 요건 Closure 에서...




▶ Closure


  - ECMAScript에서 펑션은 일급 객체이다. (function is the first-class object)

  - 이말은 function을 다른 function에 argument로 전달 할수 있다는 것이다. - funargs- functional arguments라고 함

  - 또한 function을 리턴 할 수도 있다. functional value 라고 한다. 

  - funarg 문제는 closure 개념으로 풀어간다. 

  - Closure는 좀 더 상세하게 다른 쳅터에서 다룬다. 


▶ This 

  - This 값은 execution context와 관련을 맺는 특별한 오브젝트이다. 그래서 context object라고 불릴 수도 있다. 

  - 즉, an object which context the execution context is activated. 

  - this 값은 execution context의 프로퍼티이지 VO의 프로퍼티가 아니다. ( a this value is a property of the execution context, but not a property of the variable object.). 즉, this는 scope chain에 참여하지 않는다. look up 대상이 아니라는 것이다.

  - this 값은 caller에 의하여 제공받는다. 즉 EC1 -> EC2를 호출할때 EC1이 caller가 도고 EC2안에 this가 있다면 EC1의 오브젝트가 되는 것이다. 

  - 좀 더 자세한 사항은 다른 쳅터에서 다룬다. 


posted by 윤영식
2012. 9. 20. 00:48 Git, GitHub

SVN에 대하여 잘 설명해 놓은 글이 있네요. Branch와 HEAD, revision에 대한 내용등과 merge할때 상황별 정책도 정리해 놓았네요. 


강추 : http://ghostsheep.tistory.com/9

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

[Git] commit 사용하기  (0) 2012.11.26
[Git] diff 사용하기  (0) 2012.11.22
[Git] Ubuntu 에 설치하기  (0) 2012.11.14
[Git] Branch 전략  (1) 2012.11.14
[Git] 레퍼런스 모음  (0) 2012.09.10
posted by 윤영식
2012. 9. 13. 16:25 HTML5, CSS3


대학교 다닐때 학교의 홈페이지를 방학동안 200만원 받고 프로젝트를 하던 생각이 난다. 그땐 웹에디터도 없던 터라 Notepad에서 HTML을 직접 코딩하여 화면을 구성하였다. 그러기 위해 후배들 5명가량을 알바시키면서 100만원을 벌어 5개월짜리 종일반 학원을 다니던 생각이 난다. 그 당시에는 장기 컴퓨터교육 기관이 거의 없고, 정부 지원도 없던 때였다. 


이제 세월이 흘러 HTML은 HTML5 라는 훨씬 간편하며 컨텐트에 집중할 수 있는 마크업 랭귀지로 발전하고 있다. 결국 모자람과 혼합된 기능들이 주변 기술의 발전에 따라 분리되고 자신의 일에 집중할 수 있는 SOLID의 SRP(Single Response Principle) 처럼 HTML5 도 발전한것 같다. 


OLD HTML = HTML5 + CSS3 + JavaScript


  - HTML5 = Content에 집중

  - CSS3 = Presentation에 집중

  - JavaScript = Action에 집중



▶  HTML5에 대한 기본사항을 알아보자 

  - Flash를 대체하자 : HTML5의 기능 간단 목록

  - HTML5 역사를 보자 : 그림과 함께 기능이 되는 브라우져 테스트 내역이 잘 설명되어 있다

  - HTML5 배우기 : 블로그 중에서 가장 잘 정리된 듯하다. 

  - HTML5 + CSS3 : HTML5로 slide를 만듦

  - Essentail : HTML5 기능에 대해서 코드와 결과를 보자 (html5demo)

  - HTML5 API : API들에 대하여 기능별 상세 코드 설명 (좀 더 심플)



▶ HTML5로 무얼 할 수 있을까?

  - 게임만들기 : 자바스크립트와 적절히 사용해야 한다

  - Real-time message : websocket에 대한 이야기 

posted by 윤영식
2012. 9. 11. 21:42 HTML5, CSS3


HTML5 = Content

CSS3 = Presentation

공식으로 화면을 디자인 하자 



▶ CSS3를 공부하기 위하여 먼저 뒤진 곳은 SlideShare의 소개자료들이다. 


  - Getting start with CSS3 : 코드와 함께 결과 화면을 같이 배치하여서 쉽게 이해 가능

  - Practical Introduction : 좀 재미나게 디자인된 소개자료 

  - Quality Development : CSS3로 좋은 품질의 화면만들기 예제와 결과 화면 설명

  - CSS3 Secrets : 간과하기 쉬운 비밀들을 풀어서 결과 화면과 같이 보여줌 

  - CSS3 Gradients : CSS3 그라디언트 효과에 대한 모든것 



▶ CSS3 고급 기능 다루기


  - 웹폰트 (Web Typography) : WordPress 스킨을 입히다 알게된 font-face

  - 색깔 표현 : 색 표현의 모든 것을 설명

  - 3D 표현 : CSS3가 못하는게 없구만 (예제와 함께 코드를 설명하고 있음)

  - CSS3 for WebKit : 강화된 기능에 대한 설명

  - CSS3와 Selectors : selector에 대한 설명 

  - Border Radius : 코드와 예제 설명



▶ 웹 애플리케이션 적용하기 


  - iPhone에 CSS3 적용 : 발표용 자료

  - 웹앱할때 성능을 고려한 개발 하자 

  - HTML5 와 CSS3 이용해서 웹사이트 구축하기

  - Responsive Design (반응형 디자인) 만들기 : 기기에 따른 형태 변화를 위한 viewport에 대한 설명

  - 반응형 디자인에 대한 자세한 설명 : 그래픽적인 설명이 돋보임


CSS3 신통방통한 넘이다. 역사가 2005년부터 꽤 많이 성숙했다. Progressive Enhancement (점진적 향상) 에 대한 의미와 함께 HTML5 + CSS3 + JavaScript에 대한 깊이 있는 이해와 방향 감각이 필요하겠다. 


posted by 윤영식
2012. 9. 11. 19:01 Protocols



MQTT Broker인 OSS Mosquitto를 설치하고 Client 프로그램에서 push 내역을 받아서 display 하는 Prototyping을 해보자


▶ MQTT 준비하기

  1. MQTT Broker 설치 :  http://mosquitto.org/download/  개발버전은 윈도우 binary  설치, 운영버전은 Linux binary 설치 
    • 윈도우 버전으로 설치하면 service로 등록된다 (Mosquitto Broker)
    • Linux는 mosquitto 계정을 만들고 root에서 설치를 한다 (자동으로 mosquitto 계정을 찾아 설치해 준다)
  2. mosquitto 운영 : 모스퀴토 브로커(서버)를 기동하는 방법을 알아보자
    • http://mosquitto.org/man/mosquitto-8.html  모스퀴토 서버의 기동 방법과 시스템 환경변수의 종류 설명
    • mosquitto 의 환경변수는 $SYS topic등록으로 client가 받아 볼 수 있다
    • + # 기호를 통해 topic등록 가능
    • Bridge 설정을 통해서 multi broker 설정이 가능 (mosquitto.conf)
    • 메세지에 대한 file writing을 할 수 있음 
    • 특정 host, ip 접근 제어가 가능 
    • https://launchpad.net/mosquitto  버그 레포팅 사이트
  3. MQTT client 라이브로리 선택

▶ MQTT 설치하기 

  1. 아키텍쳐 설명 
    1. 네이버 자료 : http://helloworld.naver.com/helloworld/1846
    2. 성능 : ftp://public.dhe.ibm.com/software/kr/ik2012/mqtt.pdf
  2. 설치 : mosquitto broker 설치 
    1. 설치하기 : http://ceit.uq.edu.au/content/installing-mosquitto-under-centos
    2. /etc/sudoers 설정 : sudo su 명령 실행이 안될 경우 셋팅한다 
    3. [root@www etc]# cat sudoers | grep mosquitto
      mosquitto ALL=(ALL) ALL

    4. bin :  /usr/sbin/mosquitto
  3. 기동 : mosquitto 계정 접속 

           > sudo su

           > ./startMqtt.sh

  4. 결과 확인 

[root@www mosquitto]# netstat -na | grep 1883
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN
tcp 0 0 :::1883 :::* LISTEN
[root@www mosquitto]# ps -ef | grep mosquitto
root 2641 2467 0 14:43 pts/0 00:00:00 su - mosquitto
504 2676 1 0 14:44 pts/0 00:00:00 /usr/sbin/mosquitto -d -c /etc/mosquitto/mosquitto.conf
root 2680 2664 0 14:44 pts/0 00:00:00 grep mosquitto


   5. 환경설정 

  • /etc/mosquitto/mosquitto.conf 
  • wildcard : +  #

   6. Client

 

'Protocols' 카테고리의 다른 글

Advanced Message Queueing Protocol (AMQP) 란 무엇인가  (0) 2012.11.28
MQTT Push  (0) 2012.09.10
posted by 윤영식
2012. 9. 10. 22:56 Languages/JavaScript



지난달 KOSTA 교육기관에서 "자바스크립트 디자인 패턴" 이라는 강의를 들었다. 하이브리드 웹앱을 배우면서 자바스크립트를 다시 들여다 보아야 겠다 생각하고 듣게 되었는데 자바스크립트가 이렇게 신선한 놈인줄 첨 깨달았다. 

예전엔 그냥 화면에 애니메이션 효과주는 그저그런 스크립트어로만 생각했는데 파면 팔수록 새로운 개념과 접근법으로 OOP를 실현하고 있음에 감탄을 유발시킨다.

 


1) 자바스크립트 기본을 알고 가자

  - 지돌스타님의 블로그 :  http://blog.jidolstar.com/790  연재글이 꽤 많다. 초보 OOP 개발자가 보기에 만만찮다. 

  - 드미트리소스니코브의 블로그 :  http://dmitrysoshnikov.com/ecmascript/javascript-the-core/#an-object 현재 페이스북 엔지니어 같다. 이 아저씨 고수다. 그래픽적으로 개념을 잘 설명해 주고 있다. 이 아저씨껀 다 읽어 보자. 쥑인다.


2) 자바스크립트 디자인 패턴을 본격적으로 보자

  - HTML 문서 :  http://addyosmani.com/resources/essentialjsdesignpatterns/book/

  - Design Patterns for Scalable JavaScript Application (PDF)

  - Pro JavaScript Design Patterns (PDF)


짬짬이 자바스크립트 디자인 패턴 블로그를 써야 겠다. 


posted by 윤영식
2012. 9. 10. 17:22 Git, GitHub


▶ Git 강좌

     

     


▶ Git Branch를 통하여 프로젝트를 관리하는 방법 


▶ Git 명령어 CheatSheet (Good!)
  • Git Cheat Sheet : Flash 기반으로 각 영역을 클릭하면 명령어 종류와 설명이 나옴


▶ Git Tools


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

[Git] commit 사용하기  (0) 2012.11.26
[Git] diff 사용하기  (0) 2012.11.22
[Git] Ubuntu 에 설치하기  (0) 2012.11.14
[Git] Branch 전략  (1) 2012.11.14
SVN에 대하여 이해하기  (0) 2012.09.20
posted by 윤영식
2012. 9. 10. 13:37 Protocols



모바일 폰에서 Push 통신을 하기 위한 방법에는 C2DM, MQTT, Node.js등이 존재한다. 여기서 MQTT를 예전 프로젝트에서 진행해 보았는데, 참조하자. 시간이 허락된다면 C버전으로 되어 있는 MQTT Broker 서버를 Java 버전으로 개발해서 OSS(Open Source Software)로 공개하고 싶다. 자 그럼 MQTT의 세상속으로 빠져보아요~~~


MQ Telemetry Transport

MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium.



MQTT에 대해 이해하기 



MQTT 소프트웨어 참조 방법


MQTT Broker Java 버전을 만들기 위해한 스터디


MQTT Prototyping 해보기 

'Protocols' 카테고리의 다른 글

Advanced Message Queueing Protocol (AMQP) 란 무엇인가  (0) 2012.11.28
MQTT 사용하기 - 1  (1) 2012.09.11
posted by 윤영식




결핍은 새로운 가능성을 만들어 낸다. 대기업처럼 왠만한 것은 갖추어진 집단에서 과연 새로운 가능성을 만들어 낼 수 있을까 라는 생각마저 든다. 그래서 애플이나 구글의 조직은 작은 단위로 팀을 나누어 마치 스타트업 기업처럼 움직인다고 하니 그부분에서 이해가 간다. 


오늘 에버노트의 기업환경 기사를 읽으며 새로운 Enterprise Social Network 서비스인 Yammer를 알게되었다. 그래서 바로 인큐베이팅 그룹 멤버들끼리 Private  소셜 네트워킹을 해보자는 의도에서 바로 신청을 했다. 


  - Facebook처럼 얘네도 청록색맹 끼가 있다. Facebook과 같이 모든 이에게 노출되는 것이 아니라 회사의 @xxx.co.kr 로 그룹이 된다. 즉, 한 회사(Enterprise)나 그룹에서만 사용 할 수 있다. 

  - 인큐베이팅 멤버가 10명이 넘지 않아 우리는 google application에서 등록하여 gmail을 사용하고 있는 것을 등록했다. 예) xxx@yuwin.co.kr 

  - PC버전-Adobe Flex Air 애플리케이션, Android/iOS 앱등이 존재하여 다양한 기기에서 Private SNS를 할 수 있다. 

  - 기능으로 파일첨부하여 메세지 보내기, 실시간 채팅, 새로운 부서나 그룹을 만들어 자유로인 그룹핑을 할 수 있다. 


아 이런게 있어으면 좋겠다 하는 결핍을 메워주는 좋은 서비스로 보여지는데, 우선 멤버들끼리 사용해 보고 Feedback을 받아 보아야 겠다. 



▶ 운영하고 있는 인큐베이팅 모임의 Yammer PC 버전 사용 화면

  - 그룹 SNS

  - 문서파일 공유

  - 설문조사

  - 칭찬하기

  - 질문&응답

  - 이벤트


등의 서로 특색있는 UI를 메세지박스에서 보여준다. 
iPad에서의 UX 경험은 PC보다 좀 더 색다르고 재미있다. 




▶ 지원하는 기기


posted by 윤영식
2012. 9. 3. 18:06 Middleware, Cloud/WAS

JBoss의 사용하는 port를 변경하거나, 서비스 추가/삭제 및 환경설정에 대한 관리를 알아보자. 이런 관리를 위해서는 먼저 JBoss의 아키텍쳐를 아는 것이 중요하다. 

  • 4.0.3 이전 JMX를 이용하여 service 추가/삭제
  • 4.0.3 이후 microcontainer 상에서 service를 POJO(Plain Old Java Objects) 로 만들어 추가/삭제 가능
  • 5.x 버전부터 JBoss는 microcontainer-based 아키텍쳐를 사용하고 있다. 

▶ microcontainer란 무엇인가?
  • Spring framework와 유사하게 dependency injection framework 이다 
  • DI에는 다음과 같은 설정을 한다
    • instantiated할 오브젝트 설정
    • 인스턴스 오브젝트의 constructor 파라미터 제공
    • set 프로퍼티에 값 설정
    • 오브젝트끼리 의존관계 설정
  • microcontainer는 이전의 JMX kernel 아키텍쳐보다  훨씬 가볍다, 환경설정이 적다, 서비스들을 standalone올 디플로이 할 수 있다. 
  • microcontainer위에 모든 서비스가 올라간다 (단, v5.0에는 JMX kernel위에 JMX, JNDI등이 올라가지만 이후는 microcontainer위에 전분 올라가도록 변경됨)
  • 환경파일의 이해
    • server/xxx/conf/bootstrap.xml : primary beans configuration 파일이다 

▶ JMX  이해하기 
  • Client는 JMX Server를 통해서 xxxMBean 인터페이스를 상속받은 MBean 클래스의 내역을 서비스 받는다
  • JMX Server가 xxxMBean을 lookup해서 찾고 client는 바로 xxxMBean을 접근할 수 없다. 
  • jboss-service.xml 파일 설정을 기반으로 service deployer가 MBean을 인스턴스화 한다. 또한 *-service.xml 설정도 같이 엮어서 인스터스화 한다.
  • jboss-service.xml 파일이 MBean 설정을 위한 primary descriptor 파일이다. 주 설정내역은 다음과 같다.
    • logging service 
    • thread pool : 다양한 서비스의 thread pool을 제공한다
    • JNDI
    • MBean 관리를 위한 security 
    • MBean과 관련된 JMX 서비스들
    • MBean과 관련된 remoting 서비스

▶ MBean 명칭 이해하기
  • MBean 명칭안는 여러부분이 내포된다.
  • domain : 자바의 패키지 명칭
  • key-value : 콤마로 구분

예) jboss.jca:service=ManagedConnectionPool,name=DefaultDS

  • jboss.jca = domain 이고 콜론앞의 값
  • service=ManagedConnectionPool,name=DefaultDS = key properties들이고 콤마로 구분된다. (순서완 상관없음)

▶ Application Server 환경설정하기
server/xxx/conf/ 디렉토리 밑에 있는 config 파일들을 알아보자 
  • bootstrap.xml : POJO를 초기화 하기위하여 microcontainer가 사용함
  • jax-ws-catalog.xml : JAX-WS를 위한 맵핑에 사용함
  • jbossjta-properties.xml : Java Transaction API (JTA) 서비스에서 사용함
  • jboss-log4j.xml : 로깅 설정
  • jboss-service.xml : JMX kernel에서 사용
  • jndi.properties : JNDI 서비스에서 사용하는 디폴트 설정값
  • login-config.xml : security 서비스에서 사용
  • standardjboss.xml : EJB 서비스에서 사용
  • standardjbosscmp-jdbc.cmp : Container Managed Persistence(CMP) EJB를 위한 다양한 DB 설정에 사용 
  • 다른 환경 파일들 설명



posted by 윤영식
2012. 8. 23. 17:41 Lean Agile Culture/Lean Startup

이민화교수님의 스타트업 창업에 대한 연재글을 우연히 etnews를 통하여 보게되었다. 어려운 주제를 쉽고 간결하게 풀어쓴 글을 보며 교수님의 경험과 충고에 끌려 연재글을 다 읽고 간단하게 머릿속에 정리할겸 적어본다. 


  - 기업가 정신 = 세상에 가치를 창출하고 일부를 분배하는 선순환 과정을 만드는 것

    + 차별화 역량을 통한 가치 창출

    + 기업을 공동체로 인식  : 급여의 의미만을 놓고 보자. 공동체에서는 급여가 부가가치를 높이는 것이다.



  - 성공적 스타트업을 하기 위한 질문 2가지 = 과연 시장은 존재할 것인가? + 나는 차별화된 역량을 가지고 있는가?

    + 시장 기회 포착 방법 = 미래 패러다임 변화 인지 -> 창조적으로 해석 -> 본질 파악 -> 자신의 생각을 제시 -> 이를 뒷받침하는 구체적인 증거를 제시하는 것

    + 차별화를 지속 시킬 수 있는 핵심역량 = 기술역량


  - 기업 차별화 = 기술 + 인문학 + 비즈니스의 만남

    + 차별화 요소 = 기술 + 계약(특허, 독점)

    + 차별화 역량 = 특출난 기술이 아닌 적정 기술의 융합 = 인문학을 통하여 인간요구 발견 및 만족 시킬 수 있는 가치를 찾아라 = 인문학이 차별화의 핵심

    + 차별화 전략 = 시장기회의 포작 + 창업팀 구축 + 기술사업화 + 틈새시장 개척


  - 틈새시장 = 용꼬리가 아닌 뱀머리가 되라

    + 스마트 기업에게 1위,2위만 살아남음. 즉, 3위는 적자보고 실패함

    + 스타트업 기업 팀 기술역량에 맞는 틈새시장을 찾아 1위를 해라 

    + 돈많이 들이지 말고 몇천만원에 가능한 기존 플랫폼기반의 스마트 창업!


  - 차별화와 가치창출 = 차별화된 기술력으로 고객에게 가치를 줄 수 있는 사업을 하라

    + 차별화와 가치창출없이 수익 모델에 집착하는 것은 본말이 전도된 것이다.

    + 거칠더라도 독창적인 혁신성이 있어야 한다


성공적인 스타트업 = 시장 기회 포착과 1등으로 가는 차별화된 역량이 핵심이다. 

참조) 이민화교수 연재글

posted by 윤영식
2012. 8. 22. 09:23 Lean Agile Culture

좋은 타이밍이란 없다.

모든 운이 따라주며, 
인생의 신호등이 동시에 파란불이 되는 때란 없다.
모든 것이 완벽하게 맞아 떨어지는 상황은 없다.
‘언젠가’ 타령만 하다가는
당신의 꿈은 당신과 함께 무덤에 묻히고 말 것이다.
만약 그 일이 당신에게 중요하고, ‘결국’ 그 일을 할 것이라면
그냥 하라. 하면서 진로를 수정해가면 된다. 
-티모시 페리스(‘탐스 스토리’에서 재인용)

촌철활인

시운(時運), 즉 적절한 타이밍은 매우 중요합니다.
그러나 모든 것이 갖춰진 완벽한 타이밍은 없습니다.
완벽한 타이밍을 기다리는 것은 
자칫 두려움의 표현이거나,
부족한 결단력을 숨기려는 핑계일 수 있습니다.
일정 요건이 갖춰지면 과감한 실행이 필요한 이유입니다.


아침 7시 30분이면 어김없이 푸쉬되어 날아오는 오늘의 행경

가끔은 지금의 상태를 어찌나 잘 아는지 콕콕찍어서 전달해 준다. 요즘 느끼는 피로감은 허탈함, 허무, 무력감, 무계획 올초 느꼈던 정반대의 감정과 육체적 느낌이 요즘 계속해서 내리는 빗물과 섞여서 나를 멘붕상태로 빠트리고 있다. 

일을 하고 싶지만 정말 하고 싶은일, 잘하는 일, 그리고 결단을 내리고 실행에 옮겨야 하는일이 있음에도 주저하고 있거나, 아니면 그동안 지내온 생활패턴의 수동성에 물들어서 적극적이지 못한건지...

오늘 이야기처럼 좋은 타이밍이란 없다. 단지 적절한 환경과 분위기가 조성되면 빠른 순발력이 요구된다. 지난번 다시 보게된 행복한 인생의 주인공 남자는 아들이 수용소에 갖쳐있는 것이 아니라 게임을 하고 있다고 인식토록 하기위하여 얼마나 순발력있게 행동하는지 알게 되었다. 스피드와는 또다른 말인거 같다. 상황이 포착되면 자신이 원하고 만들고 싶어하는 방향으로 순발력을 발휘할 때가 지금이 아닐까? 1초 2초 잴동안 기회는 날아가 버린다. 비즈니스도 1일 1개월안에 분위기가 무르익으면 기회를 잡고 내가 원하는 방향으로 만들어 갈 수 있는 순발력과 적극성이 필요하겠다. 

오늘도 비가 온다. 우산장수한텐 좋은 날이면서 개발자들도 마음을 가라앉히고 Flow할 때이다. 



posted by 윤영식
2012. 8. 20. 15:53 Lean Agile Culture/Lean Startup

새로운 사업(비즈니스)를 만드는 첫 단추는 가정과 가설로 부터 시작한다. 무턱대고 접근하는 것이 아니라 이성적인 판단하에 정확히 관녁을 파악하고 적절한 속도와 저항을 고려하여 화살을 쏘지아야 하지 않을까. "이성적 판단에는 무엇이 있을까?" 웹서핑하며 찾은 여러 실타래들을 다음과 같은 순서로 역어서 비즈니스 모델을 만들어 가면 어떨가 생각해 보았다.


  - 비즈니스 모델을 어떻게 만들어야 하는가?

    + 불확실성과 가설을 만들기 위한 최소한의 단계엔 무엇이 있는가? 

    + 비즈니스 모델을 구체적 항목 9가지를 작성해 보자

    + 비즈니스 모델이 생각날 때마다 웹상에서 작성할 수 있는 생산성 도구를 사용하자 (혼자 사용하면 Free)

    + 여기서 반드시 재고해야할 15개 비즈니스 아이템이 있다. 이것만은 안돼!


  - 이제 비즈니스 모델도 만들어 졌겠다 시작해 보자

    + 비즈니스 모델 구현 팀 만들기와 고려사항들 꼼꼼히 챙기자

    + 비즈니스 모델 가지고 스타트업할때 자주하는 실수 30+1


위의 링크된 글들을 읽어보고 생산성 도구(1-3)를 가지고 아이디어를 바로 구체화 해보자. 요즘 모사의 "빠름, 빠름, 빠름" CF광고가 생각난다. 이제 비즈니스 모델은 1한장(Page)으로 설명가능해야 한다. Simple is Best!

Steve Blank의 가설 수립과 검증



http://leancanvas.com 의 온라인 SaaS. 개인(private)은 무료이고, 팀웍으로 사용하는 것은 유료임



<참조>

  - Lean Canvas

posted by 윤영식
2012. 8. 17. 15:53 Testing, TDD


위키피디아의 내용을 우선 보자.

http://en.wikipedia.org/wiki/Ongoing_reliability_test

일반적으로 제조쪽의 제품질에 대한 테스트이다. 실제 스펙에 맞게 잘 만들어 졌는지 테스트 하기 위해서 무작위 샘플을 선택한 후 온도/압력/스트레스 테스트를 한후 제품 수명주기를 추정한다. 


제품의 질(Quality)는 테스트에 의하여 평가된다. 오류가 발생하면 수정후 재테스트를 실시한다

요약하자면 제품의 신뢰성을 테스트 하는것이라 본다. 고객에게 인도되었을시 얼마나 안정적으로 수행을 할 것인지  알아보는데 목적이 있다.

예로 하기 삼성전자의 ORT 테스트 방법에 대하여 살펴 보시라. 

http://www.samsung.com/sec/consumer/learningresources/hdd/info/trust.html


금융이나 통신같은 곳에서 차세대급 SI를 수행하게 되면 개발이후 한두달 가량 ORT 를 수행하여 개발된 내역에 대한 "고객 전달 신뢰성 확보 테스트" - 요건 내가 정의내린 것- 를 하는 것이라 본다. 




'Testing, TDD' 카테고리의 다른 글

테스트란 무엇인가?  (0) 2012.10.22
posted by 윤영식
2012. 8. 16. 17:43 Middleware, Cloud/WAS

JBoss는 메모리의 효율적 사용을 위하여 몇가지 종류의 서버 타입을 나누어 놓았다. 한번 들여다 보자 


▶ microcontainer 

  • 메모리를 적게 사용한다
  • 시작이 빠르다
  • microcontainer 위에 필요한 서비스들이 plug-in 된다 
  • server configureation은 같이 올라간다. 3종류 환경 : default, minimal, all

마이크로 컨테이너에 Plug-in 되어 올라가는 서비스들 

    • default : clustering은 없고 대부분의 필요한 서비스가 함께 올라감
    • minimal : deploy, JNDI, microcontainer등 최소한의 요소만 올라감
    • all : clustergin 포함해서 모든 서비스가 다 올라감 (server/all/deploy/cluster/cluster-jboss-beans.xml 환경참조)

▶ server/default 폴더 
  • conf, deploy, deployers, lib 이 기본 디렉토리로 존재
  • 기동된 이후 여러개의 temp 디렉토리가 생성됨 : data, log, tmp, work 등 
    • conf : 서버 기동시에 최초에 한번만 스캔된다. 즉, 재시작해야만 다시 인식됨 (자동 reloading 있음 좋겠다)
      • bootstrap.xml : microcontainer 코어 서비스들 정의
      • jboss-services.xml : 시작시 기동할 코어 JMX 서비스들 정의 
      • standardjboss.xml : EJB container 정의
      • jboss-log4j.xml : 로깅 설정
      • login-config.xml : authentication(자격-권한) 과 authorization(권한 범위-인증) 설정 
    • deploy : JAR, WAR, EAR 파일이 놓이면 시작시 자동으로 인식하여 배포함 
    • deployers : JBoss AS 서비스들을 가진다
    • lib : 어플리케이션 공유 라이브러리 디렉토리 
    • 기동시 생성되는 디렉토리들
      • data : write to file temp data ex) HSQL 이용시
      • log : boot.log, server.log, audit.log 쌓임
      • tmp : stores temp data
      • work : compile jsp files

▶ 자신의 서버환경 만들기 
  • default, minimal, all중 자신이 원하는 것을 하나 선택한다 
  • Copy & Paste하고 디렉토리 명칭을 원하는 것으로 변경한다 


▶ Start / Stop 

다른곳에서 너무 잘 정리해서 그냥 참조 : http://www.allsoft.co.kr/bbs/board.php?bo_table=study97_1&wr_id=4

  • 8080 가 default port로 사용
  • 맨 끝에 Started in 시간 나오면 성공
  • run.bat -c default -b <ip-address>
▶ 애플리케이션 Deploy
server/XXX/deploy/ 폴더 안에 파일 copy하면 deploy되고 delete하면 undeploy 된다 
예로 web01.war 파일을 deploy 폴더에 copy하면 jboss 콘솔창에 하기와 같은 메세지가 출력된다. 
17:06:07,823 INFO  [TomcatDeployment] deploy, ctxPath=/web01
역으로 delete하면 하기와 같은 메세지가 출력된다.
17:07:11,849 INFO  [TomcatDeployment] undeploy, ctxPath=/web01




posted by 윤영식
2012. 8. 16. 16:51 Middleware, Cloud/WAS

Mining 출판사에서 나온 내용을 읽으며 중요한 사항 및 참고할 만한 글을 올려 본다

  • JBoss의 의미가 처음에는 Enterprise Java Beans Open Source Software 라는 뜻으로 EJBoss 였다가 E 자가 맘에 안들어서 JBoss가 되었단다
  • JBoss 5 버전을 다운로드 받는 곳 :  http://www.jboss.org/jbossas/downloads
    • 적당한 위치에 푼다 (5.1버전은 JDK6 사전설치)
    • top level 디렉토리는 : bin, client, docs, lib, server 
      • bin : run, shutdown, probe(discovering JBoss AS clusters)
      • client : 클라이언트 어플리케이션과 통신을 위한 라이브러리들 존재
      • docs : 메뉴얼, 샘플
      • lib : core AS 라이브러리들 
      • server : 특성에 맞는 운영을 위한 디렉토리로 구분  (conf / lib / deploy 는 공통으로 존재)


posted by 윤영식