웹 페이지를 이동하다가 새로고침을 하는 경우는 빈번하다. 이 때, 새로고침하는 방법은
1. 브라우저의 '페이지 새로고침' 아이콘을 클릭하거나
2. 키보드의 'F5'를 누르는 방법이 일반적이다.
3. 두 경우 외에도 브라우저에서 url 입력창을 클릭하고 엔터키를 누르는 방법도 있다.
이 때, 1, 2 번의 경우 '이전 요청을 재실행하여 페이지를 새로고침' 하는 방식이다. 만약 이전 페이지에서 <form method='post'></form> 과 같이 폼 전송을 통해 페이지를 이동한 경우 새로고침 시 '양식을 다시 제출하시겠습니까?' 라는 알람창이 뜨는 원인이 된다. 만약 결제 또는 회원가입 로직을 form으로 전송하고 별도의 처리 없이 바로 페이지를 랜더링하는 구조라면 결과 페이지에서 새로고침 실행 시 한번 더 같은 요청이 전송될 수 도 있다는 뜻이다.
이걸 방지하기 위한 패턴이 PRG(Post-Redirect-Get) 패턴으로 데이터 처리 후 Get 요청으로 리다이렉트 시켜 post 요청이 다시 실행되는걸 방지하는 패턴이다. post 요청을 재전송하는 경우 Csrf 토큰을 활성화 했을 경우 이미 만료된 토큰으로 재요청하기 때문에 이와 관련된 보안 에러가 발생할 수 도 있다.
3번의 경우 Get 요청을 '새롭게' 요청하는 방식이기에 3번 방법으로 새로고침을 시도하는 경우 앞서 설명한 문제상황은 발생하지 않는다. 하지만 스프링을 예시로 해당 url 에 "@PostMapping" 과 같이 특정 http Method 의 요청에 대한 설정만 해놓은 경우 404 에러가 발생할 수 있다.
'회고' 카테고리의 다른 글
| 취약점과 보안의 중요성 (4) | 2025.07.24 |
|---|---|
| 커리어에 대한 회고 (0) | 2025.07.03 |
| 20250104) 프로젝트에 대한 인수인계, 개발문서의 중요성을 깨달은 회고 (0) | 2025.01.04 |
| 톰캣 war 파일 변경 시 자동 배포과 관련된 회고 (0) | 2024.10.08 |
| egov 3.6 > egov Boot 4.2 회고 (with security) (0) | 2024.05.24 |