Java

TIL 자바 스프링부트 서버개발 올인원 : 38강

킹갓홍 2024. 5. 14. 00:01

Profile

현재 도서관리 어플리케이션은 로컬에서만 실행이 되도록 하고있다. 때문에 DB도 로컬에 있는 MySql과 연결이 되어있다. 그렇다면 AWS로 배포 할 때는 어떻게 아마존에서 빌린 컴퓨터의 DB를 사용할 수 있을까?

Profile이라는 개념은 여기에 적용이 되는 부분이다. 로컬 컴퓨터에서 돌렸을 때의 설정과 외부 서버에서 돌렸을 때의 설정을 다르게 해준다는 것이다.(비단 DB뿐만 아니라, 다양한 종류의 설정을 할 수 있다.)

출처 : 인프런 -  자바와 스프링 부트로 생애 최초 서버 만들기

(이미 로컬서버를 실행시킬 때 Profile 설정을 체크하고 있었다.)

 

출처 : 인프런 -  자바와 스프링 부트로 생애 최초 서버 만들기

연습을 위해 위의 사진과 같이 Profile설정을 다르게 해서 local일 경우, H2 DB를 사용하도록 하고 dev일 경우 MySql DB를 사용하도록 해보자


H2 DB

경량 DB로 개발 단계에서 많이 사용하며 디스크가 아닌 메모리에 데이터를 저장할 수 있다.

개발 단계에서는 테이블이 계속 변경되는데, ddl-auto 옵션을 create로 주면 휘발되는 속성을 이용해서 편리하게 개발할 수 있다.

 

Profile 옵션을 사용해서 다른 DB를 사용할 수 있게 하기 위해서는 appilcation.yml파일에 내용을 추가해야한다.

 

기존 application.yml 파일

spring:
  datasource:
    url: "jdbc:mysql://localhost/library"
    username: "root"
    password: "1234"
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: none #스프링이 시작할 때 DB에 있는 테이브을 어떻게 처리할지 (DB와 매핑할 때 다른경우 어떻게 처리할지 creat/create-drop..등등이 있음)
    properties:
      hibernate:
        show_sql: true #JPA를 사용해서 DB에 SQL을 날릴 때 SQL을 보여줄건지
        format_sql: true #SQL을 보여준다면 보기좋게 포맷팅을 해서 보여줄지
                dialect: org.hibernate.dialect.MySQL8Dialect #방언, 사투리라는 뜻으로 SQL문법이 조금 다른 경우 SQL을 수정해준다.(현재 mySQL8에 맞게 설정)

 

수정된 application.yml파일

spring:
  config:
    activate:
      on-profile: local

  datasource:
    url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER"  #MODE를 MYSQL로 해서 MySQL환경으로 맞춰줄 수 있다. USER가 예약어이기 때문에 USER테이블을 만들어 줄 수 있도록 NON_KEYWORDS를 쓴다.
    username: ""
    password: ""
    driver-class-name: org.h2.Driver

  jap:
    hibernate:
      ddl-auto: create

    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.H2Dialect
  h2:
    console:
      enabled: true
      path: /h2-console

---
spring:
  config:
    activate:
      on-profile: dev

  datasource:
    url: "jdbc:mysql://localhost/library"
    username: "root"
    password: ""
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: none #스프링이 시작할 때 DB에 있는 테이브을 어떻게 처리할지 (DB와 매핑할 때 다른경우 어떻게 처리할지 creat/create-drop..등등이 있음)

    properties:
      hibernate:
        show_sql: true #JPA를 사용해서 DB에 SQL을 날릴 때 SQL을 보여줄건지
        format_sql: true #SQL을 보여준다면 보기좋게 포맷팅을 해서 보여줄지
        dialect: org.hibernate.dialect.MySQL8Dialect #방언, 사투리라는 뜻으로 SQL문법이 조금 다른 경우 SQL을 수정해준다.(현재 mySQL8에 맞게 설정)

config -> activate -> on-profile 설정을 dev로 해놓으면 dev인 경우 mySql을 사용하도록 만든 것이다.


Profile 지정하는 법

강의에서는 유료 인텔리제이이기 떄문에 application 탭 Build And Run에서 바로 설정할 수 있었지만

무료 버전은 아래와 같이

VM Option에

-Dspring.profiles.active= [원하는 profile 이름]

해당 내용을 넣어주면 된다.