환경(개발 환경 OR 배포 환경)에 따라 다른 설정 값이 필요하였기에 spring boot 설정 파일을 profile을 사용하여 다음과 같이 분리하였다.
프로파일을 적용하는 방법은 다음과 같다.
직접 작성 OR IDE 사용(우선 순위가 높다)
직접 작성
java -Dspring.profile.active={원하는 프로파일} -jar {jarfile}
IDE(at Intellij)
Run/Debug Configurations → Active profiles에 원하는 프로파일 입력
spring:
profiles:
active: 원하는 프로파일
배포시에는 none으로 설정하자! create을 사요하면 어플리케이션이 실행될 때마다 데이터베이스가 초기화되는 경험을 하게될 것이다.
어플리케이션도 docker 컨테이너로 띄우고 어플리케이션의 세션 저장소로 사용될 redis도 docker로 띄운다. 따라서 컨테이너간 통신이 필요한 상황이기에 docker-compose 파일을 사용하였다.
앞으로 나오는 문제들은 구글링을 통해 해결했으나 아직 정확히 이유를 파악하지 못한 상황이다. 더 공부해본 후 내용을 추가해야겠다.
백엔드 어플리케인션은 컨테이너로 띄우고 H2 데이터베이스는 로컬(도커 사용 안함. 직접 설치하여 사용)에 띄워져 있다.
datasource:
url: jdbc:h2:tcp://localhost/~/bankSystem
username: sa
password:
driver-class-name: org.h2.Driver
위와 같이 설정할 때 connection이 이루어 지지 않았으나
datasource:
url: jdbc:h2:tcp://{h2 실행시 브라우저에 나타나는 IP 주소}/~/bankSystem
username: sa
password:
driver-class-name: org.h2.Driver
위와 같이 수정하니 connection이 이루어졌다.
(🤨 왜지 ?)
docker-compose파일을 이용하여 필요한 컨테이너들을 뜨위고 h2 데이터베이스도 잘 연결 되었으나 이번에는 백엔드 어플리케이션에서 redis에 연결이 안이루어졌다. 따라서 아래를
redis:
host: localhost
port: 6379
password:
아래와 같이 변경하여 해당 문제를 해결하였다.
redis:
host: redis_dev #docker-compse에서 설정한 컨테이너 이름
port: 6379
password:
아래는 사용한 docker-compose.yml 파일이다.
version: "3"
services:
redis_dev:
image: redis
ports:
- "6379:6379"
bank_system_dev:
build:
dockerfile: Dockerfile.dev
context: .
ports:
- "8080:8080"
depends_on:
- redis_dev
😲 depends_on은 컨테이너가 의존하고 있어 먼저 실행되야하는 컨테이너를 설정하는 부분이다.