
React – React 시작하기 – 개요 – 1 – SPA의 개념과 React의 역할
안녕하세요! 😊 오늘은 웹 개발의 흐름을 송두리째 바꿔놓은 **SPA(Single Page Application)**의 개념과, 이 SPA에서 React가 어떤 역할을 맡고 있는지에 대해 재미있고 알기 쉽게 풀어드릴게요. 마치 웹페이지라는 무대에서 React라는 배우가 어떤 배역을 맡고 있는지 보는 느낌으로 함께 살펴보면 좋겠죠?
SPA란 무엇인가요?
💡 “싱글 페이지 어플리케이션”이란?
SPA는 한 번 페이지를 로딩한 뒤, 전체 페이지를 다시 불러오지 않고 필요한 데이터만 받아와서 화면을 갱신하는 방식의 웹 애플리케이션이에요.
예를 들어, 우리가 예전 웹사이트에서는 버튼을 누를 때마다 페이지가 깜빡이며 새로고침되었잖아요? 😖 하지만 SPA는 처음에 HTML, CSS, JavaScript를 다 받아오고, 그 이후부터는 필요한 부분만 동적으로 갱신하기 때문에 더 빠르고 매끄러운 사용자 경험을 제공해줘요!
🏠 전통적인 웹사이트 vs SPA
항목 | 전통적인 웹사이트 | SPA (Single Page Application) |
---|---|---|
페이지 전환 | 전체 페이지 새로고침 | 일부 화면만 갱신 |
요청 방식 | 서버에 HTML 요청 | 주로 API(JSON 등) 요청 |
속도 | 느릴 수 있음 | 빠르고 부드러움 |
사용자 경험 | 끊김 있음 | 앱처럼 자연스러움 |
🎬 비유로 이해해볼까요?
전통 웹사이트는 마치 영화 볼 때마다 극장을 다시 나갔다 들어오는 느낌이라면, SPA는 한 번 입장한 후 영화 장면만 바뀌는 무대극 같은 느낌이에요!
React는 SPA에서 어떤 역할을 하나요?
React는 SPA에서 무대 감독과도 같은 역할을 합니다. HTML로 직접 화면을 바꾸는 게 아니라, 상태(state)라는 정보를 기반으로 필요한 부분만 딱 바꿔주는 방식이에요.
🧠 상태(state)에 따라 UI를 자동으로 바꿔주는 React
React의 핵심은 아주 간단해요.
“데이터가 바뀌면 화면도 같이 바뀌도록 한다!”
React는 우리가 직접 DOM을 조작하지 않고, 상태를 관리해서 필요한 부분만 업데이트해줘요. 예를 들어 버튼 클릭 시 숫자가 올라가는 카운터 앱을 React로 만들면 다음과 같아요.
import { useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
}
여기서 useState
는 상태를 관리하는 훅(Hook)이고요, 버튼을 클릭하면 count
값이 올라가면서 <p>
태그 안의 숫자도 자동으로 변경돼요. 이게 바로 React가 SPA 환경에서 동작하는 방식이에요!
SPA를 구성하는 핵심 요소들과 React의 조화
SPA는 단순히 React만으로 되는 게 아니고요, 아래와 같은 구성 요소들과 함께 돌아가요:
구성 요소 | 설명 | React와의 관계 |
---|---|---|
클라이언트 라우팅 (예: react-router-dom) | 주소(path)에 따라 어떤 화면을 보여줄지 결정 | React 컴포넌트를 경로에 따라 렌더링 |
상태 관리 (예: useState, Redux, Recoil) | 데이터 변화에 따라 UI 갱신 | UI와 데이터 연결 고리 |
API 호출 (예: axios, fetch) | 서버와 데이터 통신 | 필요한 데이터만 가져와 화면 구성 |
렌더링 최적화 (예: useMemo, React.memo) | 불필요한 렌더링 방지 | 성능 향상 및 리소스 절약 |
왜 React로 SPA를 만들어야 할까요?
React는 SPA 개발에 있어서 정말 찰떡같은 궁합이에요. 그 이유는 다음과 같아요:
1. 빠른 인터랙션 처리
한 번 로딩 후에는 사용자 액션마다 즉각적인 반응을 보여줘요. 사용자 경험이 확 좋아집니다!
2. 컴포넌트 기반 아키텍처
화면을 **작은 조각(컴포넌트)**으로 쪼개서 관리할 수 있기 때문에 재사용성과 유지보수성이 훨씬 좋아요.
3. Virtual DOM을 이용한 성능 최적화
React는 내부적으로 Virtual DOM이라는 가상 구조를 만들어서, 실제 DOM을 직접 수정하기 전에 어떤 부분이 바뀌었는지 계산한 후 꼭 필요한 부분만 업데이트해요.
예시: 간단한 SPA 라우팅 구현
React에서는 react-router-dom
을 사용해서 SPA 방식의 페이지 이동을 구현할 수 있어요. 아래는 아주 기본적인 예시예요:
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
function Home() {
return <h2>홈 페이지</h2>;
}
function About() {
return <h2>소개 페이지</h2>;
}
function App() {
return (
<BrowserRouter>
<nav>
<xss-Link to="/">홈</xss-Link> | <xss-Link to="/about">소개</xss-Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
위 코드를 보면 알겠지만, 실제로 페이지가 이동하는 것처럼 보이지만 전체 새로고침은 전혀 일어나지 않아요! 😎
React를 사용할 때 주의할 점
마지막으로, SPA와 React를 사용할 때 주의할 점들을 정리해볼게요:
항목 | 주의사항 |
---|---|
SEO 문제 | SPA는 검색엔진 최적화(SEO)에 불리할 수 있어요. Next.js 같은 프레임워크를 사용하는 것도 고려해보세요. |
첫 로딩 속도 | 앱의 크기가 크면 초기에 로딩 시간이 길어질 수 있어요. 코드 스플리팅으로 해결 가능해요. |
브라우저 히스토리 | SPA는 주소는 바뀌어도 페이지를 새로고침하지 않기 때문에, URL 관리를 잘 해야 해요. |
초기 설정 복잡도 | React와 함께 다양한 라이브러리를 써야 하기 때문에 세팅이 복잡할 수 있어요. create-react-app 또는 Vite 를 활용하면 편리해요. |
마무리하며…
SPA는 현대 웹의 대세이고, React는 그 중심에서 중요한 역할을 맡고 있어요. 마치 자동차의 엔진이 부드럽게 돌아가야 운전이 즐겁듯, React는 화면을 부드럽고 빠르게 바꿔주며 사용자 경험을 끌어올려주는 핵심 도구입니다.
앞으로도 React와 함께 SPA의 세계를 한 걸음씩 배워나가 보아요! 궁금한 점 있으시면 언제든지 편하게 물어보세요 🙋♀️🙋♂️
다음 글에서는 React와 다른 프레임워크의 비교에 대해 더욱 자세히 알아보겠습니다! 🚀