본문으로 건너뛰기
입문20

운영체제 기초: 프로세스, 파일시스템, 권한

앱이 왜 멈추는지, 로그는 어디에 있는지, 왜 이 파일을 못 쓰는지 — OS의 프로세스·파일시스템·권한 개념을 알면 이런 질문에 스스로 답할 수 있다.

  • #운영체제
  • #프로세스
  • #파일시스템
  • #권한

개념

프로세스(Process) — 실행 중인 프로그램

프로그램을 실행하면 OS가 그 프로그램을 위한 프로세스를 만든다. 서버 애플리케이션이 "멈췄다", "재시작됐다", "메모리를 너무 많이 쓴다" 같은 현상은 전부 프로세스 수준의 이야기다.

  • 프로세스가 죽는다(Crash) — 예상치 못한 오류로 프로세스 자체가 종료된다. 서버 로그에 "프로세스가 재시작됨" 기록이 남는다
  • 메모리 누수(Memory Leak) — 프로세스가 시간이 지날수록 메모리를 계속 더 쓰다가, 결국 느려지거나 죽는다. "서버를 오래 켜두면 느려진다"는 버그의 흔한 원인

파일시스템(File System)

프로그램은 로그, 설정, 업로드된 파일 등을 디스크에 저장한다. 로그 파일이 어디에 저장되는지 아는 것만으로도, 개발자에게 "그 현상 재현될 때 로그 좀 보여주세요"라고 요청하는 대신 QA가 직접 로그를 열어 확인할 수 있다.

/var/log/app/error.log     — 흔히 쓰이는 리눅스 서버의 로그 경로 예시

권한(Permissions)

파일이나 리소스에 대해 "읽기(Read)", "쓰기(Write)", "실행(Execute)" 권한이 사용자/그룹별로 따로 설정된다. "이 파일에 접근할 수 없습니다" 같은 오류가 실제로는 애플리케이션 버그가 아니라, 서버의 파일 권한 설정 문제인 경우가 있다.

웹 서버가 업로드된 이미지를 저장하려는데, 그 폴더에 쓰기 권한이 없다면 "이미지 업로드가 계속 실패한다"는 버그로 나타난다 — 코드 로직 문제가 아니라 서버 환경(모듈 7 레슨 3)의 권한 설정 문제다.

환경변수(Environment Variables)

프로그램 실행 시 OS가 제공하는, 코드 밖에서 설정하는 값이다. API 키, 데이터베이스 접속 정보, 환경별(개발/스테이징/운영) 설정값을 여기 담는 경우가 많다. "스테이징에서는 되는데 운영에서는 안 된다"는 버그의 원인이 종종 환경변수 설정 차이다.

프로세스·파일시스템·권한을 연결해서 보기

버그를 진단할 때 "이게 코드 로직 문제인가, 아니면 OS/환경 수준의 문제인가"를 먼저 나눠보는 습관이 유용하다. 코드는 멀쩡한데 서버 환경(권한, 디스크 공간, 프로세스 메모리)이 문제인 경우, 아무리 코드를 들여다봐도 원인을 못 찾는다.

실무에서 왜 필요한가

"서버가 이상해요"라는 모호한 증상을 받았을 때, 프로세스가 죽었는지 (재시작 로그 확인), 디스크 공간이 부족한지, 특정 폴더 권한이 잘못됐는지를 스스로 1차 진단할 수 있으면 개발자에게 전달하는 정보의 질이 완전히 달라진다. 이건 모듈 6(레슨 2)에서 배운 "환경" 정보를 훨씬 구체적으로 채울 수 있게 해준다.

실습 과제

과제 1 — 증상과 원인 짝짓기 (10분)

다음 세 증상을 프로세스/파일시스템/권한/환경변수 중 가장 관련 깊은 원인 범주와 짝지어본다.

  1. "서버를 3일째 켜두니 응답이 점점 느려진다"
  2. "스테이징에서는 결제가 되는데 운영에서는 API 키 오류가 난다"
  3. "파일 업로드를 시도하면 항상 실패하고, 서버 로그에 '쓰기 거부'라고 남는다"

과제 2 — 로그 위치 확인 습관 (10분)

지금 다루고 있는(또는 가상의) 프로젝트에서, 애플리케이션 로그가 어디에 저장되는지 확인하는 방법을 팀에 어떻게 물어볼지, 혹은 문서에서 어떻게 찾을지 계획을 적어본다.

자가 체크리스트

  • 프로세스가 무엇이고 "죽는다"는 게 어떤 의미인지 설명할 수 있다
  • 로그 파일 위치를 아는 것이 왜 QA에게 유용한지 설명할 수 있다
  • 파일 권한 문제가 코드 버그처럼 보일 수 있는 이유를 설명할 수 있다
  • 환경변수가 "환경마다 다르게 동작하는" 버그의 원인이 될 수 있는 이유를 설명할 수 있다

흔한 실수

  • 모든 서버 오류를 코드 버그로 단정한다. 권한, 디스크 공간, 프로세스 상태 같은 OS 수준 원인일 수 있다.
  • 로그 파일 위치를 모른 채 매번 개발자에게 로그를 요청한다. 위치를 알면 QA가 직접 1차 확인을 할 수 있어 왕복 시간이 줄어든다.
  • "스테이징에서는 됐는데 운영에서는 안 된다"를 코드 차이로만 추측한다. 환경변수 설정 차이일 가능성을 먼저 점검해야 한다.

참고 자료

  • MDN — 환경 변수 개요 — 환경변수 개념의 일반적 설명
  • 리눅스 man ps, man chmod 문서 — 프로세스 확인과 파일 권한 설정의 기본 명령어