프로젝트 세팅

2022. 12. 30. 01:18프로젝트/라이어게임

728x90
SMALL

프로젝트 초기 세팅을 진행해보자!

 

우선 개발도구는 인텔리제이이다.

옛날 옛적 대학교를 갓 나왔던 시절에는 이클립스를 사용하였는데, 현업 실무환경에서는 이클립스를 사용하기도 하지만 인텔리제이로 거의 대부분 사용한다고 한다.

 

 

Spring 프로젝트를 진행하게 되면 초기에 maven 형식으로 갈 것인지 gradle 형식으로 갈 것인지 우선적으로 정해야한다.

나는 gradle을 선택하기로 했다.

이전에는 maven을 사용했었지만 두개 다 사용해본 느낌으로는 maven은 뭔가 html 느낌에 딱딱하고 일일이 어떤 dependency를 사용했는지 확인해야할 때, 파악하기가 어려웠다.

- Java

- Java version : 17

- JDK : temurin-11

 

 

[build.gradle]

gradle 형식으로 진행하기로 했다면, 초기에 어떤 dependency를 넣어서 사용할 것인지 정해야한다.

dependency를 넣어주도록 한다.

buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}

plugins {
    id 'org.springframework.boot' version '2.7.5'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id 'java'
    // querydsl 플러그인 추가
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version: '2.7.5'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-web-services'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'

    // JWT
    compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2'
    runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
    runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'

    // validation
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'io.springfox:springfox-boot-starter:3.0.0'
    implementation 'io.springfox:springfox-swagger-ui:3.0.0'

    // AWS S3
    implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

    // querydsl 디펜던시 추가
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    implementation "com.querydsl:querydsl-apt:${queryDslVersion}"

    // JSONObject
    implementation 'com.googlecode.json-simple:json-simple:1.1.1'
    implementation 'org.json:json:20220924'

    // WebSocket
    compile 'org.springframework.boot:spring-boot-starter-mustache'
    compile 'org.webjars.bower:jquery:3.6.1'
    compile 'org.webjars:sockjs-client:1.5.1'
    compile 'org.webjars:webjars-locator:0.45'
    runtimeOnly 'org.springframework.boot:spring-boot-devtools'

    // pub/sub
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.2'

    // 추가
    implementation 'org.springframework.boot:spring-boot-starter-freemarker'
    implementation 'it.ozimov:embedded-redis:0.7.2'
    implementation 'org.webjars.bower:bootstrap:4.3.1'
    implementation 'org.webjars.bower:vue:2.5.16'
    implementation 'org.webjars.bower:axios:0.17.1'
    implementation 'org.webjars:sockjs-client:1.1.2'
    implementation 'org.webjars:stomp-websocket:2.3.3-1'
    implementation 'com.google.code.gson:gson:2.8.0'


    // openvidu
    implementation group: 'io.openvidu', name: 'openvidu-parent', version: '2.0.0', ext: 'pom'

    // Openvidu 의존성
    implementation group: 'io.openvidu', name: 'openvidu-java-client', version: '2.18.0'

    //WebRTC 클라이언트 의존성 추가
    implementation('org.webjars.bower:webrtc-adapter:7.4.0')
    //Kurento (미디어서버) 관련 의존성 추가
    implementation('org.kurento:kurento-client:6.16.0')
    implementation('org.kurento:kurento-utils-js:6.15.0')

    //STOMP 웹소캣 서버 사이드 테스트를 위한 의존성 추가
    implementation("org.springframework.boot:spring-boot-starter-mustache")
    //STOMP 관련 프론트 라이브러리
    implementation('org.webjars.bower:jquery:3.3.1')
    implementation('org.webjars:sockjs-client:1.1.2')
    implementation('org.webjars:stomp-websocket:2.3.3-1')
    implementation('org.webjars:webjars-locator:0.30')

    // redis cache 의존성
    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '2.5.0'
    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-cache
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache', version: '2.4.3'

    // 다른 서버 API 사용 webflux 의존성
    compile 'org.springframework.boot:spring-boot-starter-webflux'
    compile 'org.projectreactor:reactor-spring:1.0.1.RELEASE'

}

//빌드시 plain jar 파일은 만들어지지 않습니다.
jar {
    enabled = false
}

// querydsl 사용할 경로 지정합니다. 현재 지정한 부분은 .gitignore에 포함되므로 git에 올라가지 않습니다.
def querydslDir = "$buildDir/generated/'querydsl'"

// JPA 사용여부 및 사용 경로 설정
querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}

// build시 사용할 sourceSet 추가 설정
sourceSets {
    main.java.srcDir querydslDir
}


// querydsl 컴파일 시 사용할 옵션 설정
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

// querydsl이 compileClassPath를 상속하도록 설정
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
}

tasks.named('test') {
    useJUnitPlatform()
}

여기서 데이터베이스와 관련된 관리 및 동작을 수행할 때, QueryDSL을 주로 사용하였는데 QueryDSL을 사용하기 위해선 gradle에 주입하는 것 이외에도 따로 설정해야할 부분들이 있다.

