실용주의 개발 프로세스 및 개발 환경 박재성 2008년 4월 26일
사용자 스토리 추출 및 프로젝트 관리 팀 협업을 위한 효율적인 통합 개발 환경 CI툴을 활용한 지속적인 통합 방법과 필요성 강의 목표 사용자 스토리 추출 및 프로젝트 관리 팀 협업을 위한 효율적인 통합 개발 환경 CI툴을 활용한 지속적인 통합 방법과 필요성
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Demo Time
기능 수 42개 13개 8개 마일스톤 1 모든 프로젝트 구성원 기획자 디자이너 코더 상세 기획서 작성 요구사항 분석 디자인 서버 사이드개발자 QA 클라이언트개발자
기능 수 6개 5개 4개 6개 마일스톤 1 모든 프로젝트 구성원 기획자 디자이너 코딩 서버 사이드개발 테스트 코더 서버 사이드개발자 6개 QA 클라이언트개발자 클라이언트개발
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
개발자 PC 개발 서버
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
New Workspace ………….. Perspective 위치 변경 우상 => 좌상 JAVA_HOME 설정 Code Template Import Code Formatter Import Enable Folding Inactive Tomcat Server명 설정 Show Line Number Dependency jar filtering Junit Task Fast View 등록 Editor Template Import Server Task Fast View 등록 Mylyn Task Fast View 등록 SVN 서버 설정 ………….. Ant Task Fast View 등록
삽질의 연속
한방에 해결할 수 없을까?
.metadata 디렉토리 활용 WORKSPACE_HOME/.metadata 디렉토리
Demo Time
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Team Workspace ………….. Java Code Template Import Code Formatter Import Enable Folding Inactive JSP Code Template Import Show Line Number SVN 서버 설정 Maven 설정 …………..
공유
.metadata/.plugins/org.eclipse.core.runtime/.settings 팀 공통 Workspace .metadata/.plugins/org.eclipse.core.runtime/.settings Ant build.xml에 변경 사항 반영 SVN에 build.xml Commit 개발자 A 개발자 B Ant를 실행하여 변경사항 반영 SVN에서 build.xml Checkout
build.xml <target name="basic"> <propertyfile file="${org.eclipse.core.runtime.dir}/.settings/org.eclipse.ui.editors.prefs"> <entry key="lineNumberRuler" value="true" /> </propertyfile> file="${org.eclipse.core.runtime.dir}/.settings/org.eclipse.jdt.ui.prefs"> <entry key="editor_folding_enabled" value="false" /> file="${org.eclipse.core.runtime.dir}/.settings/org.eclipse.jdt.core.prefs"> <entry key="org.eclipse.jdt.core.classpathVariable.M2_REPO" value="C:/Documents and Settings/${local.user.id}/.m2/repository" /> </target>
build.xml <target name="code_format"> <loadfile property="eclipse.code.format" srcFile="${metadata.dir}/code-formatter.xml"/> <propertyfile file="${org.eclipse.core.runtime.dir}/.settings/org.eclipse.jdt.ui.prefs"> <entry key="formatter_profile" value="_JavaJiGi Code Formatter"/> <entry key="org.eclipse.jdt.ui.formatterprofiles" value="${eclipse.code.format}"/> </propertyfile> </target> <target name="java_code_template"> <loadfile property="eclipse.java.code.templates" srcFile="${metadata.dir}/java-code-templates.xml"/> <entry key="org.eclipse.jdt.ui.text.custom_templates" value="${eclipse.java.code.templates}"/> <target name="jsp_code_template"> <loadfile property="eclipse.jsp.code.templates" srcFile="${metadata.dir}/jsp-code-templates.xml"/> <propertyfile file="${org.eclipse.core.runtime.dir}/.settings/org.eclipse.jst.jsp.ui.prefs"> <entry key="org.eclipse.wst.sse.ui.custom_templates" value="${eclipse.jsp.code.templates}"/>
Demo Time
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
AS-IS 라이브러리 파일 관리의 문제점 라이브러리의 추가 및 버전 변경이 불편하다. 버전 관리 시스템(CVS, SVN)을 이용하여 공유할 파일 크기가 커진다. 현재 사용하고 있는 라이브러리의 버전을 파악하기 힘들다. 컴파일, 배포, 테스트할 때만 사용하는 라이브러리를 분리하기 힘들다. WTP의 경우 자동 클래스 패스 기능이 너무 느리다.
Example : Spring 라이브러리 추가 또는 변경 과정 http://www.springframework.org 접근 라이브러리에 버전 번호가 있는 경우 클래스패스 수정 추가 또는 변경할 라이브러리를 찾아 프로젝트로 복사 Download 페이지에서 Spring 라이브러리 다운로드 압축을 푼다
eclipse:clean eclipse:eclipse Maven eclipse 플러그인 활용 eclipse:clean eclipse:eclipse
배포 환경에 따른 설정 파일 관리 Logging Level 정도(Debug, Info). 애플리케이션 서버 설정 데이터베이스 연결 정보 프레임워크 설정 기타 배포 환경에 따라 달라지는 설정 파일
Maven sql 플러그인 활용한 DB 초기화 1 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <dependencies> <dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>1.8.0.7</version> </dependency> </dependencies> <configuration> <driver>${jdbc.driver}</driver> <username>${jdbc.username}</username> <password>${jdbc.password}</password> <fileset> <basedir>${basedir}</basedir> <includes> <include> src/main/resources/db/000001.sql </include> </includes> </fileset> <autocommit>true</autocommit> </configuration>
Maven sql 플러그인 활용한 DB 초기화 2 <executions> <execution> <id>create-schema</id> <phase>process-test-resources</phase> <goals> <goal>execute</goal> </goals> <configuration> <url> jdbc:hsqldb:hsql://${jdbc.host}:9001 </url> </configuration> </execution> </executions> </plugin>
Maven Eclipse 플러그인 활용 Maven IDE Update URL : http://m2eclipse.codehaus.org/update Q4E Update URL : http://q4e.googlecode.com/svn/trunk/updatesite/
Demo Time
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Eclipse에서 Jira의 모든 기능 가능
Jira의 일정 관리 기능
하나의 기능 구현을 위하여 접근하는 파일 DAO 인터페이스 클래스, DAO 구현 클래스 DAO 테스트 클래스 DAO 구현 클래스에 대한 Spring 프레임워크 설정 파일 iBatis 프레임워크 설정 파일 비즈니스 인터페이스, 비즈니스 구현 클래스 비즈니스 테스트 클래스 비즈니스 구현 클래스에 대한 Spring 프레임워크 설정 파일 Action 구현 클래스 Action 테스트 클래스 UI를 담당하고 있는 js, css, jsp 파일
Context 기능
개발 History 추적 기능
기능별 CVS/SVN Commit 기능
Demo Time
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
소스 코드 Commit 모니터링 소스 코드 Checkout 소스 코드 Commit 빌드 최신 기능 테스트 최신 소스 배포 개발자 개발 서버 소스 코드 Commit 모니터링 소스 코드 Checkout 개발자 소스 코드 Commit 빌드 최신 기능 테스트 기획자 최신 소스 배포 최신 기능 테스트 데이터베이스 초기화 단위 테스트 기능 테스트 Report 사이트 생성 최신 기능 테스트 QA
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Demo Time
지속적 통합을 위한 실천 방법 코드를 자주 Commit 해야 한다. 깨진 코드를 Commit 해선 안 된다. 빌드가 깨지면 즉시 고친다. 자동화된 개발자 테스트를 작성해야 한다. 테스트와 Inspection은 모두 통과해야 한다. 개인 빌드를 돌리세요 깨진 코드는 가져오지 마세요. 지속적 통합, 최재훈 역, 위키북스 인용
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Maven Site Generation : site goal
site.xml <?xml version="1.0" encoding="ISO-8859-1"?> <project name="Maven"> <bannerLeft> <name>JavaJiGi</name> <src> http://maven.apache.org/images/apache-maven-project.png </src> <href>http://maven.apache.org/</href> </bannerLeft> <bannerRight> <src>http://maven.apache.org/images/maven-small.gif</src> </bannerRight> <body> <links> <item name="Apache" href="http://www.apache.org/" /> <item name="Maven 1.x" href="http://maven.apache.org/maven-1.x/" /> <item name="Maven 2" href="http://maven.apache.org/" /> </links> <menu name="Maven 2.0"> <item name="Introduction" href="index.html" /> <item name="Download" href="download.html" /> <item name="Release Notes" href="release-notes.html" /> <item name="General Information" href="about.html" /> <item name="For Maven 1.x Users" href="maven1.html" /> <item name="Road Map" href="roadmap.html" /> </menu> <menu ref="reports" /> </body> </project>
pom.xml <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-report-plugin</artifactId> </plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <artifactId>jdepend-maven-plugin</artifactId> <artifactId>findbugs-maven-plugin</artifactId> <artifactId>maven-checkstyle-plugin</artifactId> </plugins> </reporting>
Cobertura Test
checkstyle
Jdepend
Findbugs
CPD Report
Demo Time
Eclipse Mylyn을 활용한 Jira 연동 요구사항 분석 통합 개발 환경 지속적 통합 사용자 스토리 추출 Eclipse 개발 환경 Teamcity를 이용한 지속적 통합 스토리 포인트 산정 Ant를 이용한 개발 환경 공유 소스 품질 리포트 생성 및 활용 Jira를 이용한 프로젝트 관리 Maven을 이용한 프로젝트 관리 Watij를 이용한 테스트 자동화 Eclipse Mylyn을 활용한 Jira 연동
Demo Time
개발자의 하루
10:00 출근 Coffee time Daily Build 결과 확인
10:20 일일 회의 10:19 일일 회의 알림 10:20 일일 회의 진행
신규 기능 추가 업무 개발자 CI 툴 QA 개발자 CI 툴 QA Maven을 이용하여 Jira에서 Jira에서 작업할 태스크 확인 Maven을 이용하여 소스 빌드 및 단위 테스트 Jira에서 Ready for Testing 태스크 QA 구현 메일이나 메신저를 통하여 실패 알림 빌드 QA NO 테스트한 태스크를 Reopen 상태로 변경 실패 SVN에 소스 Commit YES 성공 테스트한 태스크를 Closed 상태로 변경 소스 배포 및 개발 서버재시작 Jira에 Context 등록 개발자 태스크를 Ready for Testing 상태로 변경 CI 툴 QA
유지보수 업무 개발자 CI 툴 QA 개발자 CI 툴 QA Maven을 이용하여 Jira에서 Jira에서 작업할 소스 빌드 및 태스크 확인 Maven을 이용하여 소스 빌드 및 단위 테스트 Jira에서 Ready for Testing 태스크 QA Jira Context에서 관련 리소스 반환 빌드 QA 메일이나 메신저를 통하여 실패 알림 NO 테스트한 태스크를 Reopen 상태로 변경 실패 구현 YES 성공 테스트한 태스크를 Closed 상태로 변경 소스 배포 및 개발 서버재시작 SVN에 소스 Commit Jira에 Context 등록 개발자 CI 툴 태스크를 Ready for Testing 상태로 변경 QA
19:00 퇴근 18:50 퇴근 알림 19:00 퇴근
마치며..
도전적, 창조적인 업무가 가능
Task Focused 작업 방식으로 전환
꿈깨라!!
사람이 중심이다.
감사합니다.