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

Publication

Category

Recent Post

2012. 10. 27. 14:10 Middleware, Cloud/OSGi

▶ OSGi (Open Services Gateway Initiative)


OSGi 기술은 java에서 동적 컴포넌트 시스템을 정의한 스펙이다. 

The OSGi technology is a set of specifications that define a dynamic component system for Java. 


컴포넌트 모듈을 만들고 이들을 추가하면 동적으로 반영되고 상호 모듈끼리 통신하여 대화할 수 있도록 만들어 주는 부분이 필요하다. 이를 위하여 OSGi는 어떤 Layer를 가지고 있나 보자 



참조 http://www.osgi.org/Technology/WhatIsOSGi


위의 관계를 간단히 보면 다음과 같다


  - 자바 인터페이스와 실제 구현 개체를 Service로 만든다 - Services Layer

  - 서비스를 제공하기 위한 기능적 배포단위로 Bundle을 만든다 (Jar 파일롤 묶음. MANIFEST 파일 포함) - Module Layer

  - 번들의 생명주기 관리는 Bundle Context가 해준다 (번들의 설치, 실행, 정지, 삭제 생명주기관리) - Life Cycle Layer

  - Installed -> Resolved -> Start -> Active -> Stop -> Resolved -> Uninstalled 

  - OSGi 프레임워크는 소량의 메모리로 효율적인 통합된 컴포넌트 개발환경을 제공하고, 애플리케이션 실행 중에도 동적 다운로드 
    및 업그레이드가 가능하게 해준다. 이는 OSGi가 애플리케이션간의 의존성을 관리하고 확장성(Scalable)를 제공한다. 

OSGi 프레임워크는 Bundle을 관리하는 Bundle Context를 가지고 있고 Bundle이 가지고 있는 Service를 등록하여 Bundle끼리 상호 대화할 수 있도록 해준다. 결국 Service를 등록하는 Registry가 OSGi Framework안에 존재하고 해당 Registry가 Service들을 상호 연결시켜주는 방식이다. 해당 방식은 Spring Framework의 DI (Denpendency Injecttion)가 같고, 결국 SOLID의 DIP 원리를 구현하여 서비스끼리의 Loosed Coupling을 지원한다는 말씀되시 겠다. 




* OSGi 사용 장점

  - 개발자입장에서 큰규모의 분산환경 구현 및 배포를 컴포넌트 기반으로 하기 때문에 이에대한 복잡성을 제거하여 단순화 해준다. (Eclipse, JBoss, Spring등에 쓰이고 있다)

  - 사업면에서는 운영비용을 줄여주고 네트워크환경의 멀티디바이스 통합을 손쉽게 해준다 

  - 또다른 이점은  http://www.osgi.org/Technology/WhyOSGi 여길 참조하자. 좋은 점은 다가졌다는 이야기


* OSGi 이론 다시 정리 참조http://blog.secmem.org/107


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

[Eclipse Virgo] 사용하기  (0) 2012.11.03
[OSGi] 서비스 Layer 만들기  (0) 2012.10.30
[OSGi] BundleContext에 의한 LifeCycle 관리  (0) 2012.10.30
[OSGi] manifest.mf 파일 설정  (0) 2012.10.30
[OSGi] Felix 설치 사용하기  (0) 2012.10.29
posted by 윤영식
2012. 10. 26. 21:46 Testing, TDD/Tools, FitNesse

JMeter를 통하여 검색인자에 대하여 동적인 값을 넣어주고 싶을 경우 부하를 어떻게 주는지 보도록 하자. 동적인 인자 값을 txt로 설정하고 불러와서 자동으로 인자값을 바꾸어 준다.



