반응형

전체 글 605

[MySQL] (복제구조3️⃣) GTID 기반 복제 완전 이해하기

MySQL 복제에서 최근 가장 많이 쓰이는 방식이 바로 GTID 기반 복제다.GTID(Global Transaction ID)는 각 트랜잭션에 고유 식별자를 부여해복제 위치를 자동으로 관리할 수 있게 해준다.기존처럼 binlog 파일명 + 포지션을 수동으로 지정할 필요가 없고,장애 복구, 자동화 구성, 마스터 전환 작업이 훨씬 수월하다.✅ GTID란?Global Transaction Identifier각 트랜잭션에 대해 전역 고유 ID를 부여함GTID는 다음과 같은 형태로 구성됨UUID:트랜잭션번호 예: 3E11FA47-71CA-11E1-9E33-C80AA9429562:32이 고유 ID를 통해 Master와 Slave는 복제된 트랜잭션 여부를 명확히 판단할 수 있다.🔁 기존 복제 방식 vs GTID ..

DB 2025.07.16

[MySQL] (복제구조2️⃣) Master-Slave 복제 설정 실습 가이드

MySQL 복제를 처음 설정할 때 가장 기본이 되는 구조가 바로 Master-Slave 구조다.이 방식은 하나의 Master 서버에서 발생한 변경사항을 1개 또는 다수의 Slave 서버에 동기화시키는 방식으로, 읽기 부하 분산, 백업 분리, 장애 대비용으로 실무에서 널리 사용된다.이번 글에서는 MySQL Master-Slave 복제를 직접 구성하는 실습 가이드를 제공한다.CentOS 또는 Ubuntu 환경, MySQL 8.0 이상 기준이며, GTID 비활성화 상태(기본 binlog 복제 방식)로 설명한다.✅ 설정 전 확인사항Master와 Slave는 서로 다른 server-id를 가져야 함둘 다 binary logging 설정이 필요MySQL 버전은 가급적 동일하거나 유사한 버전 사용네트워크 통신 가능 ..

DB 2025.07.16

[MySQL] (복제구조1️⃣) MySQL 복제란? 구조와 개념 완전 정리

MySQL 복제(Replication)는 하나의 MySQL 서버에서 실행된 변경 내용을다른 서버로 실시간 또는 지연 동기화하는 기술이다.대표적으로 Master-Slave 구조가 있으며, 최근에는 GTID 기반 복제나다중 소스 복제(Multi-source replication) 같은 다양한 형태도 활용된다.✅ MySQL 복제란?하나의 주 서버(Master)에서 실행된 데이터를하나 이상의 보조 서버(Slave)로 전달하는 구조주로 읽기 부하 분산, 백업용 서버, 데이터 이중화, 장애 복구(HA) 용도로 활용Master는 쓰기 중심, Slave는 읽기 전용으로 운영하는 것이 일반적예를 들어 주문 시스템에서 Master는 주문 등록을 처리하고,Slave는 관리자 화면에서 주문 목록을 조회하는 데 사용될 수 있다..

DB 2025.07.16

[MySQL] (보안설정5️⃣) 실무에서 자주 놓치는 보안 설정 체크리스트

MySQL을 운영하면서 기능은 잘 돌아가지만,보안은 기본값 그대로 둔 채 방치되는 경우가 생각보다 많다.문제는 이런 사소한 보안 구멍이 실제 사고로 이어질 수 있다는 점이다.✅ 1. root 계정 외 다른 관리 계정이 없다root 계정 하나만으로 모든 작업을 처리하면 실수나 공격의 영향이 치명적운영, 개발, 모니터링 용도별로 최소 권한 계정 분리 필요실무 팁CREATE USER 'devuser'@'%' IDENTIFIED BY 'password';GRANT SELECT, INSERT ON mydb.* TO 'devuser'@'%';✅ 2. 사용자 계정에 불필요한 권한이 부여됨GRANT ALL ON . 은 절대 금지개발 편의상 부여된 권한이 운영에 그대로 적용되는 경우 많음실무 팁정확한 작업 범위에 맞는 ..

DB 2025.07.16

[MySQL] (보안설정4️⃣) SSL 인증서 적용하기: OpenSSL 기반 실습 가이드

MySQL에서 암호화된 통신(SSL/TLS)을 적용하려면 반드시 인증서가 필요하다.MySQL은 OpenSSL을 기반으로 SSL 인증서를 생성하고 사용하는 방식을 지원하며,서버와 클라이언트 모두 적절한 키와 인증서 파일을 갖추고 있어야 한다.이번 글에서는 OpenSSL을 사용해 SSL 인증서를 직접 생성하고MySQL에 적용하는 전 과정을 실습 형태로 정리한다.✅ 준비물: 인증서 파일 3종ca.pem: 인증서 서명용 CA (인증기관) 인증서server-cert.pem / server-key.pem: MySQL 서버용 인증서와 개인키client-cert.pem / client-key.pem: 클라이언트용 인증서와 개인키이 3가지 세트는 서버·클라이언트 모두에 적용되며,공개키 기반 암호화를 통해 데이터 전송을 ..

DB 2025.07.16

[MySQL] (보안설정3️⃣) 데이터 in transit 암호화: 네트워크 구간 보안 설정법

