SlideShare una empresa de Scribd logo
1 de 14
TechDay - 1st
Maven을 이용한 프로그램 빌드
박준홍 (jhpark@ymtech.kr)
2017-03-10
목록
1. Maven 이란?
2. 회사 Maven 살펴보기
3. Maven을 이용한 프로젝트 빌드
4. Build plugin을 이용한 빌드 커스터마이징
5. 용어 설명
2
1. Maven 이란?
• 제공 사이트: Apache Maven (http://maven.apache.org)
• 사용자에 따른 의미
– 일반적인 사용자: 소스 코드로부터 배포 가능한 산출물을 생성하는 build tool
– 빌드 엔지니어와 관리자: 보다 용이한 프로젝트 관리 툴
• Ant와의 차이점
– Ant: 전처리, 컴파일, 패키징, 테스팅, 배포 작업이 초점
– Maven: 빌드 기능을 바탕으로 plugin을 이용하여 종합적인 기능 제공
• 빌드 기능과 더불어 보고서 작성, 웹 사이트 생성, 구성원 간의 소통 기능
3
Paclage
Test
Report
Release
Build
• Build
• 소스 코드를 컴파일 한다.
• 테스트 코드를 컴파일 한다.
• 기타 패키지 생성을 위한 바이너리를 생성한다.
• Package
• 배포 가능한 jar, war, exe 파일 등을 생성한다.
• Test
• 단위 테스트(Unit Test) 등을 실행한다.
• 빌드 결과가 정상적인지 점검한다.
• Report
• 빌드/패키지/테스트 결과를 정리하고, 빌드 수행 리포트를 생성한다.
• Release
• 빌드 후 생성된 아티팩트(artifact)를 로컬 혹은 원격 저장소에 저장(배포)한다.
4
• Ant 파일 구조 • Maven POM 파일 구조
1. Maven 이란? (계속)
2. 회사 Maven 살펴보기
• http://maven.ymtech.co.kr/nexus
• Repository
– Public Repository: 라이브러리를 제공하는 최상위 경로
– Central: http://repo1.maven.org/maven2/ 에 연결된 proxy
– 3rd party: com 에서 제공하는 라이브러리를 직접 제공하는 저장소
– Releases/Snapshots: 직접 배포/스냅샷 버전을 제공하는 저장소
• Type
– hosted: 회사 Maven에서 직접 제공하는 형태
– proxy: 외부 Maven Repository에 연결할 수 있는 형태.
5
3. Maven을 이용한 프로젝트 빌드
• 5가지 핵심 개념
– Plugin
• Goal의 집합체, 실행 기능을 수행하는 단위로써 이를 통해서 기능이 확장됨.
• Ant의 Task 또는 Target(?) 과 유사.
• Maven은 여러 개의 Goal을 묶어 Lifecyle phases 만들고 실행. (예: mvn install )
– Lifecycle
• 논리적인 작업 흐름인 단계의 집합.
• 3개의 표준 Lifecycle
– default: 빌드 프로세스용 모델
» compile, test, package, install, deploy, 등
– clean: 산출물 제거
» pre-clean, clean, post-clean
– site: 문서와 사이트 작성
» pre-site, site, post-site, site-deploy
– Dependency
• 라이브러리 다운로드 자동화
• Maven은 선언적 방식이며, 라이브러리를 관리
– Profile
• 서로 다른 환경을 위한 다른 빌드 설정
– POM (Project Object Model)
• 프로젝트 당 하나씩 존재하며, 프로젝트 정보와 dependency 설정 및 정보를 포함한다.
6
4. Build plugin을 이용한 빌드 커스터마이징
Basic
External
Tool
Single file
Executable
Multi file
Executable
Packaged
7
4. Build plugin을 이용한 빌드 커스터마이징 (계속)
• 기본 Maven 빌드 이용하기
– 웹 서비스, 응용 프로그램
• POM
– finalName: 빌드 결과물 파일명 지정
– plugins > plugin > artifactId
• maven-eclipse-plugin
– configuration에 설정된 정보에 따라 수행
– springframework 빌드용
• maven-compiler-plugin
– 소스 컴파일 수행
• maven-source-plugin
– 빌드 결과물에 소스 파일 추가
8
4. Build plugin을 이용한 빌드 커스터마이징 (계속)
• 외부 빌드 툴 연결하기
– maven-antrun-plugin
• POM
– defaultGoal: 결과물을 로컬 장비에 설치
– sourceDirectory/resources: 소스 파일 및 리소스
파일 경로 설정
– plugins > plugin > artifactId
• maven-antrun-plugin
– ant을 이용한 빌드 실행
– build.xml과 goal 설정
– plugins > plugin > dependencies
• 프로젝트용이 아닌 빌드만을 위한 dependencies
설정
9
4. Build plugin을 이용한 빌드 커스터마이징 (계속)
• 독립 실행 버전 생성하기
– 단일파일: libraries 포함
• POM
– plugins > plugin > artifactId
• maven-assembly-plugin
– 외부 설정 파일을 통한 기능 실행
• configuration
– manifest를 통한 실행 클래스 설정
– 컴파일 결과물과 참조 libraries를 하나의 실
행 파일로 생성
10
4. Build plugin을 이용한 빌드 커스터마이징 (계속)
• 독립 실행 버전 생성하기
– 다중파일: 실행파일과 libraries 별도
• POM
– plugins > plugin > artifactId
• maven-jar-plugin
– manifest 를 통한 실행 클래스 설정
– 빌드 결과물 경로 설정
• maven-resources-plugin
– classpath에 포함되지 않는 설정 파일 및 기
타 리소스를 빌드 결과물에 포함
• maven-dependency-plugin
– 참조 libraries을 빌드 결과물에 포함
11
4. Build plugin을 이용한 빌드 커스터마이징 (계속)
• 빌드 생성물을 포함한 배포버전 생성하기
– 소스 컴파일 결과물, 설정파일 및 라이브러리 파일
을 하나의 파일로 생성하여 배포
• POM
– plugins > plugin > artifactId
• maven-assembly-plugin
– 외부 설정파일을 통한 기능 실행
– executions 설정을 통한 실행 대상 설정
12
5. 용어 설명
• Project – 메이븐이 작업을 수행하는 대상
• Pom – 메이븐이 프로젝트를 처리하는 필요한 정보를 제공하는 파일.
• Artifact – 프로젝트에 필요한 jar, war, pom 혹은 다른 것들.
• Dependency – 프로젝트에 필요한 다른 프로젝트에 존재하는 파일들
• Coordinates – 아티팩트(artifact)를 식별하는데 필요한 속성들의 조합.
• Repository – 아티팩트 (artifact) 들이 위치하는(저장된) 장소.
• Lifecycle – 아티펙트(artifact)를 생성하는 절차들의 집합.
• Phase – 라이프사이클을 구성하는 하나 이상의 절차
• Plugin (Mojo) – 확장(추가) 가능한 기능
• Install – 아티펙트를 로컬 디렉토리에 저장하는 행위 ~/.m2/repository
• Deploy – 아티펙트를 로컬 저장소에 저장하는 행위
• Reactor – 의존성을 분석하고, 해결한 후 빌드를 수행하는 프로세스.
13
Q & A
14

Más contenido relacionado

La actualidad más candente

젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleKyunghun Jeon
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포KwangSeob Jeong
 
자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅Yoonsung Jung
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy흥래 김
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core Ji-Woong Choi
 
CLT 소스품질 Jenkins 사용가이드
CLT 소스품질 Jenkins 사용가이드CLT 소스품질 Jenkins 사용가이드
CLT 소스품질 Jenkins 사용가이드jSoboro
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa흥래 김
 
Backend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenBackend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenKyunghun Jeon
 
[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Atlassian JIRA Deep Dive[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Atlassian JIRA Deep DiveJi-Woong Choi
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개태준 문
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE 흥래 김
 
regular.express 발표자료
regular.express 발표자료regular.express 발표자료
regular.express 발표자료bdh92123
 
Firebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
Firebase for Web (웹개발을 위한 파이어베이스) 1 HostingFirebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
Firebase for Web (웹개발을 위한 파이어베이스) 1 Hosting승빈이네 공작소
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
슬로우캠퍼스 - 안드로이드 개발자들이여 Firebase로 날아보자 :)
슬로우캠퍼스 - 안드로이드 개발자들이여  Firebase로 날아보자 :)슬로우캠퍼스 - 안드로이드 개발자들이여  Firebase로 날아보자 :)
슬로우캠퍼스 - 안드로이드 개발자들이여 Firebase로 날아보자 :)마이캠퍼스
 

