개요
사전 지식 없이 개발하면서 배우자는 식으로 IDE Eclipse 에서 Dynamic Web Project를 to Convert Maven으로 변경하여 학습을 시작해봤다...
그런데 Maven이란게 빌드 툴이고 편리한게 장점이라는데...또 온라인으로 라이브러리를 관리해주고? 그래서 일단 설치를 하고 진행해봤는데...라이브러리 인덱싱 검색이 안되네??...
구글링해서 설정해주고 이것저것 만져봐도 global repositories에 rebuild indexs 옵션이 생성이 안된다....
정상적으론 central(...) 에서 rebuild indexs 옵션이 떠야하는데 아무리 뭘 해도 안떠!!!
그래서 그냥 maven을 처음부터 학습해보자는 결론에 도달했다...나중에 해결되든 안되든 일단 학습 시작...!!
#1 빌드란?
- 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 다른 말로 프로젝트 생성부터 배포 혹은 레포팅까지 이어지는 작업 과정을 빌드라고 한다.
- 좀 더 쉽게 말하자면 우리가 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties)을 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물이라고 할 수 있다.
여기서 그럼 eclipse 같은 프로그램도 프로젝트 생성, 코드 작업...등이 가능한데 Build Tool이지 않나? 라고 생각할 수도 있는데 프로젝트를 진행할 때 탐색기, 컴파일러, 빌드 도구 등 여러 가지 도구들이 요구됨. 이때 이러한 도구들을 통합한 것이 통합 개발 환경(Integrated Development Environment, IDE) 라고 부른다.
그렇다면 Eclipse에서 프로젝트 만드는 것이 Maven 같은 빌드 도구를 이용한 것일까? 여기에 대한 답은...그럴수도 있고 아닐 수도 있다!!
그렇다면 Maven을 왜 쓰고 왜 더 편리하다고 말할까?? 해당 내용은 점차 풀어쓰면서 내려가겠다.
+ 범위적으로 생각해보면 Build Tool은 빌드 과정에서 프로젝트 생성, 라이브러리 설정... 이런 것들만 담당한다면 IDE는 이보다 더 많은 도구들을 겹할시켜서 만든 더 큰 단위의 도구다. (예를 들어, 코드 편집, 디버깅, 협업 도구 같은....)
#2 빌드 도구(Build tool)
- 빌드 도구란 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램.
- 위의 작업 과정에서 반복되는 내용들을 조금 더 효율적으로 관리해주도록 도와주는 것이 빌드 도구.
- 빠른기간동안 계속해서 늘어나는 라이브러리 추가, 프로젝트를 진행하며 라이브러리의 버전 동기화의 어려움을 해소하고자 등장.
- 초기의 java 빌드도구로 Ant를 많이 사용하였으나 최근 많은 빌드도구들이 생겨나 Maven이 많이 쓰였고, 현재는 Gradle이 많이 쓰인다.
(Ant는 스크립트 작성도 많고, 라이브러리 의존관리가 되지 않아 불편함)
Maven
#1 정의 및 특징
- Maven은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다.
- Maven은 Ant와 마찬가지로 프로젝트의 전체적인 라이프 사이클을 관리하는 도구 이며, 많은 편리함과 이점이 있어 널리 사용되고 있다.
- Maven은 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다.
- Maven은 중앙 저장소를 통한 자동 의존성 관리를 중앙 저장소(아파치재단에서 운영 관리)는 라이브러리를 공유하는 파일 서버라고 볼 수 있고, 메이븐은 자기 회사만의 중앙 저장소를 구축할수도 있다.
- 간단한 설정을 통한 배포 관리가 가능 하다.
좌측은 버전관리 혹은 형상관리 툴이며 가운데는 빌드 툴 우측은 테스트 툴이다.
#2 Ant vs Maven
1. Ant는 비교적 자유도가 높은 편
(Ant : 전처리 / 컴파일 / 패키징 / 테스팅 / 배포 가능)
2. Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함.
(Build Tool + Project Management)