혼자공부중
공부하는 블로그
혼자공부중
전체 방문자
오늘
어제
  • 분류 전체보기 (111)
    • 자격증 (49)
      • 정보처리기사 실기 (49)
    • JAVA (18)
    • DB (0)
    • 알고리즘 문제 풀이 (11)
      • 프로그래머스 (11)
    • Front (0)
      • HTML (0)
      • CSS (0)
      • Javascript (0)
    • 패스트캠퍼스 강의 (33)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 반복문
  • 코딩테스트
  • 데이터베이스
  • 수제비
  • SQLD
  • 정보처리기사 실기 정리
  • 관계형데이터베이스
  • 배열
  • 데이터모델
  • 2022정보처리기사실기
  • 정보처리기사 필기
  • 시나공
  • 정보처리기사 실기
  • 2022정보처리기사
  • 프로그래머스
  • DBMS
  • 정보처리기사
  • 메소드
  • 2022정보처리기사필기
  • 인터페이스
  • 정보처리기사 필기 정리
  • 패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
  • 알고리즘
  • 상속
  • 객체지향
  • UI
  • 변수
  • 애플리케이션테스트
  • Java
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
혼자공부중

공부하는 블로그

[24일차] 50일 포트폴리오 챌린지
패스트캠퍼스 강의

[24일차] 50일 포트폴리오 챌린지

2023. 8. 31. 22:08
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/43z0P6S 

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr



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
    '패스트캠퍼스 강의' 카테고리의 다른 글
    • [26일차] 50일 포트폴리오 챌린지
    • [25일차] 50일 포트폴리오 챌린지
    • [23일차] 50일 포트폴리오 챌린지
    • [22일차] 50일 포트폴리오 챌린지
    혼자공부중
    혼자공부중
    대단한 목적보다는 혼자 공부하는 것에 의미를 두려고 합니다.

    티스토리툴바