들어가며
파일을 읽거나 저장할 때 경로(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:\,/)부터 시작하는 전체 경로로, 어디서 실행해도 같은 위치를 가리킨다. - 상대경로는 현재 작업 디렉토리를 기준으로 하는 경로로, 실행 위치에 따라 가리키는 곳이 달라진다.
.은 현재 디렉토리,..은 상위 디렉토리를 의미한다.- 팀 프로젝트나 배포 환경을 고려하면 상대경로를 사용하는 것이 이식성이 높고 안전하다.
'-- 오늘 있었던 개발 일기' 카테고리의 다른 글
| 참조변수는 주소를 가져야 한다! (0) | 2026.04.08 |
|---|---|
| Object 클래스 - Java 최상위 클래스 (0) | 2026.04.06 |
| 스트림(Stream)이란? - 입출력과 병렬처리 (0) | 2026.04.02 |
| 추상 메서드(Abstract Method)란? (0) | 2026.03.31 |
| 객체지향 프로그래밍(OOP)이란? (0) | 2026.03.19 |