웹 애플리케이션을 개발할 때, SPA(Single Page Application) 와 MPA(Multiple Page Application) 두 가지 구조 중에서 선택할 수 있다.
각각의 방식은 장점과 단점이 다르며, 프로젝트의 요구사항에 따라 적절한 방식을 선택해야 한다.
✔ SPA (Single Page Application)
✔ MPA (Multiple Page Application)
SPA는 최초에 하나의 HTML을 로드한 후, JavaScript를 이용해 동적으로 콘텐츠를 변경하는 방식이다.
추가적인 페이지 이동이 필요할 때 서버에서 새로운 HTML을 불러오는 것이 아니라, 클라이언트 측에서 데이터를 가져와 업데이트한다.
✔ 빠른 페이지 전환 속도
❌ 초기 로딩 속도 지연
MPA는 페이지마다 별도의 HTML 파일을 요청하는 방식이다.
전통적인 웹사이트(블로그, 쇼핑몰 등)에서 가장 많이 사용되는 구조이며, 각 페이지 요청 시 서버에서 새로운 HTML을 반환한다.
✔ SEO(검색 엔진 최적화)에 유리
❌ 페이지 전환 시 새로고침 발생
| 구분 | SPA (Single Page Application) | MPA (Multiple Page Application) |
|---|---|---|
| 페이지 로딩 방식 | 하나의 HTML에서 동적으로 변경 | 요청마다 새로운 HTML을 받음 |
| SEO (검색 최적화) | 어려움 (SSR 필요) | 쉬움 |
| 초기 로딩 속도 | 느림 (JS 번들 다운로드 필요) | 빠름 |
| 페이지 전환 속도 | 빠름 (데이터만 변경) | 느림 (전체 HTML 새로고침) |
| UX (사용자 경험) | 앱처럼 부드러운 전환 가능 | 전통적인 웹사이트 느낌 |
| 서버 부하 | 낮음 (최소한의 요청) | 높음 (HTML 요청 많음) |
| 보안 | 클라이언트 측 렌더링 → API 노출 가능성 | 서버에서 HTML 생성 → 상대적으로 안전 |
✔ SPA는 부드러운 페이지 전환과 빠른 사용자 경험이 필요한 웹앱에 적합
✔ MPA는 SEO가 중요한 웹사이트(블로그, 쇼핑몰, 뉴스 사이트)에 적합
🔹 SPA를 선택해야 하는 경우
✔ 네이티브 앱과 유사한 경험이 필요한 경우 (예: 대시보드, 소셜 네트워크 서비스)
✔ 빠른 페이지 전환이 중요한 경우 (예: Gmail, Trello)
✔ 상태 관리가 중요한 애플리케이션 (예: React 상태 관리가 필요한 프로젝트)
🔹 MPA를 선택해야 하는 경우
✔ SEO가 중요한 경우 (예: 블로그, 뉴스 사이트, 검색 엔진 의존도가 높은 사이트)
✔ 페이지 간 연관성이 낮고 독립적인 콘텐츠가 많은 경우 (예: 쇼핑몰, 포털 사이트)
✔ 서버에서 직접 렌더링해야 하는 경우 (예: 보안이 중요한 금융 사이트)
최근에는 SPA와 MPA의 장점을 결합한 하이브리드 방식이 많이 사용된다.
Next.js 같은 SSR(Server Side Rendering) 지원 프레임워크를 활용하면 SEO 문제를 해결하면서도 SPA의 장점을 유지할 수 있다.
📌 Next.js 활용 예시
export async function getServerSideProps() {
const res = await fetch("https://jsonplaceholder.typicode.com/posts");
const data = await res.json();
return {
props: { data }
};
}
export default function Home({ data }) {
return (
<div>
{data.map((post) => (
<h2 key={post.id}>{post.title}</h2>
))}
</div>
);
}
✔ Next.js는 SEO 최적화(SSR)와 빠른 페이지 전환(CSR)을 동시에 지원한다.
✔ 실무에서는 Next.js를 활용하여 SEO 문제를 해결하고, 성능을 최적화하는 경우가 많다.