1. ๋ก์ปฌ ํ๊ฒฝ ๊ตฌ์ฑ
1) build.gradle
dependencies {
// ... ๊ธฐ์กด์ ์๋ ๊ฒ๋ค
runtimeOnly 'com.mysql:mysql-connector-j'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// ... ๊ธฐ์กด์ ์๋ ๊ฒ๋ค
}
- ๊ธฐ์กด ํ์ผ์ ์ ๋ด์ฉ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
2) .gitignore
### local environment
infra/local/dbdata
- ๊ธฐ์กด ํ์ผ์ ์ ๋ด์ฉ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
3) infra/local/docker-compose.yaml
# infra/local/docker-compose.yaml
version: "3.8"
services:
local-db:
image: mysql:8
environment:
MYSQL_DATABASE: score
MYSQL_ROOT_PASSWORD: password
ports:
- 3306:3306
volumes:
- ./dbdata:/var/lib/mysql
local-db-migrate:
image: flyway/flyway:7
restart: always
environment:
- FLYWAY_DB_URL=jdbc:mysql://local-db/score
- FLYWAY_DB_USER=root
- FLYWAY_DB_PASSWORD=password
command: migrate
volumes:
- ../../db/flyway.conf:/flyway/conf/flyway.conf
- ../../db/migration:/flyway/sql
- ์ ํ์ผ ์ถ๊ฐ ํ์๊ธฐ ์ ์ docker ์ค์น๋ฅผ ๋จผ์ ํด์ฃผ์ ์ผ ํฉ๋๋ค.
- ์ค์น ๊ด๋ จ URL์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
[Docker] ๋งฅ OS์ ๋์ปค ์ค์นํ๊ธฐ(Install Docker on MacOS)
๋งฅ OS์ ๋์ปค ์ค์นํ๊ธฐ ์ด๋ฒ์ MacBook(๋งฅ๋ถ)์ ์๋ก ์ค์นํ๋ ๊ณผ์ ์์ Docker(๋์ปค)๋ฅผ ๋ค์ ์ค์นํ๊ฒ ๋์ด ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๋๋ก ํ์. ์ฐ์ Docker(๋์ปค)๋ฅผ ์ค์นํ๊ธฐ ์ํด ๊ณต์ ํํ์ด
happylie.tistory.com
- ์ฐธ์กฐ : ๊ฐ์ธ ๋ธ๋ก๊ทธ
- flyway ๊ด๋ จํ์ฌ ์ค๋ช ํ URL์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
Flyway ์ ์, DB ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ
์ด๋ฒ ์ ๊ท ํ๋ก์ ํธ์ Flyway ๋ฅผ ์ ์ฉํ๊ฒ๋์ด Flyway ๊ด๋ จ ์ธ๋ฏธ๋๋ฅผ ์งํํ๊ฒ ๋์๋ค. ๊ทธ๋์ ์ธ๋ฏธ๋๋ฅผ ์ค๋นํ๋ฉฐ ์ ๋ฆฌํ๋ Flyway ๊ฐ๋ ์ ๋ํด ๊ฐ๋จํ ์๊ฐํด๋ณด๊ณ ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ ์ ์ฉ๊ธฐ๋
velog.io
- ์ฐธ์กฐ : ๊ฐ์ธ ๋ธ๋ก๊ทธ
4) db/flyway.conf
flyway.url=${FLYWAY_DB_URL}
flyway.user=${FLYWAY_DB_USER}
flyway.password=${FLYWAY_DB_PASSWORD}
flyway.encoding=UTF-8
flyway.outOfOrder=true
flyway.validateOnMigrate=true
flyway.connectRetries=60
flyway.connectRetriesInterval=5
5) db/migration/V0__init.sql
CREATE TABLE IF NOT EXISTS student_score (
`student_score_id` BIGINT NOT NULL COMMENT '์ธ์กฐํค' AUTO_INCREMENT,
`exam` VARCHAR(255) NOT NULL COMMENT '์ํ',
`student_name` VARCHAR(255) NOT NULL COMMENT 'ํ์ ์ด๋ฆ',
`kor_score` INT NOT NULL COMMENT '๊ตญ์ด ์ํ ์ ์',
`english_score` INT NOT NULL COMMENT '์์ด ์ํ ์ ์',
`math_score` INT NOT NULL COMMENT '์ํ ์ํ ์ ์',
PRIMARY KEY (`student_score_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS student_pass (
`student_pass_id` BIGINT NOT NULL COMMENT '์ธ์กฐํค' AUTO_INCREMENT,
`exam` VARCHAR(255) NOT NULL COMMENT '์ํ',
`student_name` VARCHAR(255) NOT NULL COMMENT 'ํ์ ์ด๋ฆ',
`avg_score` DOUBLE NOT NULL COMMENT 'ํ๊ท ์ํ ์ ์',
PRIMARY KEY (`student_pass_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS student_fail (
`student_fail_id` BIGINT NOT NULL COMMENT '์ธ์กฐํค' AUTO_INCREMENT,
`exam` VARCHAR(255) NOT NULL COMMENT '์ํ',
`student_name` VARCHAR(255) NOT NULL COMMENT 'ํ์ ์ด๋ฆ',
`avg_score` DOUBLE NOT NULL COMMENT 'ํ๊ท ์ํ ์ ์',
PRIMARY KEY (`student_fail_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- flyway ์ค์ ๊ด๋ จํ์ฌ ์ค๋ช ํ URL์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ฌ๋ก์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํ Flyway ์ ์ฉ๊ธฐ
์ด ๊ธ์ ์ฐ์ํํ ํฌ์ฝ์ค 4๊ธฐ ๋ฌ๋กํ์ ๊ธฐ์ ๋ธ๋ก๊ทธ์ ๊ฒ์๋ ๊ธ ์ ๋๋ค. Flyway ๋? Flyway๋ ์คํ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ํด ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ํด์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์
hudi.blog
- ์ฐธ์กฐ : ๊ฐ์ธ ๋ธ๋ก๊ทธ
6) src/main/resource/application.yml
spring:
application:
name: dayonetest
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql//localhost:3306/score
username: root
password: password
jpa:
hibernate:
ddl-auto: none
show-sql: true
7) docker ๋ช ๋ น์ด ์ํ
$ cd infra/local
$ docker-compose up -d
- ๋ช ๋ น์ด ์ํ ์ดํ ์๋์ ๊ฐ์ด docker ์ํ์ฌ๋ถ ํ์ธ ๊ฐ๋ฅ
!! ๋ก์ปฌ DB(docker) ์ค์ ๋ฐ JPA ์ฌ์ฉ์ ํ๊ธฐ์ํด์ gradle ์ค์ ์ ์ถ๊ฐํ์์ต๋๋ค.
!! ๋ค์ํธ์์ ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๋๋ก ํ๊ฒ ์ต๋๋ค.
2. Github์ผ๋ก ํ์ธ
์ ์ฒด ํ์ผ ํ์ธ(ํ์ฌ ๋ณ๊ฒฝ๋ด์ญ)
[Github]
[Mocktio] ๋ก์ปฌ ํ๊ฒฝ ๊ตฌ์ฑ · pcy4196/dayonetest@69ab993
pcy4196 committed Jun 3, 2024
github.com
์ฐธ์กฐ : ์ธํ๋ฐ ๊ฐ์ [์ฅฌ์ฅฌ์ ํจ๊ป ํ๋ฃจ๋ง์ ๋๋ด๋ ์คํ๋ง ํ ์คํธ]
'๐ป FrameWork(ํ๋ ์์ํฌ) > SpringTEST(์คํ๋งํ ์คํธ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3-3 [Mocktio] ํ์ ๊ฒ์ฆ TEST(๋ฉ์๋ ํธ์ถ ์ฌ๋ถ ํ์ธ) (0) | 2024.06.06 |
---|---|
3-2 [Mocktio] ๊ฐ๋จํ ์ฑ์ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ (0) | 2024.06.04 |
2-4 [Junit] ํ ์คํธ ๋ฐ๋ณต ๋ฐ ์ ๋ ฅ๊ฐ ๋ค์ํ๊ฒ ์ค์ (0) | 2024.06.03 |
2-3 [Junit] ํ ์คํธ์ ์ด๋ฆ๋ถ์ด๊ธฐ (0) | 2024.06.03 |
2-2 [Junit] Assertions ๋ฉ์๋ (0) | 2024.06.02 |