꿈꾸는자의 생각의 파편들... :: 'Dev.../플밍 관련 자료' 카테고리의 글 목록 (4 Page)

달력

08

« 2018/08 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
오픈소스 소프트웨어의 가장 큰 매력은 누구나 무료로 사용해 할 수 있고, 애플리케이션 개발 속도를 높일 수 있다는 점이다.

그러나 기업들이 핵심적인 업무용 애플리케이션에 오픈소스 컴포넌트를 도입할 때는 기술지원이 제대로 되는지, 지적재산권 문제에 저촉되지 않는지 확인해야 한다. 포레스터는 이를 위해 IT 고위 관리들이 오픈소스 도입을 결정할 때 참고할 수 있는 간단한 의사결정 프레임워크 ‘오픈소스 도입 절차(adoption funnel)’를 제공한다. 여기에는 구체적인 도입 방법뿐만 아니라 각 과정에서 고려해야 할 추가 위험 요소에 대한 내용도 포함돼 있다.

오픈소스 도입 절차 5단계
다음에 설명하는 5단계 프레임워크를 참고하면 기업의 시스템 환경에 맞춰 오픈소스를 도입했을 때 어떤 장점이 있는지를 짐작할 수 있을 것이다.

1. 다운로드
오픈소스 컴포넌트는 무료로 사용할 수 있다. 업무를 맡은 개발자는 인터넷을 통해 현재까지 개발된 7만개 가량의 컴포넌트를 검색해 필요한 것을 찾아야 하는데, 이들을 이용하면 개발 사이클이 매우 빨라지고 때로는 더 좋은 성능의 애플리케이션을 개발할 수 있다. 이 때 공인된 컴포넌트 목록은 별 도움이 되지 않는다. 개발자들은 오히려 이런 목록과 상관없이 스스로 테스트해 보는 것이 더 낫다고 생각할 것이다.

2. 개발
오픈소스 커뮤니티는 온라인으로 개발자들을 지원한다. 이는 프로젝트 매니저들이 안심할 수 있는 충분한 이유가 되는데, 오픈소스 컴포넌트를 이용하면 개발자들은 온라인 FAQ를 참조할 수 있고, 가끔은 뉴스그룹과 ‘위키’ 포럼을 통해 해당 컴포넌트를 직접 개발한 엔지니어의 도움을 받을 수도 있다. 한 프로젝트 매니저는 “해당 코드를 직접 개발한 사람과 대화를 나눌 수 있어 기술 지원과 개발 결과를 신뢰할 수 있다”라고 말했다.

3. 테스트
개발을 완료한 이후, 향후 애플리케이션을 사용할 기간 동안의 유지 보수 비용을 간과하지 말라. 테스트 단계는 기업 핵심 프로젝트 진행 과정 가운데 돈이 들어가는 단계이기도 하다. 이 단계에서 IT 중역들은 상용 컴포넌트와 독자 개발할 컴포넌트, 오픈소스 컴포넌트 등을 활용해 전체 시스템을 통합, 테스트하고 사후 유지 보수하는데 필요한 전체 비용을 고려해야 한다. 오픈소스 컴포넌트는 독립된 커뮤니티에서 개발도니 것이기 때문에 상용 컴포넌트에 비해 통합이나 업그레이드시 문제가 발생할 가능성이 높기 때문이다.

4. 생산
외부의 서비스 지원을 기다리지 않으려거든 내부 지원팀을 조직하라. 최고기술책임자(CIO)는 개발한 기업 핵심 시스템을 실제 생산에 적용하기 앞서, 기업 소유주에게 이 시스템의 높은 성능과 신뢰성을 증명해야 한다. 이 단계에서 오픈소스는 여러가지 면에서 상용 소프트웨어와 다를 바 없다. CIO는 들은 새벽 2시에 시스템이 다운됐을 때 HP, IBM, 노벨과 같은 상용 오픈소스 업체에게 도움을 요청할 것인지, 아니면 썬마이크로시스템이나 J보스와 같은 컴포넌트 제공업체에 도움을 요청할 것인지, 그것도 아니면 내부의 24시간 지원팀을 둘 것인지를 미리 명확히 해 두어야 한다.

5. 표준
당신이 원하는 것을 얻으려면 커뮤니티에 투자하라. 기업 표준에 따라 오픈소스 컴포넌트를 개발하려면 적어도 향후 5년간은 기술 지원과 경쟁력을 갖춰야 한다. 이를 위해 가장 좋은 방법은 오픈소스 컴포넌트 뒤에 있는 커뮤니티를 지원하는 것이다. 어떻게 하느냐고? 당신 기업의 코드를 제공하거나 MySQL, J보스와 같은 비용을 지불하고 개발을 의뢰하면 된다.

