-- 데이터베이스 생성 및 사용
CREATE DATABASE IF NOT EXISTS worldpay_db
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE worldpay_db;
-- 1. 유저(Users) 테이블 생성
-- 요구사항에 '보안'이 강조되어 있으므로 비밀번호는 해시(Hash)값으로 저장할 수 있도록 길게 잡습니다.
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,
status ENUM('ACTIVE', 'INACTIVE', 'SUSPENDED') DEFAULT 'ACTIVE',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 2. 결제 내역(Payments) 테이블 생성 (선택 사항 - 유저 관리 시스템의 확장)
CREATE TABLE IF NOT EXISTS payments (
payment_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
currency VARCHAR(10) DEFAULT 'USD',
payment_status ENUM('PENDING', 'SUCCESS', 'FAILED') DEFAULT 'PENDING',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- 유저 데이터 삽입 (비밀번호는 암호화되었다고 가정)
INSERT INTO users (username, email, password_hash, status)
VALUES
('testuser01', 'user01@worldpay.com', 'hashed_pw_string_1', 'ACTIVE'),
('testuser02', 'user02@worldpay.com', 'hashed_pw_string_2', 'ACTIVE'),
('admin_user', 'admin@worldpay.com', 'hashed_pw_string_admin', 'ACTIVE');
-- 결제 데이터 삽입
INSERT INTO payments (user_id, amount, currency, payment_status)
VALUES
(1, 150.00, 'KRW', 'SUCCESS'),
(2, 45.50, 'USD', 'PENDING');
Python 애플리케이션 코드(예: Boto3, PyMySQL, SQLAlchemy 등)에 들어갈 가능성이 높은 핵심 쿼리들입니다.
① 특정 유저 로그인 검증 (조회)
SQL
SELECT id, username, password_hash, status
FROM users
WHERE email = 'user01@worldpay.com' AND status = 'ACTIVE';
② 특정 유저의 결제 내역 조회 (JOIN)
SQL
SELECT u.username, p.amount, p.currency, p.payment_status, p.created_at
FROM users u
JOIN payments p ON u.id = p.user_id
WHERE u.username = 'testuser01';
③ 유저 정보 수정 (비밀번호 변경 등)
SQL
UPDATE users
SET password_hash = 'new_hashed_pw_string'
WHERE username = 'testuser01';
④ 회원 탈퇴 (상태 변경 - 실제 데이터를 지우지 않는 Soft Delete 방식)
SQL
UPDATE users
SET status = 'INACTIVE'
WHERE username = 'testuser02';