Sping Boot | Backend Project | 환경 세팅하기
스프링 부트에 대해 기능별로는 검색하면 나오는 정보가 많지만 전체적인 환경을 세팅하는게 생각보다 찾기 힘들었다.
한 달동안 본 강의를 토대로 내 입맛대로 환경세팅을 해보기로 했다.
1. Java 11, IntelliJ 설치
https://www.oracle.com/java/technologies/downloads/#java11-mac
Download the Latest Java LTS Free
Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.
www.oracle.com
https://www.jetbrains.com/idea/download/#section=mac
Download IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains
Download the latest version of IntelliJ IDEA for Windows, macOS or Linux.
www.jetbrains.com
2. H2 Database 설치
H2 Database Engine (redirect)
H2 Database Engine Welcome to H2, the free SQL database. The main feature of H2 are: It is free to use for everybody, source code is included Written in Java, but also available as native executable JDBC and (partial) ODBC API Embedded and client/server mo
www.h2database.com
해당 경로로 이동하여 권한 설정 ( /bin )
$ chmod 755 build.sh
실행
$ ./h2.sh
home 경로에 test.mv.db 파일 생성 확인
2. 프로젝트 생성
( Dependencies 는 프로젝트의 환경에 맞게 설정한다. )
3. Annotation Processing 설정
4. build.gradle 설정
plugins {
id 'org.springframework.boot' version '2.7.4'
id 'io.spring.dependency-management' version '1.0.14.RELEASE'
id 'java'
}
group = 'web'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
// Querydsl
ext["hibernate.version"] = "5.6.5.Final"
clean {
delete file('src/main/generated')
}
dependencies {
// start.spring.io setting
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Querydsl
implementation 'com.querydsl:querydsl-jpa'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// app
implementation 'org.springframework.boot:spring-boot-starter-aop'
// 테스트에서 lombok 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
// 강제지연로딩
//implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5'
// SQL 실행 파라미터를 로그로 남긴다.
//implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7'
}
tasks.named('test') {
useJUnitPlatform()
}
5. application.properties 설정
#port
server.port=8083
spring.profiles.active=local
#Database
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.hikari.connection-timeout= 3000
spring.datasource.hikari.validation-timeout= 3000
spring.datasource.hikari.minimum-idle= 5
spring.datasource.hikari.max-lifetime= 240000
spring.datasource.hikari.maximum-pool-size= 20
# 자동 카멜 표기법 x
#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# ?? ????? validate or none
spring.jpa.hibernate.ddl-auto=create
# Hibernate jpa log (ddl-auto, ?? jpa ?)
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
# JPA SQL
# logging.level.org.hibernate.SQL=DEBUG
# sql parameter log
# logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
# JPA Transaction log
# logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG
# logging.level.org.hibernate.resource.transaction=DEBUG
# Interceptor transaction log
# logging.level.org.springframework.transaction.interceptor=TRACE
# logging.level.org.springframework.jdbc.datasource.DataSourceTransactionManager= DEBUG
# JPQL log(queryDSL)
# spring.jpa.properties.hibernate.use_sql_comments=TRUE
# Page_batch_size
# spring.data.web.pageable.default-page-size=20
# spring.data.web.pageable.max-page-size=2000
maraiDB 설정
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3307/leafCat
spring.datasource.username=root
spring.datasource.password=root
6. 로그 파일 저장
/src/main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
[Layout]
%m : 로그내용이 출력
%p : trace > debug > info > warn > error 등의 priority 출력
%r : 어플리케이션이 시작되어 로깅이벤트가 발생하는 시점까지의 경과시간을 밀리세컨드로 출력
%c : 예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.
%n : 플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다
%d : 로깅이벤트가 일어나 날짜 출력 ( 프로그램의 실행속도를 느리게 한다.)
예) %d{HH:mm:ss} 또는 %d{dd MMMM yyyy HH:mm:ss}
%C : 호출자의 클래스명 출력
예) 클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다
%M : 로깅이 발생한 method 이름을 나타냅니다.
%F : 로깅이 발생한 프로그램 파일명을 나타냅니다.
%l : 로깅이 발생한 caller의 정보를 나타냅니다
%L : 로깅이 발생한 caller의 라인수를 나타냅니다
%x : 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.
%X : 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.
%% : % 표시를 출력하기 위해 사용한다.
%t : 로그이벤트가 발생된 쓰레드의 이름을 출력합니다
-->
<configuration scan="true" scanPeriod="30 seconds">
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>logs\%d{yyyy-MM}\%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%-5level] - %msg%n</Pattern>
</layout>
</appender>
<!-- Loggers -->
<!-- <logger name="org.apache.catalina" level="ERROR">
</logger>
<logger name="org.apache.commons" level="ERROR">
</logger>
<logger name="org.springframework" level="DEBUG" >
</logger>
<logger name="egovframework.*" level="DEBUG">
</logger>
<logger name="java.sql" level="DEBUG">
</logger>
<logger name="org.mybatis.spring" level="DEBUG">
</logger>
<logger name="egovframework.sqlmappers" level="TRACE">
</logger> -->
<root level="INFO">
<appender-ref ref="ROLLING"/>
<appender-ref ref="STDOUT" />
</root>
</configuration>