본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
Docker-Compose를 통해 MySQL 컨테이너 생성 및 데이터 삽입
docker-compose 파일 작성
docker-compose를 통해 mysql 컨테이너를 띄우기 위한 파일을 작성한다.
# docker-compose.yml
version: "3.8"
services:
mysql:
container_name: mysql_local
image: mysql:latest
volumes:
- ./db/conf.d:/etc/mysql/conf.d
- ./db/initdb.d:/docker-entrypoint-initdb.d
ports:
- "3304:3306"
environment:
- MYSQL_DATABASE=pass_local
- MYSQL_USER=pass_local_user
- MYSQL_PASSWORD=passlocal123
- MYSQL_ROOT_PASSWORD=passlocal123
- TZ=Asia/Seoul
# env_file: .env # 이와같이 환경변수를 docker-compose.yml에 작성하지 않고 별도 파일로 분리하여 등록할 수도 있다.
환경변수 파일을 .env와 같이 분리하게 되면 내용은 다음과 같다
# .env
MYSQL_DATABASE=pass_local
MYSQL_USER=pass_local_user
MYSQL_PASSWORD=passlocal123
MYSQL_ROOT_PASSWORD=passlocal123
TZ=Asia/Seoul
mysql 설정 파일 작성
mysql 설정 파일을 작성하여 컨테이너 생성시 해당 설정을 따르도록 한다.
# ./db/conf.d/my.cnf
# MySQL8 default character set = utf8mb4 이므로 client만 선언
[client]
default-character-set = utf8mb4
# MySQL8 default authentication policy = caching_sha2_password
# 이를 지원하지 않는 DB Client로 접속하기 위해서 기존 정책인 `mysql_native_password`로 설정
[mysqld]
authentication-policy = mysql_native_password
테이블 생성 sql 파일 작성
테이블 생성 sql 파일을 작성하여 컨테이너 생성 및 설정 완료시 해당 파일을 통해 테이블을 생성하도록 한다.
# ./db/initdb.d/create_table.sql
CREATE TABLE `package`
(
`package_seq` int NOT NULL AUTO_INCREMENT COMMENT '패키지 순번',
`package_name` varchar(50) NOT NULL COMMENT '패키지 이름',
`count` int DEFAULT NULL COMMENT '이용권 수, NULL인 경우 무제한',
`period` int DEFAULT NULL COMMENT '기간(일), NULL인 경우 무제한',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
`modified_at` timestamp DEFAULT NULL COMMENT '수정 일시',
PRIMARY KEY (`package_seq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='패키지';
...
데이터 삽입 sql 파일 작성
데이터 삽입 sql 파일을 작성하여 컨테이너 생성, 설정 완료, 테이블 생성 완료시 데이터를 삽입하도록 한다.
# ./db/initdb.d/insert_data.sql
INSERT INTO package (package_name, count, period, created_at)
VALUES ('Starter PT 10회', 10, 60, '2022-08-01 00:00:00'),
('Starter PT 20회', 20, 120, '2022-08-01 00:00:00'),
('Starter PT 30회', 30, 180, '2022-08-01 00:00:00'),
('무료 이벤트 필라테스 1회', 1, NULL, '2022-08-01 00:00:00'),
('바디 챌린지 PT 4주', NULL, 28, '2022-08-01 00:00:00'),
('바디 챌린지 PT 8주', NULL, 48, '2022-08-01 00:00:00'),
('인바디 상담', NULL, NULL, '2022-08-01 00:00:00');
...
(선택사항) Makefile 파일 작성
Makefile은 어떤 조건으로 명령어를 실행할지 담은 파일이다.
Makefile을 작성하면 make [작성한 명령어] 명령을 통해 Makefile에 작성해둔 명령을 단축어처럼 사용할 수 있다.
# -d: 백그라운드 실행, --force-recreate: 강제 재생성
db-up:
docker-compose up -d --force-recreate
# -v: volume 삭제
db-down:
docker-compose down -v
Makefile 작성을 완료했다면 해당 파일이 위치한 디렉토리에서 make db-up 명령을 통해 docker-compose를 실행하여 컨테이너를 생성하고, make db-down 명령을 통해 docker-compose를 통해 생성된 컨테이너를 내릴 수 있다.
ItemReader Cursor vs Paging
Cursor
- 표준 java.sql.ResultSet
- Database와 Connection을 맺은 후 한 번에 하나씩 레코드를 Streaming하며 다음 레코드로 진행한다(Cursor를 움직인다)
- JdbcCursorItemReader
- HibernateCursorItemReader
- JpaCursorItemReader
Paging
- Page라고 부르는 Chunk 크기만큼 레코드를 가져온다(PageSize=ChunkSize)
- 각 페이지의 쿼리를 실행할 때마다 동일한 레코드 정렬 순서를 보장하려면 정렬 조건이 필요하다
- JdbcPagingItemReader
- HibernatePagingItemReader
- JpaPagingItemReader
'패스트캠퍼스 강의' 카테고리의 다른 글
[26일차] 50일 포트폴리오 챌린지 (0) | 2023.09.02 |
---|---|
[25일차] 50일 포트폴리오 챌린지 (0) | 2023.09.01 |
[23일차] 50일 포트폴리오 챌린지 (0) | 2023.08.30 |
[22일차] 50일 포트폴리오 챌린지 (0) | 2023.08.29 |
[21일차] 50일 포트폴리오 챌린지 (0) | 2023.08.28 |