Docker๋ฅผ ํตํ Database ๊ตฌ๋
Database: ์ฌ์ฉํ๋ ค๋ DB์ Base Docker Image ๊ธฐ๋ฐ์ ์ถ๊ฐ ์ค์
๋ชฉ์ : Docker๋ฅผ ํตํ Database(MySql) ๊ตฌ๋ ← docker ๋ช ๋ น์ด ์ฌ์ฉ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ๋์ Dockerfile ํตํ ์ด๋ฏธ์ง ์์ฑ ์์ด, ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก ๋ฐ๋ก ๊ตฌ๋ํ๋ค.
1. MySQL ๋์ปค ๊ตฌ๋
- ์๋ ๋ช
๋ น์ด๋ฅผ ํตํด ๋ฐ๋ก ๊ตฌ๋์ด ๊ฐ๋ฅํ๋ค
- ์ฃผ์: ๋์ปค ๋ด ํฌํธ๋ 3306์ด์ง๋ง, ๋ก์ปฌ ๋ ธ์ถ ํฌํธ๋ 33066
docker run --name mysql-container \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_USER=asac \
-e MYSQL_PASSWORD=1234 \
-e MYSQL_DATABASE=example \
-p 33066:3306 -d mysql:8
- ์ปจํ
์ด๋๊ฐ ์ ๊ตฌ๋๋์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ตฌ๋ ์ค์ธ ์ปจํ
์ด๋ ์กฐํ (๋ชจ๋ ์กฐํ๋ -a ์ต์
์ฌ์ฉ)
- ์ปจํ ์ด๋๋ฅผ ๊ตฌ๋์ํฌ ๋๋ `docker start mysql-container`, ์ข ๋ฃ์ํฌ ๋๋ `docker stop mysql-container`
docker ps
- ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์ปจํ ์ด๋ ๋ด ์ ์ํ์ฌ, ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ ๋ฐ ์ฟผ๋ฆฌ ์ํ์ด ๊ฐ๋ฅํ๋ค.
docker exec -it mysql-container bash
๊ตฌ๋๋ MySQL ๋์ปค ์ปจํ ์ด๋ ์์ ์ ์ํด์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ
- MySQL DBMS ์ ์
- `-u`: ์ ์ ์์ด๋ ๋ช ์
- `-p`: ์ ์ ๋น๋ฐ๋ฒํธ ์ง์ ์ ๋ ฅ
mysql -u root -p
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| example |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
- ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ํ
use example;
Database changed
- ํ ์ด๋ธ ํ์ธ
show tables;
Empty set (0.02 sec)
- ์ปจํ ์ด๋ ์ค์ง, ์์ ์ฌ์์ ๋ช ๋ น์ด
# MySQL Docker ์ปจํ
์ด๋ ์ค์ง
docker stop mysql-container
# MySQL Docker ์ปจํ
์ด๋ ์์
docker start mysql-container
# MySQL Docker ์ปจํ
์ด๋ ์ฌ์์
docker restart mysql-container
2. ๋์ปค๋ก ๋์์ํจ MySQL์ DBeaver(DB Client)๋ฅผ ํตํ ์ ์
Public Key ์ด์: DBeaver๋ก ์ ๊ทผํ๋ ๋ก์ปฌ Spring์ผ๋ก ์ ๊ทผํ๋ MySQL DB์ ์ ์ํ๋ ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก url, username, password ์ธ ๊ฐ์ง๊ฐ ํ์ํ๋ค.
โ ๏ธ ํ์ง๋ง `MySQL 8.0` ๋ฒ์ ๋ถํฐ ๋ณด์์ ์ธ ์ด์๋ก useSSL ์ต์ ์ ๋ํ ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํ๋ค.
- DBeaver ์ ์ ์ ์ค์
- allowPublicKeyRetrieval → True๋ก ๋ณ๊ฒฝ
3. Spring์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ํ ์ถ๊ฐ ์ค์
๋จผ์ , ๊ทธ๋ฆผ์ผ๋ก ORM์ ๋ํ ์ค๋ช ๊ณผ Spring Data JPA์ JPA(Java ORm ํ์ค) ์ฐจ์ด์ ๋ํด ์์๋ณด์.
1๋จ๊ณ :JDBC ๋ ๋ฒจ(์ด๋ก์)
- JDBC API: Java ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ํ์ค API์ด๋ค. Spring์ ๊ฐ์ฅ ๋ฎ์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ด๋ค.
- Query (Native Query): ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์กด์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ์ฌ ์คํํ๋ค.
- RowMapper: ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ํฐํฐ ๊ฐ์ฒด๋ก ๋งคํํ๋ค.
- DB: ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ, ์ฟผ๋ฆฌ ์คํ ์ ์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ ์ฅํ๋ค.
2๋จ๊ณ: ORM ๋ ๋ฒจ(ํ๋์)
- ORM (Object-Relational Mapping): JPA๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์ํํ๋ ๊ณ์ธต์ด๋ค.
- JPA API: ์๋ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งคํํ๊ณ CRUD ์์ ์ ์ํํ๋ API๋ก, SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ์ง ์์๋ ๋๋ค.
- JPQL(Java Persistence Query Language): ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ํ๋ ์ฟผ๋ฆฌ ์ธ์ด๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค.
- Dialect: JPA๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์ธ์ผ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ๋ค๋ฅธ SQL ๋ฌธ๋ฒ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
- Hibernate: JPA์ ๊ตฌํ์ฒด๋ก ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ORM ํ๋ ์์ํฌ
3๋จ๊ณ: Spring Data JPA(๋นจ๊ฐ์)
- CRUD Repository: ๊ธฐ๋ณธ์ ์ธ CRUD ์์ ์ ์ง์ํ๋ JPA ๋ ํ์งํ ๋ฆฌ ์ธํฐํ์ด์ค.
- @Query์ @NamedQuery: Spring Data JPA์์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ ์ ์๋๋ก ํ๋ ์ด๋ ธํ ์ด์
- QueryMethod: ๋ฉ์๋ ์ด๋ฆ์ ํตํด ์๋์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑ(์: finyByid)
- CustomRepository์ QueryDSL: ๊ณ ๊ธ ์ฟผ๋ฆฌ ์์ฑ์ ์ํด ์ปค์คํ ๋ ํ์งํ ๋ฆฌ๋ QueryDSL์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์กฐ๊ฑด ์ฒ๋ฆฌ ๊ฐ๋ฅ
Spring์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ์ฌ JPA๋ฅผ ์ฌ์ฉํ ๋ ํ์ํ ์ฃผ์ ์ค์ ์ ์ธ ๊ฐ์ง๋ก ๋๋ ์ค๋ช
1. ORM(JPA) ์ค์ : Spring์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๊ธฐ ์ํด ์ค์ ํ๋ ๊ธฐ๋ณธ์ ์ธ ORM ๋ฐ JDBC ์ค์ .
- JDBC Driver:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ๊ธฐ ์ํด ํ์ํ ๋๋ผ์ด๋ฒ๋ก, Java ์ ํ๋ฆฌ์ผ์ด์ ์ด ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL, PostgreSQL ๋ฑ)์ ํต์ ํ ์ ์๋๋ก ํ๋ค.
- ์: MySQL์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, mysql-connector-java ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ค.
- JPA:
- ๊ฐ์ฒด ์กฐ์(์ํฐํฐ ์กฐ์)์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๋ณํ์ ๋ด๋นํ๋ค.
- Dialect ์ค์ ์ ํตํด JPA๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋ SQL ๋ฌธ๋ฒ์ ์๋์ผ๋ก ์์ฑํ ์ ์๋๋ก ํ๋ค.
- ์: MySQL์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, org.hibernate.dialect.MySQLDialect์ ๊ฐ์ ์ค์ ์ ์ง์ ํ๋ค.
2. Database ์ ์ ID/PW ์ค์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ๊ธฐ ์ํ URL, ์ฌ์ฉ์ ID, ๋น๋ฐ๋ฒํธ ์ค์ ์ด ํ์ํ๋ค.
- Database URl:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์น๋ฅผ ๋ํ๋ด๋ URL.
- ์: jdbc:mysql://localhost:3306/example_db
- ID:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์๋ ์ฌ์ฉ์ ๊ณ์ ์ ID
- PW:
- ํด๋น ์ฌ์ฉ์ ๊ณ์ ์ ๋น๋ฐ๋ฒํธ
3. JPA ์ฌ์ฉ ์ต์ ์ค์ : JPA๋ฅผ ์ฌ์ฉํ๋ฉด์ Spring์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ข ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ๋ค์ํ ์ถ๊ฐ ์ต์ ์ ์ค์
- ์๋ ํ
์ด๋ธ ์์ฑ (DDL) ์ต์
:
- JPA๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ํฐํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋ ์์ฑํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ .
- ์: spring.jpa.hibernate.ddl-auto=create๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ํ ์ด๋ธ์ ์๋ก ์์ฑํ๋ผ๋ ์๋ฏธ
- ์ต์ ๊ฐ: none, validate, update, create, create-drop
- ์ฟผ๋ฆฌ ๋ก๊ทธ ์ต์
:
- ์ฟผ๋ฆฌ ๋ก๊ทธ ์ต์ ์ ํตํด ์ฟผ๋ฆฌ ์คํ ๋ด์ญ์ ๋ก๊ทธ๋ก ํ์ธํ ์ ์๋ค.
- ์: spring.jpa.show-sql=true๋ก ์ค์ ํ๋ฉด ์ฝ์์ ์ฟผ๋ฆฌ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค.
์์ MySQL ๋์ปค ๊ตฌ๋์ ๊ฒฝ์ฐ
- application.properties ์ฌ์ฉ ์
# ORM
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
# PostgresQL - CREATE USER user PASSWORD '!@#' SUPERUSER;
spring.datasource.url=jdbc:mysql://localhost:33066/example?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=asac
spring.datasource.password=1234
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
- application.yml ์ฌ์ฉ ์
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:33066/example?useSSL=false&allowPublicKeyRetrieval=true
username: asac
password: 1234
jpa:
generate-ddl: true
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
show-sql: true
๋ก์ปฌ์์ Spring๊ณผ Database๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ 2๊ฐ: ๊ฐ๋ณ / ๋์ ๊ตฌ๋
๋ก์ปฌ ๋ฐ Docker ๊ตฌ๋ ๋ฐฉ์์ ๋ฐ๋ฅธ ์กฐํฉ์ผ๋ก ์ด 4๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉฐ, ๋ชจ๋ ๊ตฌ๋์ Docker Compoase๋ก ๋ฌถ์ด ํ๋ฒ์ ์คํํ ์๋ ์๋ค.
1. Spring๊ณผ Database ๊ฐ๋ณ ๊ตฌ๋
1. A-1. Spring Boot ๋ก์ปฌ ๊ตฌ๋ + B-1. Database ๋ก์ปฌ ๊ตฌ๋
- ๋ ๋ค ๋ก์ปฌ์์ ๊ตฌ๋๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๋ฉฐ ์ด๋ณด์ ์ธ ๋ฐฉ๋ฒ
- ์ ํฉํ ๊ฒฝ์ฐ: ๋ก์ปฌ์์ ๊ฐ๋จํ ๊ฐ๋ฐ ๋ฐ ๋๋ฒ๊น ์ ํ ๋ ์ฌ์ฉ
2. A-1. Spring Boot ๋ก์ปฌ ๊ตฌ๋ + B-2. Database Docker ๊ตฌ๋
- Spring์ ๋ก์ปฌ์์, Database๋ Docker์์ ๊ตฌ๋ํ๋ ๋ฐฉ๋ฒ
- ์ ํฉํ ๊ฒฝ์ฐ: ๊ฐ๋ฐ์๊ฐ ๋ก์ปฌ ํ๊ฒฝ์ ์ ์งํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง Docker๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๊ฒฝ์ ์ผ๊ด๋๊ฒ ์ ์งํ๊ธฐ ์ข๋ค.
3. A-2. Spring Boot Docker ๊ตฌ๋ + B-1. Database ๋ก์ปฌ ๊ตฌ๋
- Spring Boot๋ Docker์์ ๊ตฌ๋ํ๊ณ , Database๋ ๋ก์ปฌ์์ ๊ตฌ๋ํ๋ ๋ฐฉ๋ฒ
- ์ ํฉํ ๊ฒฝ์ฐ: Spring ์ ํ๋ฆฌ์ผ์ด์ ์ Docker ํ๊ฒฝ์์ ํ ์คํธํ๋ฉด์, ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค.
4. A-2 Spring Boot Docker ๊ตฌ๋ + B-2. Database Docker ๊ตฌ๋
- Spring Boot์ Database ๋ชจ๋ Docker์์ ๊ตฌ๋ํ๋ ๋ฐฉ๋ฒ. ๋ฐฐํฌ ํ๊ฒฝ๊ณผ ๊ฑฐ์ ์ ์ฌํ ๊ตฌ์ฑ
- ์ ํฉํ ๊ฒฝ์ฐ: ์ค์ ๋ฐฐํฌ ์ , Docker ํ๊ฒฝ์์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ๊ฑฐ๋ ์ค์ ๋ฐฐํ ํ๊ฒฝ์ผ๋ก ์ฌ์ฉํ ๋.
์ด ์ค ๋ฐฉ๋ฒ 4๋ ๋ฐฐํฌ ํ๊ฒฝ๊ณผ ๊ฐ์ฅ ์ ์ฌํ๊ธฐ ๋๋ฌธ์, ๋ฐฐํฌ ์ ์ ์ต์ข ํ ์คํธ๋ฅผ ์ํด ์ฌ์ฉ๋๋ค.
2. Spring๊ณผ Database ๋์ ๊ตฌ๋ (Docker Compose)
Spring Boot์ Database๋ฅผ ๋ชจ๋ Docker๋ก ๊ตฌ๋ํ ๊ฒฝ์ฐ, Docker Compose๋ฅผ ์ฌ์ฉํด ํ๋ฒ์ ์คํํ ์ ์๋ค.
3. Spring Boot์์ Profiles๋ฅผ ์ฌ์ฉํ Zone๋ณ ์ค์
Spring Boot๋ `application.properties` ๋๋ `application.yml`ํ์ผ์ Zone(๋ก์ปฌ, ๊ฐ๋ฐ, ์คํ ์ด์ง, ์ด์)์ ๋ง๊ฒ ์ค์ ํ์ฌ ํ๊ฒฝ ๋ณ๋ก ๋ค๋ฅด๊ฒ ๊ตฌ๋ํ ์ ์๋ค.
- Zone ๊ตฌ๋ณ์ ๋ํ ์ค๋ช ์ ์์ ์ Git ๋ธ๋์น ์ ๋ต์ ๋ํด ํฌ์คํ ํ ๊ธ์ ์ค๋ช ํ ๋ฐ ์๋ค. → ํด๋น ๊ธ์ ์ฐธ๊ณ ํ์.
https://1000sang-dev.tistory.com/30
Git & GitHub #6 - ์ค๋ฌด์์์ Git ๋ธ๋์น ์ ๋ต ๋ฐ Zone ๊ตฌ๋ณ
git commit -m "Blog Posting #6๐ซก"๊ฐ๋ฐ์ํ์ ์ ํ์ ๋๊ตฌ์ค๋ฌด์์ Git ๋ธ๋์น ์ ๋ต ๋ฐ Zone ๊ตฌ๋ณ์ค์ ํ์ ์์๋ ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ๋ฅผ ์ํ Zone์ ๊ตฌ๋ถํ์ฌ ๊ด๋ฆฌํ๋ค๊ณ ํ๋ค. ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ด์ํ๊ธฐ
1000sang-dev.tistory.com
์ฃผ์ ์ค์ ํ์ผ
- ๊ณตํต ์ค์ ํ์ผ(application.properties): ๊ณตํต์ผ๋ก ์ฌ์ฉ๋ JDBC ๋๋ผ์ด๋ฒ ์ค์ ๋ฐ ๊ธฐ๋ณธ ORM ์ค์
- ๋ก์ปฌ ํ๊ฒฝ ์ค์ (application-local.properties):
- ๋ก์ปฌ ํ๊ฒฝ์์ ๊ฐ๋ฐ ๋ฐ ๋๋ฒ๊น ์ฉ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ Docker๋ก ๊ตฌ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ค.
- ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ (appljication-develop.properties):
- ๋ฐฐํฌ ์ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ฉฐ, Docker Compose๋ก ๊ตฌ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ๊ฐ๋ฐ์ฉ ์ธํ๋ผ์ ์ฐ๊ฒฐํ๋ค.
- ์ด์ ํ๊ฒฝ ์ค์ (application-production.properties):
- ์ค์ ์ด์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ฉฐ, AWS RDS์ ๊ฐ์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ฐ๊ฒฐํ๋ค.
ํ๊ฒฝ๋ณ ์ค์ :
- application.properties
spring.application.name=[ appName ]
# ORM
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
- application-local.properties
# MySQL - Connection
spring.datasource.url=jdbc:mysql://localhost:33066/example?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=asac
spring.datasource.password=1234
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
- application-develop.properties
# MySQL - Connection
spring.datasource.url=jdbc:mysql://mysql_host:3306/example?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=asac
spring.datasource.password=1234
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
4. Docker์ Spring Boot Profile ์ค์
Dockerfile์์ Spring Boot์ Profile์ ์ค์ ํ์ฌ ํน์ ํ๊ฒฝ ์ค์ ์ ์ ์ฉํ ์ ์๋ค. ์ด๋ฅผ ์ํด Dockerfile์์ ARG์ ENV๋ฅผ ์ฌ์ฉํ์ฌ ํ๋กํ์ผ์ ์ ๋ฌํ๋ค.
FROM amazoncorretto:17-alpine
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ARG SPRING_PROFILE=local
ENV SPRING_PROFILE=$SPRING_PROFILE
ENTRYPOINT ["java", "-Dspring.profiles.active=${SPRING_PROFILE}", "-jar", "/app.jar"]
- ์ ๋ฌ์ธ์๋ฅผ ์ถ๊ฐํ ์ด Dockerfile์ด ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด์ ๋์ปค ์ด๋ฏธ์ง ๋น๋๋ฅผ ํด๋ณด๋ฉด ๋๋ค.
docker build -t spring-jpa:6th .
docker run -p 1000:8080 -t spring-jpa:6th
docker run ๋ช ๋ น์ด ์ ๋น๋ ๊ณผ์ ์์ ํด๋น ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ

