seungriyou / spring-study

자바 스프링 부트를 배워봅시다 🔥
0 stars 0 forks source link

[스프링 부트] 프로젝트 생성 시 해야할 것 #13

Open seungriyou opened 8 months ago

seungriyou commented 8 months ago

프로젝트를 생성할 때 잊지 말고 해야할 것들!

Contents

IDE (IntelliJ) 설정

Dependency 설정

DB, ORM 관련 설정

seungriyou commented 8 months ago

[IntelliJ] 새로운 프로젝트 불러올 때마다 다시 설정해야 할 것

1. 코드 저장 시 자동 코드 포맷팅

Rearrange Code도 하자

image


2. lombok 설정

image

seungriyou commented 8 months ago

[DB] 쿼리 파라미터 로그 남기기

두 가지 방법이 있는데, 외부 라이브러리를 사용하는 방법을 선택하겠다.

  1. application.yml 설정 추가
```yaml
logging.level:
  org.hibernate.type: trace
```
  1. 외부 라이브러리 사용

    • https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
    • p6spy의 latest release version을 확인하고, build.gradle에 다음과 같이 추가한다. (현재는 1.9.1)

      implementation("com.github.gavlyukovskiy:p6spy-spring-boot-starter:${version}")

      혹은

      implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.1'


[!caution] 운영에서 사용하려면 로그를 많이 남기기 때문에 성능 테스트를 수행해야 한다.

seungriyou commented 8 months ago

[Dependencies] build.gradle에 추가할 것

start.spring.io 설정

image


쿼리 파라미터 로그 남기기

https://github.com/gavlyukovskiy/spring-boot-data-source-decorator (p6spy)

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.1'


test lombok

// test lombok 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'


Querydsl

스프링 부트 3.0+ (https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit)

//Querydsl 추가
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

파일의 맨 끝에 다음을 추가해준다.

clean {
   delete file('src/main/generated')
}
seungriyou commented 8 months ago

[DB] MySQL Docker Compose로 띄우기

docker-compose.yml

version: '3.8'

services:
  db:
    image: mysql:8.0
    platform: linux/x86_64
    container_name: mysql_db
    restart: always
    ports:
      - ${DB_PORT}:${DB_PORT}
    env_file:
      - .env
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      TZ: ${DB_TIMEZONE}
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./db/mysql/conf.d:/etc/mysql/conf.d
      - ./db/mysql/data:/var/lib/mysql
      - ./db/mysql/initdb.d:/docker-entrypoint-initdb.d
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-p${DB_ROOT_PASSWORD}" ]
      retries: 3
      timeout: 5s


.env

DB_HOST=localhost
DB_PORT=3306
DB_ROOT_PASSWORD=1234
DB_USERNAME=sryou
DB_PASSWORD=1234
DB_DATABASE=practice
DB_TIMEZONE=Asia/Seoul