스프링의 부가기능 | SpEL

Faithful Dev·2025년 2월 25일

스프링 프레임워크

목록 보기
9/20

Spring Expression Language (SpEL)은 Spring 프레임워크에서 제공하는 표현식 언어로, 런타임에 객체 그래프를 조회하고 조작할 수 있도록 지원한다.
SpEL은 다음과 같은 기능을 제공한다.

  • 객체 프로퍼티 조회 및 조작
  • 메서드 호출
  • 연산자 사용 (산술, 관계, 논리 연산 등)
  • 컬렉션 및 배열 다루기
  • 빈(Bean) 조회
  • 삼항 연산자 및 Elvis 연산자 지원

기본 문법

기본 표현식

SpEL 표현식은 #{} 또는 ExpressionParser를 사용하여 평가할 수 있다.

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello SpEL'");
String message = exp.getValue(String.class);
System.out.println(message); // Hello SpEL

주요 기능

프로퍼티 및 메서드 호출

ExpressionParser parser = new SpelExpressionParser();

// 문자열 길이 구하기
Expression exp = parser.parseExpression("'Hello World'.length()");
Integer length = exp.getValue(Integer.class);
System.out.println(length); // 11

산술 연산

System.out.println(parser.parseExpression("10 * 2").getValue()); // 20
System.out.println(parser.parseExpression("10 / 2").getValue()); // 5

논리 연산 및 관계 연산

System.out.println(parser.parseExpression("10 > 5").getValue()); // true
System.out.println(parser.parseExpression("'Spring' == 'Spring'").getValue()); // true

리스트 및 맵 조작

List<Integer> numbers = parser.parseExpression("{1, 2, 3, 4}").getValue(List.class);
System.out.pirntln(numbers); // [1, 2, 3, 4]

Map<String, String> map = parser.parseExpression("{'key': 'value'}").getValue(Map.class);
System.out.println(map.get("key")); // value

SpEL과 Spring Bean

Spring 환경에서 SpEL을 사용하면 빈(Bean) 참조 및 조작이 가능하다.

@Value를 활용한 SpEL 사용

@Component
public class MyBean {
	@Value("#{10 + 20}") // SpEL 표현식 사용
    private int sum;
    
    @Value("#{systemProperties['user.name']}") // 시스템 프로퍼티 접근
    private String userName;
}

Bean 속성 참조

@Component
public class AnotherBean {
	@Value ("#{myBean.sum + 10}")
    private int newSum;
}

활용 예제

조건문 및 Elvis 연산자

@Value("#{someBean.property != null ? someBean.propperty : 'Default Value'}")
private String propertyWithDefault;

@Value("#{someBean.property ?: 'Default Value'}") // Elvis 연산자
private String elvisOperatorExample;

Security 및 Access Control

SpEL은 Spring Security와 함께 사용되어 권한 및 접근 제어에 활용된다.

@PreAuthorize("hasRole('ADMIN')")
public void adminOnlyMethod() {
	// 관리자만 접근 가능
}

정리

  • SpEL은 Spring에서 제공하는 강력한 표현식 언어
  • 객체 조회, 메서드 호출, 연산 수행, 컬렉션 조작 가능
  • Spring Bean과 통합 가능하여 설정 값 및 속성 제어
  • Spring Security, @Value 등과 결합하여 다양한 활용 가능

SpEL을 사용하면 Spring 애플리케이션에서 동적 속성 평가 및 조건문 활용이 더욱 유연해진다.

profile
Turning Vision into Reality.

0개의 댓글