F-Lab
🚀
상위권 IT회사 합격 이력서 무료로 모아보기

싱글 페이지 애플리케이션(SPA) 개발: 프레임워크 없이 시작하기

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!



싱글 페이지 애플리케이션(SPA) 개발: 프레임워크 없이 시작하기

싱글 페이지 애플리케이션(SPA)은 하나의 HTML 페이지로 구성된 웹 애플리케이션입니다. 이 글에서는 프레임워크 없이 SPA를 개발하는 방법에 대해 다룹니다.

SPA는 사용자 경험을 향상시키기 위해 페이지 전환 없이 콘텐츠를 동적으로 업데이트합니다. 왜냐하면 SPA는 서버로부터 전체 페이지를 다시 로드하지 않고, 필요한 데이터만 요청하여 업데이트하기 때문입니다.

SPA는 주로 리액트, 앵귤러, 뷰와 같은 프레임워크를 사용하여 개발됩니다. 하지만 프레임워크 없이도 SPA를 개발할 수 있습니다. 왜냐하면 SPA의 기본 원리는 자바스크립트와 HTML, CSS를 사용하여 구현할 수 있기 때문입니다.

프레임워크 없이 SPA를 개발하면, 프레임워크의 복잡성을 피할 수 있습니다. 왜냐하면 프레임워크는 많은 기능을 제공하지만, 그만큼 학습 곡선이 높기 때문입니다.

이 글에서는 프레임워크 없이 SPA를 개발하는 방법을 단계별로 설명합니다. 왜냐하면 SPA의 기본 원리를 이해하고, 직접 구현해보는 것이 중요하기 때문입니다.



SPA의 기본 구조

SPA의 기본 구조는 단일 HTML 파일과 여러 개의 자바스크립트 파일로 구성됩니다. 왜냐하면 SPA는 하나의 HTML 파일을 기반으로 동작하기 때문입니다.

HTML 파일은 기본적인 레이아웃과 초기 콘텐츠를 포함합니다. 왜냐하면 HTML 파일은 브라우저가 처음 로드할 때 필요한 기본적인 구조를 제공하기 때문입니다.

{`<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>SPA without Framework</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div id="app"></div>
  <script src="app.js"></script>
</body>
</html>`}

자바스크립트 파일은 페이지 전환과 데이터 페칭을 처리합니다. 왜냐하면 자바스크립트는 동적인 콘텐츠 업데이트를 가능하게 하기 때문입니다.

SPA의 기본 구조를 이해하면, 프레임워크 없이도 SPA를 개발할 수 있습니다. 왜냐하면 SPA의 기본 원리는 자바스크립트와 HTML, CSS를 사용하여 구현할 수 있기 때문입니다.



라우팅 구현

SPA에서 라우팅은 매우 중요한 역할을 합니다. 왜냐하면 라우팅은 사용자가 요청한 URL에 따라 적절한 콘텐츠를 보여주는 기능을 담당하기 때문입니다.

라우팅을 구현하기 위해서는 브라우저의 히스토리 API를 사용할 수 있습니다. 왜냐하면 히스토리 API는 브라우저의 주소를 변경하고, 페이지를 다시 로드하지 않고도 상태를 관리할 수 있기 때문입니다.

{`function navigate(path) {
  window.history.pushState({}, path, window.location.origin + path);
  renderContent(path);
}

window.onpopstate = () => {
  renderContent(window.location.pathname);
};`}

라우팅을 구현하면, 사용자가 URL을 변경할 때마다 적절한 콘텐츠를 동적으로 업데이트할 수 있습니다. 왜냐하면 라우팅은 URL과 콘텐츠를 매핑하는 기능을 제공하기 때문입니다.

라우팅을 구현할 때는 각 경로에 대한 콘텐츠를 정의해야 합니다. 왜냐하면 각 경로에 따라 다른 콘텐츠를 보여줘야 하기 때문입니다.

{`const routes = {
  '/': '<h1>Home</h1>',
  '/about': '<h1>About</h1>',
  '/contact': '<h1>Contact</h1>',
};

function renderContent(path) {
  const content = routes[path] || '<h1>404 Not Found</h1>';
  document.getElementById('app').innerHTML = content;
}`}

이와 같이 라우팅을 구현하면, 프레임워크 없이도 SPA에서 페이지 전환을 처리할 수 있습니다. 왜냐하면 라우팅은 URL과 콘텐츠를 매핑하는 기능을 제공하기 때문입니다.



데이터 페칭과 상태 관리

SPA에서 데이터 페칭과 상태 관리는 매우 중요한 역할을 합니다. 왜냐하면 SPA는 서버로부터 데이터를 받아와서 동적으로 콘텐츠를 업데이트하기 때문입니다.

