Initial commit: Multi-database Docker environment setup

- Added MariaDB Docker configuration with localhost:8787/mariadb:10.11.linux
- Added MSSQL Docker configuration with localhost:8787/server:2022-latest
- Added Oracle Docker configuration with localhost:8787/oracle:latest
- Unified database credentials: wace/wace0909!!
- Added initialization scripts for all databases
- Added management scripts for individual and bulk operations
- Added comprehensive documentation
This commit is contained in:
chpark 2025-09-23 15:48:48 +09:00
commit 844ed5c319
20 changed files with 1144 additions and 0 deletions

248
README-ALL-DB.md Normal file
View File

@ -0,0 +1,248 @@
# 통합 데이터베이스 Docker 환경 가이드
이 프로젝트는 PostgreSQL, MariaDB, MSSQL, Oracle 데이터베이스를 Docker로 통합 관리할 수 있도록 구성되었습니다.
## 프로젝트 구조
```
workspace_db/
├── PostgreSQL (기존 실행 중)
├── MariaDB/
│ ├── docker-compose-mariadb.yml
│ ├── mariadb.env
│ ├── mariadb-init/
│ ├── mariadb-config/
│ ├── start-mariadb.sh
│ └── stop-mariadb.sh
├── MSSQL/
│ ├── docker-compose-mssql.yml
│ ├── mssql.env
│ ├── mssql-init/
│ ├── mssql-backup/
│ ├── start-mssql.sh
│ └── stop-mssql.sh
├── Oracle/
│ ├── docker-compose-oracle.yml
│ ├── oracle.env
│ ├── oracle-init/
│ ├── oracle-backup/
│ ├── start-oracle.sh
│ └── stop-oracle.sh
├── start-all-db.sh # 모든 DB 시작
├── stop-all-db.sh # 모든 DB 중지
└── README-ALL-DB.md # 이 파일
```
## 통합 연결 정보
모든 데이터베이스는 동일한 사용자 정보로 설정되어 있습니다:
- **데이터베이스명**: wace
- **사용자명**: wace
- **비밀번호**: wace0909!!
### 포트 정보
| 데이터베이스 | 포트 | 관리 도구 | 관리 도구 포트 |
|-------------|------|-----------|---------------|
| PostgreSQL | 5432 | (기존 설정) | (기존 설정) |
| MariaDB | 3306 | phpMyAdmin | 8080 |
| MSSQL | 1433 | Adminer | 8081 |
| Oracle | 1521 | Adminer | 8082 |
## 빠른 시작
### 모든 데이터베이스 시작
```bash
chmod +x start-all-db.sh
./start-all-db.sh
```
### 모든 데이터베이스 중지
```bash
chmod +x stop-all-db.sh
./stop-all-db.sh
```
### 개별 데이터베이스 관리
```bash
# MariaDB
./start-mariadb.sh
./stop-mariadb.sh
# MSSQL
./start-mssql.sh
./stop-mssql.sh
# Oracle
./start-oracle.sh
./stop-oracle.sh
```
## 데이터베이스별 상세 정보
### 1. PostgreSQL (기존)
- **포트**: 5432
- **상태**: 이미 실행 중
- **관리**: 기존 방식 사용
### 2. MariaDB
- **이미지**: localhost:8787/mariadb:10.11.linux
- **포트**: 3306
- **관리 도구**: phpMyAdmin (http://localhost:8080)
- **특징**: UTF8MB4 문자셋, 한글 완벽 지원
### 3. MSSQL
- **이미지**: localhost:8787/server:2022-latest
- **포트**: 1433
- **관리 도구**: Adminer (http://localhost:8081)
- **특징**: Express 에디션, Korean_Wansung_CI_AS 콜레이션
### 4. Oracle
- **이미지**: localhost:8787/oracle:latest
- **포트**: 1521 (DB), 5500 (EM)
- **관리 도구**: Adminer (http://localhost:8082)
- **SID**: ORCL
- **PDB**: ORCLPDB1
- **특징**: Enterprise Manager 포함
## 연결 문자열 예시
### MariaDB
```bash
mysql -h localhost -P 3306 -u wace -p wace
```
### MSSQL
```bash
sqlcmd -S localhost,1433 -U wace -P wace0909!! -d wace
```
### Oracle
```bash
sqlplus wace/"wace0909!!"@//localhost:1521/ORCLPDB1
```
### JDBC 연결 문자열
```properties
# MariaDB
jdbc:mariadb://localhost:3306/wace
# MSSQL
jdbc:sqlserver://localhost:1433;databaseName=wace
# Oracle
jdbc:oracle:thin:@localhost:1521:ORCL
```
## 초기 데이터
모든 데이터베이스에는 동일한 샘플 데이터가 생성됩니다:
### users 테이블
| id | username | email | password_hash |
|----|----------|-------|---------------|
| 1 | admin | admin@example.com | (해시) |
| 2 | testuser | test@example.com | (해시) |
### user_profiles 테이블
| id | user_id | first_name | last_name | phone |
|----|---------|------------|-----------|-------|
| 1 | 1 | 관리자 | 시스템 | 010-1234-5678 |
| 2 | 2 | 테스트 | 사용자 | 010-9876-5432 |
## 관리 도구 접속
### phpMyAdmin (MariaDB)
- URL: http://localhost:8080
- 서버: mariadb
- 사용자: wace 또는 root
- 비밀번호: wace0909!!
### Adminer (MSSQL)
- URL: http://localhost:8081
- 시스템: MS SQL (beta)
- 서버: mssql
- 사용자명: wace 또는 sa
- 비밀번호: wace0909!!
- 데이터베이스: wace
### Adminer (Oracle)
- URL: http://localhost:8082
- 시스템: Oracle
- 서버: oracle:1521
- 사용자명: wace
- 비밀번호: wace0909!!
- 데이터베이스: ORCLPDB1
### Oracle Enterprise Manager
- URL: http://localhost:5500/em
- 사용자: sys (as sysdba)
- 비밀번호: wace0909!!
## 유용한 명령어
### 모든 컨테이너 상태 확인
```bash
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
```
### 개별 로그 확인
```bash
docker logs mariadb-server
docker logs mssql-server
docker logs oracle-server
```
### 데이터 백업
```bash
# MariaDB
docker exec mariadb-server mysqldump -u wace -p wace > mariadb-backup.sql
# MSSQL
docker exec mssql-server /opt/mssql-tools/bin/sqlcmd -S localhost -U wace -P wace0909!! -Q "BACKUP DATABASE wace TO DISK = '/var/opt/mssql/backup/wace.bak'"
# Oracle
docker exec oracle-server expdp wace/wace0909!!@ORCLPDB1 directory=backup_dir dumpfile=wace.dmp
```
## 문제 해결
### 포트 충돌
각 데이터베이스는 서로 다른 포트를 사용하므로 충돌이 없어야 합니다. 만약 충돌이 발생하면 docker-compose 파일에서 포트를 변경하세요.
### 메모리 부족
Oracle은 많은 메모리를 사용합니다. 시스템 리소스가 부족한 경우 개별적으로 실행하는 것을 권장합니다.
### 초기화 시간
- MariaDB: 즉시 사용 가능
- MSSQL: 1-2분 소요
- Oracle: 5-10분 소요 (첫 실행 시)
### 권한 문제 (Linux)
```bash
chmod +x *.sh
```
## 리눅스 서버 배포
리눅스 서버에 배포할 때:
1. 모든 스크립트에 실행 권한 부여:
```bash
chmod +x *.sh
```
2. Docker와 Docker Compose 설치 확인
3. 프라이빗 레지스트리 접근 확인:
```bash
docker login localhost:8787
```
4. 전체 시작:
```bash
./start-all-db.sh
```
이제 모든 데이터베이스가 통합 환경에서 실행됩니다!

145
README-MariaDB.md Normal file
View File

@ -0,0 +1,145 @@
# MariaDB Docker 설정 가이드
이 프로젝트는 Docker를 사용하여 MariaDB 서버를 쉽게 설정하고 관리할 수 있도록 구성되었습니다.
## 파일 구조
```
workspace_db/
├── docker-compose-mariadb.yml # MariaDB Docker Compose 설정
├── mariadb.env # 환경 변수 설정
├── start-mariadb.sh # MariaDB 시작 스크립트
├── stop-mariadb.sh # MariaDB 중지 스크립트
├── mariadb-init/ # 초기화 스크립트 디렉토리
│ └── 01-init-database.sql # 데이터베이스 초기화 SQL
├── mariadb-config/ # MariaDB 설정 파일 디렉토리
│ └── my.cnf # MariaDB 설정 파일
└── README-MariaDB.md # 이 파일
```
## 빠른 시작
### 1. MariaDB 시작
```bash
# Linux/Mac
chmod +x start-mariadb.sh
./start-mariadb.sh
# Windows (PowerShell)
docker-compose -f docker-compose-mariadb.yml --env-file mariadb.env up -d
```
### 2. MariaDB 중지
```bash
# Linux/Mac
chmod +x stop-mariadb.sh
./stop-mariadb.sh
# Windows (PowerShell)
docker-compose -f docker-compose-mariadb.yml down
```
## 연결 정보
- **호스트**: localhost
- **포트**: 3306
- **데이터베이스**: testdb
- **사용자**: dbuser
- **비밀번호**: userpassword123
- **Root 비밀번호**: rootpassword123
## phpMyAdmin 접속
MariaDB 관리를 위한 phpMyAdmin이 함께 설치됩니다.
- **URL**: http://localhost:8080
- **사용자**: root 또는 dbuser
- **비밀번호**: 위의 연결 정보 참조
## 환경 변수 설정
`mariadb.env` 파일을 수정하여 데이터베이스 설정을 변경할 수 있습니다:
```env
MYSQL_ROOT_PASSWORD=rootpassword123
MYSQL_DATABASE=testdb
MYSQL_USER=dbuser
MYSQL_PASSWORD=userpassword123
```
## 초기화 스크립트
`mariadb-init/` 디렉토리에 있는 SQL 파일들은 컨테이너 첫 실행 시 자동으로 실행됩니다.
- 데이터베이스 생성
- 사용자 권한 설정
- 샘플 테이블 및 데이터 생성
## 설정 파일
`mariadb-config/my.cnf` 파일에서 MariaDB 서버 설정을 커스터마이징할 수 있습니다:
- 문자셋: UTF8MB4
- 성능 최적화 설정
- 로그 설정
- 보안 설정
## 유용한 명령어
### 컨테이너 상태 확인
```bash
docker ps | grep mariadb
```
### MariaDB 로그 확인
```bash
docker logs mariadb-server
```
### MariaDB 컨테이너 접속
```bash
docker exec -it mariadb-server mysql -u root -p
```
### 데이터 백업
```bash
docker exec mariadb-server mysqldump -u root -p --all-databases > backup.sql
```
### 데이터 복원
```bash
docker exec -i mariadb-server mysql -u root -p < backup.sql
```
## 포트 설정
현재 설정된 포트:
- MariaDB: 3306
- phpMyAdmin: 8080
다른 서비스와 포트 충돌이 있는 경우 `docker-compose-mariadb.yml` 파일에서 포트를 변경할 수 있습니다.
## 데이터 지속성
MariaDB 데이터는 Docker 볼륨(`mariadb_data`)에 저장되어 컨테이너를 재시작해도 데이터가 보존됩니다.
## 문제 해결
### 포트 충돌
다른 MySQL/MariaDB 서비스가 3306 포트를 사용 중인 경우:
1. 기존 서비스 중지
2. docker-compose-mariadb.yml에서 포트 변경 (예: "3307:3306")
### 권한 문제
Linux/Mac에서 스크립트 실행 권한 부여:
```bash
chmod +x start-mariadb.sh stop-mariadb.sh
```
### 컨테이너가 시작되지 않는 경우
```bash
docker logs mariadb-server
```
명령어로 로그를 확인하여 오류 원인을 파악하세요.

View File

@ -0,0 +1,52 @@
version: '3.8'
services:
mariadb:
image: localhost:8787/mariadb:10.11.linux
container_name: mariadb-server
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-wace0909!!}
MYSQL_DATABASE: ${MYSQL_DATABASE:-wace}
MYSQL_USER: ${MYSQL_USER:-wace}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-wace0909!!}
TZ: Asia/Seoul
ports:
- "3306:3306"
volumes:
- mariadb_data:/var/lib/mysql
- ./mariadb-init:/docker-entrypoint-initdb.d
- ./mariadb-config:/etc/mysql/conf.d
networks:
- mariadb_network
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--max-connections=200
--innodb-buffer-pool-size=256M
# MariaDB 관리용 phpMyAdmin (선택사항)
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: mariadb-phpmyadmin
restart: unless-stopped
environment:
PMA_HOST: mariadb
PMA_PORT: 3306
PMA_USER: root
PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD:-wace0909!!}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-wace0909!!}
ports:
- "8080:80"
depends_on:
- mariadb
networks:
- mariadb_network
volumes:
mariadb_data:
driver: local
networks:
mariadb_network:
driver: bridge

