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 |