경로

A path is a string of characters used to uniquely identify a location in a directory structure.

— POSIX 파일 표준 정의서에서 명시하는, 계층형 노드를 따라 리소스를 추적하기 위해 구분 기호로 분할한 텍스트 이정표

폴더와 파일을 잇는 평화로운 내비게이션 주소창이자, 자바스크립트 빌드 시 점 슬래시(. /) 개수를 한 단어 틀리게 적는 순간 파일을 못 찾아 빌드 거부당하게 유발하는 깐깐한 철도망. 왜 이 파일이 임포트가 안 되나 눈알이 충혈될 때까지 소스창을 쳐다보다가, 결국 경로 대소문자 매칭 하나를 비껴간 걸 깨닫는 촌극의 전형(...)

1. 개요

컴퓨터 운영체제(OS) 파일 시스템 내에서 특정 파일, 디렉터리, 디바이스 장치 노드가 위치한 물리적인 위치를 계층 구조를 따라 구분 기호(슬래시 / 또는 역슬래시 \)로 순차 나열해 놓은 유니크한 가이드 이정표 주소를 뜻한다.

2. 절대 경로(Absolute)와 상대 경로(Relative)의 충돌

주니어 개발자가 프로그램 개발 환경(development-environment) 구축 시 무조건 통과해야 하는 기본 장벽이 두 경로의 차이를 꿰뚫는 일이다.

  • 절대 경로(Absolute Path): 드라이브 루트나 최상위 디렉터리에서 출발하는 변하지 않는 고정 주소이다. 예컨대 C:\Users\SUBEEN\Desktop\file.txt/var/log/syslog 등이다. 내 컴퓨터 안에서는 정확하지만, 이 소스를 그대로 친구나 운영 클라우드 리눅스 서버로 밀어 배포하는 순간 사용자 폴더 구조가 달라 해당 절대 주소가 존재하지 않아 프로그램을 무조건 오작동 폭사시키는 주범이 된다.
  • 상대 경로(Relative Path): 현재 실행 중인 파일 소스의 위치를 영리한 중심점 삼아 이웃 폴더로 찾아가는 주소이다. 현재 위치는 점(.), 상위 폴더는 점두개(..) 기호로 표현한다. 소스 폴더 전체를 복사해 전 세계 어느 서버에 올려 배포하더라도, 상대적인 부모 자식 폴더 거리는 100% 일정하므로 완벽한 환경 무관 정상 가동을 수리해 보장해 준다.(...)

3. 관련 밈 및 드립

3.1. 윈도우 역슬래시 vs 리눅스 슬래시 파열 저주

마이크로소프트의 윈도우 운영체제(windows)는 폴더 구분선 기호로 오직 역슬래시(\)를 고집하는 반면, 리눅스(linux)와 유닉스는 슬래시(/)를 표준으로 고수한다. 주니어가 윈도우에서 작동 잘 되게 문자열로 역슬래시를 이어 붙여 코딩한 경로 소스코드를, 원격 리눅스 서버로 배포해 돌리는 순간 OS가 경로 기호를 단순 문자로 오인해 디스크 파일을 찾지 못해 전체 시스템이 와장창 깨지는 참사가 유구히 발발한다. 개발실에서는 '빌 게이츠의 과거 고집이 현대 백엔드 서버 이사날마다 버그를 선물해 주는 무서운 저주'라고 풍자하곤 한다.

4. 여담

  • 환경 무관 경로 수리기 (path.join): 이 윈도우 vs 리눅스 경로 구분선 저주를 타파하기 위해 자바나 자바스크립트 등 현대 모던 언어들은 내장 라이브러리 pathpath.join('sources', 'file.txt') 함수를 제공한다. 이 함수는 실행 중인 컴퓨터 OS를 물밑에서 자동 감지해, 윈도우면 \를, 리눅스면 /를 똑똑하게 하이브리드로 주입해 빌드 오류를 사전에 예방해 준다.
  • 유닉스의 성스러운 집 주소, 물결표 ~: 터미널 셸 환경에서 cd ~를 누르면 내 개인 개인 파일 공간인 홈 디렉터리(Home Directory) 주소로 즉각 광속 순간 이동한다. 물결표(~)가 내 계정의 전산적 집 주소 절대 경로를 우아하게 요약해 주는 매직 단축 별칭이기 때문이다.
  • 실행 파일의 등대, PATH 환경 변수: 우리가 터미널에서 아무 폴더에나 진입해 있어도 nodegit 명령을 엔터 치면 에뮬레이터 엔진은 찰떡같이 해당 프로그램을 실행한다. 이는 OS 내부에 PATH라는 특수 환경 변수 주소록에 '실행 파일들의 등대 주소'를 미리 등록해 두었기 때문이다. OS는 이 등록된 경로 더미들을 다 뒤져 프로그램 본체를 찾아낸다.

5. 관련 문서