[Spring MVC] 스프링 MVC Redirect 처리 방법

2025. 3. 9. 03:27·Spring/MVC

 

 

스프링 MVC Redirect 처리 방법

#Spring/MVC


/Redirect
/Redirect 처리 방법

  • /1. HttpServletResponse의 sendRedirect()
  • /2. ResponseEntity
  • /3. RedirectView 직접 반환
  • /4. “redirect:” 접두사

/RedirectAttributes

  • /1. Flash Attribute
  • /2. Query Parameter 전달

Redirect

Redirect 는 클라이언트의 요청을 완전히 새로운 URL로 전달하여 처리하는 방식이다.
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다.


Redirect 처리 방법

1. HttpServletResponse의 sendRedirect()

@PostMapping("/add")
public void ItemOrderCompleteForm(HttpServletResponse response) throws IOException {
    response.sendRedirect("/items");
}

2. ResponseEntity

ResponseEntity를 사용하면 HTTP 응답의 헤더와 상태 코드를 직접 제어할 수 있다. 이를 통해 리다이렉트 URL을 포함한 응답을 반환할 수 있다.

@PostMapping("/add")
public ResponseEntity<Void> addItem() {
    HttpHeaders headers = new HttpHeaders();
    headers.setLocation(URI.create("/items"));
    // 302(FOUND) 또는 303(SEE_OTHER)를 사용하여 리다이렉트 응답 생성
    return new ResponseEntity<>(headers, HttpStatus.FOUND);
}


3. RedirectView 직접 반환

  • RedirectView 객체를 반환하여 리다이렉트를 처리할 수 있다.
    • 리다이렉트 관련 추가 옵션(예: 모델 속성 노출 여부)을 세밀하게 제어 가능
    • 컨트롤러가 View 객체를 직접 반환하므로, ViewResolver가 추가 작업을 하지 않는다.
@PostMapping("/add")
public RedirectView addItem() {
    RedirectView redirectView = new RedirectView("/items");
    // 필요 시 모델 속성을 URL에 포함하지 않도록 설정 가능
    redirectView.setExposeModelAttributes(false);
    return redirectView;
}


4. “redirect:” 접두사

반환 값 앞에 “redirect:” 접두사를 붙이면 스프링이 이를 리다이렉트로 인식한다.

@PostMapping("/add")
public String addItem() {
    // 비즈니스 로직 처리 후, "/items" URL로 리다이렉트
    return "redirect:/items";
}

Spring MVC에서 "redirect:" 접두사를 사용하면 내부적으로 RedirectView가 생성되어, HttpServletResponse의 sendRedirect() 메서드를 호출한다. 이때 기본적으로 HTTP 상태코드는 302 Found가 된다.

주의 : @RestController에서는 이 방식으로 리다이렉트를 처리할 수 없다.


RedirectAttributes

리다이렉트 시 데이터(예: 일회성 메시지)를 전달하기 위해 RedirectAttributes를 사용할 수 있다.

  • 주로 Post/Redirect/Get(PGR) 패턴에서 사용된다.
  • URL에 직접 데이터를 노출하지 않고 안전하게 전달할 수 있는 Flash Attribute와 URL 쿼리 파라미터 방식이 있다.

1. Flash Attribute

Flash Attribute는 리다이렉트 후 한 번만 사용되는 데이터를 세션에 임시 저장하여 전달한다.

  • Flash Attribute는 리다이렉트된 후 자동으로 세션에서 제거되므로, 반복 사용되지 않는다.
  • URL에 데이터가 노출되지 않아 보안상 안전하다.

참고 | 세션에 데이터가 저장되므로, RedirectAttributes를 사용할때, @SessionAttributes와 함께 사용한다면 주의해서 개발을 해야한다. 세션의 변경사항이 RedirectAttributes에 영향을 줄 수도 있기 때문이다.

(ex. sessionStatus.setComplete()로 세션을 비워버리는 경우)


@PostMapping("/add")
public String addItem(RedirectAttributes redirectAttributes) {
    // 비즈니스 로직 처리 후, 일회성 메시지 저장
    redirectAttributes.addFlashAttribute("message", "아이템이 성공적으로 추가되었습니다.");
    return "redirect:/items";
}

2. Query Parameter 전달

리다이렉트 URL에 쿼리 파라미터 형태로 데이터를 추가할 경우, addAttribute() 메서드를 사용한다.

  • URL 뒤에 ?id=123 형태로 파라미터가 추가된다.
  • 민감한 정보는 URL에 노출될 수 있으므로 주의해야 한다.
@PostMapping("/add")
public String addItem(RedirectAttributes redirectAttributes) {
    // 비즈니스 로직 처리 후, URL 파라미터로 데이터 추가
    redirectAttributes.addAttribute("id", 123);
    return "redirect:/items";
}

또한, RedirectAttributes를 사용하면 URL 인코딩도 해주고, pathVariable, 쿼리 파라미터까지 처리해준다.

@PostMapping("/add")
public String addItem(Item item, RedirectAttributes redirectAttributes) {
    Item savedItem = itemRepository.save(item);
    redirectAttributes.addAttribute("itemId", savedItem.getId());
    redirectAttributes.addAttribute("status", true);
    return "redirect:/basic/items/{itemId}";
}

'Spring > MVC' 카테고리의 다른 글

[Spring MVC] 스프링 MVC 기본 기능 정리  (0) 2025.03.09
[Spring MVC] 타임리프 문법 정리  (0) 2025.02.13
[Spring/MVC] 12. Bean Validation  (0) 2025.01.19
[Spring/MVC] 11. Validation  (0) 2025.01.19
[Spring/MVC] 10. 메시지 국제화  (0) 2025.01.19
'Spring/MVC' 카테고리의 다른 글
  • [Spring MVC] 스프링 MVC 기본 기능 정리
  • [Spring MVC] 타임리프 문법 정리
  • [Spring/MVC] 12. Bean Validation
  • [Spring/MVC] 11. Validation
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Spring
        • MVC
        • DB
        • 핵심 원리
        • JPA
      • WEB
        • HTML
        • CSS
        • HTTP
        • Application
      • Computer Science
        • Network
        • Database
        • OS
        • 시스템 프로그래밍
        • 컴퓨터구조
      • Algorithm
        • Divide&Conquer
        • Sort
        • Greedy
        • DP
        • Backtracking
        • NP-Complete
        • Graph
      • Data Structure
        • 자료구조
        • C++ STL
        • Java Collection
      • 소프트웨어 공학
        • 시험 공부 정리
        • Theorem
      • Programming Language
        • Python
        • Java
        • C
        • C++
        • Rust
        • Theory
      • Unix_Linux
        • Common
      • React
      • PS
        • BOJ
        • Tip
        • 프로그래머스
        • CodeForce
      • Book Review
        • Clean Code
      • Math
        • Linear Algebra
      • AI
        • DL
        • ML
        • DA
        • Concepts
      • 우아한테크코스
        • 프리코스
      • Project Review
      • LegacyPosts
      • Android
      • Apple
        • Mac
        • IPhone
        • IPad
      • 모니터
      • Diary
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
lumana
[Spring MVC] 스프링 MVC Redirect 처리 방법
상단으로

티스토리툴바