섹션 7. 생애 최초 배포 준비하기

김민지·2025년 4월 1일

서버 기초 강의

목록 보기
7/12

profile과 H2 DB

배포란?

  • 로컬의 코드를 AWS의 서버로 옮기는 과정. 이 과정에서 MySQL 등 로컬에서 사용했던 프로그램들을 동일하게 설치해줘야 함.

profile이란?

  • profile 개념 적용해보기 : 동일한 서버 코드를 실행시키되, local 이라는 profile을 사용하면 H2 DB를 사용하도록 하고, dev 라는 profile 을 사용하면 MySQL DB를 사용하도록 바꿔보자.
    이 과정에서 Java 코드의 변화는 없음!

  • application.yml 파일을 수정해보자!

    • --- : 구분선의 의미로, 해당 선을 기준으로 위와 아래의 옵션을 구분하는 역할을 함
    • NON_KEYWORDS=USER : USER는 원래 H2에서 예약어라서 User 테이블을 생성할 수 없음. 그러나 실제로는 User 테이블을 빈번하게 생성해야 할 일이 많으므로 해당 옵션을 사용해서 아닌 일반 식별자로 사용 가능하도록 함.
  • 아래의 yml 코드는 --- 기준 위의 설정들은 local 이라는 profile을 사용하며 H2 DB를 사용하도록 하고, dev 라는 profile 을 사용하며 MySQL DB를 사용하도록 함

spring:
  config:
    activate:
      on-profile: local
  datasource:
    url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER"
    username: "sa"
    password: ""
    driver-class-name: org.h2.Driver
  jpa:
    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: "rlaalswl"
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.MySQL8Dialect

이제 본격적으로 어떻게 각각 다른 profile을 설정하는지에 대해 알아보자!

  1. Spring 서버를 실행시키는 버튼 우측의 점 세개를 클릭해보면 Edit Configuration 이라는 옵션이 나온다.
  2. 아래 화면의 Active Profiles: 부분에 local 혹은 dev를 선택해서 적어주면 반영됨.
    우선 local 을 선택한 후 ApplyOK를 순서대로 클릭하고, 서버를 시작해주자.
  3. 아래의 실행 화면을 확인해보면 The following 1 profile is active: "local" 라는 문구와 함께 local로 실행된 것을 확인할 수 있음.
  4. 웹 UI로 접속해보면 아래와 같이 기존에 데이터베이스에 저장해둔 정보들이 모두 날아간 것을 확인할 수 있음 (H2 DB로 실행된 것이므로 자연스러운 현상)
  5. 이번에는 h2console 옵션을 활성화하고, path/h2-console 로 설정한 아래의 코드의 의미를 살펴보자.
  • 해당 코드는 말 그대로, h2console에 접속할 수 있도록 한다.
    서버 기본 Url인 http://localhost:8080뒤에 /h2-console을 붙여서 접속하면 아래의 화면이 나온다.
  • 여기에서 JDBC URL을 .yml 파일에서 설정해준대로jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER 로 수정해주고, 다른 옵션들도 .yml 파일과 동일한지 확인한 후 Connect 버튼을 누르면 아래와 같이 연결된다.

    연결된 화면은 다음과 같다.

    각 테이블의 스키마 정보를 확인할 수도 있고, 아래와 같이 SQL문을 입력한 후 실행하면 실행 결과도 확인할 수 있다.
  1. 이어서 dev profile로도 접속해보면 우리가 개발하며 넣어두었던 데이터가 잘 들어가있는 것을 확인할 수 있다.

H2 DB의 필요성

  • H2 DB란? 가벼운 데이터베이스로, 개발 단계에서 많이 사용함. 디스크가 아닌 메모리에 데이터를 저장할 수 있음.
    ❓ 메모리에 데이터를 저장하면 휘발되지 않나? → 맞음!
    그러나 개발 단계에서는 오히려 장점이 될 수 있음.

  • 어차피 데이터가 휘발되므로 (메모리에 저장되므로), ddl-auto 옵션을 create 로 주면 테이블을 신경쓰지 않고 코드에만 집중할 수 있음 (예전에 내가 어떤 데이터를 넣어뒀지? 를 고민할 필요가 없어짐!)

  • ddl-auto: Spring Boot에서 JPA(Hibernate)를 사용할 때, 애플리케이션 실행 시 데이터베이스 스키마를 어떻게 처리할지를 설정하는 옵션이며, 이는 application.yml 파일에서 spring.jpa.hibernate.ddl-auto라는 속성으로 지정할 수 있음

  • ddl-auto의 주요 옵션들

    • none: 아무 작업도 하지 않음 (기본적으로 스키마 변경 X)
    • create: 실행 시 기존 테이블을 모두 삭제하고 새로 생성함
    • create-drop: create와 같지만, 애플리케이션 종료 시 테이블도 삭제함
    • update: 테이블이 없으면 만들고, 있으면 필요한 컬럼만 추가/수정함 (기존 데이터 유지)
    • validate: 테이블이 존재하는지, 그리고 JPA 매핑과 정확히 일치하는지 검증만 함 (불일치 시 오류 발생)

git 기초 사용법

  • git: 코드를 쉽게 관리할 수 있는 버전 관리 프로그램

.gitignore 파일 추가 후 추가 이전에 추적중이던 파일을 삭제하는 방법

.idea/
build/
.gradle/
application.yml
  • 이후 아래와 같이 입력해서 추적을 취소해줘야 함
git rm --cached -r .idea
git rm --cached -r build
git rm --cached -r .gradle
git rm --cached src/main/resources/application.yml
  • git reset : 커밋 이력이나 staging 영역을 초기화하는 명령어

AWS의 EC2 사용하기

  1. EC2 를 검색해서 접속한 아래 화면에서, 인스턴스 시작 버튼 클릭

  2. 이름, OS 유형(Linux), 인스턴스 유형(Free Tier) 등을 선택해준다.

  3. 이후, 아래와 같이 키 페어가 필요해진다. (이는 추후 ssh 창에서의 접속을 위해 필요하다. 만약 AWS 서비스를 아예 처음 이용하는 상황이라면 새 키 페어 생성을 클릭해서 키를 생성해주도록 하자.

    아래와 같이 생성해주고 나면 .pem 파일 형식으로 키 파일이 다운로드되는데, 이후 사용해야 하므로 잘 보관해두자.

  4. 네트워크 설정에서는 다른 옵션들은 크게 신경쓰지 않아도 괜찮으며, 보안 그룹 생성으로 설정되어있는지만 확인하고 넘어가자.

  5. 우측 하단의 인스턴스 시작 버튼을 클릭해서 인스턴스 생성해주기

0개의 댓글