Maven에서 여러 모듈을 관리하는 Multi Module 프로젝트를 구성하는 방법, 리포지토리 종류와 지정하는 방법, 웹 서비스 성능 지표와 테스트 도구가 무엇이 있는지 오늘 스터디한 내용을 공유합니다.
Multi Module 프로젝트, Multi 리포지토리, 성능 테스트
Maven
1. 메이븐 리포지토리의 종류
- 로컬 저장소
- 원격 저장소 (중앙 저장소, 내부 저장소)
메이븐 리포지토리는 크게 세 가지정도로 나뉜다. 먼저 내 피씨에 저장되는 로컬 리포지토리가 있고, 나머지는 원격 리포지토리 이다. 원격 리포지토리는 중앙 저장소와 내부 저장소로 나뉜다.
중앙 리포지토리는 maven central이라고 불리며 https://repo.maven.apache.org/maven2 도메인을 사용한다.
내부 저장소는 망분리가된 네트워크 환경에서 의존성 관리를 위해 회사에서 구축하여 직접 관리한다. 보통 Nexus와 같은 자바 서버로 저장소를 구축한다. 중앙 리포지토리에서 받아온 라이브러리를 캐시해서 로컬에 빠르게 의존성을 받아올 수 도 있고, 라이브러리 뿐만 아니라 개발자끼리 모듈 빌드 결과물을 저장소에 배포해서 중복으로 빌드하는 비용을 줄일 수 있다. 배포하기 위해서는 별도의 세팅이 필요하다.
- 참고문서
https://maven.apache.org/guides/introduction/introduction-to-repositories.html
메이븐 저장소 종류를 먼저 찾아본 이유는 멀티 모듈 프로젝트에서 하위 종속성을 명확히 파악하려면 특정 라이브러리나 모듈을 어떤 리포지토리에서 가져오는지도 체크해야할 포인트이기 때문이다. (현업에서는 프로젝트를 빌드한 산출물을 내부 리포지토리에 배포해서 거기서 가져오는 경우도 많음.)
2. 메이븐 Multi-Module 멀티모듈 프로젝트
하나의 메이븐 프로젝트 안에 여러개의 모듈을 관리할 수 있다. 각 모듈 또한 메이븐 프로젝트로 구성되며 모두 pom파일을 가진다.
<packaging>pom</packaging>
패키징을 pom으로 지정하게 되면 하위 모듈을 관리할 수 있는 부모 pom파일로써 관계가 지정된다.
https://stackoverflow.com/questions/7692161/what-is-pom-packaging-in-maven
<modules>
<module>sub-module1</module>
<module>sub-module2</module>
<module>sub-module3</module>
</modules>
이렇게 하위 모듈을 지정한다. 이렇게 지정하고 부모 pom 파일로 build를 하면 서브 모듈로 지정된 모듈들이 모두 빌드가 되는 것을 확인할 수 있다.
멀티 모듈로 지정하면 하위 모듈에서 공통적으로 사용하는 라이브러리나 모듈의 종속성들을 일괄적으로 관리할 수 있다는 이점이 있다. 결국 하위 모듈에 개별적으로 지정해야되는 종속성의 중복을 제거하고 일괄적으로 관리해야하는 종속성이 있을때 변경을 최소화할 수 있다는 장점이 있다.
아래링크에 인텔리제이로 Maven 멀티 모듈 프로젝트 만드는 방법 및 빌드까지 소개하는 포스팅을 작성하였으니 참고해주세요. https://timotimo.tistory.com/77
[Maven] 간단한 Multi-Module 프로젝트 만들기
인텔리제이로 Maven 멀티 모듈 만드는 방법을 공유드립니다. 생성부터 빌드까지 순서대로 소개하겠습니다. 메이븐 멀티모듈 프로젝트 만드는 방법 및 빌드 1. 프로젝트 생성하기 인텔리제이 File
timotimo.tistory.com
3. multi repositories 다중 원격 저장소 지정해서 라이브러리 가져오기
메이븐 프로젝트에서 여러 저장소로부터 라이브러리를 받아오고 싶으면, settings.xml에 지정하거나 pom파일에 여러 리포지토리를 지정해서 받아올 수 있다.
<project>
...
<repositories>
<repository>
<id>my-repo1</id>
<name>your custom repo</name>
<url>repo1 url</url>
</repository>
<repository>
<id>my-repo2</id>
<name>your custom repo</name>
<url>repo2 url</url>
</repository>
</repositories>
...
</project>
pom 파일에 내부 저장소를 지정하면 별도로 중앙 저장소 url을 지정하지 않아도 내부 저장소를 먼저 쿼리하고 원하는 라이브러리가 없으면 내부적으로 지정된 중앙 저장소로 라이브러리를 요청한다고 함.
.여러개의 리포지토리 지정했을 때는 정해진 순서에 따라서 저장소로부터 라이브러리를 가져오게 된다고 한다.
https://maven.apache.org/guides/mini/guide-multiple-repositories.html#repository-order
성능 테스트
1. TPS Transaction Per Seconds 처리량
초당 몇 개의 요청을 처리할 수 있는지에 관련된 지표.
- 임계점 Saturation Point : 어떤 서비스에 요청수가 늘어나도 TPS가 더이상 증가하지 않는 지점
- 응답 시간 : 대기시간 + 처리시간
대기 시간 : 클라이언트 요청이 서버로 도달하기까지의 시간
처리 시간 : 서버에서 클라이언트 요청을 처리하는데 걸리는 시간
- 처리량(Throughput)과 지연시간(Latency)
2. 성능 테스트
어떤 웹 서버 또는 API가 얼마나 많은 사용자의 요청을 감당할 수 있는지 테스트하는 것을 말한다.
nGrinder와 같은 오픈소스 테스트 도구로 테스트할 수 있다. nGrinder는 세가지 요소로 구성되어 있다. Controller는 웹 기반 GUI 시스템으로 테스트를 진행할 장비에 설치한다. Agent는 테스트 대상(Target) 장비에 설치해주며, Controller 장비에서 명령을 받아 실제 부하를 발생시켜준다.
https://github.com/naver/ngrinder
'블로그 > 개발일지 (TIL)' 카테고리의 다른 글
스프링 공식 튜토리얼로 실습방법, 인텔리제이 단축키 3가지 소개, lombok 설정, 타임리프, Gradle 스프링 플러그인, bootRun (2) | 2023.04.26 |
---|---|
스프링 RequestMapping, 컨텍스트 호출, 배포서술자, WEB-INF (0) | 2023.03.16 |
스프링 @RestController와 @Controller (0) | 2023.03.12 |
Redis 서버, 클라이언트, SDR, Redis 마이그레이션 참고사항 (0) | 2023.02.14 |
Maven 의존성 전이, 스프링 마이그레이션시 참고사항, UML 의존관계 (0) | 2023.02.09 |
최근댓글