본문 바로가기
-- 오늘 있었던 개발 일기

상대경로와 절대경로

by code study 2026. 4. 4.

들어가며

파일을 읽거나 저장할 때 경로(Path)를 지정해야 합니다.
이때 경로를 표현하는 방식이 두 가지 있는데, 바로 상대경로절대경로입니다.
어떤 차이가 있는지, Java에서는 어떻게 사용하는지 정리해보겠습니다.


절대경로(Absolute Path)란?

절대경로는 최상위 루트(root)부터 시작하는 전체 경로입니다.
Windows에서는 드라이브명(C:\)이, Linux/Mac에서는 /가 루트가 됩니다.
어디서 실행하든 항상 같은 위치를 가리킵니다.

Windows:  C:\Users\user\project\src\test.txt
Linux/Mac: /home/user/project/src/test.txt

상대경로(Relative Path)란?

상대경로는 현재 내 위치(작업 디렉토리)를 기준으로 하는 경로입니다.
현재 위치가 어디냐에 따라 가리키는 실제 위치가 달라집니다.

현재 위치: C:\Users\user\project

상대경로: src\test.txt
실제 경로: C:\Users\user\project\src\test.txt

디렉토리 표기 기호

상대경로에서 자주 사용하는 기호입니다.

기호 의미 예시
. 현재 디렉토리 ./test.txt
.. 상위 디렉토리 ../test.txt
/ (또는 \) 하위 디렉토리 src/test.txt

 

현재 위치: C:\Users\user\project\src

./test.txt       → C:\Users\user\project\src\test.txt  (현재 폴더)
../test.txt      → C:\Users\user\project\test.txt      (한 단계 위)
../../test.txt   → C:\Users\user\test.txt               (두 단계 위)

코드로 이해하기

절대경로 사용

import java.io.*;

public class PathExample {
    public static void main(String[] args) {

        // 절대경로 - 루트부터 전체 경로 지정
        File file = new File("C:\\Users\\user\\project\\test.txt");

        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            System.out.println(br.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

상대경로 사용

// 상대경로 - 프로젝트 루트 기준
File file = new File("src/test.txt");

// 현재 작업 디렉토리 확인
System.out.println(System.getProperty("user.dir"));
// 출력: C:\Users\user\project

 

System.getProperty("user.dir")로 현재 작업 디렉토리를 확인할 수 있습니다.
상대경로는 이 위치를 기준으로 동작합니다.


Spring Boot에서의 경로

Spring Boot 프로젝트에서 파일을 다룰 때도 경로 개념이 자주 등장합니다.

프로젝트 구조:
my-project/
├── src/
│   └── main/
│       └── resources/
│           └── data.sql       ← 리소스 파일
└── uploads/                   ← 업로드 파일 저장 폴더
// 상대경로 - 프로젝트 루트 기준
File uploadDir = new File("uploads/images");

// 절대경로 - 서버 실행 위치 기준
String absolutePath = new File("uploads/images").getAbsolutePath();
System.out.println(absolutePath);
// C:\Users\user\my-project\uploads\images

절대경로 vs 상대경로 비교

항목 절대경로 상대경로
기준점 최상위 루트 (C:\, /) 현재 작업 디렉토리
이식성 낮음 (환경마다 경로 다름) 높음 (프로젝트 내 상대 위치 유지)
가독성 경로가 길어짐 짧고 간결함
사용 예시 서버 배포 시 고정 경로 개발 환경, 리소스 참조

어떤 것을 써야 할까?

절대경로가 적합한 경우

  • 서버에 배포할 때 파일 저장 위치가 고정된 경우
  • 외부 드라이브나 특정 위치를 정확하게 지정해야 하는 경우

상대경로가 적합한 경우

  • 프로젝트 내부 리소스 파일을 참조할 때
  • 팀원과 코드를 공유하거나 다른 환경에서도 실행되어야 할 때
  • 절대경로를 쓰면 다른 팀원의 PC에서 경로가 달라 오류가 생길 수 있음
// 잘못된 예 - 절대경로는 다른 환경에서 오류 발생
File file = new File("C:\\Users\\홍길동\\project\\test.txt"); // 내 PC에서만 동작

// 올바른 예 - 상대경로는 어디서든 동작
File file = new File("src/test.txt");

 



정리

  • 절대경로는 최상위 루트(C:\, /)부터 시작하는 전체 경로로, 어디서 실행해도 같은 위치를 가리킨다.
  • 상대경로는 현재 작업 디렉토리를 기준으로 하는 경로로, 실행 위치에 따라 가리키는 곳이 달라진다.
  • .은 현재 디렉토리, ..은 상위 디렉토리를 의미한다.
  • 팀 프로젝트나 배포 환경을 고려하면 상대경로를 사용하는 것이 이식성이 높고 안전하다.