프로젝트/PongGame

build.gradle, application.yml

히포파타마스 2022. 4. 13. 12:00

의존성 라이브러리 추가, 애플리케이션 설정

프로젝트 진행에 있어 필요한 의존성 라이브러리들을 추가하고 애플리케이션에 대한 설정을 추가한다.

의존성 라이브러리 관리는 gradle을 사용하였고, 어플리케이션 설정은 yml을 사용하였다.

 

 

 

 

1. 의존성 라이브러리

 

[dependency]

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation group: 'com.auth0', name: 'java-jwt', version: '3.18.1'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'com.querydsl:querydsl-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.0'
    implementation group: 'org.webjars', name: 'sockjs-client', version: '1.1.2'
    implementation group: 'org.webjars', name: 'stomp-websocket', version: '2.3.3-1'
    implementation group: 'org.springframework.security', name: 'spring-security-messaging'
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation group: 'org.springframework', name: 'spring-messaging'
    implementation group: 'org.modelmapper', name: 'modelmapper', version: '2.3.6'
    //objectMapper 사용시 LocalDateTime을 가져오지 못하는 오류 해결
    implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310'
    implementation group: 'com.google.code.gson', name: 'gson'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'mysql:mysql-connector-java'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
}

□ 웹

● spring-boot-starter-web : Spring Web

 

 

□ 인증, 보안

● spring-boot-starter-security : Spring Security

● java-jwt : JWT

● spring-boot-starter-oauth2-client : Oauth

 

 

□ DB

●  spring-boot-starter-data-jpa : JPA

● querydsl-jpa : QueryDSL

● p6spy-spring-boot-starter : 쿼리 파라미터에 적용되는 실제 값을 나타내 주는 라이브러리

 

 

□ 웹소켓

● spring-boot-starter-websocket : Spring Websocket

● sockjs-client : websocket 사용 시 sockjs설정에 필요한 라이브러리

● stomp-websocket : stomp

● spring-security-messaging : websocket에 security적용

 

 

□ 기타 유틸

● spring-boot-starter-mail : 메일 전송

● spring-boot-starter-validation : 검증에 필요한 validation 관련 라이브러리

● spring-messaging : spring messaging

● modelmapper : 클래스 매핑 관련 라이브러리

● jackson-datatype-jsr310 : objectMapper 사용시 LocalDateTime을 매핑하지 못하는 문제 해결

● gson : object와 json간의 매핑을 쉽게 해주는 라이브러리 

● spring-boot-starter-thymeleaf : 타임리프

● thymeleaf-extras-springsecurity5 : 타임리프 security 설정

● spring-boot-devtools : 빌드만으로 화면 변경

● lombok : lombok(annotationProcessor로 지정해야 함 x -> 컴파일러 롬복 어노테이션 인식 못함)

● mysql-connector-java : mysql 커넥터

● spring-boot-starter-test : spring test

● spring-security-test : spring test시 security사용 관련 라이브러리

 

 

 

■ QueryDSL

QueryDSL을 사용하기 위해서는 Dependency 뿐만 아니라 추가적인 설정을 작성해야 한다.

 

[플러그인 추가]

plugins {
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

 

 

[QueryDSL 설정 추가]

//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝

● querydsl : QueryDSL 기본 설정 추가. jpa 사용 여부, 사용될 경로 등을 지정한다.

● sourceSet : build시 사용할 sourceSet을 추가한다.

● configurations : QueryDSL 설정. QueryDSL이 compileClasspath를 상속하도록 설정.

● compileQuerydsl : QueryDSL이 컴파일을 할 때 사용할 옵션을 설정

 

 

 

 

2. 애플리케이션 설정

■ application.yml

 

[application.yml]

server:
  port: 8080
  servlet:
    encoding:
      charset: UTF-8
      enabled: true
      force: true
    session:
      tracking-modes: cookie

spring:
  profiles:
    include: oauth, db
  messages:
    basename: messages,errors

  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    properties:
      hibernate:
        format_sql: true
        default_batch_fetch_size: 100

decorator:
  datasource:
    p6spy:
      enable-logging: true

#logging.level:
#  org.hibernate.SQL: debug

□ server

● port : 애플리케이션의 포트를 설정한다(기본 8080).

● servlet

◎ encoding : HTTP URL의 인코딩 설정

◎ session_tracking-modes_cookie : 브라우저가 쿠키를 사용하지 못하거나 쿠키가 없을 경우 url에 jsessionid를 노출시키는 것을 방지

 

 

□ spring

● profiles_include : 특정 이름의 설정 파일을 적용한다.

ex) profiles_include: oauth, db -> 설정 파일에 application-oauth.yml, application-db.yml의 내용이 적용된다.

 

● messages_basename : 스프링 메시지는 해당 설정에 명시된 이름을 기반으로 메시지 설정 파일을 인식한다.

ex) messages_basename: messages, errors -> messages.properties, errors.properties 파일을 메시지 설정 파일로 인식 

 

 

□ jpa

● hibernate_naming_physical-strategy

◎ jpa사용 시 table의 이름을 생성하는 정책을 설정한다.

◎ 기본적으로 언더스코어를 활용하는 방식을 적용.

◎ 본 프로젝트에서는 class 이름이 그대로 table 이름이 되는 정책을 사용 (PhysicalNamingStrategyStandardImpl)

 

● properties_hibernate

◎ format_sql : 콘솔에 출력되는 쿼리문을 보기 좋은 형태로 바꿔준다.

◎ default_batch_fetch_size : 일대다 조회 시 컬렉션이나, 프록시 객체를 한꺼번에 설정한 size만큼 IN 쿼리로 조회한다.

일대다 조회시 해당 설정에 의해 컬렉션은 별도로 조회되기 때문에 페이징을 적용할 수 있다.

 

 

 

■ application-db.yml

DB와 관련된 설정이 작성되어있다.

DB의 username과 password가 설정되어야 되기 때문에 별도의 설정 파일로 만들고 git.ignore로 설정해서 정보의 유출을 제한하였다.

 

[application-db.yml]

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/hipo
    username: (사용하는 DB의 username)
    password: (사용하는 DB의 password)

  jpa:
    hibernate:
      ddl-auto: update

□ spring

● datasource

◎ driver-class-name : 사용되는 DB종류를 설정

◎ url : DB의 url

 

 

□ jpa

● hibernate_ddl-auto : 서버가 실행될 때 DB의 초기화 전략을 설정한다.