Maven (Back End)
2020. 4. 6. 11:27ㆍToday I learned/Online Courses
사이트: edwith
강의: [부스트코스] 웹 프로그래밍 챕터 2, DB 연결 웹 앱
학습일: 2020년 4월 3일
9. Maven - BE
Maven이란?
- 어플리케이션을 개발하기 위해 반복적으로 진행되는 작업들을 지원하기 위해 등장한 도구
- 빌드(Build), 패키징, 문서화, 테스트, 테스트 리포팅, git, 의존성 관리, SVN 등의 형상관리서버 연동(SCMs), 배포 등의 작업을 쉽게 할 수 있도록 해줌
- CoC(Convention over Configuration)에 대한 이해가 필요
- CoC: 프로그램의 소스파일의 위치, 컴파일된 파일의 위치 등에 대한 일종의 관습
- CoC에 익숙하면 Maven을 유용하게 쓸 수 있지만 익숙하지 않으면 일종의 진입장벽으로 느껴질 수 있음
- Maven에 익숙해진다는 것은 CoC에 익숙해진다는 것과 같음
- 참고자료: Maven - Introduction
Maven을 사용할 경우 얻게 되는 이점
- Maven을 사용할 경우 편리한 점이 많음
- 편리한 의존성 라이브러리 관리
- 기존 방식으론 라이브러리를 적용하려면 파일을 다운로드해 '/WEB-INF/lib' 폴더에 넣어줘야 함
- 라이브러리 사용이 많아질수록 직접 다운로드받는 방식은 불편해지게 됨
- Maven 사용 시 설정 파일에 몇 줄의 코드를 적는 것으로 쉽게 라이브러리를 사용할 수 있음
- 간편한 프로젝트 빌드 방법 가이드
- 프로젝트에 참여하는 개발자가 많아질 경우 프로젝트 빌드 방법 가이드가 어려워짐
- Maven 사용 시 Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드할 수 있음
- 다양한 플러그인 제공하므로 많은 작업을 자동화시킬 수 있음
- 편리한 의존성 라이브러리 관리
Maven을 이용한 웹 어플리케이션 실습
- 프로젝트 생성
- Eclipse 실행 → File > New > Project
- 프로젝트 종류: Maven > Maven Project 선택
- Workspace 경로: 기본값 선택
- Archetype 선택 창: Artifact Id가 maven-archetype-webapp인 Archetype 선택
- Archetype: 프로젝트 템플릿의 일종으로, 자동으로 생성되는 파일이나 라이브러리 설정을 결정
- Archetype parameter 창: Artifact Id에 프로젝트명 입력
- Group Id: 프로젝트를 진행하는 회사나 팀의 도메인 이름을 역으로 입력하는 것이 일반적
- Artifact Id: 해당 프로젝트의 이름을 입력
- 버전: 기본값인 0.0.1-SNAPSHOT 설정이 일반적
- Package: 자동으로 Group Id와 Artifact Id가 조합됨
- 프로젝트 설정
- Java Compiler 버전을 기본값에서 1.8로 수정
- pom.xml 내 plugins 태그 아래에 다음의 코드 추가
- Maven 설정과 Eclipse 프로젝트 설정 연동
- 프로젝트 우클릭 → Properties → Maven → Java EE Integration → Enable Project Specific Settings 선택 → Apply and Close
- pom.xml 내 plugins 태그 아래에 다음의 코드 추가
- Servlet 라이브러리 추가
- webapp > index.jsp를 열면 HttpServlet을 찾을 수 없다는 오류가 발생
- Dynamic Web Application를 만들 때는 WAS Runtime으로 Tomcat을 지정하면 Tomcat에 내장된 Servlet 라이브러리를 별도의 처리 없이도 Eclipse에서도 사용할 수 있음
- Maven 프로젝트로 생성한 경우 WAS Runtime이 지정되지 않은 상태이므로 Servlet 라이브러리를 찾을 수 있도록 별도의 처리를 해줘야 함
- pom.xml 내 dependencies 태그 아래에 다음의 코드 추가
- scope의 종류
- complie: 기본값으로, 컴파일할 때 필요하며, 테스트 및 런타임에도 클래스 패스에 포함됨
- runtime: 컴파일할 땐 필요하지 않지만 실행 시에 필요하며, 예시로 JDBC 드라이버 등이 있음
- provided: 컴파일할 때 필요하지만 실제 런타임에는 컨테이너 등에서 제공되는 모듈로, servlet, JSP api 등이 해당되며, 배포 시엔 제외됨
- test: 테스트 코드를 컴파일할 때 필요하며, 테스트 시 클래스 패스에 포함되지만 배포 시엔 제외됨
- webapp > index.jsp를 열면 HttpServlet을 찾을 수 없다는 오류가 발생
- JSTL 라이브러리 추가
- JSTL은 Tomcat이 기본으로 제공하지 않으므로, 컴파일할 때와 배포할 때 모두 필요함
- scope를 별도로 설정하지 않음
- pom.xml 내 dependencies 태그 아래에 다음의 코드 추가
- JSTL은 Tomcat이 기본으로 제공하지 않으므로, 컴파일할 때와 배포할 때 모두 필요함
- Dynamic Web Module 버전을 기본값에서 3.1로변경
- Dynamic Web Module 버전 2.4부터 EL을 지원하므로 EL을 정상 출력하기 위해 버전을 3.1로 변경
- webapp > WEB-INF > web.xml을 다음의 코드로 수정
- Eclipse → Navigator → 프로젝트 > .settings > org.eclipse.wst.common.project.facet.core.xml 수정
- <installed facet="jst.web" version="2.3"/>의 버전 2.3을 3.1로 수정
- Java Compiler 버전을 기본값에서 1.8로 수정
※ Eclipse의 버그로 JSP 파일 실행 시 오류나는 경우
- 수정 전의 데이터와 수정된 데이터가 섞여서 실행되어 오류가 발생하는 것이므로 웹 어플리케이션을 초기화하고 다시 실행해야 함
- 기존 Tomcat 종료
- 프로젝트 우클릭 → Maven > Update Project 실행
- Servers view → 기존 Tomcat Runtime 삭제
- Project → Clean 실행
- Project Explorer → Servers 삭제
Maven 프로젝트의 디렉토리 구조
- Java 소스코드는 src/main/java 디렉토리에 생성
- 자동으로 생성되지 않을 경우 별도로 만들어줘야 함
- 웹 어플리케이션과 관련된 HTML, CSS 등의 파일은 src/main/webapp 폴더에 작성
- Java 소스코드는 src/main/java 디렉토리에 생성
Maven 기본
- pom.xml 내 태그의 의미
- project: pom.xml 파일의 최상위 Root Element
- modelVersion: POM 모델의 버전
- groupId: 프로젝트를 생성하는 조직의 고유 ID를 의미하며, 일반적으로 도메인 이름을 역으로 작성함
- artifactId: 프로젝트에 의해 생성되는 artifact의 고유 ID를 의미함
- Maven을 이용해 pom.xml을 빌드하면 artifactId-version.packaging 파일이 생성됨
- packaging: 프로젝트의 packaging 형태를 결정하며, jar, war, ear 등이 있음
- version: 프로젝트의 현재 버전을 의미함
- 프로젝트가 개발 중일 땐 SNAPSHOT을 접미사로 사용함
- Maven의 버전 관리 기능은 라이브러리 관리를 편하게 하도록 도와줌
- name: 프로젝트명을 의미함
- url: 프로젝트의 웹사이트가 있을 경우 웹사이트의 URL
- dependencies: 필요한 라이브러리를 의미하며, Maven 의존성 관리 기능의 핵심
'Today I learned > Online Courses' 카테고리의 다른 글
JDBC (Back End) ... Part 2 (0) | 2020.04.06 |
---|---|
JDBC (Back End) ... Part 1 (0) | 2020.04.06 |
SQL (Back End) ... Part 2 (0) | 2020.04.06 |
SQL (Back End) ... Part 1 (0) | 2020.04.06 |
MySQL (Back End) (0) | 2020.04.05 |