네이버 핵데이 컨벤션
많은 사람들이 네이버 핵데이 컨벤션을 사용하여 협업을 진행한다고 한다. 나 또한 복잡하게 컨벤션을 정하고 규칙을 자동화하기 위한 작업을 하기보다는 이미 짜여 있은 네이버 핵데이 컨벤션을 사용하는 것이 편리하다. 하지만 내가 멍청이라는 사실을 프로젝트 Build를 할 때야 되서나 알게 되었다.
핵데이 적용 했을 때 유의사항이다.
개발 시에는 아래 2가지 설정을 Gradle 또는 Maven에 추가하고 개발을 진행한다. 그리고 프로젝트 루트 디렉터리에 '네이버-체크스타일-룰스.xml'과 '네이버-체크스타일-서프레션.xml'을 추가한다.
plugins {
id 'java'
}
...
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
plugins {
id 'checkstyle'
}
checkstyle {
maxWarnings = 0 // 규칙이 어긋나는 코드가 하나라도 있을 경우 빌드 fail을 내고 싶다면 이 선언을 추가한다.
configFile = file("${rootDir}/naver-checkstyle-rules.xml")
configProperties = ["suppressionFile" : "${rootDir}/naver-checkstyle-suppressions.xml"]
toolVersion ="8.24" // checkstyle 버전 8.24 이상 선언
}
개발을 진행할 때는 위의 설정이 별다른 문제가 되지 않는다. 여느 때와 같이 아무 생각 없이 프로젝트 빌드를 진행하여 배포를 하고자 했더니 에러를 마주하게 되었다...
1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':checkstyleMain'.
> A failure occurred while executing org.gradle.api.plugins.quality.internal.CheckstyleAction
> An unexpected error occurred configuring and executing Checkstyle.
> Unable to create Root Module: config {/app/naver-checkstyle-rules.xml}, classpath {null}.
이런 에러를 마주하게 되었는데... 확인해 보니 '네이버-체크스타일-룰스.xml'가 루트 디렉터리에 없다는 것이다. 빌드를 하기 위해 프로젝트 폴더를 통째로 복사하여 빌드를 진행하기보다는 빌드에 필요한 파일만 선정하여 작업폴더에 복사하고 가장 중요한 소스(src 디렉터리)를 작업폴더에 복사하여 빌드를 진행했다.(부자가 아니라서 조금이라도 용량을 줄이고 싶으니까...) 이 과정에서 체크스타일.xml을 누락하는 바람에 빌드시 에러를 만나게 된 것이다.
결론 - 빌드시 유의사항
- 핵데이 컨벤션 페이지의 지침에 따라서 적용하고 있는 사람이라면 빌드시 체크스타일.xml도 빠지지 않고 루트디렉터리에 마련하도록 하자.
- 그게 아니라면 src디렉터리 내부에 체크스타일.xml를 배치하고 Gradle설정을 파일경로에 맞춰서 수정을 하여 사용하도록 하자.
이번 경험으로 빌드라는 행위는 개발과정에서 굉장히 반복적인 작업이지만 자료, 소스, 설정 등 필요한 항목이 무엇인지 제대로 파악하고 사용해야 한다는 교훈을 얻었다. 만약 나는 개발만 하고 배포는 다른 사람이 진행하는데 내가 필요한 설정을 누락하여 준다면? 상상만 해도 기분이 매우 안 좋은 일이 발생할게 뻔하다. 개발을 하는 사람으로서 많은 부분이 자동화되고 간편해졌지만 그래도 알고 있어야 한다는 것이 이런 부분들 아닐까?
'개발자 공부' 카테고리의 다른 글
Docker와 Docker Compose의 차이 (1) | 2024.03.30 |
---|---|
Vercel을 이용한 배포(React + Vite) (0) | 2024.03.27 |
사용하면서 알게된 Pageable과 PageImple, page데이터 (0) | 2024.03.25 |
React useState의 비동기 방식으로 인한 의존적인 상태값의 변경 문제 (0) | 2024.03.22 |
Orval을 사용한 클라이언트 생성기 사용 (0) | 2024.03.18 |