웹 개발

절대 경로와 상대 경로

Blue_bull 2025. 2. 7. 00:13

절대경로와 상대경로의 차이는 기준이 되는 위치에 따라 달라집니다.

절대경로 (Absolute Path)

  • 루트(root, 최상위 디렉터리)부터 시작하는 경로.
  • 운영체제에서:
    • Windows: C:\Users\Name\Documents\file.txt
    • Linux/macOS: /home/user/file.txt
  • 웹에서:
    • 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 (절대경로)

  • baseUrlgetRequestURL()(전체 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://가 포함되어 있어야 절대경로!
  • uriappName도메인 없이 현재 요청을 기준으로 한 상대경로
  • 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