메일로 온 질문에 답변을 공유합니다.


====

Q:

좋은 강의 감사드립니다.

강의 내용을 정리하면서 몇가지 질문이 생겼습니다.


1. Junit 을 사용할 테스트는 무조건 return 구문과 출력 구문을 만들어야 하나요?

return 값이 void 인 경우는 어떻게 하나요?


2. 예전 책을 보면 tomcat을 컨테이너라고 하고

웹서버와 구분을 합니다. 웹서버 아파치와 구분을 하는데

정확히 웹서버와 was, 컨테이너의 차이를 모르겠습니다.


동적인 페이지를 처리하기위해 was가 필요하다고 하니

was가 웹서버의 역할까지 포함하고 있는 것이라고 생각했는데

was와 웹서버를 같이 사용하는 경우도 있고...개념이 헷갈립니다.


3. Spring에서 service와 controller의 차이가 어떤 것인지 알고 싶습니다.

실제로 서비스에서 하는 행위를 컨트롤러 단에서 해도 상관이 없다고 생각됩니다.


4. Spring과 스트럭쳐를 같이 사용할 이유가 있는지 알고 싶습니다.

처음 공부할 때 두가지를 같이 병행하는데 역시 spring만으로 구현이 가능한 것 같습니다.


마지막으로 가능하다면 강의에 사용하셨던 구글 문서 주소를 다시 알려주셨으면 합니다.

이번에 윈도우 8.1을 써본다고 하다가 그만 즐겨찾기를 지워버리는 실수를 해서....

단순히 업데이트로 생각했다가 많은 자료가 사라져 버렸습니다.

구글 크롬에 북마크는 정리가 끝난 사이트만 관리하다보니 이런 불상사가 생겼네요.


더운 날이 계속되는 여름입니다.

건강관리에 유의하시기 바랍니다.

다시 한번 좋은 강좌와 okjsp에 많은 도움에 감사드립니다.


A:

안녕하세요.

답변 드리겠습니다.


1. void 인 함수의 역할이 무엇인지, 상태값을 변화시킨다면 그리고 그것을 검증해야 한다면, 

테스트를 위해, 상태값을 읽어오는 함수를 통해서 테스트할 수 있을 것입니다.


