테스트 데이터 삽입 ‐ (3) 게시판 데이터 삽입 - ttasjwi/board-system GitHub Wiki
게시판 데이터수
- 게시판의 종류는 아무리 사용자 수가 많아지더라도 그렇게 많이 늘어나지 않을 것 같다.
- 문제가 되는건 게시판 내에서 게시글을 조회할 때이므로, 테스트의 편의를 위해 게시판은 500 건 정도 생성한다.
테이블 생성
CREATE TABLE IF NOT EXISTS boards(
board_id BIGINT NOT NULL PRIMARY KEY,
name VARCHAR(30) UNIQUE NOT NULL,
description VARCHAR(100) NOT NULL,
manager_id BIGINT NOT NULL,
slug VARCHAR(30) UNIQUE NOT NULL,
created_at DATETIME NOT NULL
);
인덱스 제거
ALTER TABLE boards DROP INDEX name;
ALTER TABLE boards DROP INDEX slug;
csv 파일 생성
package com.ttasjwi.board.system.app.board.data
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import java.io.File
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
class BoardDataInitializer {
@Test
@DisplayName("게시판 벌크 삽입 csv 파일 생성")
fun initialize() {
val csvFile = File("boards.csv")
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
csvFile.bufferedWriter().use { writer ->
for (id in 1L..500L) {
val paddedId = id.toString().padStart(8, '0')
val name = "board${paddedId}"
val description = "The board of $name"
val managerId = id
val slug = "board${paddedId}"
val createdAt = LocalDateTime.now().format(formatter)
writer.write("$id,$name,$description,$managerId,$slug,$createdAt\n")
if (id % 10 == 0L) {
println("Written $id lines...")
}
}
}
}
}
csv 파일을 기반으로 insert
docker cp data/boards.csv mysql:/tmp/boards.csv
- 일단 csv 파일을 mysql 컨테이너 내부로 복사
LOAD DATA INFILE '/tmp/boards.csv'
INTO TABLE boards
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(board_id, name, description, manager_id, slug, created_at);
데이터 생성 확인
mysql> select count(*) from boards;
+----------+
| count(*) |
+----------+
| 500 |
+----------+
1 row in set (0.02 sec)
mysql> select * from boards order by board_id asc limit 30;
+----------+---------------+----------------------------+------------+---------------+---------------------+
| board_id | name | description | manager_id | slug | created_at |
+----------+---------------+----------------------------+------------+---------------+---------------------+
| 1 | board00000001 | The board of board00000001 | 1 | board00000001 | 2025-06-09 15:06:14 |
| 2 | board00000002 | The board of board00000002 | 2 | board00000002 | 2025-06-09 15:06:14 |
| 3 | board00000003 | The board of board00000003 | 3 | board00000003 | 2025-06-09 15:06:14 |
| 4 | board00000004 | The board of board00000004 | 4 | board00000004 | 2025-06-09 15:06:14 |
| 5 | board00000005 | The board of board00000005 | 5 | board00000005 | 2025-06-09 15:06:14 |
| 6 | board00000006 | The board of board00000006 | 6 | board00000006 | 2025-06-09 15:06:14 |
| 7 | board00000007 | The board of board00000007 | 7 | board00000007 | 2025-06-09 15:06:14 |
| 8 | board00000008 | The board of board00000008 | 8 | board00000008 | 2025-06-09 15:06:14 |
| 9 | board00000009 | The board of board00000009 | 9 | board00000009 | 2025-06-09 15:06:14 |
| 10 | board00000010 | The board of board00000010 | 10 | board00000010 | 2025-06-09 15:06:14 |
| 11 | board00000011 | The board of board00000011 | 11 | board00000011 | 2025-06-09 15:06:14 |
| 12 | board00000012 | The board of board00000012 | 12 | board00000012 | 2025-06-09 15:06:14 |
| 13 | board00000013 | The board of board00000013 | 13 | board00000013 | 2025-06-09 15:06:14 |
| 14 | board00000014 | The board of board00000014 | 14 | board00000014 | 2025-06-09 15:06:14 |
| 15 | board00000015 | The board of board00000015 | 15 | board00000015 | 2025-06-09 15:06:14 |
| 16 | board00000016 | The board of board00000016 | 16 | board00000016 | 2025-06-09 15:06:14 |
| 17 | board00000017 | The board of board00000017 | 17 | board00000017 | 2025-06-09 15:06:14 |
| 18 | board00000018 | The board of board00000018 | 18 | board00000018 | 2025-06-09 15:06:14 |
| 19 | board00000019 | The board of board00000019 | 19 | board00000019 | 2025-06-09 15:06:14 |
| 20 | board00000020 | The board of board00000020 | 20 | board00000020 | 2025-06-09 15:06:14 |
| 21 | board00000021 | The board of board00000021 | 21 | board00000021 | 2025-06-09 15:06:14 |
| 22 | board00000022 | The board of board00000022 | 22 | board00000022 | 2025-06-09 15:06:14 |
| 23 | board00000023 | The board of board00000023 | 23 | board00000023 | 2025-06-09 15:06:14 |
| 24 | board00000024 | The board of board00000024 | 24 | board00000024 | 2025-06-09 15:06:14 |
| 25 | board00000025 | The board of board00000025 | 25 | board00000025 | 2025-06-09 15:06:14 |
| 26 | board00000026 | The board of board00000026 | 26 | board00000026 | 2025-06-09 15:06:14 |
| 27 | board00000027 | The board of board00000027 | 27 | board00000027 | 2025-06-09 15:06:14 |
| 28 | board00000028 | The board of board00000028 | 28 | board00000028 | 2025-06-09 15:06:14 |
| 29 | board00000029 | The board of board00000029 | 29 | board00000029 | 2025-06-09 15:06:14 |
| 30 | board00000030 | The board of board00000030 | 30 | board00000030 | 2025-06-09 15:06:14 |
+----------+---------------+----------------------------+------------+---------------+---------------------+
제약조건 다시 추가
ALTER TABLE boards
ADD CONSTRAINT unique_name UNIQUE (name),
ADD CONSTRAINT unique_slug UNIQUE (slug);