Front-End
JSP와 SPA의 페이지 이동
봉의일상
2025. 5. 6. 16:34
과거의 습관: JSP에서의 리다이렉트
전통적인 JSP, Servlet 기반 웹 프로젝트에서는 페이지 전환이 필요할 때 아래와 같은 코드를 자주 사용했습니다.
<% response.sendRedirect("/login.jsp"); %>
혹은 JavaScript로 직접 URL을 바꾸는 방식도 흔했죠.
<script>
location.href = "/home.jsp";
</script>
이 방식은 페이지 전체를 서버에 다시 요청해서 새로 고침합니다. 다시 말하면, HTML, CSS, JS, 이미지까지 모든 자원이 다시 로드되기 때문에 UX 관점에서 불편함이 있습니다.
왜 문제가 될까?
문제점 | 설명 |
전체 새로고침 발생 | 화면이 깜빡이며 사용자 경험이 떨어집니다 |
느린 페이지 전환 | 매 요청마다 서버에서 다시 렌더링 |
클라이언트 상태 유실 | 로그인 여부나 입력값 등이 초기화될 수 있습니다 |
SEO에 불리할 수도 | 불필요한 리다이렉트는 검색 엔진 최적화에 부정적인 영향을 줄 수 있습니다 |
Next.js & React에서의 전환 방식: Link 컴포넌트
React 기반 SPA(Single Page Application)에서는 페이지 전환조차도 컴포넌트 형태로 처리합니다. 이를 위해 Link 컴포넌트를 사용하면 새로고침 없이도 자연스럽고 빠른 이동이 가능합니다.
Next.js 예제
import Link from 'next/link';
export default function Home() {
return (
<div>
<h1>홈 화면</h1>
<Link href="/about">
<a>About 페이지로 이동</a>
</Link>
</div>
);
}
작동 방식
- 실제 페이지 이동은 JavaScript로 이루어집니다
- 브라우저는 새로고침 없이 URL만 변경하고 해당 컴포넌트를 불러옵니다
- React의 Virtual DOM 덕분에 필요한 부분만 로드됩니다
실제 코드 비교
구분 | JSP 방식 | React 방식 |
코드 | <% response.sendRedirect("/mypage.jsp"); %> | <Link href="/mypage"><a>마이페이지</a></Link> |
동작 | 서버로 새 요청 (전체 새로고침) | 클라이언트 라우팅 (부분 렌더링) |
UX | 깜빡임, 느림 | 부드러움, 빠름 |
상태 유지 | 어려움 | 가능함 |
어느 경우 Link 대신 리다이렉트가 필요할까?
- 로그인 후 자동 이동: router.push('/dashboard')
- 인증 실패 시 서버에서 리다이렉트: getServerSideProps or next.config.js
- 외부 URL로 이동: window.location.href
하지만! 사용자 UI 클릭으로 인해 이동한다면 **무조건 Link**를 사용해야 합니다.
정리
- 과거의 sendRedirect, location.href는 서버 중심 사고
- React/Next.js에서는 클라이언트 중심 전환 방식을 활용하자
- 새로고침 없는 페이지 전환 = 더 나은 UX + 빠른 반응성
- 이제는 Link 컴포넌트가 기본이다!