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을 설정하는지에 대해 알아보자!
▷ 버튼 우측의 점 세개를 클릭해보면 Edit Configuration 이라는 옵션이 나온다.
Active Profiles: 부분에 local 혹은 dev를 선택해서 적어주면 반영됨.local 을 선택한 후 Apply와 OK를 순서대로 클릭하고, 서버를 시작해주자.
The following 1 profile is active: "local" 라는 문구와 함께 local로 실행된 것을 확인할 수 있음.

h2의 console 옵션을 활성화하고, path를 /h2-console 로 설정한 아래의 코드의 의미를 살펴보자. h2의 console에 접속할 수 있도록 한다.http://localhost:8080뒤에 /h2-console을 붙여서 접속하면 아래의 화면이 나온다. .yml 파일에서 설정해준대로jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER 로 수정해주고, 다른 옵션들도 .yml 파일과 동일한지 확인한 후 Connect 버튼을 누르면 아래와 같이 연결된다.


dev profile로도 접속해보면 우리가 개발하며 넣어두었던 데이터가 잘 들어가있는 것을 확인할 수 있다. 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 매핑과 정확히 일치하는지 검증만 함 (불일치 시 오류 발생).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 영역을 초기화하는 명령어EC2 를 검색해서 접속한 아래 화면에서, 인스턴스 시작 버튼 클릭

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

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

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

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

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