본문 바로가기
Security & IT terms

[Day 331] Maven, Nexus, Jenkins

by minimalist_2022 2022. 2. 3.

메이븐(Maven)

자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴(build tool)
[출처] https://jeong-pro.tistory.com/168 

메이븐을 사용하는 이유

스프링이 나온 초기, 자바 빌드 도구가 없을 때는 웹 프로젝트를 생성한 후 직접 스프링 기능에 필요한 라이브러리를 다운로드하여 사용했는데, 스프링 버전이 자주 업데이트됨에 따라 불편함이 따랐다.
업데이트할 때마다 관련 기능의 라이브러리를 일일이 수정해야 했고, 라이브러리의 기능 사용법이 달라지면 소스도 같이 수정해주어야 했기 때문이다.
빌드 + 자동 라이브러리 관리 기능이 추가된 Maven이 등장했다.
Maven은 라이브러리를 자동으로 추가 및 관리해주고, 라이브러리 버전을 자동으로 동기화해준다.
요즘은 Gradle로 넘어가는 추세인 것 같다. Gradle은 안드로이드 앱을 만들 때 필요한 공식 빌드시스템이다.
[출처] https://sweeteuna.tistory.com/110

Nexus

Nexus는 메이븐에서 사용할 수 있는 사설 Repository
외부에서 dependency를 수고를 덜고, local nexus(cache)로 사용함으로써 빠르게 라이브러리를 끌어올 수 있고, 개발팀에서 사용하는 공용 라이브러리를 local nexus에 배포해서 팀간에 공유할 수 있다.

사설 리포지토리(Nexus Repository) 사용 목적

=> 개발팀에서 사용하는 공통 라이브러리를 관리하기 위함
· 회사/단체의 화이트 리스트로 인해 외부 리포지토리에 접속하기 어려운 경우 프록시 역할.
· 특히나 비상시 외부 인터넷이 느리거나 리포지토리가 다운되는 등 여러 상황에서도 빠르게 받을 수 있다.
· 현재 메이븐에 올라와 있지 않은 자료들을 효율적으로 관리하기 위하여.
· 한번 다운로드 받은 디펜던시는 로컬에 저장되지만 컴퓨터를 포맷하거나 동료가 시작할 때 설정을 해야한다.
· 서버에도 동일한 설정들을 해줘야함으로 서버 구조가 복잡할 수록 잔업도 늘어난다.
· 예외 파일로 인한 설정이 줄어들어 전체적인 일관성이 증가한다.
· 개발팀에서 사용하는 공통 라이브러리들을 공유한다.
· 특정 솔루션을 사용하기 위한 3rd Party 라이브러리의 관리
[출처] https://m.blog.naver.com/qhdqhdekd261/221827574154

Jenkins란?

빌드 자동화 툴
젠킨스는 지속적인 통합, 즉 프로젝트 빌드, 테스트 실행, 배포 등의 통합을 자동화
젠킨스는 Maven, Ant, Gradle, Junit, Nexus와 잘 작동하며, Git, SVN과 같은 형상 관리 툴을 지원

젠킨스의 대표적인 기능

1. 대쉬보드 제공
- 여러가지 배포 작업의 상황을 모니터링 할 수 있습니다

2. 배포 스크립트를 실행해주기
- 배포 스크립트를 개발자 로컬에서도 실행 할 수 있는데 젠킨스라는 프로그램을 띄워놓으면 스케쥴링을 해줍니다

[출처] https://krksap.tistory.com/1377

Jenkins로 CI를 하는 과정

1) 각 개발자들은 깃헙에서 코드를 공유합니다.
2) Jenkins는 깃헙에서 코드를 가져와서 오류를 체크합니다.
3) 그리고 의존 관계에 있는 라이브러리들을 다운 받습니다.
4) 테스트 코드가 있으면 테스트를 실행합니다.
5) 테스트에 성공할 경우, 빌드를 해서 실서버에 재배포 합니다.
Jenkins는 빌드, 테스트, 배포 등을 직접 실행하는 것이 아니라, 빌드, 테스트, 배포를 실행시키는 역할을 할 뿐입니다.
즉, work flow를 제어하는 것이지, 소스를 가져오거나 Maven을 직접 실행하는게 아니라는 것입니다.
[출처] https://victorydntmd.tistory.com/229

 

지속적인 통합 ( CI, Continuous Integration ) - Jenkins

1. 젠킨스 소개 젠킨스는 지속적인 통합 및 배포를 위한 방법을 제공합니다. 젠킨스의 모태인 허든슨을 개발한 가와구치는 개발 작업에서 빌드가 깨지는 것에 질려서, 코드를 repository에 커밋하

victorydntmd.tistory.com