절대경로와 상대경로의 차이는 기준이 되는 위치에 따라 달라집니다.
✅ 절대경로 (Absolute Path)
- 루트(root, 최상위 디렉터리)부터 시작하는 경로.
- 운영체제에서:
- Windows:
C:\Users\Name\Documents\file.txt
- Linux/macOS:
/home/user/file.txt
- Windows:
- 웹에서:
https://example.com/images/photo.jpg
/images/photo.jpg
(도메인을 생략해도 루트/
로 시작하면 절대경로)
✅ 상대경로 (Relative Path)
- 현재 위치(작업 디렉터리)를 기준으로 하는 경로.
../
(부모 디렉터리),./
(현재 디렉터리) 등을 사용.- 웹에서:
images/photo.jpg
(현재 위치에서images/
폴더를 찾음)../photo.jpg
(상위 디렉터리에서photo.jpg
를 찾음)
📌 주소에 변수를 사용했다면 절대경로인가?
변수 사용 여부와 절대/상대경로는 직접적인 관련이 없습니다.
예를 들어:
baseUrl + "/images/photo.jpg"
→ 절대경로 (변수가https://example.com
같은 루트 URL이라면)basePath + "photo.jpg"
→ 상대경로 (변수가./images/
라면)
경로가 /
(루트) 또는 http://
, https://
로 시작하면 절대경로입니다.
그렇지 않고 현재 위치를 기준으로 한다면 상대경로입니다.
✅ 네! http://
또는 https://
로 시작하면 무조건 절대경로입니다.
📌 이유
웹에서 절대경로는 도메인(사이트의 루트 주소)부터 시작하는 경로를 의미합니다.
즉, http://
나 https://
로 시작하는 주소는 특정 서버를 기준으로 하므로 절대경로입니다.
✅ 예제
<img src="https://example.com/images/photo.jpg"> <!-- 절대경로 -->
<img src="http://mywebsite.com/assets/style.css"> <!-- 절대경로 -->
❌ 상대경로 예제
<img src="/images/photo.jpg"> <!-- 절대경로 (도메인 기준) -->
<img src="images/photo.jpg"> <!-- 상대경로 (현재 위치 기준) -->
<img src="../photo.jpg"> <!-- 상대경로 (상위 폴더 기준) -->
📌 즉, http://
또는 https://
가 포함된 URL은 항상 절대경로입니다.
각 변수가 절대경로인지 상대경로인지 하나씩 분석해 볼게요.
1️⃣ request.getRequestURI() → uri (상대경로)
getRequestURI()
는 도메인을 제외한 요청 경로를 반환합니다.- 예를 들어, 사용자가
https://example.com/myapp/home
에 접속했다면:request.getRequestURI(); // "/myapp/home"
/
로 시작하지만, 도메인이 없으므로 상대경로입니다.
2️⃣ request.getContextPath() → appName (상대경로)
getContextPath()
는 웹 애플리케이션의 컨텍스트 경로를 반환합니다.- 예를 들어, 애플리케이션이
/myapp
이라는 컨텍스트 경로를 사용하고 있다면:request.getContextPath(); // "/myapp"
- 역시 도메인이 없으므로 상대경로입니다.
3️⃣ baseUrl (절대경로)
baseUrl
은getRequestURL()
(전체 URL)에서appName
을 포함한 부분까지만 잘라 만든 값입니다.- 예제:
결과:String url = "https://example.com/myapp/home"; String appName = "/myapp"; String baseUrl = url.substring(0, url.indexOf(appName) + appName.length()) + "/";
baseUrl = "https://example.com/myapp/"
http://
또는https://
가 포함된 도메인 기반 URL이므로 절대경로입니다.
✅ 결론
변수명 | 절대경로 vs 상대경로 | 설명 |
---|---|---|
uri |
상대경로 | 도메인 없이 요청된 URI (예: /myapp/home ) |
appName |
상대경로 | 애플리케이션의 컨텍스트 경로 (예: /myapp ) |
baseUrl |
절대경로 | http:// 또는 https:// 포함된 전체 URL (예: https://example.com/myapp/ ) |
정리:
/
로 시작한다고 절대경로가 아님!http://
,https://
가 포함되어 있어야 절대경로!uri
와appName
은 도메인 없이 현재 요청을 기준으로 한 상대경로baseUrl
은 도메인 포함된 절대경로 ✅
맞아요! appName(/myapp
)부터 주소를 찾는다고 해서 자동으로 URL이 완성되더라도, appName
자체는 상대경로입니다.
📌 왜 상대경로인가?
request.getContextPath()
는 단순히 애플리케이션의 컨텍스트 경로(예:/myapp
)를 반환합니다.- 이 값에는 도메인(
http://example.com
)이 포함되지 않으므로 상대경로입니다. - 이후
appName
을 기반으로 URL을 생성할 때, 브라우저나 서버가 자동으로 현재 요청의 URL을 붙여서 해석하는 것뿐입니다.
✅ 예제 코드로 이해해보자
1️⃣ 현재 요청된 URL이 https://example.com/myapp/home
라고 가정
String url = request.getRequestURL().toString(); // "https://example.com/myapp/home"
String uri = request.getRequestURI(); // "/myapp/home"
String appName = request.getContextPath(); // "/myapp"
2️⃣ appName
부터 시작하면 브라우저가 현재 URL을 기준으로 상대경로를 해석
appName
값 자체는/myapp
이지만, 요청이https://example.com/myapp/home
에서 발생했으므로 브라우저는 현재 도메인(https://example.com
)을 자동으로 붙여서 해석합니다.
System.out.println("appName: " + appName); // "/myapp" (상대경로)
System.out.println("해석된 전체 경로: " + "https://example.com" + appName);
// "https://example.com/myapp" (브라우저가 자동으로 붙여줌)
❌ 절대경로라면?
절대경로는 도메인을 포함해야 함
- 예를 들어
baseUrl
을 보면,http://
또는https://
가 포함됨.
String baseUrl = url.substring(0, url.indexOf(appName) + appName.length()) + "/";
System.out.println("baseUrl: " + baseUrl);
// "https://example.com/myapp/" (절대경로 ✅)
✅ 결론
appName
은 상대경로 (도메인 없이/myapp
만 제공)- URL이 자동으로 붙는다고 해서 절대경로가 되는 것은 아님
- 브라우저나 서버가 현재 요청된 URL을 기준으로 상대경로를 절대경로처럼 해석하는 것뿐
- 도메인(
http://
,https://
)이 포함된 경우에만 절대경로 💡
'웹 개발' 카테고리의 다른 글
JSP 스코프 (0) | 2025.02.09 |
---|---|
HTTP (0) | 2025.02.09 |
HTML 구조이해1 - DOM(Document Object Model)이란? (0) | 2025.02.09 |
파라미터란? (0) | 2025.02.08 |
보안 차원에서 주소(URL)의 파라미터를 가리는 이유와 방법 (0) | 2025.02.08 |