DB seeding 초기 데이터

justindevcode·2024년 4월 4일

RDB

목록 보기
1/3
post-thumbnail

DB seeding 초기 데이터

인트로

DB를 사용하다보면 초기 데이터가 필요한 경우가 있습니다. 테이블의 경우 ORM등의 기술이나 프로젝트의 엔티티등을 통해서 초기생성 가능하지만 초기 데이터 까지 추기하기 위해서는 seeding을 해주어야 합니다.

사용

javascript 진영에서는 prisma ORM을 통해서 가능하다고 확인 했지만 지금 프로젝트에 맞는 Spring의 경우 보통 어떻게 진행하는지 알아보았습니다.

일반적으로 프로젝트를 docker를 사용한 환경에서 사용하게 되는데 이때 docker-compose 파일 작성을 통해 미리 입력한 sql문들을 mysql이 시작될때 입력할 수 있습니다.


version: "3.8"
services:
  mysql:
    container_name: mysql_local
    image: mysql:8.0.30
    volumes:
      - ./db/conf.d:/etc/mysql/conf.d
      - ./db/initdb.d:/docker-entrypoint-initdb.d
    ports:
      - "3306:3306"
    environment:
      - MYSQL_DATABASE=pass_local
      - MYSQL_USER=pass_local_user
      - MYSQL_PASSWORD=passlocal123
      - MYSQL_ROOT_PASSWORD=passlocal123
      - TZ=Asia/Seoul

초기화 설정
처음 인스턴스를 생성할 때 추가적인 데이터베이스 초기화를 위해 실행할 .sh 또는 .sql 파일이 있다면, 컨테이너의 /docker-entrypoint-initdb.d 디렉토리에 해당 파일이 들어있는 디렉토리를 마운트 시켜주어야 한다. (파일명의 알파벳 순서로 실행)

# ./db/initdb.d/create_table.sql

CREATE TABLE `users`
(
    `user_id`  int         NOT NULL AUTO_INCREMENT COMMENT '유저 식별값',
    `username` varchar(30) NOT NULL COMMENT '유저 로그인 아이디',
    `password` varchar(50) NOT NULL COMMENT '유저 패스워드',
    `created_at`   timestamp   NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
    `modified_at`  timestamp            DEFAULT NULL COMMENT '수정 일시',
    PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='유저';

이런식의 테이블생성 쿼리도 미리 직성할 수 있고

# ./db/initdb.d/insert_data.sql

INSERT INTO `user` (username, password, create_at)
VALUES ('user1', 'password1', '2022-08-01 00:00:00'),
       ('user2', 'password2', '2022-08-01 00:00:00'),
       ('user3', 'password3', '2022-08-01 00:00:00');

...

seed 데이터를 넣을 수 있는 쿼리도 작성할 수 있습니다.

참고자료

https://seungtaek-overflow.tistory.com/22
https://yoo-dev.tistory.com/14

profile
("Hello World!");

0개의 댓글