React.js와 Node.js를 활용한 TODO List 개발: CORS 문제를 해결하는 시나리오
React.js와 Node.js로 간단한 TODO List 애플리케이션을 개발할 때 CORS(Cross-Origin Resource Sharing) 문제가 발생하는 상황을 직접 경험하며 해결하는 방법을 알아보겠습니다. 이 시나리오는 CORS 설정을 생략한 상태에서 시작하여 오류를 디버깅하고, CORS 패키지를 설치하고 적용하는 과정을 다룹니다.
📌 프로젝트 개요 및 목표
목표
React.js를 이용해 TODO List UI를 개발.
Node.js(Express)를 이용해 RESTful API 서버 구성.
CORS 오류를 직접 경험하고 이를 해결하는 방법 익히기.
프로젝트 구조
react-node-todo/
├── backend/ # Node.js 서버 코드
├── frontend/ # React.js 클라이언트 코드
mkdir react-node-todo
cd react-node-todo
mkdir frontend backend
🛠️ 백엔드(Node.js) 설정
1. 백엔드 초기화 및 패키지 설치
cd backend
npm init -y
npm install express
2. server.js 생성 및 작성
backend/server.js 파일을 생성하고 다음 코드를 작성합니다:
const express = require('express');
const app = express();
app.use(express.json()); // JSON 요청 처리
let todos = []; // 메모리 데이터베이스
// GET: 모든 TODO 조회
app.get('/api/todos', (req, res) => {
res.json(todos);
});
// POST: 새로운 TODO 추가
app.post('/api/todos', (req, res) => {
const { text } = req.body;
if (!text) return res.status(400).json({ error: 'Text is required' });
const newTodo = { id: todos.length + 1, text };
todos.push(newTodo);
res.json(newTodo);
});
const PORT = 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
3. 서버 실행
node server.js
🎨 프론트엔드(React.js) 설정
1. React 프로젝트 초기화
cd ../frontend
npx create-react-app .
npm install axios
2. TODO List 컴포넌트 생성
frontend/src/components/TodoList.js를 생성하고 다음 코드를 작성합니다:
import React from 'react';
import TodoList from './components/TodoList';
function App() {
return (
<div className="App">
<TodoList />
</div>
);
}
export default App;
🚨 CORS 문제 시나리오
1. 오류 발생
React 앱을 실행하고 브라우저 개발자 도구의 콘솔에서 다음과 같은 오류를 확인할 수 있습니다:
Access to XMLHttpRequest at 'http://localhost:5000/api/todos'
from origin 'http://localhost:3000' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
2. 원인 분석
React 클라이언트(localhost:3000)와 Node.js 서버(localhost:5000)는 서로 다른 도메인에서 실행되기 때문에, 브라우저는 보안상의 이유로 요청을 차단합니다.
✅ CORS 문제 해결
1. CORS 패키지 설치
Node.js 백엔드에 CORS 패키지를 설치합니다:
npm install cors
2. server.js에 CORS 설정 추가
server.js 파일을 수정하여 CORS 설정을 추가합니다:
const cors = require('cors');
app.use(cors()); // 모든 도메인 허용