▶ search.txt에서 인자값을 읽어서 동적으로 search 파라미터를 바꾸어서 부하주기 

  1. CSV Data Set Config를 추가 한다

  2. 동작으로 넣어줄 search.txt 파일을 만든다 (각 인자값은 \r\n)


  3. 만든 search.txt 파일 경로를 CSV Data Set Config 에 절대경로 위치를 설정한다

  4. "Google Search"에서 레코딩한 "/search" 의 HTTP Request의 Parameters 값으로 static하게 설정된 "beethoven"을 ${search_name}이라 설정한다
     
  5. Response Assertion에도 beethoven으로 설정된 값을 동일하게 ${search_name} 이라 고쳐준다

  6. 결과 값을 보기위하여 Debug Sampler를 추가한다. 그리고 하위로 View Results Tree 를 추가하여 결과 내역을 상세히 본다


  7. View Results Tree의 상세 내역을 보면 HTTP Response data로 search_name=Morzart 등등 변경되어 인자값이 전달된 것을 볼 수 있다

  8. Run/start를 수행하면 7번과 같은 결과를 볼 수 있다

JMeter의 왼쪽 Tree Menu는 위에서 부터 아래로 순차적으로 수행이 된다. 따라서 각 Tree Node를 마우스 Drag&Drop으로 원하는 위치로 이동을 할 수 있다. Add를 잘 못 하였더라도 위치조정을 하면 된다

BeanShell을 이용하게 되면 프로그래밍적인 Controller를 추가할 수 있고, 트리메뉴의 순서를 변경하면 순차적으로 수행을 한다. BeanShell 사용은 다음에 살펴보자.


posted by 윤영식
2012. 10. 26. 19:46 Testing, TDD/Tools, FitNesse

JMeter에 Thread Group을 "Google Search"로 설정하고, WorkBeanch에서 레코딩 작업을 "Goolge Search"에 해준후 부하를 어떻게 쏘고 결과를 보는지 알아보자 



▶ 부하 주기 

  1. Assertion을 설치하여 결과값이 제대로 레코딩된 것인지 확인 할 수 있다 ([Add] 버튼 클릭후 입력값 beethoven 넣음)



  2. 결과를 Graph Result로 보기위하여 추가한다

  3. Thread Group의 user 수를 100으로 한다


  4. 상단의 메뉴 Run/Start를 수행한다


  5. Graph Results 를 통하여 결과 성능을 볼 수 있다. (X축 : 동시 접속자수, Y축 : 응답시간)
    성능그래프는 어차피 x축 동접수 대비 y축의 최대 응답시간의 직교점을 찾으면 된다.

  6. Summary Report를 통하여 에러와 결과값을 수치로 확인한다



가장 간단하게 성능 테스트 하는 것을 보았는데, 예전에 사용한 MS Stress Test Tool과 유사하다. 하지만 Thread Group의 Add 항목에 있는 기능들을 보면 스크립트를(BeanShell) 이용하여 동적인 아규먼트를 주거나 다양한 프로토콜 (FTP, TCP, LDAP 등등) 을 지원한다. 따라서 사용수준의 사용법을 익히 알고 있는 엔지니어라면 -예로 LoadRunner- JMeter를 사용하는데 큰 어려움을 없을 것으로 생각된다. 


posted by 윤영식
2012. 10. 26. 14:53 Languages/Java

BeanShell은 java syntax로 짠 script의 랭귀지 인터프리터이다. 

사이트 : http://www.beanshell.org 


▶ BeanShell 설치


  - 먼저 bsh-xxx.jar 파일을 다운로드 받는다

  - 윈도우라면 classpath 경로에 추가한다  

       


  - BeanShell은 GUI 또는 Command Line에서 수행할 수 있다

   + java bsh.Console : GUI

      


    + java bsh.Interpreter : text only command line

     


    + java bsh.Interpreter filename [args] : run script file


  - BeanShell은 일반 java appliction에서 호출 할 수도 있다 (application에서 bsh.Interpreter를 new 해서 호출)

  - BeanShell GUI 에서 loose type 으로 자바 코딩하듯이 짜면 된다. ( print()는 System.out.println()의 bsh 내장 함수)

    


  - 좀 더 자세한 사용자 메뉴얼 : http://www.beanshell.org/manual/bshmanual.htm 참조

  - default import 구문

    + javax.swing.event

    + javax.swing

    + java.awt.event

    + java.awt

    + java.net

    + java.util

    + java.io

    + java.lang


  - BeanShell 동작 방식

    + standalone 모드 : java bsh.Interpreter [filename] [arg..]

     

    + remote 모드 : java bsh.Remote [HTTP 또는 bsh URL] 

   



