서버 초기 설정

Jongwon·2023년 6월 23일
1

영화 예매 사이트

목록 보기
3/3
post-thumbnail

앞서 진행했던 프로젝트도 마찬가지였지만 이번 프로젝트에서도 백엔드 파트를 맡고 있기 때문에 Spring 서버와 DB위주의 설명만 진행할 예정입니다.


Spring Boot 초기설정

build.gradle

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()
}

저는 자바17버전을 이용한 Spring Boot를 사용하고 있습니다. 설정은 자유롭게 하셔도 되지만, 몇가지 부분은 필수적으로 추가해야 합니다.

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번 포트를 사용하고 있습니다.

application.yml

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 설정

docker compose 파일을 생성하여 이후 도커 이미지를 자동으로 만들 수 있도록 하겠습니다.

아래 두 개의 파일은 프로젝트 레벨(build.gradle과 같은 레벨)에 생성합니다.

Dockerfile

FROM openjdk:17
ARG JAR_FILE=/build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Dockerfile을 통해 서버의 이미지를 bootJar 명령으로 생성한 빌드 파일을 통해 생성할 수 있습니다.


docker-compose.yml

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

도커 컴포즈 파일을 통해 서버의 환경변수를 미리 입력해두어 이미지를 자동으로 컨테이너에 담아 실행할 수 있습니다.

profile
Backend Engineer

0개의 댓글

관련 채용 정보