본문 바로가기
Today I Learned/Spring

[Spring] redirect 시, URL에 파라미터 붙는 이유

by dbs_ 2025. 6. 28.

 

redirect를 하였을 시, 서버에서 사용한 키가 url에 예시처럼 붙는 경우가 있었다. 그래서 원인을 파악하고 다른 방식을 찾아보게 되었다.

http://localhost:8080/test/home?publicKey=ABCDEFG

 

원인

해당 부분에서는 redirect 시 데이터 전달 방식이 Model에 addAttribute()로 전달하는 것이었다. 이렇게 되면 Request scope에 저장되는데, jsp에 데이터를 넘기려면 이렇게 해야 한다고 생각해서 아래처럼 작성하게 되었다.

// 예시

@PostMapping("/submit")
public String submit(Model model) {
    model.addAttribute("name", "dbswl");
    return "redirect:/success";
}

그렇지만 이 방식은, 내부적으로 model의 값이 URL 쿼리 파라미터로 변환되어 붙게 된다.

// 결과

/success?name=dbswl

 

방안

그럼 어떤 방법을 사용할 수 있을까. 
Spring에서는 redirectAttributes.addFlashAttribute()라는 기능을 제공한다. 이 방식은 URL에 쿼리 파라미터가 붙지 않고, 세션에 잠깐 데이터를 저장한 뒤 다음 요청에서 꺼내 쓰는 방식이다. 즉, URL은 깔끔하게 유지하면서도 데이터를 안전하게 전달할 수 있다.

// 예시

@PostMapping("/submit")
public String submit(RedirectAttributes redirectAttributes) {
    redirectAttributes.addFlashAttribute("name", "dbswl");
    return "redirect:/home";
}

// 받을 때
@GetMapping("/home")
public String home(@ModelAttribute("name") String name) {
    System.out.println("name = " + name);
    return "home";
}
  • FlashAttribute가 필요한 상황
    • URL에 노출되면 안 되는 민감한 정보
    • 사용자가 페이지를 새로고침하거나 URL을 공유하더라도 노출되면 안 되는 값
    • 클린 URL을 유지하고 싶은 경우

 

정리해 보자면,

항목 addAttribute() addFlashAttribute()
전달 방식 URL 쿼리 파라미터로 전달 세션(FlashMap)을 통해 전달
URL 노출 여부 노출됨 (?key=value) 노출되지 않음
데이터 유효 범위 항상 남아 있음 다음 요청에서만 1회 사용 후 사라짐
새로고침(F5) 시 계속 유지됨 값 사라짐