[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java ProjectJi-Woong ChoiThis document explains how to use gradle in Java project. It contains a real sample build file using Spring MVC project which is using education example in OSC.
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huhhttps://github.com/JM-Lab/jm-spring-boot-init
http://jmlab.tistory.com/42 - only in korean
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)Amazon Web Services Korea이번 월간 웨비나에서는 AWS 클라우드를 통해 어떻게 손쉽게 소프트웨어를 개발하고, 배포하는 과정을 자동화 할 수 있는지를 알아 봅니다. 이를 위해 Amazon.com의 소프트웨어 개발 과정 상의 경험과 이를 토대로 만들어진 AWS CodeDeploy와 CodePipeline 서비스를 소개해 드리고, 이를 통해 EC2 인스턴스 뿐만 아니라 기존 서버에 손쉽게 배포하는 방법을 알려드립니다. 본 세션을 통해 클라우드를 통한 민첩하고 빠른 개발 및 배포를 통해 진화된 데브옵스(DevOps) 프로세스를 정립할 수 있는 방법을 안내해 드립니다.
Source To URL Without DockerfileWon-Chon JungThis slide introduce build container images without dockerfile and run container on kubernetes without deployment.yaml
[IoT] MAKE with Open H/W + Node.JS - 3rdPark JonggunIoT 시대에 Opensource H/W 와 NodeJS 를 이용하여 누구나 나만의 H/W + S/W + Service 를 만들기 위한 교육 과정을 만들어 보았습니다.
상상했던 아이디어를 Raspberry Pi 기반으로 나만의 IoT 제품을 현실로 만들어 보세요.
Lesson 1 - Introduction : IoT개요, Opensource H/W, 라즈베리파이 기초
Lesson 2 - Linux : Raspberry Pi 에서 리눅스 활용하기
Lesson 3 - Node.JS : Raspberry Pi 에서 Node.JS 로 프로그래밍 하기
Lesson 4 - Sensor : GPIO 를 Node.JS 로 동작시켜 센서 제어하기
Lesson 5 - Project : Raspberry Pi 로 스마트폰 + 무선 IoT 오디오 제작
챕터가 완성되는대로 추가적으로 공유하겠습니다.
Circulus Site - http://www.circul.us
Circulus Group - http://group.circul.us
2. 진행 순서
• Maven의 이해
• Simple Weather Project 작성 실습
• Multi Module Project 작성 실습
3. What is Maven?
• 프로젝트의 생산성 향상
• 가시성 향상
• 프로젝트 관리 및 이해 도구
– Builds
– Documentation
– Reporting
– Dependencies
– SCMs
– Releases
– Distribution
4. Maven's Objectives
• 빌드 프로세스를 쉽게
• 균일한 빌드 시스템 제공
– POM(Project Object Model)과 플러그인 세트
• 양질의 프로젝트 정보 제공
– Change log, Cross ref. sources, Dependency
list, Unit test reports
• 개발을 위한 Best practice 가이드라인 제공
5. What is Maven Not?
• Maven is a site and documentation tool
• Maven extends Ant to let you download
dependencies
• Maven is a set of reusable Ant scriptlets
6. Ant 와의 비교
<project name="my-project" default="dist" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src/main/java"/>
<property name="build" location="target/classes"/>
<property name="dist" location="target"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file
-->
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar"
basedir="${build}"/>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>my-project</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
A simple Ant build.xml File
A simple Maven pom.xml File
7. Ant 와의 비교(계속)
• Apache Ant
– 공통적인 프로젝트 디렉토리 구조와 같은 공식
적인 관례가 없음. 소스 위치와 산출물 위치 지
정 필요.
– 절차적. “컴파일하고 복사하고 압축한다” 같은
지시를 해야 함.
– Goal과 goal의 디펜던시를 정의할 수 있는 라
이프사이클이 없음.
8. Ant 와의 비교 (계속)
• Apache Maven
– 관례를 가짐. 소스는 어디에 있는지, 바이트코
드는 target/classes, target에 jar 생성
– 선언적. Pom.xml 파일 생성 후 기본 디렉토리
에 소스를 위치하면 나머지는 maven이 알아서
함
– 라이프사이클을 가짐. mvn install을 실행하면
라이프사이클이 완료될 때 까지 연속적으로 단
계를 실행함.
9. First Maven Project
$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -
DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
$ cd my-app
$ mvn install
$ java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
프로젝트 생성
프로젝트 빌드와 패키징
프로젝트 실행
12. CoC(Convention over
Configuration)
• 시스템, 라이브러리, 프레임워크는 별도의 설
정 없이 „바로 실행‟될 수 있어야 한다
• EJB의 복잡한 설정에 대항하여 Ruby on Rails,
EJB3등과 같이 „바로 실행‟원칙을 바탕으로
시작됨
• 개발자는 어플리케이션에서 관습적이지 않은
면만 정의할 필요가 있다
• 수많은 설정에서 개발자를 해방
• Ruby on Rails, Grails, Spring, JUnit, Jboss
Seam, CakePHP, …
13. Conceptual Model of a "Project"
• 의존성 관리
– 그룹 식별자, 산출물 식별자, 버전으로 구성된 중복되지 않
은 코디네이트들을 프로젝트에 적용
• 원격 저장소
– 의존성 관리와 관련한 메이븐 산출물들의 저장소
• 빌드 로직의 전역적인 재사용
– 플러그인 동작 시 외부 파일 참조하지 않음
• 툴에 대한 이식성과 통합
– 이클립스, 넷빈즈, IntelliJ 같은 툴의 프로젝트 정보 표준화
• 프로젝트 산출물의 쉬운 검색과 필터링
– 넥서스(Nexus)와 같은 툴은 POM안의 정보 저장소를 사용
하여 저장소의 내역들을 인덱스하고 검색을 허용함
15. POM
• POM Relationships
– 다른 프로젝트와의 의존성 정의. 코디네이트 정의. 부
모, 서브 모듈 정의.
• General project information
– 프로젝트 이름, URL, 조직, 개발자, 기여자, 라이선스
• Build settings
– Maven build 커스터마이징. 소스, 테스트 코드 위치 변
경. 플러그인 추가, 플러그인 goal을 라이프사이클에
지정
• Build environment
– Development, Production 등의 프로파일 정의
16. Super POM
• 모든 maven 프로젝트
는 묵시적으로 Super
POM을 상속 받음
– http://maven.apache.or
g/guides/introduction/in
troduction-to-the-
pom.html#Super_POM
근간이 되는 Super POM
17. Effective POM
• Super POM, 부모 POM과의 조합에 의해
실제로 동작하는 POM이 된다.
$ mvn help:effective-pom
18. Plugins and Goals
• Maven은 실제로 Maven
Plugin들의 핵심
framework 일 뿐이다
• Compile, jar 생성 등의 실
제 액션은 모두 plugin이
담당함
• Plugin은 하나 이상의
goal들의 집합임
• Goal은 작업의 단위
• $mvn pluginId:goalId
20. Maven Lifecycle(계속)
$ mvn resources:resources
compiler:compile
resources:testResources
compiler:testCompile
surefire:test
jar:jar
install:install
각 단계가 실행될 때 연결되는 goal
$ mvn install 과 동일한 결과
25. Maven 중앙 저장소 검색
• http://mvnrepository.com
• http://search.maven.org/
26. Maven의 의존성 관리
• pom.xml의 <dependencies> 에서 설정
• 의존성 전이(transitive dependency)
– 1. A -> B
– 2. B -> A 관계가 없다
– 3. B -> C
– A와 C는 직접적인 연관관계가 없지만 함수 종속이
발생하여 A -> C라는 의존성 전이가 성립
• 프로젝트에서 직접적으로 사용하는 라이브러
리의 의존성만 정의하면 나머지 의존성은
maven이 묵시적으로 추가함
27. Maven의 의존성 관리(계속)
$ mvn dependency:resolve
$ mvn dependency:tree
의존성 목록 확인
의존성 관계 구조 확인
$ mvn dependency:analyze
의존성 분석 : 바이트 코드 분석을 통해 의존성 문제 제시
- 사용되었지만 정의 되지 않은 의존성
- 사용되지 않았지만 정의된 의존성
29. 의존성 충돌 해결
• 다른 프로젝트의 의존성 전이를 제거
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.5.ga</version>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jta_1.1_spec</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
의존성 전이 배제와 교체
30. 의존성 Scope
• compile
– 기본 스코프. 모든 상황에서 classpath에 추가되며 패키지에 포함된다.
• provided
– Compile시에는 classpath에 포함되지만. 패키지에 포함되지 않는다.
– Servlet API JAR 같은 경우
• runtime
– Runtime시에만 필요한 경우
– JDBC Driver 같은 경우
• test
– 테스트 컴파일과 실행 시 만 동작
• system
– 로컬 파일의 jar 경로 지정 필요
– 패키지에 포함되지 않는다
– 이 스코프는 권장되지 않는다. Public 혹은 커스텀 메이븐 저장소에서 디
펜던시를 참조하도록 노력하자.
32. 사이트 생성과 리포팅
• 프로젝트 문서와 리포트 생성
• target/site 디렉토리에 결과물 생성
• Site descriptor 수정을 통해 레이아웃을 정
의할 수 있음
– src/site/site.xml
• http://maven.apache.org/guides/mini/guide
-site.html
$ mvn site
$ mvn site:run
33. Archetype
• Maven 프로젝트 템플릿 툴킷
• “원래 모델이나 형태를 따르는 다른 유사한 것을 패
턴화한 것(프로토타입)”
• 간단한 스윙 어플리케이션에서 복잡한 웹 어플리케
이션에 이르기 까지 수많은 archetype을 활용할 수
있다.
• 표준 프레임워크와 의존 관계가 있는 라이브러리
• 프로젝트에 공통으로 필요한 설정 파일
• 표준 프레임워크 기반으로 작성한 샘플 소스
• 사내 저장소에 프로젝트 아키타입 생성 및 배포
$ mvn archetype:generate
36. Multi Module Project
• http://www.sonatype.com/books/mvnex-
book/reference/multimodule.html
simple-parent
simple-weather simple-webapp
Super POM 상속
모듈
37. Multi Module Enterprise Project
• http://www.sonatype.com/books/mvnex-
book/reference/multimodule-web-spring.html
38. Maven 활용 계획
• Cygnus modularity
– Sub project
– Library
– Project를 나누어 개발한 후 제품 패키징
• OSGi Bundle
– Maven을 통한 feature install
• 프로젝트 사이트 문서화
39. Challenges
• 빌드 프로파일
– http://www.sonatype.com/books/mvnref-book/reference/assemblies.html
– http://gt1000.tistory.com/entry/Maven-8%EC%9E%A5-
%EB%A9%94%EC%9D%B4%EB%B8%90-
%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC-
%EB%B0%B0%ED%8F%AC
• Maven 어셈블리
– http://www.sonatype.com/books/mvnref-book/reference/assemblies.html
• POM 최적화 및 리팩토링
– http://www.sonatype.com/books/mvnex-book/reference/optimizing.html
• Maven 사내 저장소 설치 및 활용
– http://gt1000.tistory.com/entry/Maven-11%EC%9E%A5-
%EB%A9%94%EC%9D%B4%EB%B8%90-%EC%82%AC%EB%82%B4-
%EC%A0%80%EC%9E%A5%EC%86%8C-%EC%84%A4%EC%B9%98-
%EB%B0%8F-%ED%99%9C%EC%9A%A9
• Site 생성
– http://www.sonatype.com/books/mvnref-book/reference/site-generation.html
40. References
• Maven by Example
– http://www.sonatype.com/books/mvnex-
book/reference/
• Maven: The Complete Reference
– http://www.sonatype.com/books/mvnref-
book/reference/
• Developing with Eclipse and Maven
– http://www.sonatype.com/books/m2eclipse-
book/reference/
• 자바 세상의 빌드를 이끄는 메이븐
– http://gt1000.tistory.com/category/maven