리눅스 /run/user/ 디렉터리: 언제 마운트되고 로그인 없이도 유지될까?

/run/user/<UID> 디렉터리 언제 생기나? Lingering으로 세션 유지하는 법 📌 목차 보기 /run/user/<UID>의 정체 언제 마운트될까? su/sudo 전환의 차이 Lingering으로 유지하기 마무리 정리 /run/user/<UID>의 정체 /run/user/<UID> 디렉터리는 리눅스 시스템에서 로그인한 사용자를 위한 런타임 임시 파일들을 저장하는 전용 디렉터리 입니다. UID는 User ID를 의미하며, 일반적으로 1000 이상부터 시작되는 숫자입니다. 예를 들어, 여러분이 첫 번째 일반 사용자라면 보통 UID가 1000입니다. 그렇다면 /run/user/1000 이라는 디렉터리가 생성될 수 있겠죠. 이 디렉터리에는 GNOME, KDE와 같은 데스크톱 환경이 사용하는 소켓 파일이나, 사용자 단위 systemd 서비스가 사용하는 임시 파일, 파이프 등 다양한 파일들이 저장됩니다. 중요한 점은 이 디렉터리가 휘발성 이라는 것입니다. 즉, 시스템을 재시작하거나 사용자가 로그아웃하면 이 디렉터리는 자동으로 사라진다 는 의미입니다. 해당 디렉터리는 보통 tmpfs 파일 시스템으로 마운트됩니다. 이는 실제 디스크가 아닌 메모리(RAM)에 파일이 저장된다는 뜻이며, 덕분에 속도가 빠르고 자동 삭제가 가능합니다. 언제 마운트될까? 이 디렉터리는 정확히 언제 생길까요? 정답은 사용자가 시스템에 로그인할 때입니다. 로그인은 여러 경로를 통해 이뤄질 수 있습니다. 예를 들어 GDM, SDDM 등 GUI 로그인 매니저를 사용할 때 터미널에서 TTY를 통해 로그인할 때 SSH로 원격 접속할 때 이러한 로그인 과정에서는 PAM(Pluggable Authentication Modules)이라는 인증 모듈 체계가 동작하게 되며, 이 중 pam_systemd 라는 모듈이 systemd에게 해당 사용자의 세...

MySQL 라이선스 종류와 선택 가이드

이미지
  📌 목차 보기 MySQL이란? 고속 트랜잭션과 복제 MySQL 인기 이유 MySQL 에디션 비교 마치며 MySQL이란? 먼저 MySQL에 대해 알아보겠습니다.  MySQL은 관계형 데이터베이스 관리 시스템 입니다. 데이터를 테이블, 행, 열 로 구조화하여 프로그래밍과 데이터 관리를 효율적으로 해줍니다. MySQL의 중요한 특징 중 하나는 트랜잭션 기반 시스템 이라는 점입니다. 예를 들어 데이터를 입력(insert), 수정(update), 삭제(delete)하는 작업들이 하나의 묶음으로 처리됩니다. 이를 "트랜잭션"이라고 하며, 모든 작업이 성공해야만 실제로 저장 됩니다. MySQL은 기본적으로 InnoDB라는 스토리지 엔진 을 사용합니다. 이 엔진은 복잡한 작업과 대용량 데이터를 빠르게 처리하고, 데이터 손실 없이 안정적인 작업을 가능하게 해줍니다. 고속 트랜잭션과 복제 MySQL은 특히 온라인 트랜잭션 처리(OLTP) 에 강합니다. 즉, 빠른 속도로 많은 거래가 일어나는 환경 — 예를 들어 은행 시스템, 온라인 쇼핑몰 등에서 매우 유용합니다. 게다가 MySQL은 데이터를 단순히 저장하는 것뿐만 아니라 복제(Replication) 도 지원합니다. 메인 서버의 데이터를 여러 개의 복제 서버로 자동으로 전달하여 데이터 가용성을 높이고 부하를 분산 시켜줍니다. 이를 통해 서버의 안정성과 처리 속도 가 향상됩니다. MySQL 인기 있는 이유 MySQL이 웹에서 가장 인기 있는 데이터베이스인 데는 여러 이유가 있습니다. SQL 기반의 관계형 시스템 이면서 문서 기반(NoSQL) 저장 방식도 지원 하여 하나의 시스템에서 두 가지 방식을 모두 사용할 수 있습니다. 또한, 보안 기능이 우수 하고 테이블스페이스 기능 으로 디스크 공간을 효율적으로 관리할 수 있으며 설치와 사용이 간편 해서 초보자부터 전문가까지 모두 사용할 수 있습...

MySQL 주요 기능 하나씩 쉽게 살펴보기

