이 글은 향로님의 [스프링부트로 웹 서비스 출시하기]를 참고하며 프로젝트를 만들며 정리한 글입니다.
👉 기본 환경
- Language: Java
- DB: MySQL
- IDE: IntelliJ
🤔
정보처리기사 실기 시험이 코 앞으로 다가왔기 때문에, 간단하게 SQL 실행 스크립트 예제를 정리해보고자 합니다.
시작 전에 먼저 알아야 할 점은,
⭐ 스크립트 기반의 초기화화 Hibernate 기반의 초기화가 함께 사용되는 것은 권장되지 않음 ⭐
application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
spring:
profiles:
active: local # 기본 환경 선택
# local 환경
---
spring:
profiles: local
datasource:
data: classpath:data-h2.sql # 시작할때 실행시킬 script
jpa:
show-sql: true
hibernate:
ddl-auto: create-drop
h2:
console:
enabled: true
|
저는 application.properties를 사용했지만, 게시글에서는 yml로 작성이 되어있습니다.
그래서 이 application.yml → application.properties로 변경하면,
스프링부트 3.x대 기준으로 동작하지 않을 확률이 높습니다.
5년의 시간동안 스프링부트도 변화했기 때문이죠.
그래서 우리의 친구 🌎Google과 🤖GPT의 도움을 받아 가장 먼저 properties 파일을 분리하였습니다.
- application.properties(전역 설정)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# MySQL 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/DB이름?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
spring.datasource.username=USER이름
spring.datasource.password=비밀번호
# JPA 설정
spring.jpa.show-sql=true
# true 설정 시, JPA 쿼리문 확인 가능
spring.jpa.hibernate.ddl-auto=create-drop
# DDL(create, alter, drop) 정의 시, DB의 고유 기능을 사용할 수 있음
spring.jpa.properties.hibernate.format_sql=true
# JPA의 구현체인 Hibernate가 동작하면서, 발생한 SQL의 가독성을 높여줌
# .jsp 설정
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
# 기본 환경 선택 (local 환경으로 선택)
spring.profiles.active=local
|
spring.profiles
- 어플리케이션 실행시 파라미터로 넘어온게 없으면 active 값을 인식
application-local.properties(전역 설정)
- 프로파일에 따라 다른 설정을 사용하도록 하기 위해 별도의 설정 파일을 생성
1
2
3
4
5
6
|
# local 환경
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.defer-datasource-initialization=true
spring.sql.init.mode=always
|
- 공통영역의 값은 각 profile환경에 동일한 설정이 있으면 무시되고, 없으면 공통영역의 설정값이 사용됨
🚨 그러므로, 공통영역에 설정값을 넣는것에 주의
- 만약 공통영역에 jpa.hibernate.ddl-auto:create-drop가 있고 운영 profile에 해당 설정값이 없다면 운영환경에서 배포시 모든 테이블이 drop -> create 됨
- ⭐ 이 때문에 datasource, table 등과 같은 옵션들은 공통영역엔 두지 않고 각 profile마다 별도로 두는것을 추천
1. spring.jpa.defer-datasource-initialization=true
스프링의 경우, 내장 데이터베이스(H2, HSQL, Derdy)에 대해서 스크립트 기반의 초기화를 기본적으로 실행하지만, 내장 데이터베이스가 아닌 경우(MySQL 등) 다음 옵션을 활성화(= always) 해야함
외부 데이터베이스와 연결되어 있다면 해당 옵션을 활성화해야 script 파일이 적용됨
Options
- always: 모든 데이터베이스에 sql script를 동작
- embedded: embedded(내장) 데이터베이스만 sql 스크립트를 동작
- never: 모든 데이터베이스에 sql script를 동작시키지 않음
⭐ SpringBoot Ver 확인
1
2
3
4
5
6
|
# Springboot 2.4.x 버전 이전
spring.datasource.initialization-mode
# Springboot 2.5.x 버전 이후
# 'spring.datasource.initialization-mode' Deprecated
spring.sql.init.mode
|
2. spring.sql.init.mode=always
Spring Boot 애플리케이션에서 데이터베이스 초기화를 설정하는 속성
데이터베이스 초기화 스크립트는 기본적으로 schema.sql 파일과 data.sql 파일을 찾아서 실행
프로젝트의 클래스패스에 위치해야 하며 일반적으로 src/main/resources 디렉토리에 위치
Options
- always
- 애플리케이션이 시작될 때 마다 데이터베이스 스키마 초기화 스크립트가 항상 실행
- 개발 및 테스트 환경에서 주로 사용되며, 애플리케이션을 새로 시작할 때마다 데이터베이스 스키마를 초기화하고 테스트 데이터를 적재하려는 경우에 유용
- embedded: 데이터베이스가 내장(embedded) 데이터베이스 (예: H2, HSQLDB)인 경우에만 데이터베이스 스키마 초기화를 시도
- never: 데이터베이스 스키마 초기화를 시도하지 않음, 보통 실제 환경에서 사용
3. data.sql
스프링부트에서는 데이터베이스 초기 설정을 위해 기본적으로 script(schema.sql, data.sql) 파일을 사용
- schema.sql: 데이터 정의어(DDL) 작성
- data.sql: 데이터 조작어(DML) 작성
🤹 실행 결과
+ Project Structure
🔗 소스 코드
📚 참고 자료
'PlayGround > AWS 연습' 카테고리의 다른 글
[Project] mini1 - EIP 등록 (0) | 2023.10.09 |
---|---|
[Project] mini1 - 클라우드 가상 서버 Amazon EC2 인스턴스 시작 (0) | 2023.10.08 |
[Project] mini1 - Ajax DB 통신과 fail 처리 (1) | 2023.10.04 |
[Project] mini1 - View 구현을 위한 JSP 설정 (1) | 2023.10.03 |
[Project] mini1 - Postman 활용 (0) | 2023.10.01 |