기업들의 조달 계획을 보면 상업적인 판매업체들에 대해서는 매우 잘 확립되어 있지만 오픈소스에 대해서는 임시적이거나 아예 없다. 이러한 IT 기업들은 포레스터의 ‘오픈소스 도입 절차’를 이용해 오픈소스 컴포넌트 선택에 도움을 받을 수 있다. 포레스터는 CIO에게 다음 세가지를 충고한다.

  • 성급하게 오픈소스를 포기하지 말라. 생산 시스템 이외에는 오픈소스를 사용할 수 없도록 다운로드를 차단하는 것은 개발자들에게 한 손을 묶어놓고 일하라는 것과 다를 바 없다. 오픈소스 컴포넌트를 이용해 애플리케이션을 개발하면 시간과 비용을 줄일 수 있기 때문이다. 개발자들 스스로 프로젝트에 가장 적합하다고 생각하는 컴포넌트를 실험하고 배우고 제안할 수 있도록 허용하라.

  • 테스트 단계에서 핵심적인 결정을 마무리하라. 물론 오픈소스 도입 과정에서 논란의 여지가 있거나 위험한 컴포넌트는 배제할 수 있도록 항상 주시해야 한다. 그러나 테스트 단계나 자금 조달 단계에서 주요 결정을 내리는 것이 좋다. 전체 프로젝트 예산을 조성하기 전에 IT 팀들이 일정한 기준에 맞는 라이선스와 품질을 내는지 확인하기 위해, 개발팀에게 새로운 컴포넌트나 오픈소스 컴포넌트 목록을 보존하라고 지시하라.

  • 오픈소스 자문 그룹에게 도입 과정과 의사결정 지원툴을 사용하도록 하라. 오픈소스 컴포넌트와 커뮤니티를 평가하기 위해 개발자와 프로젝트 매니저, 변호사 및 조달 전문가 등으로 이루어진 팀을 조직하라. 수치화된 평가툴을 이용하면 커뮤니티와 상용 기술 지원 서비스의 상태에 대해 평가할 수 있는 객관적인 정보를 얻을 수 있다.

  • 오픈소스 소프트웨어는 저렴한 가격과 높은 품질의 컴포넌트를 통해 상용 소프트웨어 시장을 위협할 것이다. 이 때문에 소프트웨어 업체들은 J보스나 마이SQL과 같은 오픈소스 컴포넌트가 자사의 핵심 시장에 진출하는 것을 매우 불안한 눈길로 바라보고 있다. 이들은 자신들이 통제하지 못하는 시장에 대해서는 오픈소스를 하나의 무기로 사용한다.

    예를 들어 SAP는 MySQL을 일상품화하기 위해 MySQL을 지원하고, IBM은 자사가 주도하지 못하는 개발툴 시장을 겨냥해 이클립스 지원이라는 카드를 내밀었다. 그러나 이들 업체들도 결국은 오픈소스 소프트웨어와 어울리는 영업 방법을 찾을 것이다. 다음과 같은 경향이 바로 그런 경우다.

  • 독립 소프트웨어 업체들은 자사 고유의 도입 절차를 확립하기 위해 2중 라이선스 전략을 이용할 것이다. 소프트웨어 라이선스는 이를 어떻게 사용할 것인가에 따라 달라진다. 예를 들어 MySQL의 경우, 개발자들에게는 자유롭게 데이터베이스를 사용할 수 있도록 GPL을 따르고, 애플리케이션을 설치한 기업들에게는 별도의 비용을 받는 상용 라이선스 정책을 사용한다. IBM이나 썬 등도 개발자들이 클라우드스케이프나 넷빈즈와 같은 소프트웨어를 무료로 사용할 수 있도록 하고 있다.

  • 판매업체들은 오픈소스에 대한 흑색선전(scare tactics)을 펼치며 적극적으로 경쟁할 것이다. 실제로 BEA시스템즈, IBM, MS, 오라클을 비롯한 기업들은 자사의 핵심 시장을 보호하기 위해 오픈소스 라이선스가 기술지원과 시스템 통합 측면에서 자사 제품보다 떨어진다고 홍보한다. 따라서 오픈소스를 도입하려는 기업들은 정량적인 평가와 합리적인 결정 과정을 통해 이들 업체들의 주장이 사실인지 아닌지 검토해 보야야 한다.

  • 시스템통합(SI) 업체들은 기업들이 오픈소스 도입의 위험을 줄일 수 있는 서비스를 제공할 것이다. 캡제미나이언스트&영, 일렉트로닉데이터시스템즈 등은 자사 고객들이 오픈소스 컴포넌트를 평가하고 도입을 결정하는 지원 서비스를 시작할 예정이다. 기업들은 이런 전문적인 서비스를 이용할 것이다. 그러나 라이선스 노출이나 코드 분기 등 오픈소스에 관한 복잡한 문제까지 다 해결해 줄 것으로 기대해서는 곤란하다.
  • Posted by 꿈꾸는자의 생각의파편들
    2005.02.13 17:17

    [펌] Eclipse Plug-In Dev.../플밍 관련 자료2005.02.13 17:17

    Plug-in Search

    http://eclipse-plugins.2y.net/eclipse/index.jsp

     

    자바스크립트 Editor

    https://sourceforge.net/projects/jseditor

     

    CSS Editor

    http://www.vasanthdharmaraj.com/Software.aspx?=csseditor

     

    Tomcat

    http://www.sysdeo.com/eclipse/tomcatPlugin.html

     

    Lomboz

    http://forge.objectweb.org/projects/lomboz

     

    XMLBuddy

    http://www.xmlbuddy.com/

     

    UML

    http://www.omondo.com/download/enterprise/index.jsp

     

    hibernate synchronizer

    http://www.binamics.com/hibernatesynch/

     

    HiberClipse

    http://hiberclipse.sourceforge.net/

     

    LogWatcher

    http://graysky.sourceforge.net/

     

    Struts Console

    http://www.jamesholmes.com/struts/console/

     

    Axis

    http://www.improve-technologies.com/alpha/axis/

     

    Velocity

    velocity ui http://veloedit.sourceforge.net/

    veloeclipse http://propsorter.sourceforge.net/veloeclipse/

    Posted by 꿈꾸는자의 생각의파편들

    이문서는 자바까페 유동환님의 세미나 자료입니다. 혼자보기 아까워 올려두긴 하지만 원작자의 불허가 있으면 즉시 삭제 조치하겠습니다.

     

    제목 : JFreeChart로 동적 그래프를 만들어 보자.

    일시 : 2003년 12월 13일.
    발표 : 제1회 UnJ 자유 세미나 2주제.
    강사 : 유동환(ideamaiden@empal.com)

     

    세미나의 목표 : 순수 자바로 작성된 오픈소스 차트 API인 JFreeChart에 관한 기본 개념을 알아보고 기본적인 차트를 생성해본다. 또한 사용자 이벤트에 따라 동적으로 데이터를 갱신할 수 있는 타임시리즈 차트를 만들어 본다. 예제를 중심으로 각 차트의 세부 내용을 분석한다.  

    일러 두기
        - ANT 1.4.1을 사용하여 컴파일.
    ? - JFreeChart 0.9.13을 적용.  
    ? - 는 jfreechart-demo-0.9.13.jar를 의미.

    1. JFreeChart API에 대해서 알아보자.  

     자바로 만들어진 차트API가 여럿 존재한다. 지금까지 알려진 자바로 된 차트 API는 다음과 같다.

    •  Free라는 단어에 매료되었기 때문일까? 그중에서 이번에는 jfree.org (www.jfree.org)에서 제작하여 오픈소스로 제공하는 JFreeChart를 살펴본다. 왜 이것을 선택하였는가? 가장 큰 이유는 첨부된 DEMO 프로그램을 손쉽게 가져다 쓸 수 있도록 잘 분리가 되어있으며 생성된 차트도 모양이 이뻐서 큰 변경없이 프로젝트에 그대로 적용할 수 있으리라 생각되었기 때문이다. 

       

      A. JFreeChart의 기본 클래스 구조

          1. org.jfree.chart.JFreeChart

             - JFreeChart의 기본 클래스이다. 자바2D로 구현되어 있으며 현재 바 차트 , 라인 차트 , 파이 차트 , XY 플롯(시간에 따른 XY그래프)를 지원한다. JFreeChart클래스는 제목을 나타내는 AbstractTitle객체 , Legend객체 , Plot객체 그리고 DataSet객체로 이루어져 있다.

          2. org.jfree.chart.AbstractTitle

              - 차트의 제목을 나타낸다. 하위 클래스로 ImageTitle , LegendTitle , TextTitle로 구성되어 있다.

          3. org.jfree.chart.Legend

              - 차트에 포함된 시리즈(series)의 이름과 그 표현방식을 구성한다.

          4. org.jfree.chart.plot.Plot

              - JFreeChart클래스는 축과 데이터를 그리는(draw) 작업을 Plot에게 위임하였다. 대표적인 하위 클래스로는 CategoryPlot , PiePlot , XYPlot등이 있다.

          5. org.jfree.data.DataSet

              - 차트의 데이터를 담당한다. 대표적인 구현 클래스로는 DefaultPieDataSet , TimeSeriesCollection등이 있다.

          6. org.jfree.chart.ChartFactory

              - 차트를 생성을 위한 메소드를 제공한다. 예를 들어 pie차트를 만들기 위해서는 creatPieChart() 메소드를 사용한다.

          7. org.jfree.chart.ChartPanel

              - 차트를 생성한 후 JFreeChart 클래스를 ChartPanel에 넣어 스윙 컴포넌트로 사용할 수 있다.

       

      2. 데모 프로그램을 통해 기본적인 차트를 만들어 보자.

       

      A.  데모 프로그램의 시연

       를 가볍게 클릭해보자.

       여기 있는걸 가볍게 클릭해보면 JFreeChart의 모든 기능을 한눈에 알 수 있다. 그리고 여기에 나온 소스들은 src/org/jfree/chart/demo 폴더를 보면 모두 찾아볼 수 있다.

       우리는 이중에서 기본적인 몇 개의 예제를 살펴볼 것이다.

       

      A.  Pie Chart 제작

      제일 간단한 파이 차트로 몸을 풀어 보자. 동봉한 runPie.bat를 실행시키면 다음과 같은 화면을 얻을 수 있다.

       첨부한 PieChartDemo1.java를 살펴보자. 제 생각에는 이 코드가 가장 가독성이 좋은거 같네요.

       다음과 같이 데이터를 삽입하였다.  

       ChartFactory를 이용하여 파이 차트를 생성한다. t

       

       바탕화면은 노랑색으로 한다. 표시는 이름과 백분율을 포함하여 작성한다. 만약 데이터가 없을 때는 "No data available"을 표시한다.

       

       만든 차트를 JFrame으로 나타내기 위해 JPanel을 상속한 ChartPanel객체를 생성한다. 크기는 (500, 270)으로 한다.

       

       이제 main()함수에서 데모 객체를 생성하고 RefineryUtilities 객체를 사용하여 프레임을 화면의 정중앙에 배치하여 데모를 완성한다.

       

      B. XY 차트 만들기

      이번에도 가볍게 runArea.bat를 실행시켜 보자.

      자세한 내용은 AreaChartDemo.java를 살펴보면서 알아보자.

       3개의 시리즈를 사용하고 X축을 Type이라고 명명하여 데이터를 구성한다.

       

       배경색을 노랑으로 하고 , 부제목(subtitle)을 SansSerif체로 설정하여 "An area chart demonstration"이라고 하였습니다.

       그리고 X축의 Type을 세로로 배치하였습니다.

      C. Bar 차트 만들기

       Bar차트 데모는 runBar.bat를 실행시켜 보면 됩니다.

       BarChartDemo2.java 소스코드를 살펴보죠.  

       다음과 같이 2개의 그룹을 묶어 각각 3개의 시리즈에 값을 넣습니다.

       Bar 차트를 생성합니다. 만약 수직축으로 작성하고자 한다면 PlotOrientation.VERTICAL을 사용하시면 됩니다.

       

       마지막으로 legend를 빼고 , 수직축으로 데이터를 정렬해보겠습니다. 결과는 다음과 같습니다. 이게 더 자연스러운지도 모르겠네요.

       

      3. 동적인 차트를 만들어 보자  

       이제 오늘의 주제인 시간축으로 동적으로 갱신이 되는 차트를 만들어보겠습니다.

       runDy.bat를 실행시키세요.  이것은 버튼의 ActionEvent를 받아서 랜덤 데이터를 차트에 뿌려주는 예제입니다. 각 시리즈 1,2만을 갱신할 수도 있고 동시에 갱신도 가능합니다.

       

       소스를 살펴보죠.

       데이터 갱신 단위를 밀리 세컨드(ms)로 조정하고 시간의 흐름에 따른 X축을 의미하는 TimeSeries객체를 사용하였다. 2개의 시리즈를 표현하도록 구성되어 있다.

       X축(DomainAxis)을 동적으로 변경 가능하도록 조정하고 X축의 시간 길이는 60초로 한다. 60000.0 인 이유는 단위가 밀리 세컨드이기 때문이다.

       시리즈2의 설정을 한다. RangeAxis는 Y축을 의미한다.  

       요기가 데이터를 갱신하는 부분입니다. dataset에 포함된 TimeSeries에 직접 갱신을 하게 된다.

       

       간단하죠? ^^

      정리

       이 세미나을 들으시고 프로젝트시 간단하게 차트를 만들 필요가 있을 경우 JFreeChart에 포함된 데모 프로그램을 사용하여 최단시간에 원하는 차트를 만들 수 있기를 바랍니다.  

       다음과 같은 차트를 다루었습니다.

          1. 파이 차트

          2. 바 차트

       

      이문서는 자바까페 유동환님 세미나 자료입니다. 혼자 보기 아까워 올려놓긴 했지만 , 원작자의 불허가 있으면 바로 삭제조치 하겠습니다. ^^*

      제목 : JFreeChart로 동적 그래프를 만들어 보자.

      일시 : 2003년 12월 13일.
      발표 : 제1회 UnJ 자유 세미나 2주제.
      강사 : 유동환(ideamaiden@empal.com)

       

      세미나의 목표 : 순수 자바로 작성된 오픈소스 차트 API인 JFreeChart에 관한 기본 개념을 알아보고 기본적인 차트를 생성해본다. 또한 사용자 이벤트에 따라 동적으로 데이터를 갱신할 수 있는 타임시리즈 차트를 만들어 본다. 예제를 중심으로 각 차트의 세부 내용을 분석한다.  

      일러 두기
          - ANT 1.4.1을 사용하여 컴파일.
      ? - JFreeChart 0.9.13을 적용.  
      ? - 는 jfreechart-demo-0.9.13.jar를 의미.

      1. JFreeChart API에 대해서 알아보자.  

       자바로 만들어진 차트API가 여럿 존재한다. 지금까지 알려진 자바로 된 차트 API는 다음과 같다.

      • the PtPlot project (UC Berkeley copyright);
      • the JOpenChart project (LGPL);

            3. XY 차트(에리어 차트)

            4. 동적 차트.

         

        집필 후기

         원래 이 세미나의 목적은 회사에서 미니 프로젝트를 하면서 "동적 그래프"를 사용할 일이 생겼는데 원하는 성능이 나오지 않아서 고민하는 것을 정리하는데 있었습니다. 결국 JFreeChart의 소스를 고치는 지경에 이르렀는데  이 여정을 소개하려니 1회분으로는 무리가 있는 듯하네요.

         실질적인 쓰임새로는 먼저 위와같은 퀵-레퍼런스를 훑어보시는게 더 유용할 거 같습니다.

         아참~ 소스코드 잘 짰구나 하는 느낌 받았습니다. 나중에 기회가 되면 이부분도 마저 정리해보죠. ^^

        자바카페(JavaCafe.Or.Kr)

    • Posted by 꿈꾸는자의 생각의파편들
      2005.02.13 17:03

      [펌] WSDL Dev.../플밍 관련 자료2005.02.13 17:03

      WSDL(Web service Definition Language)

       

         : 웹서비스를 제공하려는 서버들은 각 클라이언트(사용자)에게 자기의 웹서비스

           명세서를 제공해야 하는데 이때 WSDL를 이용하여 제공한다.

         : W3C에서 그 표준화 작업이 완료(버전1.1)

       

       

      <활용 및 서비스 순서>

      1. 웹서버는 WSDL문서를 작성,보관

      2. 웹서버는 UDDI 레지스터리에게 URL로 WSDL문서를 공개.

      3. 웹서비스 클라이언트는 UDDI레지스터리에게 웹서비스를 받고자하는 서버의 URL를 획득

      4. 웹서버의 URL를 획득한 웹서비스 클라이언트는 그 웹서버에게 WSDL문서 요청

      5. WSDL를 해석하여 응용프로그램을 작성..

       

      더 구체적으로 말해서,

      WSDL은 만약 자바(저의 경우)로 구현했다면 웹서비스의 기능, 프로시저(보통 메쏘드)의 이름, 인자. 리턴값, 프로토콜의 종류 이런거의 사용 설명서(서비스하는 메쏘드,,) 이다.

       

      - 중요 특성은 WSDL은 XML로 작성했기 때문에 프로그램밍언어에 독립적이다. 다시 말해서

         웹 클라이어트는 응용프로그램을 작성할때 어떤 언어도 구해받지 않는다.

       

       

      WSDL의 구조 


      <definitions> // 루트 (1)

           <types> // 인자와 리턴값에서의 복합 타입 기술(0~1)

           </types>

           <message> // 인자와 리턴값에 대한 기술(1~)

                        </message>

                        <portType> //원격 프로시저를 기술(1~)

                             <operation>

                             </operation>

                        </portType>

                        <binding> // 호출에 사용되는 프로토콜에 대해 기술(1~)

                        </binding>

                        <service> //웹서비스 시스템의 URL를 기술(1~)

                             <port>

                             </port>

                        </service>

                   </definitions>

       

      간단한 구조로써 기술된다. 4장에서의 설명한거와 같이 서버측이 제공하고자하는 기능에대해 더 자세히 말하면 그 기능은 서버측이 구현하고 서비스하려는 메쏘드(프로시저)들에 대해 기술한다.

       

      1 <definitions> Element

       

      : 루트, 네임스페이스 선언

      : 참고로 네임스페이스 다른 책이나 참고서 참고.^^;;(쓰기 구찬아요^^;;)

       

      2 <message> Element
       

      : 원격 프로시저의 인자, 리턴값에 대한 정보 기술

      : 주의 해야할 점은 인자에 대한 정보가 두개 이상있을 수 있다. 그렇지만 리턴타입은 받드시

        한개이어야하죠(당연 자바나 씨의 리턴값을 생각).

      : part 라는 하부 element를 사용하여 기술

       

      ex) String setbook(String title, int price) 이라면,

       

      ->

         // 인자

        <message name = "Book1_setbook">

            <part name="String_1" type="xsd:string"/>

            <part name="int2" type="xsd:int"/>

        </message>

        // 리턴값

        <message name = "Book2_setbookResponse">

             <part name = "result" type="xsd:string"/>

        </message>

      Posted by 꿈꾸는자의 생각의파편들
      카네코 타카유키(NTT데이터 비지니스 개발 사업 본부)
      오카모토 타카시(NTT데이터 기술개발 본부)
      2003/8/12


       EJB개발을JBuilder등의 상용IDE으로 실시하기 위해서(때문에)는 , 매우 고가의 상위의 출판을 사용할 필요가 있습니다. 그러나 ,Eclipse그럼 플러그 인을 활용해 , 무상으로 효율적인EJB개발을 실시할 수가 있기 (위해)때문에 ,Eclipse를 활용하는 큰 이유가 되고 있습니다.

       이번으로부터2회에 걸쳐Eclipse로Lomboz플러그 인을 이용한 ,EJB작성 방법을 소개합니다. 1번째의 본고에서는 ,Stateless Session Bean의 작성을 예에 ,Eclipse그리고Lomboz플러그 인을 이용해EJB를 작성하는 방법을 해설합니다. 2번째에서는 , 응용편으로서 데이타베이스를 이용하는Entity Bean을 개발하는 방법에 대해 해설합니다.

       본고에서는 이하의 소프트웨어 환경에서 동작 확인을 실시하고 있습니다.

      소프트웨어버젼
      OSWindows XP
      JDK1.4.2
      Eclipse2.1.1
      국제화 플러그 인2.1.x Translations
      Lomboz플러그 인2.1_02
      JBoss3.0.8

       덧붙여본고 이후의Eclipse의 메뉴 표기는 ,http://download.eclipse.org/downloads/index.php으로부터 입수할 수 있는2.1.x용무의 국제화 플러그 인(파일명 eclipse2.1.1-SDK-win-LanguagePackFeature.zip) 을 적용한 것이 됩니다. 주의해 주십시오.

      Lomboz플러그 인이란

       Lomboz플러그 인(http://www.objectlearn.com/index.html) 은Eclipse용무의J2EE개발을 위한 플러그 인입니다. 어플리케이션 서버와의 제휴 기능이나 ,JSP에디터 , 각종 위저드에 의해 효율적인J2EE개발을 실시할 수가 있습니다. Lomboz그럼 ,EJB의 개발에 대해서 이하와 같은 기능을 가집니다.

      • 위저드에 의한EJB원시 파일의 모형 작성
      • XDoclet에 의한EJB인터페이스 , 데프로이먼트디스크리프타의 자동 생성
      • EJB어카이브(archive)(Jar) 파일의 데프로이
      • EJB컨테이너상에서의 디버그
      • 위저드에 의한EJB테스트 클라이언트의 모형 작성

       Lomboz플러그 인을 사용하면(자) , 위저드나XDoclet에 의해 ,EJB개발에 필요하게 되는 번잡한 작업을 실시하는 일 없이 ,EJB의 비지니스 논리에만 주력 해 개발을 실시할 수가 있습니다.

       XDoclet에 대해서는 ,「현장에 살리는Jakarta Project 제3회 Ant에EJB개발을 효율화」를 참조해 주세요.

       그리고 ,JSP나Web어플리케이션의 개발에 대해서는 , 관련 기사 「연재 Eclipse를 사용하자! (3) Eclipse(으)로Tomcat를 사용한J2EE개발을 실시한다」를 참조해 주세요.

      JBoss의 인스톨

       Lomboz(은)는 단체에서는EJB컨테이너(EJB의 실행 환경)로서의 기능을 가지지 않습니다. 그 때문에 별도EJB컨테이너를 준비할 필요가 있습니다. 이번은 무상으로 손에 넣을 수가 있는EJB컨테이너인JBoss을 사용합니다.

       JBoss(이)란 ,JBoss.org그리고 개발되고 있는 open source의 어플리케이션 서버입니다. Pure Java그리고 작성되고 있기 (위해)때문에 많은 플랫폼상에서 동작합니다.

       JBoss(은)는2002해에는 연간200만건 , 그리고 현재에도 매월15만건의 페이스로 다운로드되고 있어 미국 「JavaWorld」잡지에 대해2002해Best of Application Server Award를 수상하고 있는 해외에서 매우 인기가 있는 서버입니다. 일본내에서도 ,@IT의 「Java Solution제8회 독자 조사 결과」에 대해 , 도입 예정의 서버로서 상위에 랭크 인 하고 있어 , 향후의 보급이 많이 주목받습니다.

       이번은Lomboz으로 동작 확인을 하고 있는3.0.x계의 최신판(원고 집필시) ,3.0.8를 사용합니다. http://sourceforge.net/projects/jboss/(으)로부터 「Files」을 클릭해 ,jboss-3.0.8.zip를 다운로드해 주세요.

       인스톨은 어딘가 적당한 디렉토리에 파일을 전개하면 완료입니다. 이번은 c:\jboss-3.0.8 에 전개했습니다. 그리고 ,JBoss의 기동시에 참조되는 환경 변수JAVA_HOME에 ,JDK의 인스톨 디렉토리가 설정되어 있는 것을 확인해 주세요.

       덧붙여 이후에서는 다이얼로그의 표기나 변수의 설정에 대해 「JBOSS」이라고 모두 대문자로 표기 , 입력합니다. 주의해 주십시오.

      Lomboz플러그 인의 인스톨과 설정

       Lomboz플러그 인은http://www.objectlearn.com/products/download.jsp으로 무료의 유저 등록을 실시하는 것으로 다운로드할 수가 있습니다. 이번은 원고 집필시의 최신판2.1.02(파일명 Lomboz.21_02.zip) 을 사용합니다.

       Lomboz플러그 인의 인스톨은 , 입수한zip파일을 ,Eclipse을 인스톨 한 디렉토리상에서 전개해 ,Eclipse를 재기동하면 완료입니다.Lomboz(을)를 사용하기 위해서 이하의 설정을 실시합니다.

      JDK의tools.jar의 지정

       「윈도우」→「설정」→「Lomboz」을 선택해 , 표시되는 다이얼로그로 「JDK Tools.jar:」에 「tools.jar」을 지정해 , 「적용」을 클릭합니다. JDK하지만c:\j2sdk1.4.2에 인스톨 되고 있는 경우 , 「c:\jdk1.4.2\lib\tools.jar」을 지정합니다.

      JBoss인스톨 디렉토리의 지정

       JBoss(와)과 제휴하기 위해(때문에) ,JBoss의 인스톨 디렉토리를 지정합니다. 「윈도우」→「설정」→「Lomboz」→「Server Definitions」을 선택해 , 표시되는 다이얼로그로 이하의 설정을 실시해 , 「적용」을 클릭합니다.

      • 「Server types:」으로 「JBOSS 3.0」을 선택합니다
      • 「Properties」탭으로 , 「Application Server Directory:」에JBoss의 인스톨 디렉토리를 지정합니다
      • 「Properties」탭으로 , 「Classpath Variable Name:」에 「JBOSS308」을 지정합니다
      • 「Properties」탭으로 , 「Classpath Variable:」에JBoss의 인스톨 디렉토리를 지정하는

      화면1 JBoss에 관한 설정 (클릭하면(자) 확대하는 )

      클래스 라이브러리의 수정

       JBoss 3.0.5이후에서는 , 이하의 클래스 라이브러리가 변경되고 있기 (위해)때문에 , 「JBOSS 3.0」의 「Classpath」탭으로 , 라이브러리명을 수정할 필요가 있습니다. 「Client libraries」의${classPathVariableName}/client/jaas.jar를${classPathVariableName}/client/jboss-jaas.jar로 변경해 , 「적용」을 클릭해 주세요.

      퍼스펙티브의 커스터마이즈

       「윈도우」→「퍼스펙티브의 커스터마이즈」로 열리는 다이얼로그로 , 이하의 설정을 실시하면 ,Lomboz관련의 메뉴나 버튼이 표시되어Lomboz를 사용하기 쉬워집니다.

      • 「파일 > 신규」를 전개해 ,Lomboz관련의 아이템을 선택합니다
      • 「윈도우 > 뷰의 표시」를 전개해 , 「Lomboz J2EE View」을 선택합니다
      • 「그 외」를 전개해 , 「Lomboz Actions」을 선택하는
      서버 정의의 추가
      Lomboz 2.1로부터 , 유저가 독자적인 서버 정의를 추가할 수 있게 되었습니다. [Eclipse(을)를 인스톨 한 디렉토리]\plugins\com.objectlearn.jdt.j2ee\servers디렉토리 부하에게 , 정의 파일을 배치합니다. 예로서JBoss 3.2.1, JBoss 3.2.1 + Tomcat용무의 정의 파일을 작성했으므로 참고로 해 주세요.

      JBoss3.2.1용무의 정의 파일<jboss321.server>
      JBoss 3.2.1 + Tomcat용의 정의 파일<jboss321Tomcat.server>

      덧붙여 상기의 파일은 이후의 기사의 내용으로 동작 확인하고 있습니다만 , 모든 기능의 동작 보증을 실시하는 것이 아니기 때문에 , 양해 바랍니다. 그리고 , 서버 정의의 추가에 대한 자세한 것은 , 이하의 것URL을 참고로 해 주세요. http://www.objectlearn.com/support/docs/serverDefs.jsp

       


      EJB의 작성

       전술대로 ,Lomboz그럼EJB의 개발에XDoclet를 사용합니다. XDoclet(http://xdoclet.sourceforge.net/) (은)는 , 코드 생성 엔진이며 , 유저가XDoclet용무의 특수한JavaDoc태그를 코드중에 기술하는 것으로써 , 다양한 파일을 자동 생성합니다. EJB의 개발에 대해서는 , 홈/리모트 인터페이스 , 데프로이먼트디스크리프타를 자동 생성합니다.

       Lomboz그럼 ,XDoclet용무의 태그를 포함한 클래스를 위저드에 의해 생성합니다. 그리고 ,XDoclet를 사용하기 위한build.xml등 을 자동 생성해 ,Eclipse의 메뉴상으로부터XDoclet를 호출할 수 있도록(듯이) 합니다.

       이하의 그림에 개발에 필요한 파일과Lomboz와XDoclet의 관계를 나타냅니다.

      Lomboz(와)과XDoclet의 관계

       즉 ,Lomboz을 사용한EJB개발에서는 , 다음과 같은 이점이 있습니다.

      1. 홈/리모트 인터페이스 등 , 복수의 코드에 분산하고 있던 원시 코드를1개로 정리할 수가 있어 개발의 효율화와 코드의 대폭적인 삭감이 가능하게 되는
      2. 관리해야 할 파일이1개가 된 것에 의해 , 메인트넌스의 수고를 큰폭으로 삭감하는 것과 동시에 ,EJB본체 , 인터페이스 , 데프로이먼트디스크리프타간의 부정합이 생기는 것이 없는
      3. 어플리케이션 서버 마다 다른 데프로이먼트디스크리프타도 자동적으로 생성되므로 , 개발자는 , 어플리케이션 서버마다의 차이를 의식할 필요가 없는
      4. XDoclet용무의 태그나build.xml에 관한 자세한 지식이 없어도 ,XDoclet를 사용해EJB를 개발할 수가 있다

       그러면 실제로 , 상기의 그림의 흐름에 따라EJB를 작성하는 순서를 실천해 봅시다. 이번은 , 예로서 메일 주소와 이름을 관리하기 위한EJB을 작성합니다. 우선은J2EE프로젝트의 작성으로부터 시작합니다.

      J2EE프로젝트의 작성

       Lomboz플러그 인의 메뉴를 사용해 ,J2EE프로젝트를 작성합니다. 「파일」→「신규」→「Lomboz J2EE Project」을 선택해 , 표시되는 다이얼로그로 「프로젝트명」을 입력합니다. 이번은 「j2eePrj」이라고 입력했습니다.

       「다음에」를 클릭해 ,Java빌드 설정을 정의합니다. 「소스·폴더」와「디폴트 출력 폴더」를 지정합니다. 이번은 「j2eePrj/src」과「j2eePrj/bin」을 지정했습니다. 「다음에」를 클릭해 ,J2EE모듈을 정의합니다. 「Ejb Modules」탭을 클릭해 , 「Add」버튼을 클릭 , 표시되는 다이얼로그로 모듈명을 입력합니다. 이번은 「mlEJB」이라고 입력했습니다.

       모듈은 ,EJB의 배포 단위인jar파일에1대1로 매핑 됩니다. 이번 작업에서는 , 최종적으로mlEJB.jar파일이 생성되게 됩니다.

       「Targeted Servers」탭을 클릭해 , 「Type:」으로 「JBOSS 3.0」을 선택해 , 「Add」버튼을 클릭합니다. 「종료」를 클릭하면(자) ,j2eePrj가 작성됩니다.

      작성된j2ee프로젝트

       화면안의 폴더 「src」과「2srcj」의 내용은 다음과 같이 됩니다.

      src EJB의 소스를 격납
      2srcjJSP의 서브 렛 파일을 격납(이번은 사용하지 않습니다 )

       덧붙여 프로젝트가 작성되었을 때에 , 이하의 라이브러리가 자동적으로 받아들여집니다.

      • JDK_TOOLS
      • JBOSS308/bin/run.jar
      • JBOSS308/bin/shutdown.jar
      • JBOSS308/client/jboss-j2ee.jar
      • JBOSS308/server/default/lib/javax.servelt.jar

       이러한 자동적으로 받아들여지는jar은 , 「윈도우」→「설정」→「Lomboz」→「Server Definitions」→「Classpath」탭의 「Server Libraries」으로 지정할 수 있습니다.

       mlEJB/META-INF에는 , 이하와 같은 설정 파일이나 ,XDoclet를 사용하기 위한Ant정의 파일등이 생성됩니다.

      beans.xml 이 모듈로 취급하는EJB의 리스트. 초기 상태는 하늘
      build.propertiesAnt정의 파일로부터 참조된다. 데프로이처가 기술되고 있는
      build.xmlAnt정의 파일. Lomboz(으)로부터 불려 가는
      ejb-jar.xml데프로이먼트디스크리프타. 초기 상태는 하늘
      ejbGenerate.xmlAnt정의 파일로 ,build.xml로부터 불려 간다. XDoclet관련의 태스크가 집약되는
      ejbs.xml 이 모듈로 취급하고 있는EJB의 파일. ejbGenerate그리고 사용되는
      targets.xml 타겟으로 하는 서버에 관한 정보

      EJB생성

       위저드를 사용해EJB의 클래스를 생성합니다. Stateless Session Bean(을)를 생성해 봅시다.

       「파일」→「신규」→「Lomboz EJB Creation Wizard」(으)로 표시되는 다이얼로그로 , 「소스·폴더」 「패키지」 「이름」을 입력해 , 「Select EJB Type」체크 박스로EJB의 타입을 선택합니다. 이번은 이하와 같이 설정했습니다.

      소스·폴더j2eePrj/src
      패키지ml
      이름MLAdmin
      Select EJB TypeStateless Session Bean

       「종료」를 클릭하면(자) ,src폴더 부하에게 패키지와Java파일이 생성됩니다. Java파일명은 , 방금전의 다이얼로그로 지정한 이름+Bean.java이 됩니다. 이번 생성된MLAdminBean.java파일을 에디터로 열리면(자) , 클래스 코멘트의 곳이 이하와 같이 되어 있습니다.

      /**
      * @ejb.bean name="MLAdmin"
      * jndi-name="MLAdminBean"
      * type="Stateless"
      **/

       이@ejb.bean라고 하는 태그는XDoclet의 클래스 레벨의 태그로 , 이 클래스가EJB의 비지니스 논리를 실장한 클래스인 것을 나타냅니다. name,jndi-name,type는EJB의 속성을 나타내는 파라미터가 됩니다. 각각 이하와 같은 의미가 있습니다.

      Name데프로이먼트디스크리프타(ejb-jar.xml) 에 기술되는EJB명
      jndi-namevender 고유의 데프로이먼트디스크리프타에 기술되는JNDI등록명
      이름MLAdmin
      typeEJB의 타입

      소스 편집

       작성하는 것EJB에 , 비지니스 메소드를 추가합니다. Java파일을 오른쪽 클릭해 , 「Lomboz J2EE...」→「Add EJB method...」을 선택합니다. 표시되는 다이얼로그로 , 「Method Signature」 「Method Type」 「Interface Type」을 기입합니다.

       「Method Signature」에는 , 메소드의 정의문을 기입합니다. 이번은 , 이하와 같이 기입했습니다.

      public String getName(String email)

       「Method Type」에서는 이하중에서 선택합니다.

      Business Method비지니스 메소드를EJB에 추가할 때에 선택
      Home Method 홈 인터페이스에 홈 메소드를 추가할 때에 선택
      Create MethodEJB생성시에 불리는ejbCreate을EJB에 추가할 때에 선택

       이번은 「Business Method」을 선택합니다. 「Interface Type」에서는 , 이하중에서 선택합니다.

      Remote Interface 리모트 인터페이스용의 메소드 시에 선택
      Local Interface EJB 2.0으로부터 사용할 수 있는 로컬 인터페이스용의 메소드 시에 선택

       이번은 「Remote Interface」을 선택합니다. 「종료」를 클릭하면(자) , 이하와 같은EJB의 비지니스 메소드의 모형이 자동적으로 생성됩니다.

      /**
      * @ejb.interface-method
      * tview-type="remote"
      **/
      public String getName(String email) {
        return null;
      }

       @ejb.interface-method그렇다고 하는 태그는XDoclet의 메소드 레벨의 태그로 , 이 메소드가EJB의 리모트 인터페이스에 추가되어야 할 메소드인 것을 나타냅니다. view-type파라미터는EJB 2.0으로부터 추가된 로컬 인터페이스 사용시에 의미가 있는 파라미터로 , 이하의3종류의 지정을 할 수 있습니다.

      Remote이 메소드를 리모트 인터페이스에만 추가
      Local이 메소드를 로컬 인터페이스에만 추가
      Both이 메소드를 리모트/로컬 양쪽 모두의 인터페이스에 추가
      ※Lomboz2.1_02에서는 , 파라미터명이 「tview-type」이라고XDoclet의 태그로서는 잘못해 생성되기 (위해)때문에 , 디폴트의 것both이 지정된 것과 같은 동작이 됩니다. 그러나Lomboz의 위저드로 「both」의 지정을 할 수 없는 것과 리모트 인터페이스와 로컬 인터페이스로 메소드를 바꾸는 것이 좀처럼 없는 것으로부터 너무 문제는 되지 않는 것 같습니다. 물론 태그를 직접 올바르게 수정하면 , 기대 대로의 효과를 얻을 수 있습니다.

       이번은 , 메일 주소에 포함되는 캐릭터 라인 가운데, 「@」보다 전을 이름으로서 돌려주도록(듯이)
      실장합니다.

      /**
      * @ejb.interface-method
      * tview-type="remote"
      **/
      public String getName(String email) {
        return email.split("@")[0];
      }

      JDK 1.4의 정규 표현
      상기의 처리는 ,JDK 1.4으로부터 사용할 수 있는 정규 표현 관련의 메소드를 사용하고 있습니다.
      JDK 1.3이전으로는 , 이하와 같이 해 실장할 수가 있습니다.

      int index = email.indexOf('@');
      return (index < 0) ? email : email.substring(0, index);

      EJB클래스 생성

       EJB(을)를 개발하는데는 , 홈 인터페이스 , 리모트 인터페이스 , 실장 클래스 , 데프로이먼트디스크리프타를 작성할 필요가 있습니다. Lomboz그리고XDoclet를 사용해 , 이것들을1개의Java파일로부터 자동 생성해 봅시다.

       우선 , 기가 되는Java파일을EJB모듈에 추가합니다. 「MLAdminBean.java」을 오른쪽 클릭→「Lomboz J2EE...」→「Add EJB to module...」을 선택합니다. 표시되는 다이얼로그로 , 「Ejb[mlEJB]」을 체크해 , 「OK」을 클릭합니다. bean.xml(와)과ejbs.xml에MLAdminBean가 추가됩니다.

       계속되어 ,EJB의 파일을 생성합니다. 「mlEJB」폴더를 오른쪽 클릭→「Lomboz J2EE...」→「Generate EJB Classes」을 선택합니다.

      생성된EJB클래스 (클릭하면(자) 확대합니다 )

       ejbsrc폴더 부하에게는 이하의 파일이 생성됩니다.

      • 리모트 인터페이스
      • 홈 인터페이스
      • 로컬 인터페이스
      • 로컬 홈 인터페이스
      • 실장 클래스
      • 유틸리티 클래스

       그리고 ,mlEJB/META-INF부하에게는 , 각종 서버마다의 데프로이먼트디스크리프타가
      갱신 , 생성됩니다.

      EJB의 데프로이

       데프로이를 실시하면 필요한 파일이EJB의jar파일로서 어카이브(archive)화 되어 어플리케이션 서버마다의 소정의 디렉토리에 카피됩니다.

       「mlEJB」폴더를 오른쪽 클릭해 「Lomboz J2EE...」→「Deploy Module」을 선택합니다. mlEJB폴더 직하에mlEJB.jar가 생성되어[JBoss의 인스톨 디렉토리]\server\default\deploy디렉토리에도mlEJB.jar가 카피됩니다.

       카피처는mlEJB/META-INF/build.properties의deploy.dir프롭퍼티를 편집하는 것으로 변경할 수가 있습니다.

       


      EJB클라이언트의 작성

       EJB의 동작 확인을 실시하기 위해서(때문에) ,Lomboz의 기능을 사용해EJB클라이언트를 작성해 봅시다.

      클라이언트 프로젝트의 작성

       EJB클라이언트용의 라이브러리가 다수 추가되기 때문에 , 신규에 프로젝트를 작성합니다.

       「파일」→「신규」→「프로젝트」→「Java」→「Java프로젝트」를 선택해 , 표시되는 다이얼로그로 「프로젝트명」을 입력합니다. 이번은 「clientPrj」이라고 했습니다.

       「다음에」를 클릭해 , 「소스」탭으로 「소스·폴더」 「디폴트 출력 폴더」를 설정합니다. 이번은 「clientPrj/src」 「clientPrj/bin」이라고 했습니다.

       j2eePrj안의 클래스를 참조 가능과 하기 위한(해) , 「프로젝트」탭으로 , 「j2eePrj」에 체크를 붙입니다. 「종료」를 클릭하면(자) , 프로젝트가 생성됩니다.

      클라이언트 클래스의 생성

       클라이언트 프로젝트를 선택해 , 「파일」→「신규」→「Lomboz EJB Test Client Wizard」을 선택합니다. 표시되는 다이얼로그로 , 이하와 같이 설정합니다.

      소스·폴더 소스의 격납 장소
      패키지클라이언트 클래스의 패키지명
      이름 클라이언트 클래스명
      슈퍼 클래스클라이언트 클래스가 계승해야 할 친 클래스명
      Ejb Home테스트 대상의EJB홈명
      Ejb Interface 테스트 대상의EJB인터페이스명
      Target Server타겟으로 하는 어플리케이션 서버

       이번은 이하와 같이 지정했습니다.

      소스·폴더clientPrj/src
      패키지mltest
      이름 MLAdminTest
      슈퍼 클래스java.lang.Object
      Ejb Homeml.MLAdminHome
      Ejb Interfaceml.MLAdmin
      Target Server JBOSS 3.0

       「종료」를 클릭하면(자) , 클라이언트 클래스의 생성과 필요한 라이브러리의 추가를 합니다.

      생성된 클래스와 라이브러리

      JUnit의 사용
      EJB클라이언트 작성시에 슈퍼 클래스를JUnit의TestCase로 하는 것으로 ,Eclipse의JUnit제휴 기능을 활용하는 일도 가능합니다. 그 경우 , 프로젝트의 라이브러리에ECLIPSE_HOME/plugins/org.junit_3.8.1/junit.jar를 추가하고 나서 클라이언트를 생성해 주세요.

      클라이언트 클래스의 수정

       생성된 클라이언트 클래스에서는 ,EJB의 리모트 인터페이스를 취득하는 곳(중)까지의 코드가 포함되어 있습니다. 테스트하고 싶은 비지니스 메소드를 부르도록(듯이) 수정합니다.

      try {
        ml.MLAdmin myBean = getHome().create();


        //--------------------------------------
        //This is the place you make your calls.
        //System.out.println(myBean.callYourMethod());

        System.out.println(myBean.getName("taro@nttdata.co.jp"));

      } catch (RemoteException e) {
        ...

      EJB의 동작 확인

       「mlEJB」폴더를 오른쪽 클릭→「Lomboz J2EE...」→「Debug Server」을 선택하면(자) ,Eclipse위에서JBoss를 동작시킬 수가 있습니다.

       콘소르뷰상에 표준 출력이 표시되어 동작 상황을 확인할 수 있습니다.

      20:34:52,324 INFO [Server] JBoss (MX MicroKernel) [3.0.8 (CVSTag=JBoss_3_0_8 Date=200306050849)] Started in 0m:25s:367ms

      (와)과 같이 표시되면 ,JBoss이 기동했습니다. 계속되어 , 클라이언트로부터 액세스 해 , 동작 확인을 해 봅시다.

       작성했다MLAdminClient.java를 선택해 , 「실행」→「다음을 실행」→「Java 어플리케이션」을 선택하면(자) , 클라이언트의 콘소르뷰상에 표준 출력으로서 실행 결과가 표시됩니다.

      taro

       EJB파일에 대해서 breakpoint를 설정해 두면 , 스텝 실행등도 가능합니다.

      끝에

       이번은Lomboz플러그 인을 사용했다Stateless Session Bean의 작성과 데프로이 , 테스트 클라이언트를 사용한 접속 확인을 실시했습니다. XDoclet단체에서도EJB를 효율적으로 개발할 수 있습니다만 ,Lomboz그럼XDoclet을 랩 한 환경을 제공해 주기 (위해)때문에 , 메뉴 처리에 의해 , 보다 간단하게EJB를 개발할 수가 있습니다.

      Posted by 꿈꾸는자의 생각의파편들

      -[AXIS] - Apache eXtensible Interaction System------------------------------------------

      [개요]

      : AXIS는 전송, 글로벌, 서비스라는 세 부분으로 이뤄진 SOAP의 한 엔진이다.

      이는 클라이언트 프로그램에서 타켓 서비스까지의 호출과정을 메시지의 흐름으로 보고,

      메시지는 자바의 필터 패턴을 구현한 여러 클래스들을 지나면서 데이터의 스트림이 처리되듯이 타켓 서비스로 전달되도록 한 것이다.

      이 세 부분은 각각 여러 원통형으로 생긴 구조물들이 등장하는데, 이 안에 다시 작은 원통이 존재한다. 큰 원통형 구조를 체인이라 하고, 각 체인안에 포함되는 작원통들을 핸들러라고 한다.

      따라서, AXIS 엔진의 구조는 체인구조 또는 핸들러 구조라고 한다.

       

      [특징]

      - 속도(Speed) : AXIS는 이벤트 방식의 SAX XML 파서를 사용하기 때문에 DOM방식을 사용하던
                             기존의 아파치 SOAP보다 훨씬 빠르다

      - 확장성(Flexibility) : AXIS의 시스템구조는 개발자들에게 사용자 정의 헤더 처리하기 위해 엔진을
                             확장하거나 시스템 관리 기능을 추가하는 등 어떠한 형태의 확장도 가능하다.

      - 안정성(Stability) : AXIS는 지속적으로 제공되는 인터페이스를 정의함으로써 개발자들이 AXIS의
                             업그레이드에 영향을 받지 않도록 한다.

      - 컴포넌트 기반 서비스 등록(Component-oriented deployment) : AXIS는 개발자들이 개발한
                             응용프로그램을 처리하기 위한 일반적으로 사용될 패턴을 구현하는 재사용
                             가능한 핸들러를 정의할 수 있고 이들을 분산시킬 수도 있다.

      - 전송 프레임워크(Transport framework) : AXIS는 물리적인 전송 부분 구현과 논리적인 부분을
                             완벽히 추상화시키는 프레임워크를 갖기 때문에 어떠한 전송방법(HTTP/SMTP/
                             POP)도 상관없이 SOAP 메시지를 처리할 수 있다.

      - WSDL지원 (WSDL support) : AXIS는 WSDL 1.1 버전을 지원한다.

       

      [설치순서]

      필요한 jar파일

      xerces.jar : 네임스페이스를 인식하는 XML파서

      jaxrpc.jar

      axis.jar

      commons-logging.jar

      첨부파일 : axis.zip : 책예제 파일

                    

      tt-bytecode.jar

      log4j-core.jar

      이 jar파일을 classpath에 설정해준다.

      axis.jar파일은 용량 부족으로 못 올림

      Posted by 꿈꾸는자의 생각의파편들
      웹 개발자들이 알아야 할 윈도우 XP SP2 변경점
      윤석찬 (다음 R&D 센터) 30/08/2004
      SP2 출시로 인해 윈도우 사용자들은 보안과 설정에 대한 선택권이 보다 넒어졌다. 그러나 기본적인 보안 기능을 강화됨에 따라 웹사이트 개발자들에게는 그 동안 별 문제 없이 사용되던 웹사이트의 기능들이 제한될 수 있다는 점을 유념해야 한다.

      윈도우 XP 서비스팩2는 8월 11일 RTM 버전이 출시 되었고, 9월 2일 윈도우 업데이트를 통해 모든 윈도우 XP 사용자에게 배포 되게 된다. 또한, 10월 1일부터는 모든 윈도우 XP를 탑재하는 PC에 기본 탑재돼 출시 된다. 우리 나라가 윈도우 XP 사용자가 해외에 비해 상대적으로 많고, 주요 제한 기능들이 팝업과 액티브X 컨트롤 등 우리 나라에서 큰 거부감 없이 사용되던 기술이어서 갑작스런 변경에 혼란이 야기될 가능성이 있다.

      이 글에서는 XP 서비스팩2로 인해 웹사이트에서 발생할 수 있는 주요 기능의 제한점들을 소개하고 이를 보완할 수 있는 해결 방법들을 알려 주고자 한다. 이 방법들은 XP 서비스팩2가 주는 장점들을 제한하는 것이 아니라, 웹사이트 이용자들에게 줄 혼란을 미연에 방지하고, 편의성을 높여 주는 측면에서 제공하는 것이다.

      팝업창 차단과 해법
      서비스팩2에 포함된 가장 중요한 기능 중 하나가 인터넷 익스플로러에 대한 대대적인 업데이트이다. 이 중 다른 브라우저에 탑재되어 많은 사용자들의 호응을 받았던 기능 중 하나가 팝업창 차단이다. 이 기능이 브라우저에 기본값으로 설정되며, 웹사이트에 따라 브라우저 주소 표시줄 아래에 표시되는 '알림 표시줄'을 통해 사용자가 차단 여부를 선택할 수 있다.

      팝업창을 차단한다고 해서 모두 다 차단하는 것은 아니다. onload와 window.open을 통해 자동으로 오픈되는 팝업창만 차단된다. 즉, 사용자의 액션으로 열리는 팝업창이나 인트라넷 영역에서는 팝업이 허용된다.


      이렇게 되면, 싸이월드의 경우 주소를 치면 미니 홈피가 자동으로 뜨던 것을 할 수가 없게 된다. 또한 팝업 광고나 알림을 위해 웹사이트에서 띄우는 공지들도 모두 차단되는 것이다.

      가장 먼저 할 수 있는 것이 팝업 차단 기능을 해제하거나, 자신의 사이트에서는 팝업을 허용하도록 하는 가이드를 만들어 공지하는 일이다. 그 다음으로 자동으로 뜨는 팝업창이 어떤 액션을 수행하게 될 때 팝업창이 차단되었는지 여부를 확인하여 이에 대한 적절한 경고를 사용자에게 해주는 것이 필요하다.

      팝업창이 차단되면 window.open()함수는 리턴 값으로 null을 반환하므로 이를 이용해 차단 여부를 알 수 있다. 아래 내용이 팝업창 차단을 확인해 그 여부를 알려주도록 수정된 자바스크립트 코드다.

      수정 전
      <script language = "javascript" >
      function onLoad()
      {

      var objPopup = window.open("popup.htm", "");
      location.href = "other.html";
      }
      </script>
      <body onload= "onLoad()" >

      수정 후
      <script language = "javascript">
      function onLoad()
      {
      var objPopup = window.open("popup.htm", "");
      if (objPopup == null) {
      alert("차단된 팝업창을 허용해 주십시오.");
      }
      else {
      location.href = "other.html";
      }
      }
      </script>
      <body onload= "onLoad()" >

      예를 들어 팝업창을 자동으로 띄우고 원래 페이지가 다른 페이지로 이동한다거나 창을 닫거나 하는 경우가 있으면 팝업창 차단 여부를 확인하도록 스크립트를 바꿔야 한다.

      액티브X 컨트롤 자동 설치 차단과 해법
      웹사이트를 돌아다니다 보면 직사각형의 보안 경고창을 흔히 볼 수 있다. 이것은 웹페이지에 추가적인 기능을 부여하는 액티브X 컨트롤을 다운로드 하기 위한 확인창이라 할 수 있다. 대부분의 사용자들이 직관적으로 예를 누르기 때문에 이를 이용하면 악의적인 코드를 담고 있는 프로그램을 PC에 설치할 수 있어 많은 문제가 돼 왔다.

      이번 XP 서비스팩2에서는 아예 이러한 창 자체가 뜨지 않는다. 즉 액티브X 기능을 포함하는 페이지의 경우, 현재 보고 있는 페이지에 액티브X가 포함돼 있으며 설치하려면 사용자가 직접 선택하라는 메시지가 '알림 표시줄'에 뜬다.


      현재 우리나라에서는 온라임 게임 뿐 아니라 인터넷 뱅킹, 전자 지불, 사이버 트레이딩에 기본적으로 인증용 액티브X가 사용되고 있다는 측면에서 학습되지 않은 사용자들의 고객 문의 폭주가 예상된다고 하겠다. 웹페이지는 정상적으로 표시되지만 액티브X 컨트롤이 안 깔려 있는 상황에서는 알림 표시만 하고, 기능이 정상적으로 동작하지 않게 되기 때문이다.

      예를 들어 국세청의 홈택스 서비스의 경우 2~3개 회사의 여러 액티브X가 웹페이지에 포함돼 있어 하나를 설치하더라도 사용자는 메시지를 보내는 알림 표시줄을 통해 아직 설치하지 않은 액티브X를 설치해야 한다. 이럴 경우 아래와 같이 소스코드를 변경해 설치 여부를 확인, 안내 페이지로 옮겨줌으로써 사이트 방문자들이 수동으로 다운로드해 설치하도록 하는 것이 좋다.



      수정 전
      <body onload ="checkControl()" >
      <object id = "objCtl" classid ="...." codebase="xxx.cab">
      </object>
      </body>
      수정 후
      <script language = "javascript" >
      function checkControl()
      {
      If (objCtl == null) {
      top.location.href = "error.asp"; //필요한 기능을 설치하는 소개 페이지로 이동합니다
      }
      objCtl.do();
      }
      </script>
      <body onload ="checkControl()" >
      <object id = "objCtl" classid ="...." codebase="xxx.cab">
      </object>
      </body>

      또한 SP2는 이제 신뢰되지 않은 게시자가 배포하는 액티브X 프로그램을 원천 차단함으로써 아예 설치할 수 없도록 변경해버렸다. 액티브X 개발사들은 인증 과정과 비용의 번거러움 때문에 테스트 인증서로 서명한 액티브X를 배포하기도 하였는데, SP2가 설치된 PC에서는 베리사인(VeriSign)과 트와트(Thawte) 등 글로벌 인증 기관에서 발행한 인증서로 서명된 코드만 설치된다.

      따라서 이전에 코드사인 인증서를 가지고 있지 않은 회사는 인증서를 발급 받아 사용해야 한다. 현재 국내에서는 베리사인과 트와트 양사의 코드사인 인증서를 함께 대행하는 웹사이트(www.thawte.co.kr)가 있기 때문에 안내를 받을 수 있다.


      창 제한과 해법
      팝업창 차단과 함께 포함된 기능이 팝업창 사이즈 제한 기능이다. 이것은 팝업으로 뜬 창이 윈도우 전체에 표시되거나, 사용자가 제어할 수 없는 상황을 막아 주기 위한 것이다. 음란 사이트나 링크 사이트 같은 곳에서 심심치 않게 경험하는 것이다.

      이 제한에는 스크립트를 이용한 창 크기 조절을 사용할 수가 없다. 팝업에서의 window.resize 같은 기능이 제한되는 것이다. 그리고 이전에는 팝업 윈도우의 위치를 정할 수 있었지만 이제 이것도 조절된다. fullwindows=yes 같은 스크립트로 화면 전체에 표시하던 기능도 창 최대화 기능으로만 사용된다는 점도 염두해야 한다.

      즉 지금까지 사용하던 온라인 전면 광고나 웹사이트 등은 영향을 받을 수 있다. 따라서 이러한 기능을 사용하고 있는 웹사이트들은 수정이 필요하다.



      또한 팝업을 만들 때 주소창, 메뉴바, 상태 표시줄 등을 제어할 있었지만 모든 팝업에 상태 표시줄은 꼭 들어가게 된다. 따라서 기존의 팝업 윈도우의 크기에서 상태 표시줄이 표시되는 20~30픽셀 정도의 크기가 더 늘어남에 따라 윈도우 사이즈를 약간 늘여야 모든 컨텐트와 UI를 제대로 표시할 수 있다.

      정확한 MIME 핸들링
      웹서버에서 브라우저로 데이터를 보낼 때에는 HTTP 헤더에 데이터 컨텐트-타입을 적어주게 돼 있다. 대부분의 아파치 웹서버는 text/plain이 기본으로 설정돼 있으며 MIME 타입에 설정돼 있지 않는 확장자로 데이터를 보내면 웹브라우저는 어떤 형식인지 인식할 수 없게 된다.

      여기에 인터넷 익스플로러에는 MIME 스니핑이라는 기능이 내장돼 있어 헤더가 text/plain이더라도 html 구문이 포함돼 있으면 html 문서로 읽어 주는 역할을 해 왔다. 이것은 그림 파일이나 기타 다른 애플리케이션 파일 포맷도 마찬가지다.

      SP2에서는 이런 자동적인 MIME 스니핑은 더 이상 작동하지 않는다. MIME 타입이 보내지면 이에 따라서만 데이터를 표시하게 된다. 따라서 HTTP 헤더와 데이터 포맷을 정확히 쓰는 버릇을 들여야 한다.

      만약 그렇지 못한 파일이 IE에 전달되면 저장 기능만 작동되며 바로 실행은 이제 불가능하다. 이미 모질라나 오페라 같은 브라우저에서는 이렇게 작동됨으로써 정체 불명의 파일이 다운로드돼 실행되는 것을 막고 있다. 단 MIME 타입을 알 수 없는 경우에는 스니핑이 그대로 동작한다.

      로컬 머신 잠금 기능
      사용자의 로컬 머신 보안 영역이 인터넷보다 한층 더 높아져 윈도우 XP를 사용해 웹페이지 및 액티브X의 내부 테스트를 하는 데 어려움이 따르게 됐다. 자바스크립트 실행이나 액티브X 실행 자체가 원천적으로 불가능하게 됐기 때문에 윈도우 XP 개발자들은 테스트 진행에 애로를 겪게 될 것이다.

      로컬 HTML 파일에 <!-- saved from url=(0022)http://www.yoururl.com --> 이나 <!-- saved from url=(0013)about:internet -->와 같은 주석을 붙임으로써 실행이 가능하긴 하다. 또한 액티브X 컨트롤은 웹으로 올린 후 다운받아 테스트해야 한다.

      이번에 출시되는 윈도우 XP 서비스팩 2에는 이 밖에도 몇 가지 제한 사항이 더 포함돼 있다. 모든 설정은 사용자의 레지스트리에서 변경 가능하긴 하지만 기본적으로 설정돼 있는 것 때문에 많은 혼란이 있을 수 있다.

      지금까지 살펴 본 바로는 기존의 많은 코드를 다시 살펴봐야 하는 어려움은 따르겠지만 그 동안 등한시 해왔던 보안에 대한 이슈를 해결한다는 측면에서 꼭 필요할 것이다. 특히 서비스팩2에서는 IE와 기존 설치된 애플리케이션, 확장 기능과의 충돌을 확인할 수 있는 기능도 내장돼 있는 등 전반적으로 사용자 웹브라우징의 안정성 및 보안성을 높였다고 볼 수 있다.


      그럼에도 불구하고 웹사이트를 방문하는 사용자의 편의성을 위해 개발자나 사이트 운영자들은 서비스팩2의 정식 출시 이전에 미리 설치해 자신의 웹사이트에 대한 테스트를 꼭 해보기를 권장한다. 또한 고객이 오인할 수 있는 팝업 제어나 액티브X 컨트롤 설치 등에 대한 자세한 안내문을 적어주는 것도 필요하다.

      from : http://www.zdnet.co.kr/techupdate/lecture/os/0,39024998,39130016,00.htm

       

      WIN XP SP2로 인해 웹개발자들이 당분간 고생좀 하겠당...

      우리도 대처를 해야 할텐데...

      Posted by 꿈꾸는자의 생각의파편들
      2005.02.11 23:24

      [펌] [JMC]2004.07.03 Dev.../플밍 관련 자료2005.02.11 23:24

      EntityBean

      1. finder 메소드를 Home 인터페이스에 선언하는 이유는 finder를 실행후 메모리에 객체가 생성되기
      때문이다. Home이 객체 생성과 소멸을 관리하기 때문....

      2. BMP인 경우만 Bean클래스에 ejbFind메소드를 구현한다.

      3. 데이터를 자바메모리 형태로 관리하는 것이 EntityBean이다.

      4. EntityBean도 Session Bean의 Stateless도 ejbActive(), ejbPassivate()를 사용한다.
         차이점은 Stateless는 데이터를 다른 저장매체에 저장하여 관리되고, EntityBean은 Pool로 관리한다.

       

      CMP

      Query Language를 작성할 때 항상 alias를 써야 한다???

      특정컬럼만 select할 수 없다.

      EJB쿼리를 서브쿼리가 제공안됨...제약사항이 많다. 그래서 CMP
      를 사용하지 않는 이유가 되었음.

      한건을 조회할 때만 finder메소드를 사용하고 두건 이상인 경우는 finder를 사용하지 말고
      select를 직접 날려라~

      CMP는 하나의 테이블에 하나의 객체와 매핑..

      BMP의 finder의 메소드는 Bean클래스의 ejbFind메소드를 작성하고 커넥션을 연결하고 SQL
      문을 직접 작성해야 하나 BMP는 Bean클래스의 ejbFind메소드를 작성하지 않는다.


      client가 EntityBean을 직접 참조하지 말고 SessionBean을 통해서 참조할것...

       


       

      'Dev... > 플밍 관련 자료' 카테고리의 다른 글

      [펌] [JMC]2004.07.10  (0) 2005.02.11
      [펌] 소스 세이프  (0) 2005.02.11
      [펌] [JMC]2004.07.03  (0) 2005.02.11
      [펌] [JMC]2004.07.10  (0) 2005.02.11
      [펌] 소스 세이프  (0) 2005.02.11
      [펌] Eclipse와 JavaScript/CSS  (0) 2005.02.11
      Posted by 꿈꾸는자의 생각의파편들
      2005.02.11 23:24

      [펌] [JMC]2004.07.10 Dev.../플밍 관련 자료2005.02.11 23:24

      CMP는 하나의 테이블당 하나만 매핑이 가능하다.
      BMP는 여러테이블과 매핑이 가능...

      따라서 여러테이블과 매핑이 가능하게 하기 위해 중간에 Toplink를 사용한다.(오픈소스)

      EntityBean의 하나의 객체는 테이블의 로우에 해당한다.
      자주 생성되고 소멸되기 때문에 EntityBean(CMP나 BMP모두)는 Pool로 관리한다. ejbRemove를 호출해도 메모리에서 해제되는것이 아니고
      Pool에 다시 들어간다. 메모리와 DB의 싱크를 맞추기 위해 ejbStore()가 호출된다.

      SessionBean은 ejbLoad()와 ejbStore()함수가 없음

      메시지드리븐빈은 메세지를 보내는 것이 아니고 메시지를 처리하는 것이다.
      메시지드리븐빈은 클라이언트가 호출하는 것이 아니라 이벤트에 의하여 JMS서버가 호출하므로 홈인터페이스, 로컬홈인터페이스 등등이 필요 없으면
      리터값이 없다.

       

      CachedRowSet rs = new CachedRowSet(); - >커넥션을 유지하지 않아도 됨 ^^ (JDK1.5에서 제공)

      같은 문자 고치기 : 블럭설정 후 옆의 아이콘
      F2 키가 탭키의 역할

       

       

      'Dev... > 플밍 관련 자료' 카테고리의 다른 글

      [펌] [JMC]2004.07.03  (0) 2005.02.11
      [펌] 소스 세이프  (0) 2005.02.11
      [펌] [JMC]2004.07.10  (0) 2005.02.11
      [펌] [JMC]2004.07.03  (0) 2005.02.11
      [펌] 소스 세이프  (0) 2005.02.11
      [펌] Eclipse와 JavaScript/CSS  (0) 2005.02.11
      Posted by 꿈꾸는자의 생각의파편들
      2005.02.11 23:24

      [펌] 소스 세이프 Dev.../플밍 관련 자료2005.02.11 23:24

      Visual Source Safe(VSS)에 대해서 | 아하 그렇구나!2004/09/13 15:28
      http://blog.naver.com/4eyer/140005789883

      Check Out과 Check In이라는 간단한 동작으로 코드에 대한 관리를 해결하게 됩니다.

       

      즉, Check Out을 한 상태에서만 소스를 수정할 수 있으며  하나의 파일에 대해서는 단 한 개발자만이 Check Out을 하여 파일을 수정할 수 있습니다.  수정을 완료하면 Check In을 하여 변경된 내용을 데이터베이스에 저장합니다. 중요한 것은, 반드시 Refresh를 하고 Check Out / Check In 해야한다는 것이다.


      Check Out - 소스를 수정할 때
      Undo Check Out - Check In을 안하고, 소스를 원상복귀하고 싶을 때

      Check In - 수정된 소스를 DB에 저장할 때

       

      [참고] Check Out을 안하고 수정하고 싶을 때는 파일을 Writable만으로 변경해서 바꾼다.

                이것을 등록할 때에는 나중에 Check Out을 통해 받은 후 변경한 파일과 Merge를 한 후

                다시 Check In 해 준다.

       

      좀 더 자세히 알고 싶으면 아래를 참고한다.

      http://kr.ks.yahoo.com/service/ques_reply/ques_view.html?dnum=JAI&qnum=131157

       

       

      더 자세하게 나온 홈페이지도 있다.

      http://canday.pe.kr/wiki/wiki.pl?SourceSafe

      ------------------------------------------------------------------

      소스세이프(MS Visual SourceSafe)에 대해 관심있는 분들이 있어서 간략하게 끄적여보겠습니다. 설명서 등을 읽어보면 구체적인 사용법이 나와있죠, 하지만, 제 주변에서만 그런지는 모르겠지만, 프로그램을 보통 혼자서 만들어온 사람들 뿐이라, 소스세이프가 왜 필요한지, 어떻게 사용되는지, 이게 무슨 목적에서 쓰이는지 등에 대한 이해를 쉽게 못하는 것 같더군요. (물론 저라고 다른 사람들과는 다르게 한것도 아니죠.. 저도 처음엔 이해를 못했죠.) 그래서, 이 짧은 강좌에서는, 그런 궁금증을 조금이나마 긁어드리고자 합니다. 그리고, 기본적인 사용법을 적어보겠습니다.(구체적인 사용법은 소스세이프에 딸려있는 설명서를 읽어보고 알아내세요. 여기서는 간략한 것만 설명합니다.)

      우선,저랑 같이 작업하는 프로그래머 아저씨들의 소스세이프에 대한 감정을 적어보죠.

      강 모씨. "머 이런게 다있노 쓸데없다."
      조 모씨. "열라 짜증나네 귀찮다 귀찮아."
      이 모씨. "머 이런 거지같은게 다 있냐 갖다버려라."
      김 모씨. "소스세이프를 이렇게 쓰는 사람도 다 있구나."
      장 모씨. "머 이미 쓰는거니까 써 주지 머."
      과반수가 나쁜 식의 평입니다! 민주사회에서 투표가 빠지면 콩고물 없는 시루떡이죠. 하지만, 중대한 문제가 있으면 거부권을 과감이 행사하는 법. 2년 넘게 잘만 쓰고 있죠. (내 짬밥에 누가 개기리. 엉? 다 개긴다고? ?튼?.)저런 말을 한마디씩 했어도, "그래도 저거를 쓸수밖에 없다"정도 한마디는 합니다. 이 모씨 아저씨는 다른데 가서 저한테 어떻게 소스세이프 깔아 쓰는지를 물어봤습니다.네,맞습니다. 소스세이프는 불편한 놈입니다. 이중 삼중 작업 하는 기분이 들게 만듭니다. 속도도 느려집니다. 왠지는 모르겠지만, 버그 때문인지 비주얼씨를 먹통을 만드는 경우가 있기도 합니다! 소스세이프라는 이름 자체가 과장인 것 같기도 합니다.즉, 소스세이프는 필요없는데도 쓰는건 오히려 작업 환경을 불편하게 만듭니다. 하지만,필요할때는 무척 유용하게 쓰입니다.

      그래서, 소스세이프가 우선 꼭 필요한지부터 검토를 해보세요. 보통 필요한 상황이라면,다음 상황을 가급적 많이 만족해야 합니다.

      -정확하면서도 잦은 백업이 필요하다.
      -실험작 프로그램을 만드는게 아니다.
      -프로그램 디자인이 잘 되어 있다.
      -프로그램 제작 기간이 다소 길다
      -여러명 프로그래머가(보통 서너명 이상) 같이 동시에 작업한다.
      -작업하는 컴퓨터들이 랜 등으로 연결되어 있다.
      -복잡한 버전 관리를 해야 한다.
      -어느 정도의 보안 관리가 필요하다.
      -비주얼씨,비주얼베이직,비주얼인터데브(웹사이트만들때 이걸 쓰죠)를 쓴다.

      이정도입니다. 복잡한가요? 쉽게 말하자면.. 보통 프로그래머 한둘이서 한두달 정도에 끝나는 작업이라면, 소스세이프를 안쓰는게 차라리 편할겁니다. 하지만, 프로젝트의 크기가 어느 정도 커지면, 쓰는게 좋다고 봅니다.

      이쯤에서,"나는 소스세이프가 필요없다"고 생각하시는 분은 그만 읽으셔도 됩니다. 자자..그럼 어떻게 소스세이프를 깔아서 쓰는지를 설명해보죠.

      소스세이프는 서버와 클라이언트로 나뉘어집니다. 서버는 모든 소스를 데이터베이스에 저장합니다. 클라이언트는 프로그래머가 쓰는 컴퓨터에 하나씩 깔려있는 소프트웨어인데, 이것은 서버와 네트워크로 통신하면서 소스를 관리할 수 있게 해줍니다. 그러니까, 만약 동시에 작업하는 프로그래머가 5명이라면, -서버 1개
      -클라이언트 5개
      이렇게 되겠죠. 그런데, 서버와 클라이언트는 한 개의 컴퓨터에 같이 쓰일 수 있습니다. 그러니까, 컴퓨터는 네트워크가 되는 5대가 필요하겠죠.우선,서버를 깔아야겠죠. 비주얼 스튜디오 또는 비주얼 소스세이프 소프트웨어를 우선 갖고 있어야겠죠? 제가 비주얼스튜디오6를 쓰기 때문에,그걸 기준으로 설명하겠습니다. 따로 갖고 계신 분은 알아서 찾으시길..우선,서버가 될 컴퓨터에 비주얼씨등을 깔고 나서,나중에 서버컴퍼넌트를 선택할 수 있습니다. 거기서 Sourcesafe server를 선택해서 설치하면 됩니다. 특별한 옵션은 없습니다. 그냥 full option으로 깔아도 됩니다. 그렇게 용량이 큰것도 아니니까요.
      (이후부터는 여러가지 방법으로 설치할 수 있지만,간단한 방법을 제시해보겠습니다. 더 간단한 방법이나,더 안전한 방법 등이 있으면
      귀뜸해주세요. 참고로,소스인사이트나 비주얼인터셉트같은 소프트웨어를 덤으로 깔아서 소스세이프를 강화할 수도 있습니다. 그런건 저도 써본적이 없기 때문에 잘 모르겠네요.)

       

      ======================서버=========================================
      다음에, 소스세이프가 깔려있는 폴더를 다른 컴퓨터에서 쓸수 있도록 공유를 해야 합니다. 읽기 쓰기 권한을 모두 주고요.
      소스세이프는,정해진 사용자를 제외하고는 건들지 못합니다. 보안 중 하나죠. 그러니까,누가 그걸 쓸수 있는가를 정해야 합니다. 그러니까,시작 버튼을 눌러서 source safe를 선택하면.. source safe admin이라는게 있습니다. administrator라고 하죠. 소스세이프 서버를 관리하는 사용자를 말합니다. 기본 암호는 없거나 admin입니다. 이제 들어가고 나면, 썰렁한 윈도우 하나 나옵니다. 거기서 메뉴를 선택해서 사용자를 추가합니다. 각 사용자들의 암호도 당연히 필요하죠. 그리고, 당연하겠지만,admin의 암호도 뭔가를 집어넣어야겠죠? 만약,네트워크가 NT 도메인이라면,NT 도메인에 등록된 각 사용자의 암호와 사용자명을 그대로 쓰면 편합니다.(왜인지는 아래에 적어놓겠습니다.) 각 사용자에 대해서는 프로젝트 읽기,쓰기 등의 권한이 있습니다. 일단은 여러가지 실험을 해봐야겠죠? 그러니까,가급적 모든 권한을 할당하세요.서버는 이정도면 쫑입니다.

       

      ======================클라이언트==================================

      클라이언트를 이제 깔아야죠. 역시 비주얼씨등을 깝니다. 단,소스세이프 서버는 깔 필요가 없죠. 이제,서버에 공유시켰던 폴더를 그 컴퓨터에서 엽니다. 그리고, 그 안에 있는 netsetup.exe를 찾아보세요. (가끔 win32폴더 등에 그게 있기도 합니다. 상관없으니 일단 찾아보시길.) 찾았으면 실행! 역시 별다른 옵션이 없죠. 설치가 다 되었으면..비주얼씨를 실행해보세요.(비주얼베이직도 소스세이프와 연동되어 돌아가긴 하지만,여기서 비베를 쓰는 사람은 거의 없는것 같더군요.)위에서 NT도메인 궁시렁 한거 있죠? 그대로 한사람은 그냥 뜰겁니다. 하지만, 그렇지 않다면, 아마도 사용자명과 비밀번호를 묻는 박스가 나타날겁니다. 거기서 클라이언트 사용자의 이름과 비밀번호를 넣으세요.다 떴으면,오른쪽 버튼을 툴바에서 눌러보세요. 그러면, source control이라는 새로운 툴바가 있을겁니다. 그걸 켜두세요. 유용하게 쓰입니다.

       

      == 서버

      이제 소스세이프에 들어갈 프로젝트 하나를 만듭시다. appwizard등을 써서 프로젝트를 하나 만들거나,이미 있는 프로젝트를 여세요. 그다음에,project view(왼쪽에 길쭉한 트리)에서 파일뷰 탭을 누른 다음에 프로젝트 파일이 있는데다가 오른쪽 버튼을 누르면..

      add to source control

      이라는 항목이 있습니다. 그걸 선택하면,소스세이프의 데이터베이스 트리가 나옵니다. 소스세이프의 데이터베이스는 마치 디렉토리 구조와 같습니다. 프로젝트 1개는 한개의 폴더에 해당하고,폴더 안에는 또 다른 폴더가 들어갈 수 있습니다. 루트 폴더의 이름은 $/입니다. 그러니까, 일단은 $/의 서브 프로젝트로 추가를 해야겠죠.추가를 한 다음에,프로젝트뷰를 보면.. 원래 아이콘은 흰색이었죠? 근데 그게 회색으로 바뀌면서 옆에 빨간 v표시가 있을겁니다. 징그럽죠.. 여기서, 그게 뭔지를 설명하겠습니다.

      마이크로소프트에서도 그렇게 하는지는 모르겠지만,프로그램을 만들때, 부득이한 경우가 아니면,소스 파일은 동시에 두명이 건드리지 않습니다. 그리고,각자가 맡은 파일 외에는 웬만하면 직접 건들지 않습니다. 만약 건드려야 한다면 버그레포팅이나 꾸지람(!) 등을 해서 그걸 건드리는 사람이 대신 건들게 합니다. 소스세이프에서는 이러한 기능을 소프트웨어 수준에서 처리하게 합니다. 그걸 어떻게 하느냐? 어떤 파일을 건들기 위해서는,그 파일은 "나만 쓸수 있다"는 독점권과 파일을 가져와야 합니다. 그리고, 그 파일을 작성하고 나서는 "이 파일은 다른 사람에게 전파되어야 한다"는 의미로 다시 파일을 갖다놔야 합니다. 파일을 소스세이프 서버로부터 가져오는것을 체크아웃(check out)이라고 하고,갖다 놓는것을 체크인(check in)이라고 합니다. 어떤 사람이 어떤 파일을 체크아웃하면,다른 사람은 자동으로 그 파일을 만질 수 없게 됩니다. 만지려고 소스에다가 글자 하나라도 입력하려고 하면 삥삥 소리나면서 글자가 안들어갑니다.

      소스세이프가 연동된 비주얼씨에서는 그런 파일들을 아이콘으로 구별합니다. 하얀 파일 아이콘은 소스세이프에 묶이지 않은 파일이고,회색 아이콘은 묶인 아이콘입니다. 회색 아이콘 옆에 빨간 v표시가 있으면 그건 check out된 것이고,그렇지 않으면 check in된 것입니다. 우선은 모든 파일을 check in 하죠. check in 하는 방법은,프로젝트 뷰에서 파일을 선택한다음 아까 툴바의 check in버튼을 누르거나,소스세이프 익스플로러(소스세이프 클라이언트의 이름입니다.)에서 프로젝트를 선택한 다음 통째로 체크인할수있습니다. 하지만,일단은 프로젝트뷰에서 파일을 하나하나 다 선택한다음 체크인을 하세요.

      옆의 빨간 v가 없어졌을겁니다. 이제,그 파일들의 방금 체크인된 것들은 서버에 저장되었고,다른사람들은 그것들을 가져다가 쓸수 있습니다.

      이제,그 소스 파일 중 하나를 열어서,글자를 입력하려고 해보세요. 박스가 튀어나옵니다. "이 파일을 체크아웃해서 쓸거냐?"는 질문이죠. "예"를 선택하면 체크아웃을 합니다. 일단은 그냥 냅두세요. 편의상 이 클라이언트는 컴1이라 부르죠.

       

      === 클라이언트

      이제,다른 컴퓨터(편이상 컴2라 부르죠.)에도 아까 언급했던 식으로 클라이언트를 설치하세요. 거기서는 아까 서버에 넣은 소스를 가져와서 작업해야겠죠. 소스세이프익스플로러를 띄우세요. 그러면,아까 넣어둔 프로젝트 폴더가 있을겁니다. 그걸 선택한다음,set working folder버튼을 누르세요. 서버에 있는 폴더는 파일 폴더가 아닙니다. 그렇기 때문에, 그것에 대칭되는 폴더를 각자의 컴퓨터에 마련을 해야 합니다. 그게 working folder입니다. 웬만하면 working folder의 이름과 프로젝트의 이름을 같게 하는게 좋습니다. 안그러면 중간에 짜증나는 일이 생기죠.

       

      만들면,서브폴더를 만들건지를 묻습니다. 만드는게 좋습니다. 이제, 서버에서 파일들을 가져와야겠죠. 그렇지만,당장 편집할건 아니고,서버에 저장되어 있는 것들만 가져올 뿐입니다. 그걸 하기 위해서는 get latest version이라는것을 선택하면 됩니다. 그러면,파일들이 클라이언트에 복사가 됩니다. 그걸 비주얼씨에서 프로젝트째로 열면,회색 아이콘으로 나올겁니다. v표시는 없죠?

      아까 아까 클라이언트에서 체크아웃 하신거 아시죠? 그 파일을 열고 뭔가를 입력해보세요. 삥삥 소리나면서 글자가 안들어갈겁니다. 다른 사람이 이미 그 파일을 체크아웃했기 때문입니다. 그걸 쓰기 위해서는 그걸 체크아웃한 사람이 다시 체크인을 하거나 체크아웃을 취소해야 합니다.(만약,체크아웃했는데,필요가 없어서 취소하는걸 undo check out이라고 합니다.그러면,소스가 원상복구되죠.) 일단은 체크인을 합시다. 이제,컴2에서 그 파일을 체크아웃하세요. 여전히 삥삥대죠? 비주얼스튜디오의 번거로운 점 하나입니다. 비주얼스튜디오와 소스세이프의 연동관계까지는 좋지만,자기 컴퓨터 바깥에서 일어나는 일에 대해서는 연동되지 않습니다. 그렇기 때문에, 비록 체크인이 된 파일이더라도,그런 상황을 자동으로 알아내지 않습니다. 소스컨트롤 툴바에 보면 느낌표 아이콘이 있습니다. refresh라는 버튼이죠.. 그걸 눌러줘야 외부에서 일어난 다시 검사합니다. 자, refresh버튼을 누른 다음에 다시 소스에다가 입력을 해보세요. 아까 체크아웃할거냐는 질문을 던지죠? 체크아웃을 해보세요. 컴1에서 바꿨던 부분이 역시 튀어나오죠? 왜냐하면 컴1에서 체크인을 했기 때문에,데이터베이스에 있는 그 파일은 컴1에서 변경한 것이 있기 때문입니다. 그런데, 만약 그 파일을 체크아웃하지 않고 그냥 최근판으로 가져오고 싶을 때가 있습니다. 그럴때는 체크아웃대신에 get latest version을 선택하면 됩니다.

      소스세이프의 장점 중 하나는,소스 파일의 변경 상황을 모조리 저장한다는겁니다. 그러니까,어떤 파일을 100번 정도 체크인했다면,그 100번 체크인한 소스가 모조리 저장됩니다. 용량 엄청 먹을것 같다고요? 소스세이프는 나름대로의 소스 저장 방식을 갖고 있습니다. 그렇기 때문에,예상보다는 훨씬 적은 양의 하드 디스크를 차지합니다. 예를 들어,제가 쓰고 있는 소스세이프 서버의 데이터베이스는 약 2년간 써왔는데, 전체 용량이 20메가입니다. 어카이빙이라고 해서,소스를 한개 파일로 압축해주는 기능이 있는데,그걸 쓰면 4메가가 됩니다. 소스 전체 합치면 1메가 좀 넘으니까,소스 크기가 일정 속도로 늘었다는 가정하게 계산해보면, 0.5메가(일정 속도로 늘었다고 가정했으니까)*365(하루 한번 체크인했다고 가정)*2하면.. 365메가죠? 그렇지만 실제로는 20메가..(정확하게 몇번 체크인했는지 등을 뽑아내는 방법은 모르기에,이렇게 어림짐작해봅니다.)그게 어떻게 나오는지 해봅시다. 소스세이프익스플로러에서 프로젝트 폴터를 선택한다음 view history를 선택해보세요. 그러면,지금까지,언제 누가 어떤 소스 파일을 어떻게 했다는게 좍 나옵니다. 물론, 옛날 소스 파일을 가져올 수도 있습니다.

      이게 소스세이프의 기본적인 기능입니다. 이 외에도, 소스세이프의 기능에는..
      branching/merging(한개 이상의 소스 파일 버전을 여러 갈래로 나눠서 여러 사람이 작업하다가 나중에 한꺼번에 합치는 방법)
      back up,roll back(어느 날짜 이전의 소스를 가져오거나 그 날짜로 소스를 되돌리는 방법.. 심각한 문제가 발생했을때 이렇게 소스를 복구할 수 있죠.)
      command line 사용(소스 파일이 한두개가 아니면,배치파일 등을 만들어서 어느 정도 자동화할 수 있습니다.)
      difference(두 개 이상의 소스 파일이나, 한개 소스 파일의 지나간 버전간의 소스 내용의 차이를 구별할 수 있습니다.)
      label(체크인할때 넣는 주석과는 달리,프로젝트 통째로 메이저 버전을 넣어서 엮는 방법. 버전 1.1,버전 1.2등 릴리즈가 작성되었을때 이걸 해두면 편합니다.)
      report(윗사람한테 어떤 작업하고 있었는지 보고 정도는 해야겠죠?)
      share(한개의 파일이 변하면,그게 다른 프로젝트에도 복사되게하는 기능)
      webdeploy(웹페이지소스를 웹서버에 올릴때 쓰는 기능. 안써봐서 모르겠네요.)
      가 있습니다. 이건 제 강좌를 이해하시면,소스세이프 설명서만 읽어도 충분히 이해갈 수 있는 것들이니까,굳이 어떻게 쓰는건진 설명하지 않겠습니다.

      가급적 짧게 쓰려고 했는데,이상하게 길어졌군요. 고삘때 팰콘3.0강좌쓴 이후로 거의 강좌라곤 써본적이 없는지라,좀 어색하네요. 그렇지만,아무쪼록 도움이 되면 좋겠네요.

      그럼 이상.

      1999년 여름..

      --------------------------------------------------------------------------

       

      'Dev... > 플밍 관련 자료' 카테고리의 다른 글

      [펌] [JMC]2004.07.03  (0) 2005.02.11
      [펌] [JMC]2004.07.10  (0) 2005.02.11
      [펌] 소스 세이프  (0) 2005.02.11
      [펌] [JMC]2004.07.03  (0) 2005.02.11
      [펌] [JMC]2004.07.10  (0) 2005.02.11
      [펌] Eclipse와 JavaScript/CSS  (0) 2005.02.11
      Posted by 꿈꾸는자의 생각의파편들