Azure VM to Azure App Service

YongjLEE·2023년 8월 8일
0

PaaS형태로 수정하기 위해 DB를 Azure의 Azure Database for MySQL로 바꾼다.

DB(VM) 재가동

  1. 현재 VM이 내려간 상태이기 때문에 VM을 다시 올립니다.
  2. VM이 가동되었다면 Workbench로 DB접속이 되는지 확인합니다.

새로운 App Service 생성

  1. vs code에서 sbb프로젝트를 엽니다.
  2. Azure 메뉴를 클릭 후 App service에서 우클릭 후 Create New Web App메뉴를 클릭합니다.
  3. Web App의 이름을 정해줍니다. sbb-webapp-{본인 고유 이름}
  4. java 버전은 17을 지정해줍니다.
  5. 런타임 플랫폼은 java SE로 지정해줍니다.
  6. Pricing tier는 P1V2로 지정해줍니다.
  7. App Service가 생성되는 것을 콘솔에서 확인할 수 있습니다.

App Service에 Jar파일 Deploy

  1. 빌드된 jar파일 우클릭 후 메뉴에서 deploy to Web App 클릭
  2. 본인 app service를 찾아서 클릭
  3. port는 8080으로 지정
  4. 정말 배포할 지를 묻는 팝업이 뜨면 deploy 버튼을 클릭
  5. App Service URL로 집근하면 게시판이 뜨는 것을 볼 수 있습니다.
    1. 하지만 문제가 있습니다.
      현재 app service는 mysql을 바라보고 있는것이 아니라 h2데이터베이스를 바라보고 있습니다.
      환경변수 설정이나 아무런 옵션을 주지 않았기 때문에 application-prod.properties가 아닌 application.properties 설정파일을 바라보고 실행되었기 때문입니다.

  1. 환경변수를 설정하는 방법을 알았으니 이제 application-prod.properties에 하드코딩 된 MYSQL 정보들을 환경변수로 설정을 하겠습니다. 이렇게 되면 다시 빌드를 하지 않더라도 환경변수만으로 db ip를 자유자재로 바꿀 수 있고 github에 mysql ip와 유저네임 비밀번호가 모두 공개되어 버리는 대참사를 막을 수 있습니다. 설졍할 환경변수는 다음과 같습니다.
 <aside>
    MYSQL_HOST  : mysql의 ip나 도메인 정보가 담깁니다.
    MYSQL_PORT : mysql의 port정보가 담깁니다.
    MYSQL_USER : mysql 접속 유저 이름 정보가 담깁니다.
    MYSQL_USER_PASSWORD : $MYSQL_USER의 패스워드 정보가 담깁니다.
 </aside>

해당 환경변수를 application-prod.properties에 반영해보겠습니다.

#DATABASE
spring.datasource.url=jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/sbb?characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.username=${MYSQL_USER}
spring.datasource.password=${MYSQL_USER_PASSWORD}

그리고 빌드 후 재배포 합니다.

Azure Database for MySQL 서버 생성

  1. azure 포탈에서 검색창에 mysql을 입력합니다
    Marketplace에서 Azure database for mysql을 클릭합니다.
  2. Flexible server를 선택합니다
  3. 다음과 같이 설정하고 만듭니다.

  4. setting 메뉴의 databases에서 database 스키마를 추가해줍니다.

Azure MySQL 접속확인

mysql -> database -> manage connection -> new

그 후 재배포

application.properties 추가

우선 build.gradle에 postgresql 라이브러리를 추가합니다

(... 생략 ...)

dependencies {
    (... 생략 ...)
    runtimeOnly 'org.postgresql:postgresql'
}

(... 생략 ...)

src/main/resource/application-prod_postgresql.properties 파일을 추가합니다.

# DATABASE
spring.datasource.url=jdbc:postgresql://${POSTGRESQL_HOST}:${POSTGRESQL_POST}/sbb
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=${POSTGRESQL_USER}
spring.datasource.password=${POSTGRESQL_USER_PASSWORD}

# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true

profile
이용준의 블로그입니다.

0개의 댓글