해당 내용은 따로 참고한 블로그를 보면 될 것이다.

(참고 블로그 = https://dingdingmin-back-end-developer.tistory.com/entry/Spring-Data-JPA-7-Querydsl-%EC%82%AC%EC%9A%A9-gradle-7x)

 

Spring-Data-JPA [7] Querydsl 설정 (gradle 7.x)

Querydsl을 세팅하기 전에 무엇인지 먼저 알아봅시다. 1. Querydsl이란? 타입에 안전한 방식으로 HQL(Hibernate Query Language)를 실행하기 위한 목적으로 만들어졌습니다. HQL를 작성하다 보면, String 연결 (ex=

dingdingmin-back-end-developer.tistory.com

 

세팅한 주요 dependency들을 확인해보면 이렇다.

 

- jpa : 
- thymeleaf : 
- oauth2 : 
- spring web : 
- spring security : 
- jwt : 
- websocket : 
- lombok : 
- mysql : 
- swagger : 
- aws : 
- querydsl : 
- jsonobject : 
- redis : 
- sockjs : 
- stomp : 
- webrtc : 
- openvidu : 

 

 

[application.properties]

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/{로컬 DB명}?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username={로컬 DB계정 아이디}
spring.datasource.password={로컬 DB계정 비밀번호}

#spring.datasource.url=jdbc:mysql://{RDS 데이터베이스명/경로}?serverTimezone=UTC&characterEncoding=UTF-8
#spring.datasource.username={RDS 아이디}
#spring.datasource.password={RDS 비밀번호}


spring.output.ansi.enabled=always

spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update

jwt.secret={시크릿 키 마음대로 지정}

server.servlet.encoding.charset=utf-8
server.servlet.encoding.force=true

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
spring.main.allow-bean-definition-overriding=true
spring.mvc.pathmatch.matching-strategy=ant_path_matcher


#google
spring.security.oauth2.client.registration.google.client-id={구글 oauth2 허가 아이디}
spring.security.oauth2.client.registration.google.client-secret={구글 oauth2 허가 시크릿 키}
spring.security.oauth2.client.registration.google.scope=profile,email

# OAUTH
spring.profiles.include=oauth

sns.google.url=https://accounts.google.com/o/oauth2/v2/auth
sns.google.client.id={구글 oauth2 허가 아이디}
sns.google.callback.url={구글 콜백 적용 url}
sns.google.client.secret={구글 oauth2 허가 시크릿 키}
sns.google.token.url=https://oauth2.googleapis.com/token

mysql 사용 DB는 로컬과 아마존 RDS 두 가지를 상황에 따라 번갈아 사용하기 위해서 두 개를 세팅하였다.

spring.jpa.hibernate.ddl-auto 가 DB를 사용함에 있어서 자주 보게될 설정값이다.

 

<create>

해당 값을 create 로 설정한 후에 어플리케이션을 실행하게 되면, 만들어 놓은 entity들이 초기화되면서 생성되게 된다.

프로젝트를 진행하는 도중에 entity에 변동사항이 있거나 추가사항이 있을 경우 혹은 생성된 테이블을 초기화하여 다시 생성하고 싶을 경우 create를 사용한다.

 

<update>

해당 값을 update로 설정한 후에 어플리케이션을 실행하게 되면, create와 다르게 리셋되지 않고 추가된 사항, 변경 사항만 추가되어 적용된다.

따라서 주로 update로 설정해놓는 것이 테스트 하거나 프로젝트 진행 중인 상황에서는 효율적일 것이다.

create로 설정하면 실행할 때마다 초기화되어 테이블에 다시 새로 값을 넣어주어야 하기 때문이다.

 

밑의 oauth2, google 과 관련된 설정값들은 이후 구글 로그인을 구현하기 위해 설정한 값들이다.

구글 로그인 api 단계에서 짚고 넘어가도록 하자.

 

 

[MySQL, RDS]

application.properties에서 DB를 상황에 따라 두가지를 번갈아 사용하기 위해 설정을 하였다.

따라서, 두 가지의 DB를 연결해주도록 하자.

 

# 로컬 MySQL
# RDS MySQL

Test Connection 을 눌렀을때 정상적으로 연결이 성공이 되었다는 문구가 나온다면 DB 연결에 성공했다는 뜻이다.

 

AWS RDS는 서버를 배포한 환경에서 사용하는 실무 DB라고 보면 된다.

RDS를 설정하는 방법은 따로 정리해놓은 글을 참고하면 될 것이다.

(정리글 : https://jindevelopetravel0919.tistory.com/32)

 

 

이로써 초기 프로젝트 세팅은 완료되었다.

이후로는 구현할 기능들에 대해 정리하면서 알아보도록 하자.

 

 

728x90
반응형
LIST

'프로젝트 > 라이어게임' 카테고리의 다른 글

[회원관리] 로그인  (0) 2023.01.03
[회원관리] 회원가입  (0) 2022.12.30
[회원관리] Jwt를 활용한 회원관리 기능 세팅  (0) 2022.12.28
서비스 아키텍쳐  (0) 2022.12.15