이미지
📌 목차 보기 MySQL Shell MySQL Server MySQL Enterprise Edition MySQL Enterprise Plugins MySQL Enterprise Backup MySQL Workbench Enterprise MySQL Enterprise Monitor Oracle Enterprise Manager Plugin MySQL Enterprise Thread Pool MySQL Enterprise Authentication MySQL Enterprise Audit MySQL Enterprise Firewall MySQL Enterprise Asymmetric Encryption MySQL Transparent Data Encryption (TDE) MySQL Enterprise Masking 마치며 ✅ MySQL Shell – 통합 클라이언트 도구 먼저 소개된 도구는 MySQL Shell 입니다. 이 도구는 MySQL 데이터베이스에서 작업하고 관리하는 데 쓰는 통합 클라이언트 예요. 다시 말하면, 이 도구 하나만으로 데이터 입력, 삭제, 수정은 물론이고, 시스템을 설정하고 모니터링하는 관리 기능까지 다룰 수 있습니다. MySQL Shell은 사용자가 선호하는 언어로 작업할 수 있도록 JavaScript, Python, SQL 세 가지 언어를 지원합니다. 그래서 자동화 작업을 할 때나 복잡한 명령을 작성할 때 익숙한 언어로 작업할 수 있어 코딩이 훨씬 유연하고 효율적 입니다. 또한 이 Shell은 두 가지 데이터 형태 도 모두 지원합니다 문서형 모델 (NoSQL) : 유연하고 자유로운 데이터 구조 관계형 모델 (SQL) : 테이블 형태의 정형화된 구조 즉, 프로젝트에 따라 어떤 데이터 모델을 쓰더라도 MySQL Shell 하나로 처리할...

[Linux] OpenSSL을 사용한 자체 서명된 CA 생성 가이드

 내부 서비스에서 TLS 보안 연결을 구성할 때 외부 인증 기관(CA)을 사용하는 대신, 자체 서명된 인증서를 기반으로 사설 CA(Private CA)를 구성하는 방식이 종종 사용됩니다. 특히 비용 절감이나 내부 네트워크 전용 인증이 필요한 경우 적합한 접근법입니다. 이 문서에서는 OpenSSL을 사용하여 자체 서명된 CA를 구성하는 방법을 단계별로 안내합니다. 1. 준비 사항 루트 권한 또는 sudo 명령을 사용할 수 있는 계정 OpenSSL이 설치된 리눅스 시스템 2. 자체 서명된 CA 생성 절차 2.1 CA용 개인 키 생성 256비트 ECDSA(Elliptic Curve Digital Signature Algorithm) 기반의 키를 생성합니다. 키 생성 속도는 하드웨어 성능과 엔트로피 수준에 따라 달라질 수 있습니다. # openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out ca.key 2.2 자체 서명된 CA 인증서 생성 위에서 생성한 ca.key 를 기반으로 CA 인증서를 생성합니다. 인증서는 X.509 형식이며, 유효 기간은 10년(3650일)로 설정합니다. # openssl req -key ca.key -new -x509 -days 3650 \\ -addext keyUsage=critical,keyCertSign,cRLSign \\ -subj "/CN=Example_CA" -out ca.crt /CN=Example_CA 는 CA의 Common Name입니다. 필요에 따라 적절한 명칭으로 변경하세요. 3. 보안 설정 CA 개인 키 파일의 권한을 적절히 설정하여 무단 접근을 차단합니다. # chown root:root ca.key # chmod 600 ca.key 4. 클라이언트에 인증서 등록 (선택사항) 생성한 ca.crt 파일을 시스템 전체에서 신뢰하도록 하려면, trust 명령어를 사용해 볼 수 있습니다. 이 명...

[MariaDB] Galera 클러스터 구축9: Weighted Quorum과 Split Brain 문제 완전 정복 - 이론 및 설계 원리

 Galera Cluster를 처음 도입하려는 개발자들이 가장 자주 묻는 질문이 있습니다. "왜 최소 3개의 노드가 필요한가요? 비용 절감을 위해 2개로는 안 되나요?" 이 질문의 답은 데이터베이스 클러스터링의 핵심 개념인 Weighted Quorum 과 Split Brain 문제에서 찾을 수 있습니다. 오늘은 이 두 개념을 깊이 있게 살펴보고, 안정적인 Galera Cluster 구축 방법을 알아보겠습니다. Split Brain 문제란 무엇인가? Split Brain은 다중 마스터 데이터베이스 시스템에서 발생하는 가장 심각한 문제 중 하나입니다. 이는 클러스터 내 노드들 간의 네트워크 통신이 끊어졌지만, 각 노드가 여전히 클라이언트와 연결되어 독립적으로 작동할 때 발생합니다. 실제 상황으로 이해하는 Split Brain 온라인 쇼핑몰의 재고 관리 시스템을 예로 들어보겠습니다 상황 : Server A와 Server B 간의 네트워크 연결이 끊어짐 문제 발생 : 두 서버 모두 각각의 웹 애플리케이션으로부터 주문 요청을 받음 Server A : 상품 재고를 100개에서 95개로 업데이트 (5개 판매) Server B : 같은 상품 재고를 100개에서 80개로 업데이트 (20개 판매) 각 서버는 상대방이 장애 상태라고 판단하고 독립적으로 운영을 계속합니다. 결과적으로 동일한 상품에 대해 서로 다른 재고 수량이 기록되어 데이터 정합성 에 치명적인 오류가 발생하게 됩니다. 네트워크가 복구된 후에는 어떤 데이터가 올바른지 판단하기 어려워지고, 수동으로 데이터를 정리해야 하는 상황이 발생할 수 있습니다. Weighted Quorum의 핵심 원리 Quorum의 기본 개념 Quorum(정족수)은 클러스터 내에서 유효한 결정을 내리기 위해 필요한 최소 투표 수 를 의미합니다. Galera Cluster에서는 각 노드를 하나의 투표권으로 간주하고, 현재 활성화된 노드 수에 따라 정족수를 동적으로 계산합니다. Galera는 클러스터...

