본문 바로가기
공부할 것 !

Maven, 형상관리

by sejin2 2024. 8. 20.

Maven

: 의존성 관리, 라이브러리 관리, 빌드 생명 주기 및 단계 객체 모델을 갖는 프로젝트 관리 도구로 표준화된 빌드 기능 뿐만 아니라 리포팅 및 documentation 생성 기능 등을 제공

 

Maven 디렉터리 구조

/pom.xml 프로젝트 객체 모델
해당 프로젝트에 대한 전반적인 정보를 갖는다.
/src/main/java Java 소스 파일 위치
/src/main/resources 배포할 리소스, XML, properties, ...
/src/main/webapp 웹 어플리케이션 관련 파일 위치 ( WEB-INF, css 등 )
/src/test/java 테스트 케이스 java 소스
/src/test/resources 테스트 케이스 리소스
/target 빌드된 output이 위치하는 디렉터
( 실제 컴파일하게되면 컴파일한 결과들이 들어간다 )

 

  •  webapp의 jsp파일은 초기에 진입하는 index.jsp가 존재 실질적으로 MVC 타서 화면을 보여주는 jsp파일은 WEB-INF에 있음
  • JSP 파일에 비즈니스 로직, DB 접속 정보가 들어있으면 안됨

빌드 Lifecycle

validate 현재 설정과  POM의 내용이 유효한지 확인
generate-sources 코드 생성기가 이 다음의 단계들에서 컴파일되고 처리할 소스 코드를 생성하기 시작하는 순간
compile 소스 코드를 컴파일 한다.
컴파일된 클래스들은 타깃 디렉터리 트리 구조에 저장된다.
test 컴파일 된 단위 테스트를 실행하고 그 결과를 표시한다.
package 실행 가능한 바이너리 파일들을 WAR나 JAR 같은 배포용 압축 파일로 묶는다.
install 압축 파일을 로컬 메이븐 저장소에 추가한다.
deploy 압축 파일을 원격 메이븐 저장소에 추가한다.

 

pom.xml의 구성

<repositories>
    <repository>
        <id>mvn2s</id>
        <url>https://repo1.maven.org/maven2/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>egovframe</id>
        <url>https://maven.egovframe.go.kr/maven/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

 

=> 외부 레파지토리에서 가져올 주소를 정의할 수 있다.

<dependencies>
    <!-- 표준프레임워크 실행환경 -->
    <dependency>
        <groupId>org.egovframe.rte</groupId>
        <artifactId>org.egovframe.rte.ptl.mvc</artifactId>
        <version>${org.egovframe.rte.version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.egovframe.rte</groupId>
        <artifactId>org.egovframe.rte.psl.dataaccess</artifactId>
        <version>${org.egovframe.rte.version}</version>
    </dependency>

 

=> 라이브러리를 가져오는 것이 의존성이라고 정의

해당되는 라이브러리를 원격 저장소에서 가져와서 내 프로젝트에 지정해주는 것

 

 

메이븐 레파지토리 정보나 메타데이터 초기화 해주는 것 -> maven - update 

 

형상관리

  • 저장소 ( Repository )
    • 모든 프로젝트의 프로그램 소스들과 소스에 대한 변경 사항이 저장 됨
    • 네트워크를 통해서 여러 사람이 접근
    • SVN에서는 Berkeley DB 또는 파일시스템을 저장소로 사용
  • Revision
    • 소스 파일 등을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가
    • 저장소에 저장된 각각의 파일 버전이라 할 수 있음
    • SVN의 경우 파일 별로 리비전이 매겨지지 않고 변경 발생 단위로 전체 리비전이 매겨짐
    • 리비전을 보고 프로젝트 진행 상황을 알 수 있음

  • Checkout
    • 저장소에서 전체 소스의 최종 리비전을 받아오는 것
  • Update
    • 체크아웃을 한 이후의 타인에 의한 소스 변경사항을 확인
    • 저장소에 있는 소스 중 로컬과 비교하여 변경된 항목의 최신 버전의 소스를 가져옴
    • 변경된 항목의 최신 버전은 로컬 본에 통합됨
  • Commit
    • 로컬에 체크아웃 한 소스를 수정, 파일, 추가, 삭제 등을 한 뒤 저장소에 저장하여 갱신하는 것
    • 커밋을 하면서 전체 리비전이 1 증가
  • History
    • SVN에 의해 관리되는 특정 소스와 관련된 과거 모든 리비전의 내역
  • Conflict ( 충돌 )
    • 로컬에 체크아웃 이후 수정한 소스를 저장소에 커밋할 때, 저장소의 리비전이 더 높을 경우 충돌 발생
    • 충돌 해결 방안
      • postpone: 즉시 반영없이, 소스 코드를 계속 수정. 수정이 완료된 시점에 다시 시도 (충돌 해결 안함)
      • diff: 충돌된 상황을 비교. 로컬과 저장소의 소스의 차이를 비교 
      • edit: 로컬의 파일을 다시 열어 수정
      • mine-full: 저장소의 리비전 내용을 무시하고, 로컬의 내용으로 커밋
      • theirs-full: 로컬의 수정 내역을 무시하고, 저장소의 리비전으로 대체하여 업데이트

 

CI ( Continuous Integration )

: 여러 명으로 구성된 팀이 작업한 것을 자주 각 팀원이 하루에 한 번 이상, 매일 여러 번 통합하는 것을 가리키는 소프트웨어 개발 Practice로 개발자, 버전 관리 저장소, 통합 빌드 머신으로 구성 됨

 

 

'공부할 것 !' 카테고리의 다른 글

chart.js를 이용해 데이터 시각화하기  (0) 2024.08.23
AOP  (0) 2024.08.22
렌더링 ( Rendering )  (0) 2024.06.10
컴파일 오류와 런타임 오류 이해하기  (0) 2024.05.27
메모리 구조 이해하기  (0) 2024.05.12