데이터 페칭을 위해서는 fetch API를 사용할 수 있습니다. 왜냐하면 fetch API는 네트워크 요청을 처리하는 기능을 제공하기 때문입니다.

{`async function fetchData(url) {
  const response = await fetch(url);
  if (!response.ok) {
    throw new Error('Network response was not ok');
  }
  return response.json();
}`}

상태 관리를 위해서는 간단한 전역 상태 객체를 사용할 수 있습니다. 왜냐하면 전역 상태 객체는 애플리케이션의 상태를 중앙에서 관리할 수 있기 때문입니다.

{`const state = {
  data: null,
};

function setState(newState) {
  Object.assign(state, newState);
  renderContent(window.location.pathname);
}`}

데이터 페칭과 상태 관리를 결합하여, 서버로부터 데이터를 받아와서 상태를 업데이트하고, 이를 기반으로 콘텐츠를 렌더링할 수 있습니다. 왜냐하면 데이터 페칭과 상태 관리는 SPA의 핵심 기능이기 때문입니다.

{`async function loadData() {
  try {
    const data = await fetchData('/api/data');
    setState({ data });
  } catch (error) {
    console.error('Failed to fetch data:', error);
  }
}`}

이와 같이 데이터 페칭과 상태 관리를 구현하면, 프레임워크 없이도 SPA에서 동적인 콘텐츠 업데이트를 처리할 수 있습니다. 왜냐하면 데이터 페칭과 상태 관리는 SPA의 핵심 기능이기 때문입니다.



SPA의 성능 최적화

SPA의 성능을 최적화하기 위해서는 몇 가지 중요한 점을 고려해야 합니다. 왜냐하면 SPA는 동적인 콘텐츠 업데이트를 많이 수행하기 때문입니다.

첫 번째로, 코드 스플리팅을 통해 초기 로드 시간을 줄일 수 있습니다. 왜냐하면 코드 스플리팅은 필요한 코드만 로드하여 초기 로드 시간을 줄여주기 때문입니다.

{`if (window.location.pathname === '/about') {
  import('./about.js').then(module => {
    module.renderAboutPage();
  });
}`}

두 번째로, 캐싱을 통해 네트워크 요청을 최소화할 수 있습니다. 왜냐하면 캐싱은 동일한 데이터를 여러 번 요청할 필요가 없기 때문입니다.

{`const cache = new Map();

async function fetchData(url) {
  if (cache.has(url)) {
    return cache.get(url);
  }
  const response = await fetch(url);
  if (!response.ok) {
    throw new Error('Network response was not ok');
  }
  const data = await response.json();
  cache.set(url, data);
  return data;
}`}

세 번째로, DOM 조작을 최소화하여 렌더링 성능을 향상시킬 수 있습니다. 왜냐하면 DOM 조작은 브라우저의 렌더링 성능에 큰 영향을 미치기 때문입니다.

{`function updateContent(newContent) {
  const app = document.getElementById('app');
  if (app.innerHTML !== newContent) {
    app.innerHTML = newContent;
  }
}`}

이와 같이 성능 최적화를 통해 SPA의 사용자 경험을 향상시킬 수 있습니다. 왜냐하면 성능 최적화는 빠르고 부드러운 사용자 경험을 제공하기 때문입니다.



결론

프레임워크 없이도 SPA를 개발할 수 있습니다. 왜냐하면 SPA의 기본 원리는 자바스크립트와 HTML, CSS를 사용하여 구현할 수 있기 때문입니다.

SPA의 기본 구조를 이해하고, 라우팅, 데이터 페칭, 상태 관리, 성능 최적화를 구현하면, 프레임워크 없이도 SPA를 개발할 수 있습니다. 왜냐하면 이러한 기능들은 SPA의 핵심 기능이기 때문입니다.

프레임워크 없이 SPA를 개발하면, 프레임워크의 복잡성을 피할 수 있습니다. 왜냐하면 프레임워크는 많은 기능을 제공하지만, 그만큼 학습 곡선이 높기 때문입니다.

SPA를 개발할 때는 성능 최적화를 고려해야 합니다. 왜냐하면 SPA는 동적인 콘텐츠 업데이트를 많이 수행하기 때문입니다.

이 글을 통해 프레임워크 없이도 SPA를 개발하는 방법을 이해하고, 직접 구현해보길 바랍니다. 왜냐하면 SPA의 기본 원리를 이해하고, 직접 구현해보는 것이 중요하기 때문입니다.

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수
F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 1600-8776 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로63길 12, 438호 | copyright © F-Lab & Company 2025