Skip to content

TierGuardians/3tier_security_db

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

📁 3tier_security_db

이 저장소는 3-Tier 기반 개인 금융 관리 웹사이트의 데이터베이스 설계 및 관리를 위한 레포지토리

사용자는 직접 입력한 문자열 ID(user_id)를 기준으로 데이터를 관리하며, 금융 소비/자산/예산 내역을 통합적으로 기록


📐 ERD

Copy of 3tier_security

ERD 구성 요약

  • users : 사용자 계정 정보 (직접 지정 ID)
  • expenses : 소비 내역
  • budgets : 월별 예산
  • assets : 금융 자산

📋 테이블 정의 (스키마 요약)

🔹 users

컬럼 타입 설명
user_id VARCHAR(30) 사용자 ID (직접 입력)
email VARCHAR(100) 이메일 (고유)
password VARCHAR(255) 암호 (bcrypt 해시)
name VARCHAR(50) 사용자 이름
refresh_token VARCHAR(100) JWT 토큰
created_at TIMESTAMP 가입일

🔹 expenses

컬럼 타입 설명
id BIGINT PK
user_id VARCHAR(30) 사용자 ID (FK)
category VARCHAR(30) 소비 카테고리
description VARCHAR(100) 내용
amount DECIMAL(12,2) 금액
spent_at DATE 지출일
created_at TIMESTAMP 생성일

🔹 budgets

컬럼 타입 설명
id BIGINT PK
user_id VARCHAR(30) 사용자 ID (FK)
month CHAR(7) 월 단위 ('YYYY-MM')
amount DECIMAL(12,2) 예산 금액
created_at TIMESTAMP 생성일

🔹 assets

컬럼 타입 설명
id BIGINT PK
user_id VARCHAR(30) 사용자 ID (FK)
name VARCHAR(50) 자산명 (ex. 카카오뱅크, 삼성전자 주식)
type VARCHAR(30) 자산 유형 (현금, 예금, 주식 등)
amount DECIMAL(15,2) 자산 금액
created_at TIMESTAMP 생성일


🔐 MySQL 보안 설정

MySQL을 안전하게 허용하기 위한 실무 가이드 접근 제한, 사용자 권한 분리, 방화벽 설정을 통해 보안성과 유연성을 동시에 확보


✅ 설정 목적 및 필요성

  • 3-Tier 아키텍처 구성: WAS ↔ DB 분리
  • 보안 강화를 위한 접속 제어 (IP, 계정, 포트 레벨)

⚙️ 설정 요약

🌍 bind-address 설정

  • MySQL 외부 접속 수신 허용
# /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0

sudo systemctl restart mysql

👤 사용자 계정 (접속 IP 제한)

  • 지정된 IP에서만 접속 가능한 계정 생성
CREATE USER 'remote_user'@'remote_ip' IDENTIFIED BY 'StrongPassword!';
GRANT SELECT, INSERT ON your_database.* TO 'remote_user'@'remote_ip';
FLUSH PRIVILEGES;

🔥 UFW 방화벽 설정

  • 해당 IP만 3306 포트 접근 허용
sudo ufw allow from 'remote_ip' to any port 3306
sudo ufw deny 3306

📝 MySQL 로그 설정

MySQL에서 쿼리 및 오류 로그를 남겨 운영 분석, 성능 개선, 보안 추적에 활용


🗂️ 1. 일반 로그 (General Log)

  • 모든 쿼리 실행 내역을 기록

🔧 설정

# /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql.log
log_output = FILE

🐢 2. 슬로우 쿼리 로그 (Slow Query Log)

  • 지정된 시간 이상 걸리는 느린 쿼리만 기록

🔧 설정

# /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

🔄 변경 적용

  • 설정 파일 수정 후에는 반드시 MySQL 재시작
sudo systemctl restart mysql

About

3tier DB 레포지토리

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published