KOSA Spring - redirect

채정윤·2025년 4월 17일

Spring

목록 보기
10/25

🔄 redirect란?

  • *서버에서 클라이언트에게 "다른 주소로 다시 요청해라"**고 지시하는 것.
  • 클라이언트의 URL이 실제로 바뀐다.
  • 주로 데이터 처리 후 새로고침 방지 / PRG(Post-Redirect-Get) 패턴에서 사용됨.

사용법

return "redirect:/요청경로";
  • redirect:라는 접두어를 붙이면 Spring이 자동으로 리다이렉트를 수행함.
  • JSP 페이지로 이동하는 게 아니라 컨트롤러의 다른 메서드를 호출하게 됨.

예시 코드

@GetMapping("ex03")
public String ex03() {
    return "redirect:/sample/ex04";
}

@GetMapping("ex04")
public String ex04() {
    return "ex04";
}

실행 흐름 설명

  1. 사용자가 /sample/ex03으로 접근함
  2. 컨트롤러가 redirect:/sample/ex04로 리다이렉트
  3. 브라우저는 /sample/ex04다시 요청
  4. ex04() 메서드 실행되고 ex04.jsp로 이동함

언제 redirect를 사용할까?

insert, update, delete

상황이유
폼 전송 후새로고침 시 중복 제출 방지 (PRG 패턴)
URL을 변경하고 싶을 때사용자가 다른 주소로 이동하게 하고 싶을 때
처리 후 목록으로 돌려보낼 때예: 글 작성 후 글 목록 페이지로 이동 등

요약 한 줄

redirect는 현재 요청을 다른 요청으로 강제로 넘길 때 사용하는 Spring의 리디렉션 기능이다!


✅ redirect 시 데이터 전달 & 객체화 개념

1. RedirectAttributes 개념

🔧 역할

  • redirect:/... 시, 파라미터를 URL에 자동 추가해주는 도구
  • 내부적으로는 ?key=value 형태로 쿼리스트링을 만들어줌

(사용 예시)

@GetMapping("ex03")
public String ex03(RedirectAttributes rttr) {
    rttr.addAttribute("name", "bbb"); // → ?name=bbb
    rttr.addAttribute("age", 40);     // → &age=40

    return "redirect:/sample/ex04";
}

→ 결과 URL: /sample/ex04?name=bbb&age=40


2. DTO(객체)로 자동 바인딩

@GetMapping("ex04")
public String ex04(SampleDto dto, @ModelAttribute("page") int page)

📌 핵심 개념

  • 요청 파라미터의 key(name, age)가 DTO의 필드와 일치하면, 자동으로 객체로 바인딩됨
  • 이것이 바로 커맨드 객체 자동 매핑
  • SampleDto(name=bbb, age=40) ← 이렇게 자동으로 값이 들어감

3. @ModelAttribute 사용 이유

  • @ModelAttribute("page")view에서도 사용할 수 있게 model에 넣어주는 것
  • 일반 파라미터지만, model에 추가돼서 JSP에서 ${page}로 꺼낼 수 있음
<p>페이지 번호: ${page}</p>

✅ 정리 요약

개념설명
RedirectAttributes리다이렉트할 때 파라미터를 쿼리스트링으로 넘길 수 있게 도와줌
DTO 자동 바인딩URL 파라미터 이름이 DTO 필드와 일치하면 자동 객체화
@ModelAttribute단순 파라미터도 view에서 사용할 수 있게 모델에 넣어줌
리다이렉트 시 데이터 전달addAttribute()로 쿼리 파라미터 전달 →
커맨드 객체나 @RequestParam/@ModelAttribute로 받기

📌 꼭 기억할 것!

  • RedirectAttributes.addAttribute() → URL 파라미터 전달 (ex. ?name=bbb)
  • DTO로 받으려면 필드 이름이 URL 파라미터와 일치해야 함
    • 즉, "name"이라는 소문자 파라미터는 SampleDtoprivate String name; 필드에 바인딩됨
    • 만약 URL에 Name=bbb처럼 대문자로 작성되면 바인딩이 안 될 수 있음 → 대소문자 일치 중요
    • @ModelAttribute("page")와 같은 명시적 바인딩은 key 이름과 URL 파라미터가 일치해야 한다.
      • ex: /sample/ex04?page=3 있어야 page에 값이 들어감
  • 리다이렉트 후 데이터를 JSP에 보여주고 싶다면 → @ModelAttribute 활용

0개의 댓글