La actualidad más candente (20)

Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
Maven
MavenMaven
Maven
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포
 
자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
CLT 소스품질 Jenkins 사용가이드
CLT 소스품질 Jenkins 사용가이드CLT 소스품질 Jenkins 사용가이드
CLT 소스품질 Jenkins 사용가이드
 
Maven의 이해
Maven의 이해Maven의 이해
Maven의 이해
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa
 
Backend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenBackend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - Maven
 
[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Atlassian JIRA Deep Dive[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Atlassian JIRA Deep Dive
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
 
regular.express 발표자료
regular.express 발표자료regular.express 발표자료
regular.express 발표자료
 
Firebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
Firebase for Web (웹개발을 위한 파이어베이스) 1 HostingFirebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
Firebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
슬로우캠퍼스 - 안드로이드 개발자들이여 Firebase로 날아보자 :)
슬로우캠퍼스 - 안드로이드 개발자들이여  Firebase로 날아보자 :)슬로우캠퍼스 - 안드로이드 개발자들이여  Firebase로 날아보자 :)
슬로우캠퍼스 - 안드로이드 개발자들이여 Firebase로 날아보자 :)
 

Similar a 20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍

메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdfssuserb942d2
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptxssuserf875e6
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)Amazon Web Services Korea
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술중선 곽
 
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...Amazon Web Services Korea
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous IntegrationDonghyun Seo
 
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxLetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxssuser2601f7
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf정민 안
 