"no main mainifest attribut, in /app.jar"
build.gradle ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ ์ถ๊ฐํ๋ค.
runtimeOnly 'com.mysql:mysql-connector-j'

5. Docker ๋คํธ์ํฌ ๊ตฌ์ฑ๊ณผ localhost์ ์๋ฏธ
Docker ์ปจํ ์ด๋ ๋ด๋ถ์ localhost๋ ์ปจํ ์ด๋ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, ํธ์คํธ ๋จธ์ ์ localhost์๋ ๋ค๋ฅด๋ค.
Docker ๋คํธ์ํฌ ๋ชจ๋
- Bridge ๋คํธ์ํฌ (๊ธฐ๋ณธ):
- Docker์ ๊ธฐ๋ณธ ๋คํธ์ํฌ ๋ชจ๋๋ก, ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ๊ฐ์ ๋คํธ์ํฌ ์์์ ์๋ก ํต์ ํ ์ ์๋ค.
- ํ์ง๋ง ํธ์คํธ์ localhost์๋ ์ง์ ์ ๊ทผํ ์ ์๋ค.
- Host ๋คํธ์ํฌ:
- ์ปจํ ์ด๋์ ํธ์คํธ๊ฐ ๋์ผํ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ ์ต์
- network_mode: "host"๋ก ์ค์ ํ๋ฉด ์ปจํ ์ด๋๊ฐ ํธ์คํธ์ localhost์ ๋์ผํ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ค.
ํธ์คํธ ์ ๊ทผ์ ์ํ ์ค์
- ํธ์คํธ ๋คํธ์ํฌ ๋ชจ๋๊ฐ ์ด๋ ค์ด ๊ฒฝ์ฐ: application-local.properties์์ localhost ๋์ host.docker.internal์ ์ฌ์ฉํ๋ค.
- host.docker.internal: Docker ์ปจํ ์ด๋๊ฐ ํธ์คํธ์ ๋คํธ์ํฌ์ ์ ๊ทผํ ์ ์๋๋ก ๋์์ฃผ๋ ์ค์
spring.datasource.url=jdbc:mysql://host.docker.internal:33066/example?useSSL=false&allowPublicKeyRetrieval=true
์ด๋ฒ ํฌ์คํ ์์ Docker์์ Database ๊ตฌ๋, ๋์ปค๋ก ๊ตฌ๋์ํจ database๋ฅผ dbeaver(db client)๋ก ์ ์, ๊ฐ Zone(ํ๊ฒฝ) ๋ณ๋ก ๊ตฌ๋ถํ์ฌ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์๋ค. ๋ค์ ํฌ์คํ ์ ์ด์ด์ Docker Compse๋ฅผ ์ด์ฉํ์ฌ ์์ 2๊ฐ ๋์ปค ์ด๋ฏธ์ง๋ฅผ(Spring + DB) ๊ฒฐํฉํ์ฌ ๊ตฌ๋ํ๋ ๊ณผ์ ์ ๋ฐํํ ์์ ์ด๋ค.
โน๏ธ ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
'๐ปDEV-STUDY > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker]Dockerize #3 (0) | 2024.11.04 |
---|---|
[Docker] Dockerize #1 (0) | 2024.11.01 |
[Github Action & Docker]์๋: Github Action์ผ๋ก CI / CD ๋ชจ๋ ์๋ ์ฒ๋ฆฌ #3 (4) | 2024.10.29 |
[GitHub Action & Docker] CD: AWS EC2 ์์ฑ ํ ๋ด๋ถ ์ ์ ํ CI๋ก ๋ง๋ Docker ์ด๋ฏธ์ง ์คํ #2 (2) | 2024.10.29 |
[GitHub Action & Docker] ์๋: Github Action์ผ๋ก CI + ๊ฐ๋ฐ์๊ฐ ์ง์ CD #1 (3) | 2024.10.29 |