앞서 진행했던 프로젝트도 마찬가지였지만 이번 프로젝트에서도 백엔드 파트를 맡고 있기 때문에 Spring 서버와 DB위주의 설명만 진행할 예정입니다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.5'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'dbclass'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
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-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
// https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.0.2'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '3.0.2'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5',
// Uncomment the next line if you want to use RSASSA-PSS (PS256, PS384, PS512) algorithms:
//'org.bouncycastle:bcprov-jdk15on:1.70',
'io.jsonwebtoken:jjwt-jackson:0.11.5' // or 'io.jsonwebtoken:jjwt-gson:0.11.5' for gson
}
jar {
enabled = false
}
tasks.named('test') {
useJUnitPlatform()
}
dependency
1. spring data jpa
2. spring oauth2 client
3. spring oauth2 resource server
4. spring security
5. spring web
6. lombok
7. spring boot devtools
8. oracle jdbc(ojdbc8)
9. springdoc openapi(swagger 3.0을 위한 API)
10. spring validation(@Valid 어노테이션 이용을 위한 API)
11. jjwt api(JWT 토큰 사용을 위한 API)
jar
jar {
enabled = false
}
추후 도커로 연동을 진행할텐데, 도커파일을 빌드하기 위해서 jar enabled를 false로 지정해야 jar파일이 2번 컴파일되는 문제를 해결할 수 있습니다.
Oracle DB를 설치했다는 가정 하에 진행하도록 하겠습니다. 현재 오라클 21c 커뮤니티 버전(XE 버전)을 사용중입니다. 포트는 기본 포트인 1521번 포트를 사용하고 있습니다.
spring:
datasource:
url: jdbc:oracle:thin:@//localhost:1521/xe
username: jwk
password: 12341234
driver-class-name: oracle.jdbc.OracleDriver
jpa:
hibernate:
ddl-auto: update
# show-sql: 'true'
servlet:
multipart:
maxFileSize: 10MB
maxRequestSize: 10MB
location: *** //본인의 파일이 저장될 위치
jwt:
secret: **** //jwt 생성을 위한 비밀키는 본인이 원하는 String으로 지정
cors:
allowed-origins: 'http://localhost:3000'
allowed-methods: GET,POST,PUT,DELETE,OPTIONS
allowed-headers: '*'
max-age: 3600
Loggers:
Logger:
level: debug
datasource 부분에 db 연결과 관련한 부분을 작성하면 됩니다. DB와 연결한 User계정의 id와 비밀번호를 작성하면 됩니다.
jpa 부분은 hibernate를 통해 자동으로 DB와 관련한 쿼리를 작성해줍니다. 테이블 생성은 동일한 테이블명이 존재할 시 update로 DDL을 실행하게 됩니다.
servlet 부분은 이후 파일 업로드 및 전송 기능을 구현할 때 파일 저장 위치를 지정하기 위해 작성합니다.
jwt 부분은 토큰 생성 시 사용할 비밀키입니다.
cors 설정을 통해 REACT 프론트엔드와 CORS 에러를 방지합니다.
Logger 설정을 통해 로깅 레벨을 지정할 수 있습니다.
docker compose 파일을 생성하여 이후 도커 이미지를 자동으로 만들 수 있도록 하겠습니다.
아래 두 개의 파일은 프로젝트 레벨(build.gradle과 같은 레벨)에 생성합니다.
FROM openjdk:17
ARG JAR_FILE=/build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Dockerfile을 통해 서버의 이미지를 bootJar 명령으로 생성한 빌드 파일을 통해 생성할 수 있습니다.
version: "3"
services:
dbDesignServer:
container_name: server
ports:
- "8080:8080"
image: tank3a/dbdesign_server
volumes:
- server_images:/app/dbdesign/images
environment:
SPRING_DATASOURCE_URL: jdbc:oracle:thin:@host.docker.internal:1521/xe
SPRING_SERVLET_MULTIPART_LOCATION: /app/dbdesign/images
networks:
- dbdesign-net
networks:
dbdesign-net:
driver: bridge
volumes:
server_images:
driver: local
도커 컴포즈 파일을 통해 서버의 환경변수를 미리 입력해두어 이미지를 자동으로 컨테이너에 담아 실행할 수 있습니다.