▶ BeanShell 을 Remote Server에서 접속하여 사용하기 

  - Remote Server Mode 흐름도 : 웹브라우져에서 접속하거나, Telnet 접속이 가능하다. 또는 Servlet 코드에서 접속도 가능하다

   


  - 웹브라우져 접속방법

    + 내 BeanShell이 있는 곳에서 내장함수 server(portNum); 수행

      

    

    + 불여우(FireFox)에서 http://<주소>:<portNum>/remote/jconsole.html 로 접속한다 (주의 : 브라우져에서 여러개 bsh console을 열어서 작업을 할 수 있으나 global session이어서 서로 share된다)

     


  - telnet 접속 : telnet <myhost> <port+1>  여기서는 "telnet localhost 8082"
    


  - 그외 BshServlet을 통한 호출도 가능 하다. 

  

▶ BeanShell 사용하는 곳


  - JMeter에서 BeanShell 적용하기 : http://nezah.egloos.com/4336838

  - Eclispe에 BeanShell적용하기 : http://blog.sangpire.pe.kr/69

  - 기타 기초적인 것은 구글링~~~ (구글 이자식들 독도명 지도에서 삭제해가지고 열받는 중. SW 주권을 찾을 때다)


posted by 윤영식
2012. 10. 26. 11:37 Testing, TDD/Tools, FitNesse

JMeter를 순수 Java 기반의 성능 테스트 툴이다. 아파치의 설명을 보자 


The Apache JMeter™ desktop application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.



▶ JMeter를 사용해 보자 


  1. JMeter 사이트에서 최신 버전을 다운로드 받는다 ( http://jmeter.apache.org/download_jmeter.cgi )
  2. 로컬에 압축 파일을 풀고, D:\apache-jmeter-2.8\bin\jmeter.bat 를 실행한다

  3. 사용자(=Thread) Group를 생성한다 : 이것은 요청하는 사용자의 요청 방법을 설정한다 (명칭을 Google Search 로 수정)
    1. Number of Thread : 동시 사용자 수
    2. Ramp-Up Period : 사용자가 하나씩 들어갈 때 시간 간격
    3. Loop Count : 테스트 시나리오를 몇 번 실행할 것인지



  4. WorkBench에서 Http Proxy Server를 선택한다

  5. 브라우져에서 웹사이트를 Recording할 때 사용하는 로컬 프락시 임의 포트를 9090으로 설정하고 Thread Group으로 설정한 Google Search를 선택한다

  6. 이제 Recording을 위하여 FireFox 브라우져를 설치하고, FireFox에 Proxy 사용 및 Port를 9090으로 설정한다 



  7. 불여우창에서(ㅋㅋ) 구글 사이트로 들어가서 임의 검색어를 넣고 검색을 하기전에 위 5번 화면의 하단 [Start] 버튼을 클릭한다. [Start] 버튼을 클릭후 불여우창에서 보는 모든 웹요청은 JMeter로 Recording이 된다

  8. 원하는 웹요청을 다 하였다면 JMeter창에서 [Stop] 버튼을 클릭하여 Recording을 멈춘다 

  9. Recording이 끝나면 다음과 같이 레코딩된 내역을 볼 수 있다
  10. 다음에 부하를 준다. (다음 블로그에서...)


posted by 윤영식