[Thymeleaf] 변수 -SpringEL

2025. 9. 11. 18:08·타임리프

웹 애플리케이션을 개발할 때, 서버에서 가져온 데이터를 화면에 표현하는 일은 기본 중의 기본이다. 하지만 단순히 값 하나만 출력하는 게 아니라, 객체 안의 필드, 리스트(List)나 맵(Map) 구조 안의 값까지 꺼내 써야 할 때가 많다.

 

이럴 때 매번 getUsername(), getAge() 같은 자바 메서드를 직접 호출한다면 코드가 복잡해지고 읽기 어려워진다.
여기서 등장하는 것이 바로 SpringEL(Expression Language, 표현 언어) 이다.


SpringEL을 사용하면 ${user.username}처럼 간단한 문법으로 객체의 속성이나 리스트·맵의 값을 쉽게 꺼낼 수 있다.

이번 글에서는 SpringEL을 사용해 변수를 다루는 방법과, 이를 통해 얻을 수 있는 장점을 정리해본다.

 

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

컨트롤러에서는 사용자 객체(User)를 만들고, 리스트와 맵에 담아 모델로 넘긴다.

@Controller
@RequestMapping("/basic")
public class BasicController {

    @GetMapping("/variable")
    public String variable(Model model) {
        User userA = new User("userA", 10);
        User userB = new User("userB", 20);

        List<User> list = new ArrayList<>();
        list.add(userA);
        list.add(userB);

        Map<String, User> map = new HashMap<>();
        map.put("userA", userA);
        map.put("userB", userB);

        model.addAttribute("user", userA);
        model.addAttribute("users", list);
        model.addAttribute("userMap", map);

        return "basic/variable";
    }

    @Data
    static class User {
        private String username;
        private int age;
        public User(String username, int age) {
            this.username = username;
            this.age = age;
        }
    }
}

기서 user, users, userMap이라는 이름으로 모델에 담겨 뷰 템플릿으로 전달된다.

 

2. 뷰 템플릿에서 SpringEL 사용하기

넘겨받은 데이터를 EL 문법 ${...}으로 꺼내 쓴다.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>SpringEL 표현식</title>
</head>
<body>
<h1>SpringEL 표현식</h1>

<ul>Object
    <li>${user.username} = <span th:text="${user.username}"></span></li>
    <li>${user['username']} = <span th:text="${user['username']}"></span></li>
    <li>${user.getUsername()} = <span th:text="${user.getUsername()}"></span></li>
</ul>

<ul>List
    <li>${users[0].username} = <span th:text="${users[0].username}"></span></li>
    <li>${users[0]['username']} = <span th:text="${users[0]['username']}"></span></li>
    <li>${users[0].getUsername()} = <span th:text="${users[0].getUsername()}"></span></li>
</ul>

<ul>Map
    <li>${userMap['userA'].username} = <span th:text="${userMap['userA'].username}"></span></li>
    <li>${userMap['userA']['username']} = <span th:text="${userMap['userA']['username']}"></span></li>
    <li>${userMap['userA'].getUsername()} = <span th:text="${userMap['userA'].getUsername()}"></span></li>
</ul>

<h1>지역 변수 - (th:with)</h1>
<div th:with="first=${users[0]}">
    <p>처음 사람의 이름은 <span th:text="${first.username}"></span></p>
</div>

</body>
</html>

 

3. 실행 결과

브라우저로 실행하면 다음과 같이 출력된다.

SpringEL 표현식

Object
${user.username} = userA
${user['username']} = userA
${user.getUsername()} = userA

List
${users[0].username} = userA
${users[0]['username']} = userA
${users[0].getUsername()} = userA

Map
${userMap['userA'].username} = userA
${userMap['userA']['username']} = userA
${userMap['userA'].getUsername()} = userA

지역 변수 - (th:with)
처음 사람의 이름은 userA

 

4. 무엇이 좋을까?

SpringEL을 사용하면 다음과 같은 장점이 있다.

  1. 코드가 간단하다
    • 원래는 user.getUsername() 같은 메서드를 호출해야 하지만, EL을 쓰면 ${user.username}으로 간단하게 접근할 수 있다.
  2. 객체, 리스트, 맵 모두 동일한 문법으로 접근 가능
    • ${user.username}, ${users[0].username}, ${userMap['userA'].username} 처럼 일관성 있게 표현할 수 있어 직관적이다.
  3. 템플릿 안에서 가독성이 좋아진다
    • HTML에 자바 코드처럼 긴 메서드 호출이 섞이지 않으니, 뷰 코드를 읽고 관리하기 훨씬 쉽다.
  4. 지역 변수 사용 가능
    • th:with를 활용하면 한 번 꺼낸 값을 지역 변수에 담아 재사용할 수 있다. → 반복되는 코드 줄이고 가독성 높임.

 

마무리하며

오늘은 SpringEL을 사용해 객체, 리스트, 맵의 값을 꺼내는 방법을 살펴보았다.
결국 SpringEL을 쓰면 간단한 문법으로 데이터를 꺼내고, 가독성 있는 템플릿 코드를 작성할 수 있다.

 

감사합니다.

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

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

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
0kingki_
[Thymeleaf] 변수 -SpringEL
상단으로

티스토리툴바