MySQL에서 클라이언트와 서버 간 통신은 기본적으로 평문(Plain text)이다.따라서 암호화를 설정하지 않으면 ID, 비밀번호, 쿼리, 결과값까지 그대로 네트워크를 타고 전달된다.이런 환경에서는 중간자 공격(Man-in-the-Middle)이나 패킷 스니핑에 매우 취약하다.이를 방지하기 위해 MySQL은 SSL/TLS 기반의 암호화 통신 기능을 제공한다.이번 글에서는 MySQL에서 데이터를 전송할 때 암호화 통신을 설정하는 방법과SSL 인증서 적용 흐름, 그리고 실무에서 주의할 점까지 정리한다.✅ in transit 암호화란?네트워크를 통해 전송 중인 데이터 자체를 암호화하는 방식공격자가 네트워크를 감청해도 내용을 읽을 수 없도록 보호TLS 기반의 SSL 인증서 연결 설정으로 구현🔐 MySQL에서..

DB 2025.07.16

[MySQL] (보안설정2️⃣) 데이터 at rest 암호화 설정법: 테이블·디스크 암호화 실무 가이드

서버에 저장된 데이터를 보호하는 가장 핵심적인 방법이 바로 데이터 at rest 암호화다.이 방식은 하드디스크나 데이터 파일에 저장된 정보 자체를 암호화하는 것으로, 물리적인 유출이나 루트 권한 탈취 같은 위협에서도 데이터를 안전하게 지켜준다.MySQL에서는 기본적으로 InnoDB 테이블스페이스 암호화, AES 기반 컬럼 암호화, 그리고 OS 디스크 레벨 암호화를 활용할 수 있다.✅ 데이터 at rest 암호화란?물리적인 디스크에 저장된 데이터를 암호화된 형태로 유지하는 것디스크가 유출되거나 백업 파일이 탈취되어도 암호화 키 없이는 복호화 불가백업본, 스냅샷, 로그 파일까지 모두 암호화 대상이 될 수 있음일반적으로 InnoDB 스토리지 엔진 기반의 테이블에 적용🔐 방식 1: InnoDB 테이블스페이스 ..

DB 2025.07.16

[MySQL] (보안설정1️⃣) 데이터 암호화가 필요한 이유와 기본 개념 정리

데이터베이스를 운영하다 보면 성능만큼 중요한 것이 바로 보안이다.특히 개인정보, 결제 정보, 계정 정보처럼 민감한 데이터를 다루는 서비스라면 암호화는 선택이 아니라 필수다.MySQL에서도 암호화를 통해 저장된 데이터와 전송 중인 데이터를 안전하게 보호할 수 있다.✅ 왜 데이터 암호화가 중요한가?데이터 유출 사고가 발생했을 때 암호화되어 있으면 유출되더라도 쉽게 해독되지 않음보안 감사, 개인정보보호법, ISO 27001 등 보안 기준을 충족하기 위한 필수 조건클라우드 환경, 원격 접속 환경이 많아지면서 전송 중 데이터 노출 위험 증가내부자에 의한 악의적 접근(내부 공격)도 암호화를 통해 차단 가능많은 기업이 방화벽, 접근 제어만으로는 부족하다는 것을 깨닫고저장 및 전송 구간 암호화를 함께 적용하고 있다.?..

DB 2025.07.16

[MySQL] (트랜잭션 격리수준5️⃣) 실무에서 격리 수준 설정은 이렇게 한다

MySQL에서 성능과 데이터 정합성은 언제나 트레이드오프의 중심에 있다.트랜잭션 격리 수준은 이 두 가지를 조율하는 핵심 설정이다.실무에서는 단순히 높은 격리 수준을 고르면 좋은 것이 아니라, 업무 특성과 DB 사용 패턴에 맞춰 결정해야 한다.✅ 실무에서 격리 수준을 설정할 때 고려할 점시스템의 읽기/쓰기 비율데이터의 정합성 요구 수준락 경합이 빈번한지 여부서비스의 응답 시간 SLA트랜잭션 지속 시간이 긴 작업 여부사용 중인 DB 엔진 특성 (InnoDB, MyISAM 등)대부분의 시스템은 동시에 많은 유저가 접근하므로, 동시성과 정합성의 균형을 반드시 고려해야 한다.🔸 READ UNCOMMITTED: 자제Dirty Read가 발생하기 때문에 데이터 무결성이 완전히 깨질 수 있음실무에서는 로그 분석, ..

DB 2025.07.16

[MySQL] (트랜잭션 격리수준4️⃣) 격리 수준별 현상 실습: Dirty ~ Phantom Read

트랜잭션 격리 수준은 단순한 개념으로만 이해하기 어렵다.Dirty Read, Non-repeatable Read, Phantom Read와 같은 현상은 직접 실행하고 확인해보는 경험이 중요하다.🧪 실습 전 준비: 테스트 테이블 만들기CREATE TABLE test_user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), balance INT);INSERT INTO test_user (name, balance) VALUES ('Alice', 1000), ('Bob', 1000);🔥 Dirty Read 실습 (READ UNCOMMITTED)발생 조건트랜잭션이 아직 커밋하지 않은 데이터를 다른 트랜잭션이 읽음데이터 정합성이 무너질 수 있음실습 예제세..

DB 2025.07.16
반응형