Custom Xcode Template (with VIPER)
Custom Xcode Template (with VIPER)Custom Xcode Template (with VIPER)
Custom Xcode Template (with VIPER)Bongwon Lee
 

Similar a 20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍 (20)

메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
okspring3x
okspring3xokspring3x
okspring3x
 
DevOps Study
DevOps StudyDevOps Study
DevOps Study
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
Spring boot
Spring bootSpring boot
Spring boot
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
 
2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxLetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptx
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
 
Custom Xcode Template (with VIPER)
Custom Xcode Template (with VIPER)Custom Xcode Template (with VIPER)
Custom Xcode Template (with VIPER)
 

Más de ymtech

20171120 tech day-11th-소프트웨어 테스팅2-서현용
20171120 tech day-11th-소프트웨어 테스팅2-서현용20171120 tech day-11th-소프트웨어 테스팅2-서현용
20171120 tech day-11th-소프트웨어 테스팅2-서현용ymtech
 
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중ymtech
 
20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한ymtech
 
20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈ymtech
 
20170519 tech day-3rd-highcharts를 이용한 차트 구현-김영석
20170519 tech day-3rd-highcharts를 이용한 차트 구현-김영석20170519 tech day-3rd-highcharts를 이용한 차트 구현-김영석
20170519 tech day-3rd-highcharts를 이용한 차트 구현-김영석ymtech
 
20170414 techday 2nd_uiux디자인-최민희
20170414 techday 2nd_uiux디자인-최민희20170414 techday 2nd_uiux디자인-최민희
20170414 techday 2nd_uiux디자인-최민희ymtech
 
Mikrotic CCR1036 라우팅 설정
Mikrotic CCR1036 라우팅 설정Mikrotic CCR1036 라우팅 설정
Mikrotic CCR1036 라우팅 설정ymtech
 
Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치ymtech
 
Installation Openstack Swift
Installation Openstack SwiftInstallation Openstack Swift
Installation Openstack Swiftymtech
 
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212Welcome to keystone the open stack identity service_v1.0.0-20141208-1212
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212ymtech
 
Ubuntu Host AP Setting
Ubuntu Host AP SettingUbuntu Host AP Setting
Ubuntu Host AP Settingymtech
 
Intel Galileo Linux Setting
Intel Galileo Linux SettingIntel Galileo Linux Setting
Intel Galileo Linux Settingymtech
 
MarsBoard RK3066 Linux 설치
MarsBoard RK3066 Linux 설치MarsBoard RK3066 Linux 설치
MarsBoard RK3066 Linux 설치ymtech
 
HP 3800-24G-2SFP OpenFlow Setting
HP 3800-24G-2SFP OpenFlow SettingHP 3800-24G-2SFP OpenFlow Setting
HP 3800-24G-2SFP OpenFlow Settingymtech
 