44
docker-compose-mssql.yml Normal file
View File

@ -0,0 +1,44 @@
version: '3.8'
services:
mssql:
image: localhost:8787/server:2022-latest
container_name: mssql-server
restart: unless-stopped
environment:
ACCEPT_EULA: Y
SA_PASSWORD: ${SA_PASSWORD:-wace0909!!}
MSSQL_PID: ${MSSQL_PID:-Express}
TZ: Asia/Seoul
ports:
- "1433:1433"
volumes:
- mssql_data:/var/opt/mssql
- ./mssql-init:/docker-entrypoint-initdb.d
- ./mssql-backup:/var/opt/mssql/backup
networks:
- mssql_network
hostname: mssql-server
user: root
# MSSQL 관리용 Adminer (선택사항)
mssql-adminer:
image: adminer:latest
container_name: mssql-adminer
restart: unless-stopped
environment:
ADMINER_DEFAULT_SERVER: mssql
ports:
- "8081:8080"
depends_on:
- mssql
networks:
- mssql_network
volumes:
mssql_data:
driver: local
networks:
mssql_network:
driver: bridge

48
docker-compose-oracle.yml Normal file
View File

@ -0,0 +1,48 @@
version: '3.8'
services:
oracle:
image: localhost:8787/oracle:latest
container_name: oracle-server
restart: unless-stopped
environment:
ORACLE_SID: ${ORACLE_SID:-ORCL}
ORACLE_PDB: ${ORACLE_PDB:-ORCLPDB1}
ORACLE_PWD: ${ORACLE_PWD:-wace0909!!}
ORACLE_EDITION: ${ORACLE_EDITION:-standard}
ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8}
ENABLE_ARCHIVELOG: ${ENABLE_ARCHIVELOG:-true}
TZ: Asia/Seoul
ports:
- "1521:1521"
- "5500:5500"
volumes:
- oracle_data:/opt/oracle/oradata
- ./oracle-init:/docker-entrypoint-initdb.d
- ./oracle-backup:/opt/oracle/backup
networks:
- oracle_network
hostname: oracle-server
shm_size: 1g
# Oracle 관리용 Adminer (선택사항)
oracle-adminer:
image: adminer:latest
container_name: oracle-adminer
restart: unless-stopped
environment:
ADMINER_DEFAULT_SERVER: oracle
ports:
- "8082:8080"
depends_on:
- oracle
networks:
- oracle_network
volumes:
oracle_data:
driver: local
networks:
oracle_network:
driver: bridge

