boj-boot 라이브러리, Gradle 플러그인 개발기
· 약 22분
최근에, boj-boot 라는 이름의 라이브러리와 Gradle 플러그인을 개발했다. 라이브러리와 Gradle 플러그인은 개발 자체가 처음이기도 했고, 생각보다 자료도 많지 않아서 다양한 삽질을 했다...
사실 이 글의 작성 목적은 개발에 대한 회고 목적 보단, 개발 과정에서 학습하고 고민한 JUnit5 과 Gradle 에 대한 정보를 공유하기 위함 으로, 해당 플랫폼에 대해 관심이 있다면, 간단하게 읽어보면 좋을 것 같다.
Overview
이번 boj-boot 의 목적은, 자바로 알고리즘 문제를 푸는 사람들이, 코드 수정할 때 마다 일일히 테스트 케이스를 넣는 것이 불편하지 않을까? 였다. 당장 프로그래머스가 좋은 환경을 제공하고 있는 만큼, Java 개발 환경에서도 비슷하게 구현할 수 있을 것이라는 생각이 들었다.
- 시간 제한, 테스트 케이스 같은 정보는 백준 크롤링만 하면 쉽게 땡겨올 수 있고,
- 입력에 대한 출력 결과를 String 으로 뺄 수만 있다면 일반적인 테스트 코드로도 정답 여부를 검증할 수 있다.
따라서 크게 문제가 될 게 없었다.
Library vs Plugin
이 프로젝트를 적용한 build.gradle.kts
를 보자.
plugins {
id("java")
}
group = "org.vsfe"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("io.github.vsfe:boj-boot-plugin:1.0.3")
}
}
apply(plugin = "io.github.vsfe.boj-boot-plugin")
dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
implementation("io.github.vsfe:boj-commons:1.0.2")
}
tasks.test {
useJUnitPlatform()
}
- 위쪽의
plugins
에 등록하지 못하고 하단의apply
를 사용하여 plugin 으로 등록하게 된 이유는, gradle plugin portal 에 등록이 되지 않았기 때문이다. (해당 내용은 후술함.)
도대체 plugins
와 dependencies
는 무슨 차이일까?
- 간단하게 설명하자면, Gradle plugin 은 일종의 스크립트 와 유사한 동작을 한다.
- 어떤 동작을 도와주는 거지, Spring-MVC나 JPA 처럼 어떤 코드가 새로 생기고, 그걸 활용하는 건 아니다.
- 자세한 사항은 해당 문서를 읽어보자.
- 반대로 dependencies (라이브러리) 는 일반적인 외부 의존성을 떠올리면 된다.
결과적으로 원하는 작업을 하기 위해선 둘 모두가 필요했는데,
- 백준 데이터를 크롤링 하여 코드를 자동 생성해줘야 했고, (Gradle Plugin)
- 이 과정에서 테스트 코드에 추가적인 작업이 필요했기에 사용할 수 있는 코드가 필요했다. (라이브러리)
자, 그렇다면 개발 단계를 조금만 더 살펴보자.