2022. 12. 30. 01:18ㆍ프로젝트/라이어게임
프로젝트 초기 세팅을 진행해보자!
우선 개발도구는 인텔리제이이다.
옛날 옛적 대학교를 갓 나왔던 시절에는 이클립스를 사용하였는데, 현업 실무환경에서는 이클립스를 사용하기도 하지만 인텔리제이로 거의 대부분 사용한다고 한다.
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에 주입하는 것 이외에도 따로 설정해야할 부분들이 있다.
해당 내용은 따로 참고한 블로그를 보면 될 것이다.
세팅한 주요 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를 연결해주도록 하자.
Test Connection 을 눌렀을때 정상적으로 연결이 성공이 되었다는 문구가 나온다면 DB 연결에 성공했다는 뜻이다.
AWS RDS는 서버를 배포한 환경에서 사용하는 실무 DB라고 보면 된다.
RDS를 설정하는 방법은 따로 정리해놓은 글을 참고하면 될 것이다.
(정리글 : https://jindevelopetravel0919.tistory.com/32)
이로써 초기 프로젝트 세팅은 완료되었다.
이후로는 구현할 기능들에 대해 정리하면서 알아보도록 하자.
'프로젝트 > 라이어게임' 카테고리의 다른 글
[회원관리] 로그인 (0) | 2023.01.03 |
---|---|
[회원관리] 회원가입 (0) | 2022.12.30 |
[회원관리] Jwt를 활용한 회원관리 기능 세팅 (0) | 2022.12.28 |
서비스 아키텍쳐 (0) | 2022.12.15 |