본문 바로가기

Java/Spring

[Spring] 길찾기 서비스 #3

What to do?

프로젝트 환경설정

Docker를 활용해 다중 컨테이너 환경을 구성해보자.


application.yaml 파일 만들기

프로젝트 관련된 세팅은 application.yaml에서 해주면 된다.

원래는 application.properties라는 파일이 있는데, 확장자를 yaml로 변경해주자

파일명 변경시에는 Shift + F6버튼을 누르면 된다.

확장자 properties → yaml


Profile 작성하기

dev(개발환경), prod(배포환경)이라는 두개의 개발환경을 만들고,

공통적으로 적용되는 내용은 common에서 정의해주기로 하자.

spring:
  profiles:
    active: dev   # default 환경
    group:
      dev:
        - common
      prod:
        - common
---
# dev, prod 환경에서 공통적인 내용
spring:
  config:
    active:
      on-profile: common
---
# dev 환경에서 적용되는 내용
spring:
  config:
    active:
      on-profile: dev
---
# prod 환경에서 적용되는 내용
spring:
  config:
    active:
      on-profile: prod

 

프로젝트를 실행시켜보면 dev와 common이라는 이름의 profile이 실행된다는 로그를 볼 수 있다.


Redis docker파일

캐시 기능을 사용하기 위해서 Redis를 사용할 것이다

FROM redis:6
ENV TZ=Asia/Seoul

/redis/Docerfile


maria DB docker파일

  • maria DB dockerfile

데이터베이스는 maria DB를 사용할 것이다.

FROM mariadb:10
ENV TZ=Asia/Seoul
  • maridb.cnf 

한글이 깨지는걸 방지하기 위한 설정을 넣어주었다.

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
default-character-set=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake

[mysqldump]
default-character-set=utf8mb4

.


환경변수

환경변수로 사용할 값들을 .env라는 파일에 정의해주자.

도커 컨테이너가 실행될 때 마다 .env에 있는 정보가 자동으로 주입된다.

프로젝트에서는 데이터 베이스에 접근하기 위해 필요한 유저명과 비밀번호는 환경변수로 해두었다.

SPRING_DATASOURCE_USERNAME=root
SPRING_DATABASE_PASSWORD=1221

.env

.env에서 정의한 내용들이 외부로 유출되면 안된다.

그래서 github에 push할 때 .env파일은 안 올라가도록 해주어야 한다.

이러한 설정은 .gitignore파일에서 정의하면 된다.

.gitnore


Docker Compose

위에서 redis, maria db dockerfile을 작성하였다.

각 도커 컨테이너의 라이프사이클을 만져주려면 docker-compose 파일을 작성해주어야 한다.

개발환경에서 사용할 docker-compose파일이라서 docker-compose-dev.yaml라고 작명해었다.

docker-compose-dev.yaml


docker compose 실행하기

docker-compose -f [도커 compose파일] up

docker-compose -f docker-compose-dev.yaml up

CMD에서 docker ps 명령어로 현재 실행중인 컨테이너를 출력해보았다.

그럼 Maria DB와 redis 컨테이너가 실행되고 있는 모습을 볼 수 있다.

 

반대로 지금 도커 컨테이너를 삭제하려면 up을 down으로 바꿔서 명령어를 적어주면 된다.


Profile 수정

 

  • build.gradle

JPA와 Maria DB connector 의존성을 추가해주자.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'

 

  • application.yaml

dev 환경에서 DB 와 관련된 설정들을 추가해주었다.

# dev
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3306/compass
    username: ${SPRING_DATASOURCE_USERNAME}
    password: ${SPRING_DATASOURCE_PASSWORD}
  redis:
    host: localhost
    port: 6379
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true

 

  • Edit Configuration

.env 파일에 있는 정보는 도커 컨테이너가 실행될 때 주입되기 된다.

그래서 intellj에서 Spring만 실행시킬 때는 SPRING_DATASOURCE_USERNAME이나 SPRING_DATASOURCE_PASSWORD 같은 환경변수를 주입받을 수 없다.

 

이 경우에는 IntellJ에서 직접 환경변수를 주입해주면 된다.

오른쪽 상단에 Edit Configurations 메뉴를 클릭하자

edit configuraiton
환경변수 추가
환경변수 추가

한번 DB연결이 잘 되는지 Test Connection을 연결해보면 잘 된다.

Test Connection


docker 컨테이너를 실행시키고(Maria DB, Redis)

Spring 앱을 실행시켰을 때도 잘 돌아간다

환경설정이 잘 된듯하다.

내일부터는 코딩을 시작해도 될거 같다.


 

 

'Java > Spring' 카테고리의 다른 글

[Spring] 게시판 만들기 #1  (0) 2022.11.07
[Spring] 길찾기 서비스 #4  (0) 2022.11.06
[Spring] 길찾기 서비스 #2  (0) 2022.11.05
[Spring] 길찾기 서비스 #1  (0) 2022.11.05
[Spring] 길찾기 서비스 #0  (0) 2022.11.05