본문으로 바로가기
반응형

본 예제는 Spring 5.x &Spring boot 2.3.0 버전을 사용합니다.

또한 Kotlin (v1.4.20)로 예제를 작성하며 IntelliJ CE를 사용합니다.



Spring boot를 이용하면 autoconfiguration을 통해 대부분의 구성이 자동으로 결정됩니다.

다만 개발/production에 대한 분기가 필요하거나, DB의 설정, 서버의 포트, 로그파일 생성 위치 등 기본 설정을 변경하고 싶다면 수동으로 이런 것들을 지정할 수 있습니다.

스프링은 여러 곳의 환경에서 설정된 설정값을 기반으로 설정값을 세팅합니다.

여기서 말하는 여러곳의 환경은 아래와 같습니다.

  • 운영체제의 시스템 속성
  • JVM의 속성
  • jar를 command로 수행 시 전달받는 argument
  • application.properties / application.yml의 프로젝트 자체 속성

이 모든 곳의 설정을 가져와서 환경을 세팅하기 때문에 언급된 부분에서 속성 값을 변경하면 spring이 영향을 받게 됩니다.

다르게 표현하면, 언급된 곳에서 속성을 변경하여 spring의 속성을 변경시킬 수 있습니다.

서버 포트 변경

기본적으로 application을 실행하면 8080 포트를 사용합니다.

이를 수정하려면 위 네 가지 방법 중 하나를 이용하면 됩니다.

 

운영체제의 시스템 속성 변경

$ export SERVER_PORT=9999

리눅스에서는 위와 같이 하지만 윈도우의 경우 환경변수에 시스템 변수로 추가해야 합니다.

그리고 intellij를 껐다가 재시작해야 적용됩니다.

 

application.properties / application.yml 속성 변경

두 파일 중 아무 곳에서나 서버 포트 변경이 가능합니다.

(application.yml이 프로젝트 없다면 application.poperties와 같은 경로(/resource/)에 빈 파일로 하나 만들면 됩니다.)

- application.properties의 경우

server.port=9999

- application.yml의 경우

server:
    port: 9999

 

jar 파일에서 args 값 지정

$ java -jar CarFactory-0.0.1-SNAPSHOT.jar --server.port=9999

intellij에서 spring boot project를 jar로 만드는 방법은 아래 글에서 확인 가능합니다.

2021/01/01 - [개발이야기/Spring Framework] - [Spring] 스프링 (Intellij) maven사용시 jar 배포 #8

이처럼 어디서 변경하더라도 spring은 해당 속성 값을 적용하여 처리합니다.

 

만약 서버 포트로 0을 설정한다면 랜덤 하게 포트가 선택되어 tomcat이 구동됩니다.

(실제 구동되는 포트를 알려면 서버 로그에서 tomcat started.... 부분의 로그를 봐야 합니다.)

 

SSL 설정

https를 이용하기 위해서는 keystore를 생성해야 합니다.

key 생성은 아래 링크에 잘 설명되어있어 설명을 대체합니다.

https://ayoteralab.tistory.com/entry/Spring-Boot-24-https-TLS-SSL-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

keystore를 정상적으로 만들었다면 아래와 같이 application.yml에 추가합니다.

server:
  port: 8443
  servlet:
    session:
      timeout: 30
  ssl:
    enable: true
    key-alias: carfactorystore
    key-store: testkey.pkcs12
    key-store-password: test123
    key-password: test123
    trust-store: testkeytrust.pkcs12
    trust-store-password: test123

생성된 key store는 project 폴더 바로 아래 위치시킵니다.(/resource 폴더 아래가 아닙니다.)

 

웹브라우저 접속 시 아래와 같이 잘 적용되어 있는 걸 확인할 수 있습니다.

DB 설정

앞선 예제에서는 H2 DB를 사용했습니다.

이는 내장 database로 사용하기 편리하기 때문이지만 실제 상용에서 사용한다면 내장 데이터베이스가 아닌 다른 저장소를 이용하게 됩니다.

따라서 H2 database의 구성을 아래와 같이 mysql로 변경해 봅니다.

먼저 mysql 사용을 위해 connector를 pom.xml에 추가합니다

<!-- mysql -> https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
</dependency>

- 기존 application.properties 구성 (h2 DB 사용)

spring.h2.console.enabled=true
spring.h2.console.path=/h2

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

'spring.h2.console.enabled=false'로 변경 후 나머지는 전부 주석처리합니다.

그리고 mysql 관련 정보를 넣습니다.

spring.h2.console.enabled=false
#spring.h2.console.path=/h2

#spring.datasource.url=jdbc:h2:mem:testdb
#spring.datasource.driverClassName=org.h2.Driver
#spring.datasource.username=sa
#spring.datasource.password=

#mysql 정보 추가
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/carfactory
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.username=carfactory
spring.datasource.password=carfactorytest1

이때 spring.datacource.driverClassName"com.mysql.cj.jdbc.Driver"로 넣었습니다.

만약 connector가 8.0 이하 버전이라면 "com.mysql.jdbc.Driver"를 사용합니다.

앞선 DB 관련 포스팅에서 JPA를 사용하여 생성했던 dept2, employee2, user table이 mysql에 잘 생성되어 있는 걸 확인할 수 있습니다.

반응형