팀 내의 서버 프레임워크를 Django -> Spring Boot 로 마이그레이션 하자는 의사 결정이 내려왔다.
Java에 Spring Boot를 쓰면 커리어 적으로는 호재이기는 한데... 거의 2년 만에 만져보는거라 걱정이 되기도 한다.
많이 까먹은 김에, 처음 부터 다시 쌓아올린다고 생각하고 기초부터 차근차근 다져볼 생각이다. (시간이 허락한다면...)
본론으로 들어가면, 팀 내에서 프로젝트의 의존성을 gradle로 관리하기로 결정하여, 정리를 좀 하고 넘어가려고 한다.
Gradle 이란?
그루비(Groovy)를 기반으로 한 빌드 도구이다.
Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구라고 하는데, 정확히 어떤 단점을 보완했다는 것일까?
- 직관적으로 봐도, 가독성 면에서 Gradle이 매우 뛰어나다. Maven은 스크립트를 XML로 정의하여 길이가 길고 이로인한 가독성이 떨어진다.
- 빌드 및 테스트 시 성능이 앞도적으로 뛰어나다. Gradle은 캐시를 사용하기 때문에 테스트 반복 시 차이가 점점 더 커지고, 이로 인해 프로젝트의 규모가 커지면서 의존성이 늘어날수록 성능과 스크립트 품질의 차이가 심해진다.
Buildscript
buildscript에는 SpringBoot Version 정보, Maven Repository 정보, Dependency 모듈을 지정하여 스프링 부트 플러그인을 사용할 수 있는 기본 바탕을 정의한다.
Apply
플러그인을 적용한다.
- apply plugin: 'java' → java용 웹 프로젝트를 생성한다.
- sourceCompatibility: '1.8' 호환 버전을 지정하여 java 웹 프로젝트에서 사용할 java를 명시한다.
- apply plugin: 'io.spring.dependency-management' → Spring IO Platform의 Gradle Plugin인 dependency-management를 사용한다. 스프링 부트 1.x에서는 디폴트로 사용되었지만 2.x에서는 명시적으로 선언해 주어야 한다.
Dependency
프로젝트에서 사용할 모듈을 정의한다.
Dependency Options
implementation: 의존 라이브러리 수정시 본 모듈까지만 재빌드한다.
본 모듈을 의존하는 모듈은 해당 라이브러리의 api 를 사용할 수 없음
api: 의존 라이브러리 수정시 본 모듈을 의존하는 모듈들도 재빌드
본 모듈을 의존하는 모듈들도 해당 라이브러리의 api 를 사용할 수 있음
compileOnly: 이름에서 알 수 있듯이 compile 시에만 빌드하고 빌드 결과물에는 포함하지 않는다.
runtime 시 필요없는 라이브러리인 경우 (runtime 환경에 이미 라이브러리가 제공되고 있는가 하는 등의 경우)
runtimeOnly: runtime 시에만 필요한 라이브러리인 경우
annotationProcessor: annotation processor 명시 (ex:lombok)
testImplementation : 테스트 코드를 수행할 때만 적용.
References
https://cantcoding.tistory.com/59
Gradle 의존성 옵션 정리(Compile VS implementation,옵션)
Gradle 이란? 그래들(이하 Gradle)은 그루비(Groovy)를 기반으로 한 빌드 도구. Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구. 처음 Sprin
cantcoding.tistory.com
https://docs.gradle.org/current/userguide/what_is_gradle.html
What is Gradle?
Gradle bases its design on the following fundamentals: High performance Gradle avoids unnecessary work by only running tasks that need to do work because inputs or outputs have changed. Gradle uses various caches to reuse outputs from previous builds. With
docs.gradle.org
'Spring Boot' 카테고리의 다른 글
로컬 파일(이미지) 프론트로 내보내는 REST API (0) | 2021.05.20 |
---|---|
비밀번호 해시 암호화 (0) | 2021.05.10 |
웹서버가 도대체 무엇인가(웹서버와 WAS의 차이) (0) | 2021.05.03 |
DB에 이미지 저장 (0) | 2021.05.02 |