인프런 커뮤니티 질문&답변

shekwl24님의 프로필 이미지
shekwl24

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 웹 기능 - 등록

redirect이유가 궁금합니다.

작성

·

2.3K

6

제가 개인적으로 검색해봤습니다.

* 포워딩

- 요청 -> 다른 URL연결(포워딩) -> 응답

- 요청정보가 유지됨

* 리다이렉트

- 요청 -> 리다이렉션 -> 요청 -> 응답

- 새로운 요청이 들어온다. 

정도로 이해해서 두개의 차이는 알게되었는데 이것이

시스템에 변화가 생기는 요청(로그인, 회원가입, 글쓰기)의 경우 redirect방식으로 응답하는 것이 바람직하며, 시스템에 변화가 생기지 않는 단순조회(리스트보기, 검색)의 경우 forward방식으로 응답하는 것이 바람직하다.

이 내용은 살짝 이해가 되서 설명해주셨으면 합니다!

항상 좋은 강의 감사드립니다.

답변 2

19

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. shekwl24님

먼저 포워딩이라는 것은 사실 웹 브라우저 입장에서는 그게 뭔지도 모르는 것입니다. 이게 중요합니다!

포워딩: 서버 내부에서 일어나는 일

1. 웹 브라우저 URL 창에 /event을 입력하고 엔터

2. 서버가 /event URL을 전달 받음

3. 서버가 서버 내부에서 /event -> /new-event로 포워딩

4. /new-event 결과를 내부에서 렌더링

5. 클라이언트에게 렌더링 된 결과를 반환

6. 웹 브라우저에 응답 결과가 보이고 URL 창은 처음 입력한 /event로 유지됨

리다이렉트: 웹 브라우저가 인식하고 URL 경로를 실제 변경합니다.

1. 웹 브라우저 URL 창에 /event을 입력하고 엔터

2. 서버가 /event URL을 전달 받음

3. 서버가 /event -> /new-event로 리다이렉트

4. 서버는 /new-event로 리다이렉트 하라는 결과를 웹 브라우저에 반환

5. 웹 브라우저는 URL 창에 자동으로 /new-event를 입력하고 엔터(자동으로 일어나고, 실제 URL 창에 입력 결과가 /new-event로 변경됨)

6. 서버가 /new-event URL을 전달 받음

7. /new-event 결과를 내부에서 렌더링

8. 클라이언트에게 렌더링 된 결과를 반환

9. 웹 브라우저에 응답 결과가 보이고 URL 창은 리다이렉트 된 /new-event로 유지됨

이렇게 되는데요. 추가로 질문주신 부분은 post/redirect/get 이라는 잘 알려진 방법이 있습니다.

웹 브라우저에서 POST로 글쓰기를 요청했는데, 그러면 서버에 글이 써지겠지요?

그러면 문제는 웹 브라우저를 그 상태로 새로고침 하면 POST로 글쓰기가 또 호출됩니다! 그러면 글이 중복해서 또 써지겠지요?

이게 만약 쇼핑몰이라면 중복 주문 될 수 도 있습니다.(물론 그렇지 않게 잘 대비를 해야겠지요.)

그래서 post의 결과를 get으로 조회 화면으로 리다이렉트 해버리는 것이지요. 그러면 사용자가 실수로 새로고침을 눌러도 조회 화면만 다시 호출하게 됩니다.

post/redirect/get으로 검색해보시면 원하는 결과를 더 많이 찾으실 수 있을거에요^^

감사합니다.

1

shekwl24님의 프로필 이미지
shekwl24
질문자

감사합니다!

shekwl24님의 프로필 이미지
shekwl24

작성한 질문수

질문하기