테스트 데이터 삽입 ‐ (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);