[빌드툴] Maven

2020. 5. 13. 15:44TIL/웹

스프링을 통해 개발을 하다 보면 메이븐 또는 그레이들을 빌드툴로 사용하는 경우가 많을 것이다.

나 또한 강의를 들으며 스프링을 접해보았는데, 빌드 툴을 사용하지 않는 경우는 없었다.

그 중 가장 먼저 사용해 보았던 maven에 대해 정리해 보았다.

뉴렉처 님의 maven강의를 수강하고 그것을 기반으로 정리한 내용이다.

 

1.  메이븐은 빌드 툴이다.

메이븐은 개발을 하는데 있어서 빌드를 대신 해주는 빌드툴이다.

나는 이 부분에서 빌드가 무엇을 의미하는지 먼저 정리해 보았다.

나는 아주 무지할때 컴파일과 빌드가 별개의 작업이라 생각한 적이 있다. 

그때와 나같은 사람을 위해 간략하게 컴파일과 빌드에 대해 적어보았다.

컴파일?

컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정이라고 할 수 있다. 

즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업인데 이 과정에서 '목적파일이 생성된다'

앞전에 JVM에대해 정리하면서 .java파일이 .class파일로 변경되었던 바로 그 과정이다.

빌드?

소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정을 뜻한다고 할 수 있겠다.

빌드의 여러 단계 중 컴파일이 포함되어있는데, 컴파일이 이루어져야 빌드에 도달할 수 있다고 이해하면 되겠다.

그렇다면 빌드툴이란?

일반적으로 빌드 툴은 전처리, 컴파일, 패키징, 테스팅, 배포의 기능을 갖춤으로서 이와 같은 과정을 처리해준다.

이러한 빌드툴은 여러 IDE에서 사용된다.

git이 버전관리를 위한 도구이고, junit이 테스트를 위한 도구 인거처럼 maven은 빌드 도구중 하나인 것이다.

 

2. 메이븐 설치

maven.apache.org에서 다운로드할 수 있다. (binary zip 파일)

 

3. mvn 실행

이 부분부터는 maven을 사용하는 내용이다. 

뉴렉처님의 maven강의를 참고하였다. 

2번에서 설치한 파일이 있는 곳에 터미널을 위치시킨 다음 mvn을 실행해야 한다.

이때, 환경변수를 설정해줘야 하는데

환경변수는 간단히 말해서 어떤 프로그램을 실행시킬때 탐색되는 곳을 지정해주는 것이다.

이 환경변수 path에 등록이 되어야만 해당 장소를 탐색하여 실행파일을 실행시켜준다.

환경변수는 vi .bash_profile을 실행하여 등록해줄 수 있고

source .bash_profile로 적용시켜줄 수 있다.

주의할 점은 환경변수 PATH를 설정할때 '='의 앞뒤로 띄어쓰기를 해주지 말아야 한다는 것!

 

4. Maven으로 자바 프로젝트 생성하기

위와 같은 명령어를 통해 자바 프로젝트를 생성할 수 있다.

mvn archtype으로 프로젝트를 생성하면 하나의 템플릿처럼 사용 될 수 있게 된다.

 

5. 메이븐 프로젝트 컴파일 및 실행시키기

메이븐으로 생성한 프로젝트를 컴파일 할때는 커맨드 명령어를 사용한다.

 

컴파일

먼저, 생성한 프로젝트의 pom.xml이 있는곳에 터미널을 위치시킨 후 mvn compile을 통해 컴파일 해줄 수 있다.

이때 plug-in version문제가 발생할 수 있는데, pom.xml의 properties태그를 통해 버전을 업데이트 시켜줌으로서 해결할 수 있다. 

 

패키지

pom.xml이 있는곳에 터미널을 위치시킨 후,  mvn package를 해준다.

 

실행

메이븐으로 생성된 프로젝트를 실행하는 방법에는 두가지가 있다.

1) 컴파일을 통해 생성된 class파일을 실행

2) 패키지를 통해 생성된 .jar파일을 실행

jar파일은 zip파일인데, 이 안에 class파일이 포함되어 있다.

jar파일을 실행하는 방법은 pom.xml이 있는 곳에 터미널을 위치시키고

java -cp target/"jar파일명" 그룹id.APP

