[Thymeleaf] URL링크

2025. 9. 15. 19:18·타임리프

웹 화면을 만들다 보면 다른 페이지로 이동하는 링크가 필요하다. 단순히 /hello 같은 고정 주소를 쓰기도 하지만, 실제 개발에서는 쿼리 파라미터(검색 조건, 페이지 번호 등)나 경로 변수(게시글 ID, 사용자 이름 등)를 붙여야 할 때가 많다.
Thymeleaf는 이런 경우를 간단히 처리할 수 있도록 @{...} 문법을 제공한다.

 

1. 컨트롤러에서 데이터 준비하기

컨트롤러에서 URL에 넣을 값을 모델에 담는다.

@GetMapping("/link")
public String link(Model model) {
    model.addAttribute("param1", "data1");
    model.addAttribute("param2", "data2");
    return "basic/link";
}

여기서 param1=data1, param2=data2 값을 뷰로 넘긴다.

 

2. 뷰 템플릿에서 URL 생성하기

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>URL 링크</title>
</head>
<body>
<h1>URL 링크</h1>
<ul>
  <!-- 단순 URL -->
  <li><a th:href="@{/hello}">basic url</a></li>

  <!-- 쿼리 파라미터 -->
  <li><a th:href="@{/hello(param1=${param1}, param2=${param2})}">hello query param</a></li>

  <!-- 경로 변수 -->
  <li><a th:href="@{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}">path variable</a></li>

  <!-- 경로 변수 + 쿼리 파라미터 -->
  <li><a th:href="@{/hello/{param1}(param1=${param1}, param2=${param2})}">path variable + query parameter</a></li>
</ul>
</body>
</html>

 

 

3. 각각 어떻게 동작할까?

1) 단순한 URL

<a th:href="@{/hello}">basic url</a>

결과: /hello
그냥 고정된 경로를 만든다.

 

2) 쿼리 파라미터

<a th:href="@{/hello(param1=${param1}, param2=${param2})}">hello query param</a>

결과: /hello?param1=data1&param2=data2

  • 괄호 ( ) 안에서 param1=${param1} 처럼 key=value 를 쓰면 자동으로 쿼리스트링이 붙는다.
  • ${param1}은 모델에서 가져온 값 data1으로 치환된다.

3) 경로 변수

<a th:href="@{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}">path variable</a>

결과: /hello/data1/data2

  • {param1}, {param2} 같은 플레이스홀더를 경로에 넣고,
  • (param1=${param1}, param2=${param2}) 로 치환해 준다.

4) 경로 변수 + 쿼리 파라미터

<a th:href="@{/hello/{param1}(param1=${param1}, param2=${param2})}">path variable + query parameter</a>

결과: /hello/data1?param2=data2

  • {param1} → data1 로 치환
  • 남은 param2는 쿼리스트링으로 붙는다

 

마무리하며

웹 애플리케이션을 만들 때 URL을 어떻게 표현할지는 아주 중요하다. 단순히 고정 주소(/hello)만 필요한 게 아니라, 상황에 따라 검색 조건 같은 쿼리 파라미터나 게시글 ID 같은 경로 변수를 함께 써야 한다.

Thymeleaf는 이런 요구를 위해 @{...} 문법을 제공한다. 이 문법을 활용하면 다음과 같은 장점이 있다.

  • 코드 간결함 : 문자열을 직접 이어 붙일 필요 없이 직관적으로 URL을 만들 수 있다.
  • 자동 치환 : ${param}으로 전달받은 값을 안전하게 넣어주고, 특수문자는 자동으로 URL 인코딩된다.
  • 일관된 문법 : 단순 경로, 쿼리 파라미터, 경로 변수를 모두 같은 방식으로 처리할 수 있다.
  • 가독성 향상 : HTML 코드 안에서 URL 조합 로직이 깔끔하게 표현되어 유지보수가 쉽다.

즉, URL 표기를 간단하고 안전하게 처리하기 위해 Thymeleaf가 이런 기능을 제공하는 것이고, 덕분에 우리는 복잡한 문자열 조합 없이 직관적인 코드로 웹 화면을 구성할 수 있다.

 

감사합니다.

'타임리프' 카테고리의 다른 글

[Thymeleaf] 연산  (0) 2025.09.15
[Thymeleaf] 리터럴  (1) 2025.09.15
[Thymeleaf] 유틸리티 객체와 날짜  (0) 2025.09.15
[Thymeleaf] 변수 -SpringEL  (0) 2025.09.11
[Thymeleaf] 텍스트 -text, utext  (0) 2025.09.11
'타임리프' 카테고리의 다른 글
  • [Thymeleaf] 연산
  • [Thymeleaf] 리터럴
  • [Thymeleaf] 유틸리티 객체와 날짜
  • [Thymeleaf] 변수 -SpringEL
0kingki_
0kingki_
자바 + 스프링 웹 개발
  • 0kingki_
    0kingki_
    0kingki_
  • 전체
    오늘
    어제
    • 분류 전체보기 (134)
      • 코딩 테스트 (54)
      • 자바 (21)
      • 스프링 (27)
      • 타임리프 (16)
      • 스프링 데이터 JPA (8)
      • 최적화 (2)
      • QueryDSL (4)
      • AWS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다형성
    fetch join
    컬렉션
    QueryDSL
    Java
    JPA
    백준
    코딩 테스트
    스프링
    thymeleaf
    예외처리
    최적화
    mvc
    객체지향
    spring
    LocalDateTime
    쿼리
    BFS
    재귀
    SOLID
    쿼리dsl
    dfs
    SpringDataJpa
    스프링 데이터 JPA
    타임리프
    예외 처리
    자바
    불변객체
    스프링 컨테이너
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
0kingki_
[Thymeleaf] URL링크
상단으로

티스토리툴바