목적
springBoot Project의 빠른 설정을 위해 설정에 필요한 정보들을 일괄 추가하고,
관련된 디펜던시나 항목들이 무슨 활동을 하는지 조사한다.
1. apply plugin :
- task의 집합이다.
- gradle어플리케이션의 빌드부터 테스트까지 다양한 작업을 수행하는 작업단위이다.
- 특정 작업을 하기위해 모아놓은 작업들의 묶음을 의미한다.
- apply는 커스텀 플러그인을 만들 떄 사용한다.
apply plugin: 'io.spring.dependency-management'
나의설정
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.0'
id 'io.spring.dependency-management' version '1.1.0'
}
io.spring.dependency-management 란?
- plugins에 추가하는 의존성(디펜던시)이다.
- maven과 같은 종속성 관리 기능을 제공하는 Gradle 플러그인이다.
참고 : https://kotlinworld.com/323
2. group 이름과 version 표시
group: 프로젝트의 groupId
version: 애플리케이션의 버전명
group = '프로젝트 이름'
version = '0.0.1'
3. sourceCompatibility
-java버전과 일치하는 값
-컴파일에서 사용하는 java버전을 표시
-소스코드에 사용할 수 있는 JAVA버전을 해당 버전값으로 제한한다
-컴파일단계에서 에러를 감지하고 더 높은 버전의 Java기능을 사용하는 것을 방지한다.
sourceCompatibility = '17'
4. targetCompatibility
-클래스 파일의 버전을 제어한다.
-프로그램에서 실행할 수 있는 가낭 낮은 java버전을 의미한다. ( 최소 버전 )
-여기에 기재된 버전 이상의 JAVA버전을 사용해야한다.
-컴파일 단계에서 에러를 감지하고, 더 낮은 버전을 사용하는 것을 방지한다.
sourceCompatibility 는 자동으로 추가되지만, targetCompatibility는 자동으로 추가되지 않는다.
targetCompatibility = '17'
참고 : https://dlee0129.tistory.com/265
5. options.encoding = 'UTF-8' 설정 추가
컴파일 시 한글이 꺠지는 현상 해결을 위한 설정을 추가한다.
아래의 설정을 추가한다.
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
참고 : https://strawberry-smoothie.tistory.com/51,https://fordeveloper2.tistory.com/7974
6. maven repository 추가
0 ) maven repository란?
- 의존성을 가져올 중앙저장소를 정의한다.
- maven을 이용하여 원하는 라이브러리를 손쉽게 프로젝트에 추가하도록 돕는다.
- 다양한 라이브러리가 저장되어 있고, 쉽게 다운로드받을 수 있도록 경로를 제공한다.
( https://devocean.sk.com/blog/techBoardDetail.do?ID=163830 )
6-1) mavenCentral()
메이븐 리포지토리를 기본경로로 지정한다.
로컬 레포지토리에 jar 파일이 없다면 원격 레포지토리인 Maven Central Repository로부터 다운로드 한다. (https://repo.maven.apache.org/maven2/)
repositories {
mavenCentral()
}
6-2) maven{}
커스텀 maven으로 저장소를 지정할 수 있다.
예 ) maven { url "https://jitpack.io" } // jitpack.io를 저장소로 지정한다
6-3 ) jitpack.io ? ( https://jitpack.io/docs/ )
jitpacksms JVM및 Android프로젝트를 위한 새로운 패키지 저장소이다.
요청 시 git프로젝트를 빌드하고 바로 사용할 수 있는 jar,aar을 제공한다.
프로젝트 빌드 및 업로드 단계를 거치지 않아도 된다.
이미 github에 프로젝트가 있더라도 누구나 빌드할 수 있게 한다.
=> 프로젝트의 필요에 따라 추가한다.
repositories {
mavenCentral()
maven { url "https://jitpack.io" }
}
7. configurations{} - lombok annotation processor
: configurations 빌드그래들 내부에서 사용되는 설정을 정의한다.
: 롬복 라이브러리를 적용하여 어노테이션을 사용할 수 있게 설정한다.
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
}
8. configurations{} - 빌드 시 발생하는 '전이 의존성'을 해결하기
-외부라이브러리에서 사용한 의존성이 전이되어 빌드버전이 꼬이는 문제현상 발생함에 따라 문제가 발생할 수 있는 라이브러리의 의존성을 배제한다.
- all*.exclude 를 이용하면 해당하는 라이브러리의 전체 모듈/그룹의 의존성을 배제한다.
- 설정에서 제거한 항목
build.gradle 파일에 추가
configurations{
all*.exclude module : 'spring-boot-starter-logging'
all*.exclude group: "org.apache.tomcat.embed"
all*.exclude module: "spring-boot-starter-tomcat"
}
- spring-boot-starter-logging
: 스프링부트에서 제공하는 로깅 설정이지만 log4j를 사용한다. log4j는 치명적인 보안 취약 결함이 발견되어 사용되지 않기 때문에 'spring-boot-starter-log4j2'를 추가하여 사용하는데 충돌이 발생하므로 제거
- org.apache.tomcat.embed
: 전체 tomcat 서버 배포판과 함께 단일 Java웹 애플리케이션을 패키징하는 방법을 제공한다.
: 모든 java웹 애플리케이션을 해당 인스턴스에 배포한다.
: Spring Boot는 서버에 별도의 WAS를 설치할 필요가 없도록 내장 WAS를 사용한다.
따라서 외부에 별도로 추가 서버를 두지 않고 Spring Boot Jar 파일만 실행하면 된다.
: 제거 시 내장 톰캣이 없어 서버 실행시 바로 완료 됨
=> 본 프로젝트에서는 spring undertow를 사용할 것이므로 제거 함
-spring-boot-starter-tomcat
: springboot에 내장된 tomcat
: 제거 시 내장 톰캣이 없어 서버 실행시 바로 완료 됨
=> 본 프로젝트에서는 spring undertow를 사용할 것이므로 제거 함
? 왜 내장 tomcat을 제거하고 undertow를 쓰나요?
-> undertow가 대규모트래픽 처리 시 tomcat보다 안정적이다. undertow는 netty를 기반으로 만들어 졌다. 가장 기본이 되는 WAS로서 tomcat이 사용될 수 있지만 목적과 규모 측면으로 고려하였을 때 undertow가 많이 쓰이므로 undertow를 적용한다.
참고 :
https://www.theserverside.com/definition/embedded-Tomcat
9. bootJar
: bootJar는 실행가능한 jar를 빌드하는 태스크이다,
: 플러그인에 포함되어 있음
- jar의 이름을 설정한다. ( 필수적인 것은 아니지만 필요한 경우 사용할 수 있다. )
- docker에서 프로젝트를 실행시킬 때 하나의 실행 스크립트로를 여러번 재활용하기 위하여 네이밍 패턴을 일치시키는 경우에 사용된다.
- jar
: java archieve를 의미.
: java 어플리케이션을 배포하고 동작할 수 있는 형태로 합축한 형태.
: java class file, EJB, resource, 설정, 의존성dependencies 파일등을 모두 포함하였다.
: path등의 경로를 유지하기 때문에 JVM위에서 단독실행 가능.
bootJar {
archiveFileName = "프로젝트이름.jar"
}
참고 : https://velog.io/@jwkim/spring-boot-build-jar
10. 의존성 조사 ( 작업중 )
ㄴ프로젝트를 구성하고 실행할 때 필요한 라이브러리 정보를 내려받아 설정한다. 다양한 기능을 제공한다.
ㄴ 프로젝트에 설정해야할 다수의 의존성을 사전에 미리 정의하여 의존성 조합 제공한다.
1) implementation 'org.springframework.boot:spring-boot-starter'
ㄴ사전에 정리된 의존성 조합을 제공한다. 사용자가 찾아서 설정해야하는 정보를 쉽고 빠르고 정확하게 찾아 의존성 설정을 할 수 있도록 지원한다.
// 포함됨
jakarta.annotation » jakarta.annotation-api
org.springframework » spring-core
org.springframework.boot » spring-boot
org.springframework.boot » spring-boot-autoconfigure
org.springframework.boot » spring-boot-starter-logging
2) implementation 'org.springframework.boot:spring-boot-starter-web'
ㄴ 스프링 MVC를 사용해 RESTful이 포함된 웹애플리케이션을 작성하기 위한 스타터다. 기본 임베디드 컨테이너로 톰캣을 사용한다.
// 포함됨
org.springframework » spring-web
org.springframework » spring-webmvc
org.springframework.boot » spring-boot-starter
org.springframework.boot » spring-boot-starter-json
org.springframework.boot » spring-boot-starter-tomcat
3) implementation 'org.springframework.boot:spring-boot-starter-jdbc'
ㄴ java object를 연계하기 위해 제공되는 spring Data의 라이브러리 중 하나이다,
ㄴSpring Data JPA가 가진 복잡한 부분을 덜어내었다.
ㄴDB조회를 가볍게 할 수 있다.
ㄴquery를 만들고 domain에 mapping하는 점에 중점을 두었다.
ㄴJDBC template를 제공
참고 : https://luvstudy.tistory.com/174
4) implementation 'org.springframework.boot:spring-boot-starter-undertow'
ㄴ> https://hyojaedev.tistory.com/32
- J2EE 규격을 모두 만족하는 WAS,
-대규모 트래픽으로부터 Tomcat보다 안정적이라는 평가를 받고 있다.
-웹소켓과 리버스 프록시, 서블렛 4.0을 지원한다
-비동기방식으로 실행된다.
-톰캣은 동기방식으로 정해진 수만큼만 프로세스를 띄울 수 있음
5) implementation 'org.springframework.boot:spring-boot-starter-log4j2'
ㄴ
6) implementation 'org.springframework.boot:spring-boot-starter-aop'
ㄴ
7) implementation 'org.springframework.boot:spring-boot-starter-webflux'
ㄴ -http 통신을 쉽게 하도록 도와주는 유틸성 클라이언트 라이브러리
8) implementation 'org.springframework.boot:spring-boot-starter-validation'
ㄴ>
9) jackson lib
- implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.1'
- implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.1'
ㄴ 데이터 전달 시 text/html 형식이 아닌 json데이터로 구조를 처리하여 반환하는 라이브러리이다.
향후 좀 더 조사하기
참고 : https://mommoo.tistory.com/83
// https://mvnrepository.com/artifact/jakarta.el/jakarta.el-api
implementation 'jakarta.el:jakarta.el-api:5.0.1'
ㄴ> el은 데이터를 표현하기 위한 언어이다. 모델 오브젝트를 뷰에서 출력할 때 JSP의 출력 문법을 대체하는 간결한 표현언어이다.
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2'
implementation 'com.mysql:mysql-connector-j:8.0.33'
implementation "commons-io:commons-io:2.11.0"
implementation "org.apache.commons:commons-lang3:3.12.0"
implementation 'org.apache.commons:commons-math3:3.6.1'
implementation "org.apache.commons:commons-configuration2:2.7"
implementation "org.apache.commons:commons-collections4:4.4"
implementation 'com.google.code.gson:gson:2.9.1'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'
ㄴ> 스웨거, openapi 를 사용하기 위한 라이브러리
compileOnly 'org.projectlombok:lombok:1.18.26'
annotationProcessor 'org.projectlombok:lombok:1.18.26'
// https://mvnrepository.com/artifact/org.mapstruct/mapstruct
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
ㄴ> mapstruct 오브젝트에서 오브젝트를 카피할 떄 사용한다.
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
) 테스트 실행을 위한 설정 부분
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
testCompileOnly 'org.projectlombok:lombok:1.18.26'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.26'
'Prj PJ' 카테고리의 다른 글
| [javaScript] 이전에 본 화면으로 돌아가기 ( history back ) (0) | 2023.08.09 |
|---|---|
| [] 세션로그인 (0) | 2023.07.14 |
| 정리필요/[springBoot] spring 프로젝트 설정하기의 나머지 전부 (0) | 2023.06.23 |
| [Spring Boot]1-Spring Boot 프로젝트 셋팅하기 ( macOS + eclipse ) (0) | 2023.06.02 |
| [리눅스] mysql 완전 삭제 (0) | 2023.05.24 |