41
mariadb-config/my.cnf Normal file
View File

@ -0,0 +1,41 @@
[mysqld]
# 기본 설정
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
# 성능 설정
max_connections = 200
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# 쿼리 캐시 설정
query_cache_type = 1
query_cache_size = 32M
query_cache_limit = 2M
# 로그 설정
general_log = 0
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# 바이너리 로그 설정
log-bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
# 보안 설정
skip-name-resolve
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
# 타임존 설정
default-time-zone = '+09:00'
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4

View File

@ -0,0 +1,50 @@
-- MariaDB 초기화 스크립트
-- 데이터베이스와 사용자 생성
-- 기본 데이터베이스 생성 (이미 환경변수로 생성되지만 추가 설정용)
CREATE DATABASE IF NOT EXISTS wace CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 추가 데이터베이스 생성 예시
CREATE DATABASE IF NOT EXISTS appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS logdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 사용자 권한 설정
GRANT ALL PRIVILEGES ON wace.* TO 'wace'@'%';
GRANT ALL PRIVILEGES ON appdb.* TO 'wace'@'%';
GRANT SELECT, INSERT, UPDATE ON logdb.* TO 'wace'@'%';
-- 권한 적용
FLUSH PRIVILEGES;
-- 샘플 테이블 생성
USE wace;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_profiles (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
first_name VARCHAR(50),
last_name VARCHAR(50),
phone VARCHAR(20),
address TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 샘플 데이터 삽입
INSERT INTO users (username, email, password_hash) VALUES
('admin', 'admin@example.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'),
('testuser', 'test@example.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');
INSERT INTO user_profiles (user_id, first_name, last_name, phone) VALUES
(1, '관리자', '시스템', '010-1234-5678'),
(2, '테스트', '사용자', '010-9876-5432');

9
mariadb.env Normal file
View File

@ -0,0 +1,9 @@
# MariaDB 환경 변수 설정
MYSQL_ROOT_PASSWORD=wace0909!!
MYSQL_DATABASE=wace
MYSQL_USER=wace
MYSQL_PASSWORD=wace0909!!
# 선택적 설정
MYSQL_ALLOW_EMPTY_PASSWORD=no
MYSQL_RANDOM_ROOT_PASSWORD=no

View File

@ -0,0 +1,78 @@
-- MSSQL 초기화 스크립트
-- 데이터베이스와 사용자 생성
USE master;
GO
-- wace 데이터베이스 생성
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'wace')
BEGIN
CREATE DATABASE wace
COLLATE Korean_Wansung_CI_AS;
END
GO
-- wace 사용자 생성 및 권한 부여
USE wace;
GO
-- 로그인 생성
IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'wace')
BEGIN
CREATE LOGIN wace WITH PASSWORD = 'wace0909!!';
END
GO
-- 사용자 생성
IF NOT EXISTS (SELECT name FROM sys.database_principals WHERE name = 'wace')
BEGIN
CREATE USER wace FOR LOGIN wace;
ALTER ROLE db_owner ADD MEMBER wace;
END
GO
-- 샘플 테이블 생성
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'users')
BEGIN
CREATE TABLE users (
id INT IDENTITY(1,1) PRIMARY KEY,
username NVARCHAR(50) NOT NULL UNIQUE,
email NVARCHAR(100) NOT NULL UNIQUE,
password_hash NVARCHAR(255) NOT NULL,
created_at DATETIME2 DEFAULT GETDATE(),
updated_at DATETIME2 DEFAULT GETDATE()
);
END
GO
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'user_profiles')
BEGIN
CREATE TABLE user_profiles (
id INT IDENTITY(1,1) PRIMARY KEY,
user_id INT NOT NULL,
first_name NVARCHAR(50),
last_name NVARCHAR(50),
phone NVARCHAR(20),
address NVARCHAR(MAX),
created_at DATETIME2 DEFAULT GETDATE(),
updated_at DATETIME2 DEFAULT GETDATE(),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
END
GO
-- 샘플 데이터 삽입
IF NOT EXISTS (SELECT * FROM users WHERE username = 'admin')
BEGIN
INSERT INTO users (username, email, password_hash) VALUES
('admin', 'admin@example.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'),
('testuser', 'test@example.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');
INSERT INTO user_profiles (user_id, first_name, last_name, phone) VALUES
(1, N'관리자', N'시스템', '010-1234-5678'),
(2, N'테스트', N'사용자', '010-9876-5432');
END
GO
PRINT 'MSSQL wace 데이터베이스 초기화 완료';
GO

9
mssql.env Normal file
View File

@ -0,0 +1,9 @@
# MSSQL 환경 변수 설정
SA_PASSWORD=wace0909!!
MSSQL_PID=Express
ACCEPT_EULA=Y
# 데이터베이스 설정
DATABASE_NAME=wace
DB_USER=wace
DB_PASSWORD=wace0909!!

View File

@ -0,0 +1,120 @@
-- Oracle 초기화 스크립트
-- 데이터베이스와 사용자 생성
-- wace 사용자 생성 (PDB에서 실행)
ALTER SESSION SET CONTAINER = ORCLPDB1;
-- 사용자가 이미 존재하는지 확인하고 생성
DECLARE
user_count NUMBER;
BEGIN
SELECT COUNT(*) INTO user_count FROM dba_users WHERE username = 'WACE';
IF user_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE USER wace IDENTIFIED BY "wace0909!!" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp';
EXECUTE IMMEDIATE 'GRANT CONNECT, RESOURCE, DBA TO wace';
EXECUTE IMMEDIATE 'GRANT CREATE SESSION TO wace';
EXECUTE IMMEDIATE 'GRANT CREATE TABLE TO wace';
EXECUTE IMMEDIATE 'GRANT CREATE VIEW TO wace';
EXECUTE IMMEDIATE 'GRANT CREATE PROCEDURE TO wace';
EXECUTE IMMEDIATE 'GRANT CREATE SEQUENCE TO wace';
EXECUTE IMMEDIATE 'GRANT CREATE TRIGGER TO wace';
EXECUTE IMMEDIATE 'ALTER USER wace QUOTA UNLIMITED ON users';
DBMS_OUTPUT.PUT_LINE('사용자 wace가 생성되었습니다.');
ELSE
DBMS_OUTPUT.PUT_LINE('사용자 wace가 이미 존재합니다.');
END IF;
END;
/
-- wace 사용자로 연결하여 테이블 생성
CONNECT wace/"wace0909!!"@//localhost:1521/ORCLPDB1;
-- 샘플 테이블 생성
DECLARE
table_count NUMBER;
BEGIN
SELECT COUNT(*) INTO table_count FROM user_tables WHERE table_name = 'USERS';
IF table_count = 0 THEN
EXECUTE IMMEDIATE '
CREATE TABLE users (
id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
username VARCHAR2(50) NOT NULL UNIQUE,
email VARCHAR2(100) NOT NULL UNIQUE,
password_hash VARCHAR2(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)';
DBMS_OUTPUT.PUT_LINE('users 테이블이 생성되었습니다.');
END IF;
END;
/
DECLARE
table_count NUMBER;
BEGIN
SELECT COUNT(*) INTO table_count FROM user_tables WHERE table_name = 'USER_PROFILES';
IF table_count = 0 THEN
EXECUTE IMMEDIATE '
CREATE TABLE user_profiles (
id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
user_id NUMBER NOT NULL,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
phone VARCHAR2(20),
address CLOB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_user_profiles_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
)';
DBMS_OUTPUT.PUT_LINE('user_profiles 테이블이 생성되었습니다.');
END IF;
END;
/
-- 업데이트 트리거 생성
CREATE OR REPLACE TRIGGER trg_users_updated_at
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
:NEW.updated_at := CURRENT_TIMESTAMP;
END;
/
CREATE OR REPLACE TRIGGER trg_user_profiles_updated_at
BEFORE UPDATE ON user_profiles
FOR EACH ROW
BEGIN
:NEW.updated_at := CURRENT_TIMESTAMP;
END;
/
-- 샘플 데이터 삽입
DECLARE
data_count NUMBER;
BEGIN
SELECT COUNT(*) INTO data_count FROM users WHERE username = 'admin';
IF data_count = 0 THEN
INSERT INTO users (username, email, password_hash) VALUES
('admin', 'admin@example.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');
INSERT INTO users (username, email, password_hash) VALUES
('testuser', 'test@example.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');
INSERT INTO user_profiles (user_id, first_name, last_name, phone) VALUES
(1, '관리자', '시스템', '010-1234-5678');
INSERT INTO user_profiles (user_id, first_name, last_name, phone) VALUES
(2, '테스트', '사용자', '010-9876-5432');
COMMIT;
DBMS_OUTPUT.PUT_LINE('샘플 데이터가 삽입되었습니다.');
END IF;
END;
/
DBMS_OUTPUT.PUT_LINE('Oracle wace 데이터베이스 초기화 완료');
/

12
oracle.env Normal file
View File

@ -0,0 +1,12 @@
# Oracle 환경 변수 설정
ORACLE_SID=ORCL
ORACLE_PDB=ORCLPDB1
ORACLE_PWD=wace0909!!
ORACLE_EDITION=standard
ORACLE_CHARACTERSET=AL32UTF8
ENABLE_ARCHIVELOG=true
# 데이터베이스 설정
DATABASE_NAME=wace
DB_USER=wace
DB_PASSWORD=wace0909!!

77
start-all-db.sh Normal file
View File

@ -0,0 +1,77 @@
#!/bin/bash
# 모든 데이터베이스 Docker 컨테이너 시작 스크립트
echo "=== 모든 데이터베이스 컨테이너를 시작합니다 ==="
echo ""
# PostgreSQL 확인 (이미 실행 중인지 확인)
echo "1. PostgreSQL 상태 확인..."
if docker ps | grep -q postgres; then
echo "PostgreSQL이 이미 실행 중입니다."
else
echo "PostgreSQL이 실행되지 않았습니다. 필요시 수동으로 시작하세요."
fi
echo ""
# MariaDB 시작
echo "2. MariaDB 시작..."
if [ -f "docker-compose-mariadb.yml" ]; then
docker-compose -f docker-compose-mariadb.yml --env-file mariadb.env up -d
echo "MariaDB 시작 완료"
else
echo "MariaDB 설정 파일이 없습니다."
fi
echo ""
# MSSQL 시작
echo "3. MSSQL 시작..."
if [ -f "docker-compose-mssql.yml" ]; then
docker-compose -f docker-compose-mssql.yml --env-file mssql.env up -d
echo "MSSQL 시작 완료"
else
echo "MSSQL 설정 파일이 없습니다."
fi
echo ""
# Oracle 시작
echo "4. Oracle 시작..."
if [ -f "docker-compose-oracle.yml" ]; then
docker-compose -f docker-compose-oracle.yml --env-file oracle.env up -d
echo "Oracle 시작 완료 (초기화에 시간이 걸릴 수 있습니다)"
else
echo "Oracle 설정 파일이 없습니다."
fi
echo ""
# 잠시 대기 후 상태 확인
echo "컨테이너 상태를 확인합니다..."
sleep 10
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "=== 데이터베이스 연결 정보 ==="
echo ""
echo "PostgreSQL:"
echo " - 포트: 5432 (이미 실행 중인 경우)"
echo ""
echo "MariaDB:"
echo " - 포트: 3306"
echo " - 데이터베이스: wace"
echo " - 사용자: wace / 비밀번호: wace0909!!"
echo " - phpMyAdmin: http://localhost:8080"
echo ""
echo "MSSQL:"
echo " - 포트: 1433"
echo " - 데이터베이스: wace"
echo " - 사용자: wace / 비밀번호: wace0909!!"
echo " - Adminer: http://localhost:8081"
echo ""
echo "Oracle:"
echo " - 포트: 1521"
echo " - SID: ORCL / PDB: ORCLPDB1"
echo " - 사용자: wace / 비밀번호: wace0909!!"
echo " - Adminer: http://localhost:8082"
echo " - Enterprise Manager: http://localhost:5500/em"
echo ""
echo "모든 데이터베이스 컨테이너 시작이 완료되었습니다!"

35
start-mariadb.sh Normal file
View File

@ -0,0 +1,35 @@
#!/bin/bash
# MariaDB Docker 컨테이너 시작 스크립트
echo "MariaDB Docker 컨테이너를 시작합니다..."
# 환경 변수 파일 확인
if [ ! -f "mariadb.env" ]; then
echo "경고: mariadb.env 파일이 없습니다. 기본값을 사용합니다."
fi
# Docker Compose로 MariaDB 시작
docker-compose -f docker-compose-mariadb.yml --env-file mariadb.env up -d
# 컨테이너 상태 확인
echo "컨테이너 상태를 확인합니다..."
sleep 5
docker ps | grep mariadb
echo ""
echo "MariaDB 연결 정보:"
echo "- 호스트: localhost"
echo "- 포트: 3306"
echo "- 데이터베이스: testdb"
echo "- 사용자: dbuser"
echo "- 비밀번호: userpassword123"
echo "- Root 비밀번호: rootpassword123"
echo ""
echo "phpMyAdmin 접속: http://localhost:8080"
echo ""
echo "MariaDB 컨테이너가 시작되었습니다!"
# 로그 확인 (선택사항)
echo "MariaDB 로그를 확인하려면 다음 명령어를 사용하세요:"
echo "docker logs mariadb-server"

40
start-mssql.sh Normal file
View File

@ -0,0 +1,40 @@
#!/bin/bash
# MSSQL Docker 컨테이너 시작 스크립트
echo "MSSQL Docker 컨테이너를 시작합니다..."
# 환경 변수 파일 확인
if [ ! -f "mssql.env" ]; then
echo "경고: mssql.env 파일이 없습니다. 기본값을 사용합니다."
fi
# Docker Compose로 MSSQL 시작
docker-compose -f docker-compose-mssql.yml --env-file mssql.env up -d
# 컨테이너 상태 확인
echo "컨테이너 상태를 확인합니다..."
sleep 10
docker ps | grep mssql
echo ""
echo "MSSQL 연결 정보:"
echo "- 호스트: localhost"
echo "- 포트: 1433"
echo "- 데이터베이스: wace"
echo "- 사용자: wace"
echo "- 비밀번호: wace0909!!"
echo "- SA 비밀번호: wace0909!!"
echo ""
echo "Adminer 접속: http://localhost:8081"
echo " - 시스템: MS SQL (beta)"
echo " - 서버: mssql"
echo " - 사용자명: sa 또는 wace"
echo " - 비밀번호: wace0909!!"
echo " - 데이터베이스: wace"
echo ""
echo "MSSQL 컨테이너가 시작되었습니다!"
# 로그 확인 (선택사항)
echo "MSSQL 로그를 확인하려면 다음 명령어를 사용하세요:"
echo "docker logs mssql-server"

48
start-oracle.sh Normal file
View File

@ -0,0 +1,48 @@
#!/bin/bash
# Oracle Docker 컨테이너 시작 스크립트
echo "Oracle Docker 컨테이너를 시작합니다..."
# 환경 변수 파일 확인
if [ ! -f "oracle.env" ]; then
echo "경고: oracle.env 파일이 없습니다. 기본값을 사용합니다."
fi
# Docker Compose로 Oracle 시작
docker-compose -f docker-compose-oracle.yml --env-file oracle.env up -d
# 컨테이너 상태 확인
echo "컨테이너 상태를 확인합니다..."
echo "Oracle 초기화에는 시간이 걸릴 수 있습니다. 잠시 기다려주세요..."
sleep 30
docker ps | grep oracle
echo ""
echo "Oracle 연결 정보:"
echo "- 호스트: localhost"
echo "- 포트: 1521"
echo "- SID: ORCL"
echo "- PDB: ORCLPDB1"
echo "- 사용자: wace"
echo "- 비밀번호: wace0909!!"
echo "- SYS 비밀번호: wace0909!!"
echo ""
echo "연결 문자열 예시:"
echo "- sqlplus wace/\"wace0909!!\"@//localhost:1521/ORCLPDB1"
echo "- JDBC: jdbc:oracle:thin:@localhost:1521:ORCL"
echo ""
echo "Adminer 접속: http://localhost:8082"
echo " - 시스템: Oracle"
echo " - 서버: oracle:1521"
echo " - 사용자명: wace"
echo " - 비밀번호: wace0909!!"
echo " - 데이터베이스: ORCLPDB1"
echo ""
echo "Oracle Enterprise Manager: http://localhost:5500/em"
echo ""
echo "Oracle 컨테이너가 시작되었습니다!"
# 로그 확인 (선택사항)
echo "Oracle 로그를 확인하려면 다음 명령어를 사용하세요:"
echo "docker logs oracle-server"

46
stop-all-db.sh Normal file
View File

@ -0,0 +1,46 @@
#!/bin/bash
# 모든 데이터베이스 Docker 컨테이너 중지 스크립트
echo "=== 모든 데이터베이스 컨테이너를 중지합니다 ==="
echo ""
# MariaDB 중지
echo "1. MariaDB 중지..."
if [ -f "docker-compose-mariadb.yml" ]; then
docker-compose -f docker-compose-mariadb.yml down
echo "MariaDB 중지 완료"
else
echo "MariaDB 설정 파일이 없습니다."
fi
echo ""
# MSSQL 중지
echo "2. MSSQL 중지..."
if [ -f "docker-compose-mssql.yml" ]; then
docker-compose -f docker-compose-mssql.yml down
echo "MSSQL 중지 완료"
else
echo "MSSQL 설정 파일이 없습니다."
fi
echo ""
# Oracle 중지
echo "3. Oracle 중지..."
if [ -f "docker-compose-oracle.yml" ]; then
docker-compose -f docker-compose-oracle.yml down
echo "Oracle 중지 완료"
else
echo "Oracle 설정 파일이 없습니다."
fi
echo ""
echo "PostgreSQL은 수동으로 관리하세요 (이미 실행 중인 컨테이너)."
echo ""
# 컨테이너 상태 확인
echo "현재 실행 중인 컨테이너:"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "모든 데이터베이스 컨테이너 중지가 완료되었습니다!"

14
stop-mariadb.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/bash
# MariaDB Docker 컨테이너 중지 스크립트
echo "MariaDB Docker 컨테이너를 중지합니다..."
# Docker Compose로 MariaDB 중지
docker-compose -f docker-compose-mariadb.yml down
echo "MariaDB 컨테이너가 중지되었습니다!"
# 컨테이너 상태 확인
echo "현재 실행 중인 컨테이너:"
docker ps

14
stop-mssql.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/bash
# MSSQL Docker 컨테이너 중지 스크립트
echo "MSSQL Docker 컨테이너를 중지합니다..."
# Docker Compose로 MSSQL 중지
docker-compose -f docker-compose-mssql.yml down
echo "MSSQL 컨테이너가 중지되었습니다!"
# 컨테이너 상태 확인
echo "현재 실행 중인 컨테이너:"
docker ps

14
stop-oracle.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/bash
# Oracle Docker 컨테이너 중지 스크립트
echo "Oracle Docker 컨테이너를 중지합니다..."
# Docker Compose로 Oracle 중지
docker-compose -f docker-compose-oracle.yml down
echo "Oracle 컨테이너가 중지되었습니다!"
# 컨테이너 상태 확인
echo "현재 실행 중인 컨테이너:"
docker ps