728x90

Base/CI, CD 17

컨테이너 환경에서 Gradle

일반적으로 Gradle이 Maven보다 빌드 속도가 빠르다고 알려져 있지만 컨테이너 환경에서는 Gradle 이 큰 힘을 발휘하진 못하는 것 같다. Gradle 이 빠른 이유는 자체적으로 백그라운드 데몬이 수행되고 캐싱기능이 사용되기 때문인데 stateless 한 컨테이너 환경의 특성상 이게 재사용될 수가 없는 구조이다. groovy 문법을 사용해서 스크립트가 간소화되고 가독성이 좋아진다는 장점도 있지만 이건 기본적으로 groovy 문법에 익숙 상태에서나 의미가 있는 것인데 빌드하나 하겠다고 새로운 문법을 배울 사람은 많지 않다. 그냥 대충 이렇게 돌아가는구나 파악하고 사용하는 것이 대부분이고 그럴일이 거의 없겠지만 추가로 빌드 스크립트가 필요한 경우에는 대부분의 구글링을 통해서 습득하고 있을거라 예상된다..

Base/CI, CD 2021.05.26

Nexus와 Maven Central

maven에는 중앙저장소와 원격저장소라는 개념이 있다. 큰 의미로 보면 중앙저장소도 원격저장소의 중 하나인데 일반적으로 중앙저장소라고 하면 maven central 로 불리며 https://repo.maven.apache.org/maven2 를 의미하고 원격저장소라고 하면 각 조직에서 자체적으로 구축하는 Nexus 등을 의미한다. Nexus 는 일반적으로 인터넷망에 접속하지 못하는 망분리환경에서 내부적으로 의존성들을 관리하기 위해 사용된다. 물론 굳이 망분리 환경이 아니더라도 매번 외부망에서 의존성을 끌어오지 않고 내부망 Nexus를 proxy(cache)로 사용함으로써 좀 더 빠르게 의존성을 다운로드 할 수 있으며 조직 내부에서만 사용하는 의존성을 배포해서 여러팀간 공유하는 목적으로도 활용된다. mav..

Base/CI, CD 2021.05.21

maven 인코딩 설정

maven 에도 인코딩 설정이 필요하다. 예를 들어 maven-compiler-plugin 과 maven-resources-plugin 같은 것들이다. 한글을 사용한다면 UTF-8을 지정하면 될 것이고 아래와 같이 하면 된다. maven-compiler-plugin 2.0.2 1.8 1.8 UTF-8 maven-resources-plugin 2.2 UTF-8 그런데 이렇게 플러그인 마다 수동으로 정의하는 것보다 아래와 같이 project.build.sourceEncoding 를 설정하는 것이 낫다. ... UTF-8 ... 이는 전역적으로 설정되어 모든 플러그인의 디폴트 값으로 적용된다. 예를 들어 메이븐 공식 메뉴얼을 보면 maven-resources-plugin 인코딩의 Default 값이 ${pro..

Base/CI, CD 2021.05.18

gradle 에서 maven optional, provided 설정하기

일단 optional, provided 의 의미를 정확히 알고 넘어갈 필요가 있다. 매번 헷갈린다... 일단 사용은 아래와 같이 하면 된다. org.apache.tomcat tomcat-dbcp true provided optional true 설정이든 scope provided 설정이든 해당 의존성을 어떠한 과정에서 제외한다는 것은 동일한데 분명한 차이가 있다. optional true 에 대해 먼저 설명하면 기본적으로 A.jar 안에 junit 의존성이 포함되어 있고 어떠한 프로젝트에서 A.jar 의존성을 추가했다면 해당 프로젝트에서는 별도로 추가히지 않아도 junit 의존성이 추가된다. 의존성이 상속된다고 볼 수 있다. 그런데 A.jar 안에서 junit 의존성 정의시 위와 같이 optional t..

Base/CI, CD 2021.05.05

Gradle api, implements 차이

차이는 하위 모듈에 해당 의존성이 상속되느냐 마느냐 이다. 예를 들어 아래와 같이 멀티 프로젝트를 구성한다고 가정해보자. common api batch 여기에서 common 은 공통모듈이고 api, batch 에서 공통으로 사용할 코드가 포함되어 있다. 이에 api, batch build.gradle 에서는 아래와 같이 common 을 참조하고 있을 것이다. dependencies { implementation project(":common") ... } common에 아래와 같은 의존성을 정의한다고 가정해보자. implementation "com.google.guava:guava" 이 경우 api, batch 에 guava 의존성이 상속되지 않기 때문에 필요하다면 각각 다시 의존성을 정의해야 한다. 하..

Base/CI, CD 2021.04.19

Gradle 의존성 버전 관리

Gradle 에도 Maven 과 동일하게 dependencyManagement 를 사용할 수 있다. Maven과 동일하게 dependencyManagement 를 통해 의존성 버전을 명시하면 실제 의존성 정의시 버전을 명시하지 않아도 dependencyManagement에 명시된 버전이 자동으로 지정된다. 아래와 같이 사용하면 된다. dependencyManagement { dependencies{ dependency "com.google.guava:guava:17.0" } } dependencies { implementation 'com.google.guava:guava' } 이를 통해 모듈간 의존성 버전을 관리할 수 있게 되는데 프로젝트 단위로 의존성 버전을 관리하려면 어떻게 해야 할까? Maven ..

Base/CI, CD 2021.04.07
728x90