위와같은 명령을 통해 실행할 수 있다.

 

6. 메이븐 build LifeCycle과 Phase들

compile, test, package는 수행 단계를 나타낸다.

Goal : 메이븐이 행할 수 있는 여러가지 동작을 수행하는 명령어들을 goal이라고 부른다. (plug-in의 일부)

phase로 실행단계가 모두 정해져있고 해당 명령어는 그 전의 실행단계들을 모두 포함하여 실행한다.

예) package는 compile, test보다 더 늦게 phase로 지정되어있기때문에 mvn package를 실행하면

compile과 test과정을 모두 포함하여 실행되게 된다.

이렇게 기능의 단계를 나눔으로서, 필요에 따라 빼고 넣는것이 편리해지게 된다.

위와 같이 각 단계에 대해 플러그인을 통해 쉽게 기능을 넣고 뺄 수 있다는 것이 메이븐의 장점이지만,

편집과 디버그가 힘들기 때문에 IDE와 함께 사용해야 매우 효과적일 수 있다.

(이클립스에서 maven project를 import해서 사용)

 

7. 웹 프로젝트로 변경하기

이클립스에서 만든 자바프로젝트를 웹 프로젝트로 바꾸려고 하면 여러가지 설정을 바꿔주어야 하고,

빼먹은 것이 생길 경우 동작하지 않게 된다.

maven에서는 packaging을 jar에서 war로만 바꾸어주면 여러 과정들을 알아서 바꾸어줌으로서

빼먹는 것 없이 웹 프로젝트의 구조로 바꾸어 준다.

이때, 변경사항이 있을 경우 maven>>update project를 해주어야 적용이 된다.

웹 프로젝트로 변경했을 경우에는 web.xml을 만들어 주어야 오류가 나지 않는다.

 

8. 서블릿/JSP 라이브러리 설정하기

1) 프로젝트의 build path설정하는 곳에 가서 Libraries 가서 Add library

(tomcatadd해주면 tomcatjsp/servlet을 품고있기 때문에 사용할 수 있게 된다.)

하지만 위와같이 프로젝트를 설정하면 절대경로가 다른 두 컴퓨터에서 프로젝트를 진행하는데에 매우 번거로움이 발생한다.

2) 따라서, maven에서는 pom.xmldependency를 이용하여 설정한다.

3) maven repository에 가면 많은 api및 프로젝트들이 저장되어 있다.

4) 위에서 필요한 라이브러리를 클릭하면 추가할 dependency 가 명시되어있고

이것을 복사하여 pom.xmldependencies안에 넣어주면 된다.

 

9. 라이브러리 오류 문제

1) finder.m2폴더 여는방법

터미널에  open ~/.m2

2) 이클립스에서 라이브러리를 열어봐서 내용이 없으면 라이브러리가 깨진것이다.

3) .m2 >> org >> repository 안의 내용들을 모두 지운다.(이때 repository를 지우면 안된다.)

4) 이후에 이클립스를 껐다가 다시 키면 지웠던 내용들을 다시 다운받아 준다. (무엇이 꺠진지 모르지만 모두 다시 다운받아주므로 꺠졌던것도 생기게됨)

 

10. 내가 만든 라이브러리 설치하기

1) 프로젝트를 export해주고, local repository에 저장해야한다.

2) run as >> maven install을 해주면 위와같은 과정을 해준다.

3) 이 프로젝트를 사용할 프로젝트의 pom.xml에서 dependencies를 추가해준다.

( local repositoryrebuild해줘야 검색될 것임)

4) 라이브러리가 사용되려면 local repository에 저장되있어야한다.

5) 남들이 내가만든것을 사용하려면 내 프로젝트를 deploy하여

central repository에 등록하고

사람들이 이 central repository로부터 나의 라이브러리를 자신들의 local repository로 옮겨서 사용할 수 있게 되는것이다.

'TIL > ' 카테고리의 다른 글

[웹] 빌드와 배포  (1) 2020.06.19
[웹] REST  (0) 2020.05.18
[웹] MVC 패턴  (0) 2020.05.18
[서버] 웹서버와 WAS  (3) 2020.05.07
[서버] 서버개발의 의미  (3) 2020.04.27