[MariaDB] Galera 클러스터 구축 8: 새로운 노드 추가 및 클러스터 확장

 이번 글에서는 기존에 구성된 Galera 클러스터(3노드)에 새로운 노드( mariadb4 )를 추가하는 과정을 단계별로 설명합니다. 이 과정을 통해 클러스터의 가용성과 확장성을 높일 수 있으며, 실무 환경에서도 자주 활용되는 중요한 작업입니다. 1. 환경 정보 노드 이름 IP 주소 mariadb1 192.168.155.51 mariadb2 192.168.155.52 mariadb3 192.168.155.53 mariadb4 192.168.155.54 2. 신규 노드 초기 설정 (mariadb4) IP설정 및 hostname 설정 # hostnamectl set-hostname mariadb4 # nmcli connection modify enp1s0 ipv4.addresses 192.168.155.54/24 ipv4.gateway 192.168.155.1 ipv4.dns 8.8.8.8 autoconnect on ipv4.method manual 방화벽 설정 새로운 노드에서 Galera 클러스터 통신을 위한 포트를 열어줍니다. # firewall-cmd --add-port=3306/tcp --permanent # MySQL/MariaDB 포트 # firewall-cmd --add-port=4567/tcp --permanent # Galera 복제 트래픽 # firewall-cmd --add-port=4567/udp --permanent # Galera 복제 트래픽 (UDP) # firewall-cmd --add-port=4568/tcp --permanent # IST (Incremental State Transfer) # firewall-cmd --add-port=4444/tcp --permanent # SST (State Snapshot Transfer) # firewall-cmd --reload 호스트 파일 설정 모든 노드(기존 노드 포함)에서 새로운 노드의 호스트 정...

[MariaDB] Galera 클러스터 구축7: 전체 노드 정지 후 재시작과 부트스트랩 복구

 이번 글에서는 Galera Cluster의 모든 노드를 완전히 종료했다가 다시 시작하는 시나리오 와, 클러스터가 자동으로 복구되지 않을 때 필요한 수동 부트스트랩 복구 절차 를 설명합니다. 이 상황은 실제 운영 환경에서도 발생할 수 있기 때문에 정확한 이해와 절차 숙지가 필요합니다. 1. 정상적인 클러스터 재시작 1.1 클러스터 전체 노드 종료 테스트 환경에서는 세 개의 노드( mariadb1 , mariadb2 , mariadb3 )를 모두 종료합니다. # 각 노드에서 실행 $ sudo shutdown -h now 노드가 완전히 꺼졌는지 확인한 뒤 다음 단계로 진행합니다. 1.2 전체 노드 재시작 후 클러스터 상태 확인 모든 노드를 다시 기동한 후, 각 노드에서 MariaDB 서비스 상태와 클러스터 크기를 확인합니다. $ sudo systemctl status mariadb mysql> SHOW STATUS LIKE 'wsrep_cluster_size'; -- 예상 결과: 3 대부분의 경우 클러스터는 자동으로 복구되며, 이전과 동일한 구성으로 재합류합니다. 데이터베이스 상태도 유지되어야 합니다. mysql> SELECT * FROM products; 2. 비정상 종료 후 수동 부트스트랩 복구 2.1 비정상 종료 상황 만들기 (테스트 환경) 실제 운영 환경에서는 전원 장애, 시스템 크래시, 강제 재부팅 등으로 인해 클러스터가 비정상 종료될 수 있습니다. 테스트 환경에서 이 상황을 재현하려면 VMware, VirtualBox 같은 가상머신 환경에서 Power Off 기능을 사용하여 세 개 노드를 모두 강제로 종료할 수 있습니다. VMware vSphere Client / VMware Workstation 1. 각 VM을 선택 2. "Power" → "Power Off" (graceful shutdown이 아닌 강제 종료) 3. 모든 노드에 대해 반복 이렇게 강제 종료하면 ...