2. 웹서버는 html, css, js, image들을 서비스하는 아파치 웹서버 (http://httpd.apache.org), 

IIS 등이 있습니다.  WAS는 Web Application Server의 약자이고, JSP/Servlet을 실행할 수 있는

서블릿 컨테이너와 EJB가 실행되는 EJB 컨테이너로 구성되어 있습니다.

초기에는 WAS의 정적인 파일 처리 능력이 낮기 때문에 웹서버와 연결해서 사용했는데, 

(mod_jk, ajp 같은 커넥터류) 요즘은 WAS 자체에서 http 서버의 역할을 감당할 만한 성능이 나와서

단독으로 웹서버의 역할까지 커버하는 경우가 많습니다.


3. 강의 때도 말씀드렸는데, request, response 같은 객체와 분리된 비즈로직이 Service에서 실행됩니다.

저 두 파라미터가 Service에 없다는 것은 Service를 WAS와 분리해서 단독으로 실행할 수 있게 됩니다.

Controller의 역할은 Model과 View를 연결해 준다는 본연의 역할이 있지요.

http://csl.ensm-douai.fr/noury/20 MVC song인데, 동영상과 가사를 함께 생각해보시면 도움이 되실 것입니다.


4. 스트럿츠를 스프링과 연계시키는 이유는 제 생각으로는 당시 스트럿츠로 만들어진 시스템이 많았고,

스트럿츠 개발자들이 많았기 때문이 아닌가 생각됩니다.

지금은 말씀하신대로 스프링MVC로 모두 커버 가능합니다.


감사합니다.


구글문서 주소는 http://bit.ly/eclipse201306 입니다.


JUnit을 이용한 테스트케이스를 실행한 결과를 api형태의 보고서로 또는 그래픽으로 비주얼하게 보여줄 수 있습니다.

http://www.okjsp.pe.kr/docs/report 에서 확인할 수 있습니다.

아울러 hudson에서도 다른 형태의 리포트가 나옵니다.
우측 상단의 파란색 그래프입니다.

더 자세한 정보도 볼 수 있습니다.

http://www.okjsp.pe.kr:8080/job/okjsp%20site%20build/

아주 오래 미뤄왔던 일을 해내었습니다. 이제 버그 잡아야겠습니다.
이전 포스트에 이어집니다.

junit task를 다음과 같이 변경할 수 있습니다.
    <target name="test" depends="compile">
        <mkdir dir="report/html"/>
        <junit printsummary="on" haltonfailure="on">
            <classpath refid="test.classpath">
            </classpath>
            <formatter type="xml"/>
            <batchtest todir="report">
                <fileset dir="dst">
                    <include name="**/*Test*"/>
                </fileset>
            </batchtest>
        </junit>
    </target>

리포팅 기능을 강화한 설정입니다.
report 폴더에 TEST-*.xml 파일이 생성이 됩니다.
이 파일을 이용해서 다음과 같은 문서를 생성할 수 있습니다.


추가되는  junitreport 코드는 다음과 같습니다. 굵게 표시해 놓았습니다.
    <target name="test" depends="compile">
        <mkdir dir="report/html"/>
        <junit printsummary="on" haltonfailure="on">
            <classpath refid="test.classpath">
            </classpath>
            <formatter type="xml"/>
            <batchtest todir="report">
                <fileset dir="dst">
                    <include name="**/*Test*"/>
                </fileset>
            </batchtest>
        </junit>
        <junitreport todir="report">
            <fileset dir="report">
                <include name="TEST-*.xml"/>
            </fileset>
            <report format="frames" todir="report/html"/>
        </junitreport>
    </target>

이제 남은 작업은 소스와 테스트코드 분리 설정과 그 후에 okjsp사이트에 적용하는 것입니다.
샘플 첨부합니다.

참고서적: 이클립스 프로젝트 필수 유틸리티, 민진우, 이인선 , 한빛미디어, 2009, p251~255
생각보다 쉽게 풀리지 않습니다. 테스트 코드와 애플리케이션 코드의 분리는 아직 적용하기 전입니다. classpath를 두 가지로 놓아 둔 것이 특징이라면 특징이겠죠. 멋지게 나오는 리포트까지 몇 번 더 진화를 시켜야하겠습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
     2009. 6. 9. 오전 8:23:18
     junit   
     test case report
     kenu
====================================================================== -->
<project name="junit" default="compile">
    <description>
            test case report
    </description>
    <path id="classpath1">
        <fileset dir="lib">
            <include name="**/*.jar"/>
        </fileset>
    </path>
    <path id="test.classpath">
        <fileset dir="lib">
            <include name="**/*.jar"/>
        </fileset>
        <path location="dst"></path>
    </path>

    <!-- =================================
          target: default             
         ================================= -->
    <target name="compile" description="test case report">
        <mkdir dir="dst"/>
        <javac srcdir="src" destdir="dst" debug="on">
            <classpath refid="classpath1">
            </classpath>
        </javac>
    </target>

    <!-- - - - - - - - - - - - - - - - - -
          target: depends                     
         - - - - - - - - - - - - - - - - - -->
    <target name="test" depends="compile">
        <junit>
            <classpath refid="test.classpath">
            </classpath>
            <test name="test.UnitTest"></test>
        </junit>
    </target>

</project>


이클립스 프로젝트 파일 첨부합니다.

이클립스 프로젝트 필수 유틸리티 : subversion, Ant, JUnit, Trac이클립스 프로젝트 필수 유틸리티 : subversion, Ant, JUnit, Trac - 10점
민진우 외 지음/한빛미디어
이클립스를 기준으로 CVS,Subversion,Ant,JUnit,Trac에 관한 부부개발자의 경험담입니다. 초판에는 CVS,Ant,JUnit,Scarab을 다루었던 것으로 기억합니다. 책의 실습예제로 초간단 블로그 만들기 프로젝트를 다룹니다. 언어보다 더 빨리 변하는 것이 도구이기도 합니다. 이런 도구의 사용법을 문서로 전달한다는 것이 쉽지 않지만 개정판이 나와서 다행입니다.

최근 OKJSP에 트랙을 사용하기 시작했는데, 리눅스에 트랙설치는 쉽지 않은 일이었습니다. 윈도우환경으로는 저자 민진우님이 TOW라는 오픈소스 프로젝트를 진행하고 계십니다. http://sourceforge.net/projects/raconwindows

이런 도구를 다른 개발자에게 쓰도록 공감대를 형성하는 것은 툴 자체보다 어려운 듯 합니다.

프로젝트 모니터링이라고 제목을 정한 이유는 Continuous Integration 은 평소 잘 하라는 의미입니다. 빅뱅통합이라고 하는 프로젝트 오픈 직전의 코드 통합은 전장을 방불케합니다. 평소에 만들어지는 코드에 대한 건강진단은 프로젝트가 산으로 가는 것을 막아줍니다. 그리고 버그가 숨어있을 여지도 줄여줍니다.

이번 세미나는 hudson을 중심으로 프로젝트의 건강상태를 모니터링할 수 있는 방법에 대해서 공유하려고 합니다.

소스 코드 공유
 - SVN,CVS
 - 저장소의 무결성
빌드서버
 - only for application source codes
Hudson
 - Continuous Integration Tools
 - Build Automation
 - Plugins
Project Report
 - JUnit
 - FindBugs
 - Checkstyle
 - PMD


강사: 허광남 okjsp운영자

장소: 아트레온 토즈 (신촌역 4번출구 아트레온극장 14층)
약도: http://www.toz.co.kr/v2/01about/pop_map_art.gif

일시: 2008/11/15 토 오전 10:00~12:00

회비: 20,000원 (당일 접수, 영수증 가능)

인원: 선착순 25명

 

메일로 신청받습니다.

kenu 골뱅 okjsp.pe.kr

 

이름:

닉네임:

이메일:

휴대폰:

 

본 강의는 실습강의가 아닙니다.

 

고전적인 자바 클래스의 테스트는 main() 메소드에 값을 찍어보는 코드를 넣어서 콘솔에서 확인합니다. 이클립스에 익숙해진 덕에 JUnit에서 System.out.println() 집어 넣는 것은 초딩같은 습관이라고 생각을 "저만"했었습니다. 하지만, 찍어본다는 것 그리고 그것을 눈으로 확인하는 것은 굉장한 심리적 안정감을 주기는 합니다. 아직 assertEquals() 는 보이지 않는 신뢰가 필요하기 때문이죠.

httpunit의 테스트코드를 보니 재밌는 부분이 있었습니다. 상당히 많은 수의 테스트케이스에 main() 메소드가 있었고, 그 메인메소드는 JUnit을 기반으로 해당 테스트코드를 수행하도록 만들어주는 것이었습니다.


suite() 메소드를 inline 리팩토링하면 junit.textui.TestRunner.run( new TestSuite( EncodingTest.class ));  를 통해서 실행을 합니다. Java Application 으로 실행한 결과는 다음과 같습니다.

..............
Time: 3.813

OK (14 tests)

물론 이 클래스는 JUnit을 통해서도 실행됩니다.

다른 사람의 코드를 읽는 것, 프로그래머 소통의 시작이 아닐까 생각해봅니다.

참고로 HttpUnitTest 클래스의 상속구조입니다. ctrl+T 로 이클립스에서 볼 수 있습니다.


 

junit 기초입니다.

오전 9시부터 12시까지 토즈 신촌 본점에서 JUnit과 TPTP실습세미나를 진행했습니다.
오후 3시부터 6시까지는 한경닷컴 교육센터 양평점에서 자바카페의 초대로 이클립스 기본에 관하여 세미나를 했구요.

오전 세미나는 실습이라 대략 천천히 내용이 진행되었습니다. JUnit의 이론부터 TDD의 처음부터 하나씩 짚어갔습니다. 때문에 TPTP 내용 전달에서 많은 정보를 주지 못해서 미안했습니다만 이 블로그를 통해서 더 내용을 채워가고 싶다고 얘기하기도 했습니다.

에이콘 출판사의 후원으로 GWT 구글 웹 툴킷 서적과 방어형 웹사이트 기획 그리고 웹 개발2.0 루비 온 레일즈를 추첨(제맘대로?)으로 나눌 수 있었습니다.

오후 자바카페 세미나는 30명 정도의 많은 분들이 참석했는데, 강의장이 쾌적해서 재밌게 진행할 수 있었습니다. 종종 양평역 근처의 한경닷컴 교육센터를 이용하면 좋겠습니다.

뒷풀이는 강의 때 못다한 얘기들이 오갔고, 늦게까지 진행되었습니다.

돌아오는 금요일 자바성능에 관한 좋은 세미나를 열게 됩니다. 무사히 좋은 시간으로 마치면 좋겠습니다.

사용자 삽입 이미지

아주 올드한 디버깅 자바부터 제가 갖고 있는 책은 7권 정도 됩니다.
디버깅 자바: 버그 잡는 방법에 대한 일반론부터 정책들까지 다뤄집니다. (2000년 번역)

실용주의 프로그래머를 위한 단위 테스트 with JUnit : 가장 얇습니다만 굉장히 실용적입니다. (2004년 번역)

이클립스 기반 프로젝트 필수 유틸리티 : 국내 최초의 협업을 주제로 한 책입니다. JUnit과 Ant의 랑데뷰가 그려집니다.(2004년)

테스트 주도 개발 : 이게 다 이 책 때문입니다. (2005년 번역)

지름길로 빠르게 배울 수 있는 자바 프로그래밍 : 미스테리한 책입니다. 일단 출판사가 교학사, 뚜시쿵!!! 원제는 Agile Java : Crafting Code With Test-Driven Development. 아하! 그럴만 하겠죠. 자바 기초 서적인데 Hello World 나오기 전에 JUnit부터 나옵니다. 말 다했죠. (2005년 번역)
Unit Testing In Java : 2004년에 사서 아직도 다 못 봤습니다. UI, 웹, 동시성 등 다양한 영역에서 테스트 방식을 알려줍니다.

Working Effectively With Legacy Code : 작년 11월에 사서 아직도 2/3밖에 못 읽었습니다. 혹자의 서평이 이 책은 TDD의 실무 적용판이다라고 적절하게 하신 듯 합니다.

이 외에도 더 있습니다. 기억이 나거나 습득하게 되는 대로 계속 포스팅하고 싶습니다. ^^

+ Recent posts