처음 이 프로젝트 구조를 만들때 backend와 frontend 부분으로 나누어 작업했다.
지금까지 백엔드에서 회원가입, 로그인 기능을 만들었고 게시판 라우트까지 구성해 두었으니 프론트엔드에서 연결하는 작업을 해야한다.
| 디렉터리 구조 확인
더 많은 구조를 갖겠지만 지금은 회원가입, 로그인 페이지부터 하려한다. 아래 구조로 페이지 작업 시작이다.
frontend/
├── src/
│ ├── pages/
│ │ ├── RegisterPage.js
│ │ └── LoginPage.js
│ ├── App.js
│ └── index.js
| React Router 설치
라우터 설정을 위해서 react-router-dom 패키지가 필요하다.
frontend 디렉터리에서 설치한다.
cd frontend
npm install react-router-dom
| App.js에 라우팅 추가하기
react 설치시 생성된 기존의 코드를 아래와 같이 수정한다.
앞서 설치한 react-router-dom을 이용해 페이지들의 접근을 위한 라우팅 연결을 한다.
frontend/src/App.js
// frontend/src/App.js
import React from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import RegisterPage from './pages/RegisterPage';
function App() {
return (
<Router>
<div className="App">
<Routes>
<Route path="/register" element={<RegisterPage />} />
</Routes>
</div>
</Router>
);
}
export default App;
- BrowserRouter : URL 주소를 감지하고 컴포넌트를 바꿔주는 라우터의 기본 구조 요소이다.
- Routes / Route : 여러 경로를 정의하며, Route의 path가 현재 URL과 일치하면 해당 element를 렌더링 한다.
- path="/register" : 회원가입 폼을 볼 수 있는 경로이다. 웹브라우저에서 http://localhost:3000/register로 접속하면 된다.
| 회원가입 폼 페이지 초기 작성
frontend/src/pages/RegisterPage.js
// frontend/src/pages/RegisterPage.js
import { useState } from 'react';
function RegisterPage() {
const [form, setForm] = useState({ username: '', email: '', password: '' });
const handleChange = (e) => {
setForm({ ...form, [e.target.name]: e.target.value });
};
const handleSubmit = async (e) => {
e.preventDefault();
const res = await fetch('http://localhost:5000/api/auth/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(form)
});
const data = await res.json();
alert(data.message || '등록 완료');
};
return (
<div>
<h2>회원가입</h2>
<form onSubmit={handleSubmit}>
<input name="username" placeholder="아이디" onChange={handleChange} />
<input name="email" placeholder="이메일" onChange={handleChange} />
<input name="password" type="password" placeholder="비밀번호" onChange={handleChange} />
<button type="submit">가입하기</button>
</form>
</div>
);
}
export default RegisterPage;
확인을 하기위해 npm stert 후 웹브라우저에서 http://localhost:3000/register로 접속한다.
이 화면이 뜨면 지금까지의 작업이 정상적으로 작동 한다는 것이다.
하지만 이 폼은 백엔드로 보내는 기능이 아직은 없다.
'STUDY > Project' 카테고리의 다른 글
로그인 페이지 및 라우터 연결 - LoginPage (0) | 2025.05.03 |
---|---|
회원가입 폼 백엔드로 데이터 전송 - axios설치, RegisterPage작성 (0) | 2025.05.01 |
사용자 검증 미들웨어 기능 구현 - authMiddleware (0) | 2025.05.01 |
게시판 로직 - Post, postController, postRoutes (0) | 2025.04.30 |
NodeJS, MongoDB, react 회원가입, 로그인, 게시판 구현 플로우 (0) | 2025.04.30 |