From a71756db71fae056af8df9479e94ecdf2d217f5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Mon, 23 Feb 2026 09:42:46 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[academy]=20=EC=84=9C=EB=B2=84=EC=A7=80?= =?UTF-8?q?=EC=8B=9D=20=EB=B0=B1=EA=B3=BC=EC=82=AC=EC=A0=84=20SVG=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=2012=EC=A2=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 1.svg: 서버룸 히어로 이미지 - 2.svg: SAM 5-서비스 건물 지도 - 3.svg: 요청 처리 흐름도 - 4.svg: Linux 사용자/그룹 조직도 - 5.svg: drwxrwxr-x 권한 해독 인포그래픽 - 6.svg: umask 계산법 (666 - 022 = 644) - 7.svg: 사고 타임라인 5단계 - 8.svg: Git 배포 택배 비유 - 9.svg: Hook 동작 흐름 + 권한 체크포인트 - 10.svg: 금지 작업 경고 카드 - 11.svg: 올바른 대응 절차 4단계 - 12.svg: 안전/위험 명령 비교 테이블 --- public/images/academy/server-knowledge/1.svg | 145 +++++++++++++++++ public/images/academy/server-knowledge/10.svg | 108 +++++++++++++ public/images/academy/server-knowledge/11.svg | 135 ++++++++++++++++ public/images/academy/server-knowledge/12.svg | 148 +++++++++++++++++ public/images/academy/server-knowledge/2.svg | 114 +++++++++++++ public/images/academy/server-knowledge/3.svg | 153 ++++++++++++++++++ public/images/academy/server-knowledge/4.svg | 114 +++++++++++++ public/images/academy/server-knowledge/5.svg | 128 +++++++++++++++ public/images/academy/server-knowledge/6.svg | 131 +++++++++++++++ public/images/academy/server-knowledge/7.svg | 132 +++++++++++++++ public/images/academy/server-knowledge/8.svg | 128 +++++++++++++++ public/images/academy/server-knowledge/9.svg | 147 +++++++++++++++++ 12 files changed, 1583 insertions(+) create mode 100644 public/images/academy/server-knowledge/1.svg create mode 100644 public/images/academy/server-knowledge/10.svg create mode 100644 public/images/academy/server-knowledge/11.svg create mode 100644 public/images/academy/server-knowledge/12.svg create mode 100644 public/images/academy/server-knowledge/2.svg create mode 100644 public/images/academy/server-knowledge/3.svg create mode 100644 public/images/academy/server-knowledge/4.svg create mode 100644 public/images/academy/server-knowledge/5.svg create mode 100644 public/images/academy/server-knowledge/6.svg create mode 100644 public/images/academy/server-knowledge/7.svg create mode 100644 public/images/academy/server-knowledge/8.svg create mode 100644 public/images/academy/server-knowledge/9.svg diff --git a/public/images/academy/server-knowledge/1.svg b/public/images/academy/server-knowledge/1.svg new file mode 100644 index 00000000..c7d9c639 --- /dev/null +++ b/public/images/academy/server-knowledge/1.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SERVER + + + + + + + + + + + + + + + + + + + + + + + + DATABASE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GET + + POST + + 200 + + + 서버지식 백과사전 + 서버와 사용자를 연결하는 네트워크의 세계 + + + + + + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/10.svg b/public/images/academy/server-knowledge/10.svg new file mode 100644 index 00000000..db638216 --- /dev/null +++ b/public/images/academy/server-knowledge/10.svg @@ -0,0 +1,108 @@ + + + + + + + + + + 절대 하면 안 되는 작업들 + 서버에서 이 명령들을 실행하면 서비스 장애가 발생합니다 + + + Level 3: 절대 금지 작업 + + + + + + + + + + + + chmod 777 + + 전체 권한 개방 + 모든 사용자에게 + 읽기/쓰기/실행 허용 + 보안 취약점 발생! + + + + + + + + + + + + chown root + + 소유자 변경 + 파일 소유자를 + root로 변경하면 + 웹서버 접근 불가! + + + + + + + + + + + + vi /서버파일 + + 서버 직접 수정 + 서버에서 코드를 + 직접 수정하면 + git 충돌 발생! + + + + + + + + + + + + rm -rf / + + 대량 삭제 + 파일/폴더를 + 강제 삭제하면 + 복구 불가능! + + + + 왜 위험한가? + + + 1 + chmod 777 = 해커에게 문을 열어주는 것. 누구나 파일을 수정/실행할 수 있게 됨 + + + + 2 + chown root = www-data(웹서버)가 파일에 접근 못해 502 에러 발생 + + + + 3 + 서버 직접 수정 = git과 충돌하여 이후 배포가 불가능해짐 + + + + 올바른 방법: 로컬에서 수정 >>> git push >>> 자동 배포 + 서버 문제 발생 시 팀장에게 보고하고 안전한 절차를 따르세요 + + Forbidden Actions Warning Cards — Level 3 Operations + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/11.svg b/public/images/academy/server-knowledge/11.svg new file mode 100644 index 00000000..372d48cf --- /dev/null +++ b/public/images/academy/server-knowledge/11.svg @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + 서버 문제 발생 시 올바른 절차 + 4단계 안전 대응 프로세스를 반드시 따르세요 + + + + + + + 1 + + 증상 확인 + + + + + + 체크사항: + - 에러 메시지 확인 + - 발생 시점 기록 + - 영향 범위 파악 + - 스크린샷 촬영 + + + tail -f error.log + + + + + + + + + + + + + + 2 + 팀장 보고 + + + + + 보고 내용: + - 발생 증상 설명 + - 발생 시점/상황 + - 영향 범위 + - 에러 로그 첨부 + + 팀장 승인 대기 + + + + + + + + + + + + + 3 + 원인 분석 + + + + + 분석 방법: + - 로그 분석 (Level 1) + - 권한 확인 (ls -la) + - 프로세스 확인 + - 최근 변경 이력 조사 + + ls -la, git log + + + + + + + + + + + + + 4 + 안전 조치 + + + + + 안전 조치: + - 캐시 클리어 (L2) + - config:clear (L2) + - 서비스 재시작 (L2) + - 결과 확인 및 기록 + + 팀장 승인 후 실행 + + + + 핵심 원칙 + 1. 직접 고치려 하지 말고 먼저 증상을 정확히 파악한다 + 2. 팀장에게 보고한 후 승인 받은 작업만 수행한다 (Level 2는 승인 필수) + + + + Level 1: 허용 + + + + Level 2: 승인 후 + + + + Level 3: 절대 금지 + + + Correct Incident Response Procedure — 4-Step Safety Flowchart + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/12.svg b/public/images/academy/server-knowledge/12.svg new file mode 100644 index 00000000..cfc9220f --- /dev/null +++ b/public/images/academy/server-knowledge/12.svg @@ -0,0 +1,148 @@ + + + + + + + + + + 안전한 명령 vs 위험한 명령 + 서버에서 실행할 수 있는 명령과 절대 하면 안 되는 명령을 구분하세요 + + + + VS + + + + + + + 안전한 명령 (Level 1) + 자유롭게 실행 가능 + + + + + + + + ls -la + 파일 목록 조회 + 파일의 권한, 소유자, 크기를 확인합니다 + + + + + + + + + cat + 파일 내용 확인 + 설정 파일이나 로그의 내용을 읽어봅니다 + + + + + + + + whoami + 현재 사용자 확인 + 지금 어떤 계정으로 접속 중인지 확인합니다 + + + + + + + + df -h + 디스크 용량 확인 + 서버의 저장 공간이 얼마나 남았는지 확인합니다 + + + + + + + + docker ps + 컨테이너 상태 확인 + Docker 컨테이너가 정상 실행 중인지 확인합니다 + + + + + + + + + + 위험한 명령 (Level 3) + 절대 직접 실행 금지 + + + + + + + rm -rf + 파일/폴더 강제 삭제 + 확인 없이 삭제하며 복구가 불가능합니다 + + + + + + + + + chmod + 파일 권한 변경 + 잘못된 권한 설정은 서비스 장애를 유발합니다 + + + + + + + + + chown + 파일 소유자 변경 + 소유자 변경 시 웹서버 접근이 차단됩니다 + + + + + + + + + kill -9 + 프로세스 강제 종료 + 서비스 프로세스를 죽이면 서비스 중단됩니다 + + + + + + + + + sudo + 관리자 권한 실행 + root 권한으로 실행하면 모든 보호가 무력화됩니다 + + + + + + + 읽기/조회는 자유, 수정/삭제는 금지 --- 의심되면 팀장에게 먼저 물어보세요! + + Safe vs Dangerous Commands Comparison Table + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/2.svg b/public/images/academy/server-knowledge/2.svg new file mode 100644 index 00000000..dcb52009 --- /dev/null +++ b/public/images/academy/server-knowledge/2.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + SAM 5-서비스 건물 지도 + 각 서비스가 건물의 한 층처럼 역할을 나누어 동작합니다 + + + + + SAM Building + + + + + 5F + + + + + Nginx + 입구 안내 데스크 + 요청을 받아 올바른 곳으로 안내하는 역할 + + + + + + 요청 도착 + + + + + + 4F + + + + + PHP-FPM + 요리사 (실행 엔진) + PHP 코드를 실행하여 결과를 만들어내는 역할 + + + + 코드 실행 + + + + + + 3F + + + + + + + + API (백엔드) + 레시피북 (비즈니스 로직) + 데이터 처리 규칙과 흐름을 정의하는 역할 + + + + + + 2F + + + + + + MNG (관리자) + 관리 사무실 (관리자 화면) + 관리자가 시스템을 운영하는 화면 인터페이스 + + + + + + 1F + + + + + + MySQL + 냉장고 (데이터 저장소) + 모든 데이터를 안전하게 보관하는 저장소 + + + + + + + + + + + + + + SAM 5-Service Architecture — Building Map + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/3.svg b/public/images/academy/server-knowledge/3.svg new file mode 100644 index 00000000..a77188b4 --- /dev/null +++ b/public/images/academy/server-knowledge/3.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + 요청 처리 흐름도 + 사용자의 클릭 한 번이 서버에서 처리되는 전체 과정 + + + + + + + + + + + + + + + + + + + + + + Browser + 브라우저 + + + + + + + N + Nginx + 웹서버 + + + + + + + + + + + + PHP-FPM + 실행 엔진 + + + + + + {..} + Laravel + 프레임워크 + + + + + + + + + + + MySQL + 데이터베이스 + + + + + + + + Response + 응답 반환 + + + + + + 응답 반환 + + + + + 사용자 요청 + URL 입력 + 버튼 클릭 + 폼 전송 + AJAX 호출 + + + + + 요청 분배 + 포트 80/443 수신 + 정적 파일 직접 응답 + PHP 요청 전달 + SSL 처리 + + + + + 코드 실행 + PHP 프로세스 관리 + 워커 풀 운영 + 메모리 관리 + 타임아웃 처리 + + + + + 비즈니스 로직 + 라우팅 + 미들웨어 처리 + 컨트롤러 실행 + 뷰 렌더링 + + + + + 데이터 처리 + 쿼리 실행 + 데이터 조회 + 데이터 저장 + 트랜잭션 관리 + + + + + 결과 반환 + HTML 페이지 + JSON 데이터 + 파일 다운로드 + 리다이렉트 + + + Request-Response Lifecycle — Browser to Database and Back + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/4.svg b/public/images/academy/server-knowledge/4.svg new file mode 100644 index 00000000..91ca6117 --- /dev/null +++ b/public/images/academy/server-knowledge/4.svg @@ -0,0 +1,114 @@ + + + + + + + + + + Linux 사용자/그룹 = 회사 조직도 + 서버의 사용자와 그룹을 회사 조직처럼 이해하기 + + + SAM 서버 조직도 + + + + + + + + + + root 그룹 + CEO / 최고 권한 + + + + + + + + + + + + + root + UID: 0 + 모든 권한 보유 + 시스템 관리자 + + + + + pro 그룹 + 팀장 / 배포 담당 + + + + + + + + + + + + + + pro + UID: 1000 + 배포/운영 담당 + SSH 접속 계정 + + + + + www-data 그룹 + 실무자 / 웹 서비스 + + + + + + + + + + + + + + www-data + UID: 33 + Nginx/PHP 실행 + 웹 서비스 전용 + + + + + 겸직 + + + 회사 비유로 이해하기 + + + + root + = CEO. 모든 결재 권한. 함부로 사용하면 위험! + + + + pro + = 팀장. SSH 접속하여 배포/운영을 담당 + + + + www-data + = 실무자. Nginx, PHP가 사용하는 서비스 계정 + + + Linux Users & Groups — Organization Chart Analogy + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/5.svg b/public/images/academy/server-knowledge/5.svg new file mode 100644 index 00000000..b68fda49 --- /dev/null +++ b/public/images/academy/server-knowledge/5.svg @@ -0,0 +1,128 @@ + + + + + + + + + + 파일 권한 해독하기 + drwxrwxr-x 가 무슨 뜻인지 한눈에 파악하기 + + + + + d + + + r + + w + + x + + + r + + w + + x + + + r + + - + + x + + + + + 타입 + 디렉토리 + + + + 소유자 (Owner) + 읽기+쓰기+실행 + + + + 그룹 (Group) + 읽기+쓰기+실행 + + + + 기타 (Others) + 읽기+실행만 + + + + + + 타입 문자 + + d + 디렉토리 + - + 일반 파일 + l + 심볼릭 링크 + b + 블록 디바이스 + + + + + + 권한 문자 의미 + + r + Read (읽기) + w + Write (쓰기) + x + Execute (실행) + - + 권한 없음 + + + + + + 숫자 변환 + + r + = 4 + w + = 2 + x + = 1 + + rwx + = 4+2+1 = 7 + + + + + + 이 예시 해석 + + rwx + = 7 + rwx + = 7 + r-x + = 5 + + 775 + + + + drwxrwxr-x = 디렉토리 | 소유자:전체허용(7) | 그룹:전체허용(7) | 기타:읽기+실행(5) + 소유자와 그룹은 자유롭게, 외부인은 읽기/실행만 가능한 폴더 + chmod 775 my-folder + + File Permission Decode Infographic — drwxrwxr-x + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/6.svg b/public/images/academy/server-knowledge/6.svg new file mode 100644 index 00000000..b96b5764 --- /dev/null +++ b/public/images/academy/server-knowledge/6.svg @@ -0,0 +1,131 @@ + + + + + + + + + + umask 계산법 + 기본 권한에서 umask를 빼면 실제 파일 권한이 결정됩니다 + + + + 기본 파일 권한 + + 666 + rw-rw-rw- + + + + rw- + 6 + + + + rw- + 6 + + + + rw- + 6 + + + + + + - + + + + umask 값 + + 022 + ---w--w- + + + + --- + 0 + + + + -w- + 2 + + + + -w- + 2 + + + + + + = + + + + 실제 권한 + + 644 + rw-r--r-- + + + + rw- + 6 + + + + r-- + 4 + + + + r-- + 4 + + + + + 자리별 계산 과정 + + + 소유자 + + rw- (6) + - --- (0) + + + rw- (6) + + + + 그룹 + + rw- (6) + - -w- (2) + + + r-- (4) + + + + 기타 + + rw- (6) + - -w- (2) + + + r-- (4) + + + + umask 022 = 그룹과 기타 사용자의 쓰기(w) 권한을 제거 + 결과: 소유자만 쓸 수 있고, 나머지는 읽기만 가능 + + umask Calculation — 666 - 022 = 644 + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/7.svg b/public/images/academy/server-knowledge/7.svg new file mode 100644 index 00000000..7010381d --- /dev/null +++ b/public/images/academy/server-knowledge/7.svg @@ -0,0 +1,132 @@ + + + + + + + + + + 사고 타임라인 (5단계) + 권한 설정 실수가 배포 실패로 이어지는 과정 + + + + + + + + + + + + + + 1 + + + + + + + chmod + 폴더 권한 + 변경 + + + + + 2 + + + umask 022 + umask + 적용 + + + + + 3 + + + git pull + git pull + 실행 + + + + + 4 + + + -rw-r--r-- + 파일 644 + 생성 + + + + + 5 + + + + + + 502! + 배포 + 실패! + + + + + 원인 + + Claude가 서버에서 + chmod 775 폴더 + 명령을 실행하여 + 소유자가 변경됨 + + + + 숨은 규칙 + + pro 계정의 + umask = 022 + 그룹 쓰기 권한이 + 자동으로 제거됨 + + + + 트리거 + + 새 파일이 생성될 때 + umask가 적용되어 + 644 (rw-r--r--) + 로 파일 생성 + + + + 문제 + + www-data(웹서버)가 + 파일을 쓸 수 없음 + 그룹 권한: r-- + 쓰기 불가! + + + + 결과 + + Laravel이 로그, + 캐시 파일을 못 씀 + 502 Bad Gateway + 서비스 중단 발생 + + + + 교훈: 서버 권한 변경은 반드시 팀장 승인 후 진행! + umask, 소유자, 그룹 관계를 이해하지 못하면 사고로 이어진다 + chmod, chown 명령은 Level 3 (금지) 작업 + + Incident Timeline — Permission Change to Deploy Failure + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/8.svg b/public/images/academy/server-knowledge/8.svg new file mode 100644 index 00000000..59cec98a --- /dev/null +++ b/public/images/academy/server-knowledge/8.svg @@ -0,0 +1,128 @@ + + + + + + + + + + Git 배포 = 택배 배송 + 개발자가 코드를 보내면 Gitea(택배사)가 서버로 배달합니다 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 개발자 + git push + + + + + + + + + + 코드 패키지 + + + + + + + + GITEA + + + 코드 저장소 + Repository + + 버전 관리 + Versions + + + Webhook (자동 알림) + push 되면 서버에 알려줌 + + + + + + + GIT + + Gitea (택배사) + 코드를 안전하게 보관/전달 + + + + + + + + + git pull + + + + + + + + SAM Server + + + + + + + + + + + + + + + + pull_mng.sh 실행 + + 운영 서버 + 코드를 받아 서비스 운영 + + + + 배포 흐름: 개발자 git push >>> Gitea 저장 >>> Webhook 알림 >>> 서버 git pull + 택배로 비유: 물건 발송 >>> 택배 회사 >>> 배송 알림 >>> 수령 + + Git Deployment Flow — Courier/Delivery Metaphor + \ No newline at end of file diff --git a/public/images/academy/server-knowledge/9.svg b/public/images/academy/server-knowledge/9.svg new file mode 100644 index 00000000..32d0855e --- /dev/null +++ b/public/images/academy/server-knowledge/9.svg @@ -0,0 +1,147 @@ + + + + + + + + + + Hook 동작 흐름 + 권한 체크포인트 + git push 후 서버에 자동 배포되는 전체 과정과 권한 검증 지점 + + + + + + + + + $ git push + git push + 코드 전송 + + + + + + + + + + + + + + G + Gitea + 코드 수신/저장 + + + + + + + + + + + + + post-update + hook + 자동 트리거 + + + + + + + + + + + + #!/bin/bash + git pull... + pull_mng.sh + 배포 스크립트 + + + + + + + + + + + + + + + + 권한 체크 + Permission + Check Point + + + ! + + + + + + + + + + 배포 완료 + + + + + 권한 체크포인트에서 확인하는 항목 + + + + + 1 + 파일 소유자 + pro:www-data + + + + + 2 + 디렉토리 권한 + drwxrwxr-x (775) + + + + + 3 + 파일 권한 + -rw-rw-r-- (664) + + + + + 4 + 실행 권한 + storage/ 쓰기 가능 + + + 이 체크포인트에서 문제가 발생하면 502 Bad Gateway! + www-data가 파일을 읽고 쓸 수 있는지 반드시 확인 + + + + 정상 단계 + + 자동 트리거 + + 권한 체크포인트 (위험 지점) + + Hook Operation Flow + Permission Checkpoints + \ No newline at end of file