Spring-2
Maven 이란?
우선 빌드에 대해서 알아야 한다.
빌드란 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물로 쉽게 말하자면 우리가 작성한 소스코드, 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties)을 JVM(자바가상머신)(?)이나 톰캣같은 WAS(?)가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물을 만드는 것이다.
두 번째로는 빌드 도구에 대해 알아야한다.
빌드 도구란 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램. 빠른 기간동안 계속해서 늘어나는 라이브러리 추가, 프로젝트를 진행하며 라이브러리의 버전 동기화의 어려움을 해소하고자 등장 과거에는 maven이 많이 사용되었지만 현재는 Gradle이 많이 사용된다.
maven은 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다. maven은 프레임워크이기 때문에 동작 방식이 정해져있고, 미리 정의하고 있는 빌드 순서가 있다. 이를 라이플사이클이라고 한다. 모든 빌드단계는 이전 단계가 성공적으로 실행되었을 때 실행된다는 것 = dependency 이다
Maven 설정파일
- settings.xml : 메이븐 빌드 툴과 관련한 설정파일 / MAVEN_HOME/conf 디렉토리에 위치(메이븐 설치 시 기본 제공) / settings.xml의 설정
- POM(프로젝트 객체 모델(Project Object Model)) : POM은 pom.xml 파일을 의미하며, pom.xml은 메이븐을 이용하는 프로젝트의 root에 존재하는 xml파일이다. / Maven의 기능을 이용하기 위해서 POM이 사용된다. / 파일은 프로젝트마다 1개이며, pom.xml만 보면 프로젝트의 모든 설정, 의존성 등을 알 수 있다.
pom.xml의 엘리먼트
- modelVersion : POM model의 버전
- parent : 프로젝트의 계층 정보
- groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.
- artifactId : 프로젝트 빌드시 파일 대표이름 이다. groupId 내에서 유일해야 한다. Maven을 이용하여 빌드시 다음과 같은 규칙으로 파일이 생성 된다. artifactId-version.packaging
- version : 프로젝트의 현재 버전, 프로젝트 개발 중일 때는 SNAPSHOT을 접미사로 사용.
- packaging : 패키지 유형(jar, war, ear 등)
- name : 프로젝트, 프로젝트 이름
- description : 프로젝트에 대한 간략한 설명
- url : 프로젝트에 대한 참고 Reference 사이트
- properties : 버전관리시 용이 하다. ex) 해당 자바 버전을 선언 하고 dependencies에서 다음과 같이 활용 가능하다 ex) <version>${java.version}</version>
- dependencies : dependencies태그 안에는 프로젝트와 의존 관계에 있는 라이브러리들을 관리 한다.
- build : 빌드에 사용할 플러그인 목록
위쪽에 밑줄친 JVAM에 대해서 알아보자
자바 가상 머신의 약자로 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다. 그리고 JVM은 JAVA와 OS사이에서 중개자 역할을 수행하여 JAVA가 OS에 구애받지 않고 재사용을 가능하게 해준다. 그리고 가장 중요한 메모리관리, Garbage collection을 수행 해준다.
메모리 효율성이 중요하기 때문에 JVM이 필요하다.
그렇다면 다음 밑줄친 WAS는 무엇일까?
DB조회나 다양한 로직 처리를 요구하는 동적인 콘텐츠를 제공하기 위해 만들어진 Application Server이다. HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다. '웹 컨테이너' 혹은 '서블릿 컨테이너'라고 불린다. 즉 WAS는 JSP, Servlet 구동 환경을 제공한다.
WAS의 역할에 대해서 알아보자
WAS = Web Server + Web Container / 분산 트랜잭션, 보안, 메시징, 스레드 처리 등의 기능을 처리하는 분산 환경에서 사용된다. 주로 디비 서버와 같이 수행된다.
WAS의 예 - Tomcat, JBoss, Jeus, Web Sphere 등
WAS는 왜 사용해야 하는가?
웹 페이지에는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다. 사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야 한다. 이때, Web Server만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야 한다. 따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.