Openstack Instance Resize
Openstack Instance ResizeOpenstack Instance Resize
Openstack Instance Resizeymtech
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migrationymtech
 
SDN OpenFlow Load Balancer 시나리오
SDN OpenFlow Load Balancer 시나리오SDN OpenFlow Load Balancer 시나리오
SDN OpenFlow Load Balancer 시나리오ymtech
 
TR-069 클라이언트 검토자료8편
TR-069 클라이언트 검토자료8편TR-069 클라이언트 검토자료8편
TR-069 클라이언트 검토자료8편ymtech
 
TR-069 클라이언트 검토자료7편
TR-069 클라이언트 검토자료7편TR-069 클라이언트 검토자료7편
TR-069 클라이언트 검토자료7편ymtech
 
TR-069 클라이언트-검토자료6편
TR-069 클라이언트-검토자료6편TR-069 클라이언트-검토자료6편
TR-069 클라이언트-검토자료6편ymtech
 

Más de ymtech (20)

20171120 tech day-11th-소프트웨어 테스팅2-서현용
20171120 tech day-11th-소프트웨어 테스팅2-서현용20171120 tech day-11th-소프트웨어 테스팅2-서현용
20171120 tech day-11th-소프트웨어 테스팅2-서현용
 
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
 
20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한
 
20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈
 
20170519 tech day-3rd-highcharts를 이용한 차트 구현-김영석
20170519 tech day-3rd-highcharts를 이용한 차트 구현-김영석20170519 tech day-3rd-highcharts를 이용한 차트 구현-김영석
20170519 tech day-3rd-highcharts를 이용한 차트 구현-김영석
 
20170414 techday 2nd_uiux디자인-최민희
20170414 techday 2nd_uiux디자인-최민희20170414 techday 2nd_uiux디자인-최민희
20170414 techday 2nd_uiux디자인-최민희
 
Mikrotic CCR1036 라우팅 설정
Mikrotic CCR1036 라우팅 설정Mikrotic CCR1036 라우팅 설정
Mikrotic CCR1036 라우팅 설정
 
Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치
 
Installation Openstack Swift
Installation Openstack SwiftInstallation Openstack Swift
Installation Openstack Swift
 
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212Welcome to keystone the open stack identity service_v1.0.0-20141208-1212
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212
 
Ubuntu Host AP Setting
Ubuntu Host AP SettingUbuntu Host AP Setting
Ubuntu Host AP Setting
 
Intel Galileo Linux Setting
Intel Galileo Linux SettingIntel Galileo Linux Setting
Intel Galileo Linux Setting
 
MarsBoard RK3066 Linux 설치
MarsBoard RK3066 Linux 설치MarsBoard RK3066 Linux 설치
MarsBoard RK3066 Linux 설치
 
HP 3800-24G-2SFP OpenFlow Setting
HP 3800-24G-2SFP OpenFlow SettingHP 3800-24G-2SFP OpenFlow Setting
HP 3800-24G-2SFP OpenFlow Setting
 
Openstack Instance Resize
Openstack Instance ResizeOpenstack Instance Resize
Openstack Instance Resize
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
 
SDN OpenFlow Load Balancer 시나리오
SDN OpenFlow Load Balancer 시나리오SDN OpenFlow Load Balancer 시나리오
SDN OpenFlow Load Balancer 시나리오
 
TR-069 클라이언트 검토자료8편
TR-069 클라이언트 검토자료8편TR-069 클라이언트 검토자료8편
TR-069 클라이언트 검토자료8편
 
TR-069 클라이언트 검토자료7편
TR-069 클라이언트 검토자료7편TR-069 클라이언트 검토자료7편
TR-069 클라이언트 검토자료7편
 
TR-069 클라이언트-검토자료6편
TR-069 클라이언트-검토자료6편TR-069 클라이언트-검토자료6편
TR-069 클라이언트-검토자료6편
 

