SAM 서버 접근 권한 관리
개요
SAM 시스템의 서버 및 데이터베이스 접근 권한을 관리합니다.
서버 관리자는 1명이며, 외부 인원에게는 임시로 접근을 허용하고 작업 완료 후 차단합니다.
최종 업데이트: 2026-03-07
운영 관리자
| 계정 |
이름 |
역할 |
hskwon |
권혁성 |
서버 관리자 (배포, 운영, 인프라) |
pro |
김보곤 |
서브 관리자 (임시 접근, 평상시 잠금) |
서버 정보
| 구분 |
호스트 |
SSH alias |
용도 |
| 운영 (prod) |
211.117.60.189 |
sam-prod |
API + React 운영 배포 |
| 개발 (dev) |
- |
sam-dev |
개발 환경 |
| CI/CD |
114.203.209.83 |
sam-cicd |
Jenkins + React 개발 배포 + DB 백업 |
서버 시간대
| 설정 |
prod |
cicd |
| OS timezone |
Asia/Seoul (KST, +0900) |
Asia/Seoul (KST, +0900) |
| NTP 동기화 |
활성 |
활성 |
PHP CLI (/etc/php/8.4/cli/php.ini) |
Asia/Seoul |
PHP 미설치 |
PHP FPM (/etc/php/8.4/fpm/php.ini) |
Asia/Seoul |
- |
Laravel app.timezone |
Asia/Seoul |
- |
주의: PHP timezone이 UTC면 스케줄러 실행 시간이 9시간 어긋남. 반드시 Asia/Seoul로 설정할 것.
OS 계정 현황
sam-prod (운영서버)
| 계정 |
이름 |
용도 |
상태 |
hskwon |
권혁성 |
서버 관리자 (배포, 운영) |
활성 |
pro |
김보곤 |
서브 관리자 임시 접근용 |
평상시 잠금 |
sam-cicd (CI/CD 서버)
| 계정 |
이름 |
용도 |
상태 |
hskwon |
권혁성 |
서버 관리자 |
활성 |
pro |
김보곤 |
서브 관리자 임시 접근용 |
평상시 잠금 |
sam-dev (개발서버)
| 계정 |
이름 |
용도 |
상태 |
hskwon |
권혁성 |
서버 관리자 |
활성 |
pro |
김보곤 |
서브 관리자 |
활성 |
OS 계정 잠금/해제
서브 관리자에게 서버 접근이 필요한 경우, 작업 시간 동안만 해제하고 완료 후 다시 잠금합니다.
임시 접근 절차
- 작업 요청 접수 및 범위 확인
sudo usermod -U pro 로 해제
- 작업 완료 확인
sudo usermod -L pro 로 잠금
- 작업 내용 기록
공동 관리 구조 (cicd 서버)
인력 변동에 대비하여 cicd 서버는 공동 관리 구조로 운영합니다.
develop 그룹
권한 설정
/data/ 전체: develop 그룹 소유, setgid 적용
- setgid(
chmod g+s)로 하위에 생성되는 파일/폴더도 자동으로 develop 그룹 상속
- 그룹 권한 = 소유자 권한 (
chmod g=u)
- 누가 작업하든 다른 관리자가 접근/수정 가능
DB 계정 현황
sam-prod (운영서버 MySQL 8.4)
| 계정 |
인증 플러그인 |
접근 DB |
용도 |
codebridge@localhost |
caching_sha2_password |
sam, sam_stage, sam_stat, codebridge |
애플리케이션 (.env) |
hskwon@localhost |
caching_sha2_password |
전역 관리자 + sam |
서버 관리자 |
pro@localhost |
caching_sha2_password |
sam, sam_stage, sam_stat, codebridge |
서브 관리자용 |
sam-cicd (CI/CD 서버 MySQL 8.4)
| 계정 |
인증 플러그인 |
접근 DB |
용도 |
hskwon@localhost |
caching_sha2_password |
전역 관리자 |
서버 관리자 |
pro@localhost |
caching_sha2_password |
sam, sam_stage, sam_stat, codebridge, gitea |
서브 관리자용 |
참고: cicd 서버에는 codebridge DB 계정이 없음 (애플리케이션이 다른 계정 사용)
sam-dev (개발서버 MySQL 8.4)
| 계정 |
용도 |
pro@localhost |
서브 관리자용 |
참고: dev 서버는 sudo mysql 불가, root 비밀번호 인증 방식
DB 계정 관리
계정 잠금/해제 (MySQL)
인증 플러그인 변경
MySQL 8.4에서는 mysql_native_password가 제거되었으므로 caching_sha2_password를 사용합니다.
PhpStorm 접속 시 주의사항
- SSH 터널 필수 (MySQL이 localhost만 허용)
- Host:
localhost (127.0.0.1 아님)
caching_sha2_password 사용 시 Advanced 탭에서 allowPublicKeyRetrieval = true 설정 필요
DB 리플리케이션
운영 DB(prod)에서 cicd 서버로 실시간 리플리케이션이 구성되어 있습니다.
| 항목 |
값 |
| Source (마스터) |
sam-prod (211.117.60.189) |
| Replica (슬레이브) |
sam-cicd |
| 리플리케이션 사용자 |
sam_backup |
| 대상 DB |
sam, sam_stat, codebridge |
| 지연 |
0초 (실시간) |
DB 백업
리플리케이션과 별도로, cicd 서버에서 매일 03:00에 mysqldump 백업을 수행합니다.
백업 설정
| 항목 |
값 |
| 스크립트 |
/data/scripts/backup-db.sh |
| 인증 파일 |
/data/scripts/.sam_backup.cnf |
| 백업 경로 |
/data/backups/mysql/ |
| 실행 시간 |
매일 03:00 (cron, hskwon 사용자) |
| 보관 기간 |
14일 |
백업 대상
| DB |
방식 |
파일명 패턴 |
| sam |
원격 (prod) |
sam_production_YYYYMMDD_HHMMSS.sql.gz |
| sam_stat |
원격 (prod) |
sam_stat_production_YYYYMMDD_HHMMSS.sql.gz |
| codebridge |
원격 (prod) |
codebridge_production_YYYYMMDD_HHMMSS.sql.gz |
| gitea |
로컬 (cicd) |
gitea_YYYYMMDD_HHMMSS.sql.gz |
백업 확인
배포 계정 관리
Jenkins 배포 흐름
| 프로젝트 |
main |
develop |
| api |
Jenkins (Stage + Production) |
post-update hook (Jenkins 미관여) |
| react |
Jenkins (Stage + Production) |
Jenkins (Development) |
- 배포 SSH 계정:
hskwon (deploy-ssh-key 크레덴셜)
- Slack 알림:
#deploy_api, #deploy_react
관리 정책
- 서버 관리자 1명 원칙 -- 여러 명이 동시에 관리하지 않음
- 임시 접근만 허용 -- 서브 관리자는 필요 시에만 OS/DB 계정 해제
- 작업 완료 후 즉시 잠금 -- 해제 상태로 방치하지 않음
- DB 접근은 SSH 터널 경유 -- 외부에서 MySQL 직접 접근 불가 (localhost 바인딩)
- 공동 관리 대비 -- cicd
/data/는 develop 그룹으로 관리, 인력 변동 대비
- 이중 백업 -- 리플리케이션(실시간) + mysqldump(매일 03:00) 병행
참고
작성일: 2026-03-05
버전: 1.1
담당자: SAM Infrastructure Team