제목
[JAVA, Eclipse, Mysql, Docker] Mysql 컨테이너 생성 및 연동, 초기화, 데이터 삽입
관련 게시글
[JAVA, JDK, Tomcat, Eclipse, JSP] JDK, Tomcat 및 이클립스 환경 구축, JSP 프로젝트 생성
[JAVA, Eclipse, Mysql, Docker] Mysql 컨테이너 생성 및 연동, 초기화, 데이터 삽입
목차
1. docker-compose.yml 작성
2. mysql-connector 설치 및 설정
2. db 초기화 sql 파일 작성
3. docker container 생성 및 확인
1. docker-compose.yml 작성
프로젝트 루트 경로에 docker-compose.yml 파일을 작성합니다.
IDE로 Eclipse를 사용한다면, tab 대신 공백문자를 사용해야 합니다.
그렇지 않으면, tab을 공백으로 자동 변환하는 설정을 해야합니다.
version: '3.8'
services:
jsp-bbs-db:
image: mysql:8.0
container_name: jsp_bbs_mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: jsp_bbs_db
MYSQL_USER: admin
MYSQL_PASSWORD: admin
ports:
- "3306:3306"
volumes:
- jsp_bbs_db_data:/var/lib/mysql
- ./init__V1_schema_user.sql:/docker-entrypoint-initdb.d/init__V1_schema_user.sql
- ./init__V2_data_user.sql:/docker-entrypoint-initdb.d/init__V2_data_user.sql
volumes:
jsp_bbs_db_data:
위 스크립트 내용은 찬찬히 보겠습니다.
mysql 8.0 버전 이미지를 pull 하고, jsp_bbs_mysql 이라는 이름의 컨테이너로 빌드합니다.
image: mysql:8.0
container_name: jsp_bbs_mysql
root password는 root로,
'jsp_bbs_db' DATABASE를 생성합니다.
user, password를 admin으로 생성합니다.
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: jsp_bbs_db
MYSQL_USER: admin
MYSQL_PASSWORD: admin
외부 접근 port는 3306으로 합니다.
ports:
- "3306:3306"
볼륨을 설정하여,
컨테이너가 중단되어도 데이터가 휘발되지 않도록 합니다.
또한, 컨테이너가 생성될 때, 초기화 sql문을 동작시킵니다.
volumes:
- jsp_bbs_db_data:/var/lib/mysql
- ./init__V1_schema_user.sql:/docker-entrypoint-initdb.d/init__V1_schema_user.sql
- ./init__V2_data_user.sql:/docker-entrypoint-initdb.d/init__V2_data_user.sql
volumes:
jsp_bbs_db_data:
2. mysql-connector 설치 및 설정
2.1 mysql-connector 설치
검색창에 mysql-connector-java를 검색하여 다운로드 페이지로 진입합니다.
OS에 독립적으로 사용할 수 있도록 하여 설치합니다.
만약 특정 버전을 설치하고자 한다면, Archives에 진입하여 다운로드합니다.
2.1 mysql-connector 설정
다운로드한 zip 파일을 압축해제하고 작업 공간으로 이동시킵니다.
디렉토리 내부의 mysql-connector-java-x.x.x.jar 파일을 프로젝트 내부 경로로 복사합니다.
일반적으로 프로젝트의 WEB-INF > lib에 jar 파일을 저장하면,
프로젝트가 자동으로 jar 파일을 탐지하지만,
문제가 생기는 경울 수동으로 탐지합니다.
프로젝트 우클릭 > Properties 또는, Alt + Enter를 통해,
프로젝트의 프로퍼티 설정을 합니다.
Java Build Path > Libraries > Classpath > Add JARs...에서,
mysql-connector-java-x.x.x.jar 파일 선택 후 OK, Apply합니다.
3. db 초기화 sql 파일 작성
sql 파일을 만들고 db 생성 시 실행될 sql문을 정의합니다.
table 생성 sql 파일, 더미 데이터 삽입 sql 파일을 생성합니다.
파일 이름에 따라 실행 순서가 정해지므로 네이밍에 신경쓰도록 합니다.
예컨대 생성은 V1, 삽입은 V2와 같이 구분지을 수 있습니다.
3.1 테이블 생성 sql 파일 생성
-- init__V1_schema_user.sql
CREATE DATABASE IF NOT EXISTS jsp_bbs_db;
USE jsp_bbs_db;
CREATE TABLE IF NOT EXISTS USER (
userID VARCHAR(20),
userPassword VARCHAR(20),
userGender VARCHAR(20),
userEmail VARCHAR(20),
PRIMARY KEY (userID)
);
3.2 데이터 삽입 sql 파일 생성
삽입 데이터는 gpt를 활용했습니다.
-- init__V2_data_user.sql
USE jsp_bbs_db;
INSERT INTO USER (userID, userPassword, userGender, userEmail) VALUES
('user1', 'password1', 'male', 'user1@example.com'),
('user2', 'password2', 'female', 'user2@example.com'),
('user3', 'password3', 'male', 'user3@example.com');
각 파일명과 docker-compose.yml에 작성한 파일 명을 일치시키도록 합니다.
volumes:
- jsp_bbs_db_data:/var/lib/mysql
- ./init__V1_schema_user.sql:/docker-entrypoint-initdb.d/init__V1_schema_user.sql
- ./init__V2_data_user.sql:/docker-entrypoint-initdb.d/init__V2_data_user.sql
volumes:
jsp_bbs_db_data:
4. docker container 생성 및 확인
4.1 docker container 생성
터미널로 docker-compose.yml 파일이 있는 경로에 진입합니다.
이후 명령어를 사용하여 docker 이미지를 pull, build, run 합니다.
docker-compose up -d
docker 데스크탑 또는 터미널의 docker ps 명령어를 사용하여,
가동 중인 컨테이너를 확인할 수 있습니다.
4.2 docker container DB data 확인
docker container 내부에 접근하여 DB data를 확인합니다.
docker desktop 또는 터미널 명령어를 사용할 수 있습니다.
4.2.1 docker desktop Logs
생성된 컨테이너를 클릭하고 Logs 메뉴로 접근합니다.
Logs 에선 sql 파일이 실행되었는지 확인 가능합니다.
2024-07-21 13:13:46+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init__V1_schema_user.sql
2024-07-21 13:13:46+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init__V2_data_user.sql
4.2.2 docker container 내부에서 확인
컨테이너 내부로 진입하는 방법은 두 가지가 있습니다.
Docker Desktop, terminal 이 두가지 방법을 통해,
컨테이너화된 DB 내부에 진입하는 방법을 알아보고,
내부 데이터를 확인해보겠습니다.
4.2.2.1 docker desktop Exec로 컨테이너 진입
생성된 컨테이너를 클릭하고 Exec 메뉴로 접근합니다.
Exec 에선 table을 확인할 수 있습니다.
아래 명령어를 통해 mysql 내부로 진입합니다.
mysql -u root -p
Enter Password: root
이후에 입력할 명령어는 docker desktop이 아닌,
터미널로 진입했을 때 사용할 명령어와 동일하기 때문에,
터미널 항목과 함께 작성하도록 하겠습니다.
4.2.2.2 terminal로 컨테이너 진입
아래 명령어를 입력하여 컨테이너 내부로 진입합니다.
winpty docker exec -it jsp_bbs_mysql bash
위 명령어를 통해,
윈도우 환경에서 jsp_bbs_mysql 컨테이너에 접속하여 bash 셸을 실행합니다.
이제 root 관리자를 택하여 비밀번호를 입력합니다.
mysql -u root -p
Enter password: root
4.2.2.3 DB 데이터 확인
아래 명령어를 사용하여,
DB를 확인한 뒤,
DB에 내부에 접속하고,
테이블을 확인합니다.
SHOW DATABASES;
USE jsp_bbs_db;
SHOW TABLES;
아래는 git bash 에서 실행한 예시입니다.
user@MINI MINGW64 /c/JSP/projects/JSP-BBS
$ winpty docker exec -it jsp_bbs_mysql bash
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.38 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jsp_bbs_db |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.04 sec)
mysql> use jsp_bbs_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------------+
| Tables_in_jsp_bbs_db |
+----------------------+
| USER |
+----------------------+
1 row in set (0.00 sec)
이제 테이블 내부에 데이터가 삽입되었는지 확인합니다.
SELECT * FROM USER;
'Java' 카테고리의 다른 글
[eGovFrame] v4.2.0 개발환경 구축, 샘플프로젝트 실행 (1) | 2024.08.20 |
---|---|
[JAVA, JDK, Tomcat, Eclipse, JSP] JDK, Tomcat 및 이클립스 환경 구축, JSP 프로젝트 생성 (0) | 2024.07.19 |
[MSA] e-commerce API; 구현2.5 - notification(kafka, email) (0) | 2024.06.21 |
[MSA] e-commerce API; 구현2.4 - order (0) | 2024.06.19 |
[MSA] e-commerce API; 구현2.3 - payment (1) | 2024.06.19 |