20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍

  • 1. TechDay - 1st Maven을 이용한 프로그램 빌드 박준홍 (jhpark@ymtech.kr) 2017-03-10
  • 2. 목록 1. Maven 이란? 2. 회사 Maven 살펴보기 3. Maven을 이용한 프로젝트 빌드 4. Build plugin을 이용한 빌드 커스터마이징 5. 용어 설명 2
  • 3. 1. Maven 이란? • 제공 사이트: Apache Maven (http://maven.apache.org) • 사용자에 따른 의미 – 일반적인 사용자: 소스 코드로부터 배포 가능한 산출물을 생성하는 build tool – 빌드 엔지니어와 관리자: 보다 용이한 프로젝트 관리 툴 • Ant와의 차이점 – Ant: 전처리, 컴파일, 패키징, 테스팅, 배포 작업이 초점 – Maven: 빌드 기능을 바탕으로 plugin을 이용하여 종합적인 기능 제공 • 빌드 기능과 더불어 보고서 작성, 웹 사이트 생성, 구성원 간의 소통 기능 3 Paclage Test Report Release Build • Build • 소스 코드를 컴파일 한다. • 테스트 코드를 컴파일 한다. • 기타 패키지 생성을 위한 바이너리를 생성한다. • Package • 배포 가능한 jar, war, exe 파일 등을 생성한다. • Test • 단위 테스트(Unit Test) 등을 실행한다. • 빌드 결과가 정상적인지 점검한다. • Report • 빌드/패키지/테스트 결과를 정리하고, 빌드 수행 리포트를 생성한다. • Release • 빌드 후 생성된 아티팩트(artifact)를 로컬 혹은 원격 저장소에 저장(배포)한다.
  • 4. 4 • Ant 파일 구조 • Maven POM 파일 구조 1. Maven 이란? (계속)
  • 5. 2. 회사 Maven 살펴보기 • http://maven.ymtech.co.kr/nexus • Repository – Public Repository: 라이브러리를 제공하는 최상위 경로 – Central: http://repo1.maven.org/maven2/ 에 연결된 proxy – 3rd party: com 에서 제공하는 라이브러리를 직접 제공하는 저장소 – Releases/Snapshots: 직접 배포/스냅샷 버전을 제공하는 저장소 • Type – hosted: 회사 Maven에서 직접 제공하는 형태 – proxy: 외부 Maven Repository에 연결할 수 있는 형태. 5
  • 6. 3. Maven을 이용한 프로젝트 빌드 • 5가지 핵심 개념 – Plugin • Goal의 집합체, 실행 기능을 수행하는 단위로써 이를 통해서 기능이 확장됨. • Ant의 Task 또는 Target(?) 과 유사. • Maven은 여러 개의 Goal을 묶어 Lifecyle phases 만들고 실행. (예: mvn install ) – Lifecycle • 논리적인 작업 흐름인 단계의 집합. • 3개의 표준 Lifecycle – default: 빌드 프로세스용 모델 » compile, test, package, install, deploy, 등 – clean: 산출물 제거 » pre-clean, clean, post-clean – site: 문서와 사이트 작성 » pre-site, site, post-site, site-deploy – Dependency • 라이브러리 다운로드 자동화 • Maven은 선언적 방식이며, 라이브러리를 관리 – Profile • 서로 다른 환경을 위한 다른 빌드 설정 – POM (Project Object Model) • 프로젝트 당 하나씩 존재하며, 프로젝트 정보와 dependency 설정 및 정보를 포함한다. 6
  • 7. 4. Build plugin을 이용한 빌드 커스터마이징 Basic External Tool Single file Executable Multi file Executable Packaged 7
  • 8. 4. Build plugin을 이용한 빌드 커스터마이징 (계속) • 기본 Maven 빌드 이용하기 – 웹 서비스, 응용 프로그램 • POM – finalName: 빌드 결과물 파일명 지정 – plugins > plugin > artifactId • maven-eclipse-plugin – configuration에 설정된 정보에 따라 수행 – springframework 빌드용 • maven-compiler-plugin – 소스 컴파일 수행 • maven-source-plugin – 빌드 결과물에 소스 파일 추가 8
  • 9. 4. Build plugin을 이용한 빌드 커스터마이징 (계속) • 외부 빌드 툴 연결하기 – maven-antrun-plugin • POM – defaultGoal: 결과물을 로컬 장비에 설치 – sourceDirectory/resources: 소스 파일 및 리소스 파일 경로 설정 – plugins > plugin > artifactId • maven-antrun-plugin – ant을 이용한 빌드 실행 – build.xml과 goal 설정 – plugins > plugin > dependencies • 프로젝트용이 아닌 빌드만을 위한 dependencies 설정 9
  • 10. 4. Build plugin을 이용한 빌드 커스터마이징 (계속) • 독립 실행 버전 생성하기 – 단일파일: libraries 포함 • POM – plugins > plugin > artifactId • maven-assembly-plugin – 외부 설정 파일을 통한 기능 실행 • configuration – manifest를 통한 실행 클래스 설정 – 컴파일 결과물과 참조 libraries를 하나의 실 행 파일로 생성 10
  • 11. 4. Build plugin을 이용한 빌드 커스터마이징 (계속) • 독립 실행 버전 생성하기 – 다중파일: 실행파일과 libraries 별도 • POM – plugins > plugin > artifactId • maven-jar-plugin – manifest 를 통한 실행 클래스 설정 – 빌드 결과물 경로 설정 • maven-resources-plugin – classpath에 포함되지 않는 설정 파일 및 기 타 리소스를 빌드 결과물에 포함 • maven-dependency-plugin – 참조 libraries을 빌드 결과물에 포함 11
  • 12. 4. Build plugin을 이용한 빌드 커스터마이징 (계속) • 빌드 생성물을 포함한 배포버전 생성하기 – 소스 컴파일 결과물, 설정파일 및 라이브러리 파일 을 하나의 파일로 생성하여 배포 • POM – plugins > plugin > artifactId • maven-assembly-plugin – 외부 설정파일을 통한 기능 실행 – executions 설정을 통한 실행 대상 설정 12
  • 13. 5. 용어 설명 • Project – 메이븐이 작업을 수행하는 대상 • Pom – 메이븐이 프로젝트를 처리하는 필요한 정보를 제공하는 파일. • Artifact – 프로젝트에 필요한 jar, war, pom 혹은 다른 것들. • Dependency – 프로젝트에 필요한 다른 프로젝트에 존재하는 파일들 • Coordinates – 아티팩트(artifact)를 식별하는데 필요한 속성들의 조합. • Repository – 아티팩트 (artifact) 들이 위치하는(저장된) 장소. • Lifecycle – 아티펙트(artifact)를 생성하는 절차들의 집합. • Phase – 라이프사이클을 구성하는 하나 이상의 절차 • Plugin (Mojo) – 확장(추가) 가능한 기능 • Install – 아티펙트를 로컬 디렉토리에 저장하는 행위 ~/.m2/repository • Deploy – 아티펙트를 로컬 저장소에 저장하는 행위 • Reactor – 의존성을 분석하고, 해결한 후 빌드를 수행하는 프로세스. 13

Notas del editor

  1. Plugin 메이븐(Maven)은 플러그인 실행 프레임워크이다. 메이븐의 플러그인 메커니즘에 의해 기능이 확장된다. (모든 작업은 플러그인이 수행한다) 플러그인은 다른 산출물(artifacts)와 같이 저장소에서 관리된다. 모조(Mojo) = 메이븐 Commands Goals 메이븐은 여러 가지 플러그인으로 구성되어 있으며, 각각의 플러그인은 하나 이상의 goal (명령, 작업)을 포함하고 있다. Phase 단계(phase)는 논리적인 개념이며, 실질적인 작업을 수행하는 것은 각각의 단계에 연결(associate) 플러그인 goal 이다. 패키지 타입(package type : jar, war, ear 등)에 따라 각 단계에서 수행되는 goal이 달라질 수 있다. default 라이프사이클은 jar 를 생성하는 작업들을 수행하며, 다음과 같은 goal 들로 구성된다 Dependency 라이브러리 다운로드 자동화 더 이상 필요한 (의존성 있는) 라이브러리를 하나씩 다운로드 받을 필요가 없다. 메이븐은 선언적 (명령식이 아니다) : 사용되는 jar 파일들을 어디서 다운로드 받고, 어느 릴리즈(버전)인지 명시하면, 메이븐이 알아서 관리한다. (재 다운로드, 최신 버전 설치 등) 메이븐이 관리한다. (Eclipse plugin) 라이브러리 (lib) 디렉터리를 생성할 필요가 없다. Profile 서로 다른 대상 환경(target environment)를 위한 다른 빌드 설정 – 다른 운영체제 – 다른 배포 환경 동작 방식 (Activation) – -P 명령행 실행환경(CLI) 옵션 – 환경 변수(environment variable) 기반… 메이븐은 정상 절차(step) 이외에 프로파일을 위한 절차를 추가로 수행한다.