본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 파일 관리의 정석 : 절대 경로와 상대 경로의 3가지 결정적 차이 및 경로 오류 해결 방법

by Papa Martino V 2026. 3. 13.
728x90

절대 경로와 상대 경로
절대 경로 와  상대 경로

 

파이썬 프로그래밍을 하며 입문자가 가장 먼저 마주하는 난관 중 하나는 바로 "FileNotFoundError"입니다. 코드는 완벽한데 파일을 찾지 못한다는 메시지가 뜨는 이유는 대부분 '경로(Path)' 설정에 대한 이해 부족에서 기인합니다. 본 가이드에서는 파일 시스템의 내비게이션 역할을 하는 절대 경로상대 경로의 개념을 명확히 정의하고, 실무에서 발생하는 경로 문제를 완벽하게 해결하는 방법을 제시합니다.


1. 경로(Path)란 무엇인가?

컴퓨터의 파일 시스템에서 특정 파일이나 디렉터리가 위치한 주소를 의미합니다. 파이썬 프로젝트가 커질수록 데이터 파일, 설정 파일, 로그 파일 등을 불러오기 위해 경로를 다루는 기술은 필수적입니다. 주소를 표현하는 방식에 따라 크게 두 가지로 나뉩니다.

  • 절대 경로 (Absolute Path): 파일 시스템의 루트(Root)부터 목적지까지의 전체 주소를 의미합니다.
  • 상대 경로 (Relative Path): 현재 작업 디렉터리(Current Working Directory)를 기준으로 목적지까지의 위치를 나타냅니다.

2. 절대 경로 vs 상대 경로: 3가지 핵심 차이 비교

어느 하나가 무조건 좋은 것이 아니라, 상황에 맞는 적절한 선택이 프로그램의 이식성과 안정성을 결정합니다.

비교 항목 절대 경로 (Absolute Path) 상대 경로 (Relative Path)
기준점 루트 디렉터리 (C:\ 또는 /) 현재 실행 중인 위치 (CWD)
표현 방식 전체 주소 기입 (고유함) ., .. 등을 활용한 생략 표현
이식성 낮음 (다른 컴퓨터에서 작동 안 할 확률 높음) 높음 (프로젝트 폴더 통째로 이동 시 유리)
표기 예시 (Windows) C:\Users\Admin\Project\data.csv .\data.csv 또는 ..\data.csv

3. 파이썬에서 경로 문제를 해결하는 2가지 전문적인 방법

단순히 문자열로 경로를 더하는 방식은 운영체제(Windows vs Linux)에 따라 에러를 유발할 수 있습니다. 전문가들은 다음과 같은 모듈을 사용하여 문제를 해결합니다.

방법 01. os.path 모듈 활용

전통적인 방식으로, 경로 구분자(/ 또는 \)를 운영체제에 맞춰 자동으로 처리해 줍니다.

방법 02. pathlib 모듈 활용 (추천)

파이썬 3.4부터 도입된 객체 지향적 경로 처리 모듈입니다. 가독성이 뛰어나고 직관적입니다.


4. [Sample Example] 실전 경로 제어 코드

현재 스크립트의 위치를 기준으로 절대 경로를 동적으로 생성하여 파일을 여는 안전한 예제입니다.

from pathlib import Path
import os

# 1. 현재 작업 디렉터리 확인
print(f"현재 위치: {os.getcwd()}")

# 2. 상대 경로를 절대 경로로 변환하여 파일 찾기 (pathlib 방식)
current_file = Path(__file__).resolve()  # 현재 실행 중인 파일의 절대 경로
project_root = current_file.parent        # 파일이 속한 폴더 경로
data_path = project_root / "data" / "config.json"

print(f"최종 타겟 경로: {data_path}")

# 3. 안전하게 파일 존재 여부 확인 후 열기
if data_path.exists():
    with open(data_path, 'r', encoding='utf-8') as f:
        print("파일 읽기 성공!")
else:
    print("오류: 파일을 찾을 수 없습니다. 경로를 확인하세요.")
    

5. 결론: 유지보수가 쉬운 경로 설정 전략

개발 환경과 서버 운영 환경은 주소 체계가 다를 수밖에 없습니다. 따라서 코드 내부에 특정 사용자의 이름이 포함된 **절대 경로를 하드코딩하는 것은 반드시 피해야 합니다.** 프로젝트 루트를 기준으로 하는 **상대 경로**를 사용하거나, 실행 시점에 `pathlib`을 통해 동적으로 **절대 경로**를 추출하는 방식이 가장 견고한 해결책입니다.


내용의 출처 및 참고 문헌

  • Python Official Documentation: "pathlib — Object-oriented filesystem paths"
  • Microsoft Learn: "File path formats on Windows systems"
  • Real Python: "Python 3's pathlib Module: Taming the File System"
728x90