개발일지/React
컴포넌트 분리의 필요성
ZI_CO
2025. 3. 5. 18:51
1. 컴포넌트 분리의 필요성
React의 주요 장점 중 하나는 컴포넌트를 재사용할 수 있다는 것입니다. 코드가 한 파일에 너무 많이 모여있으면 유지보수가 어려워지므로, 기능별로 컴포넌트를 분리하는 것이 좋습니다.
Movie 컴포넌트 분리 과정:
- 영화 정보를 보여주는 코드를 별도의
Movie.js
파일로 분리 - 컴포넌트는 함수로 정의하고
export default Movie
로 내보내기 - 원래
App.js
에 있던 영화 렌더링 관련 코드를Movie.js
로 이동
2. Props 활용하기
컴포넌트가 분리되면 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달해야 합니다. 이때 props를 사용합니다.
// App.js에서 Movie 컴포넌트로 데이터 전달
<Movie
key={movie.id}
coverImg={movie.medium_cover_image}
title={movie.title}
summary={movie.summary}
genres={movie.genres}
/>
Props 이름 지정:
- API에서 받는 데이터의 이름(medium_cover_image)과 컴포넌트에서 사용하는 이름(coverImg)은 반드시 같을 필요가 없음
- 개발자가 원하는 대로 이름을 지정할 수 있음 (단, 일관성 유지가 중요)
3. PropTypes를 이용한 타입 검사
컴포넌트가 어떤 props를 받는지 명확하게 하기 위해 PropTypes를 사용합니다.
import PropTypes from "prop-types";
Movie.propTypes = {
coverImg: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
summary: PropTypes.string.isRequired,
genres: PropTypes.arrayOf(PropTypes.string).isRequired
};
이를 통해:
- 필요한 props가 무엇인지 문서화
- 잘못된 타입의 데이터가 전달되면 경고
- 코드의 안정성 향상
4. React Router 도입
React Router는 React 애플리케이션에서 페이지 전환(라우팅)을 구현하기 위한 라이브러리입니다.
설치:
npm install react-router-dom
라우터 구성을 위한 파일 구조:
src/
├── components/ # 재사용 가능한 컴포넌트
│ └── Movie.js
├── routes/ # 페이지(라우트) 컴포넌트
│ ├── Home.js # 영화 목록 페이지
│ └── Detail.js # 영화 상세 페이지
└── App.js # 라우터 설정
코드 재구성:
App.js
의 영화 목록 로딩 및 표시 코드를Home.js
로 이동- 영화 상세 페이지를 위한
Detail.js
생성 App.js
는 이제 라우터 역할만 수행
5. 라우터의 개념
React Router의 핵심 개념은 URL에 따라 다른 컴포넌트를 렌더링하는 것입니다.
- 라우트(Route): URL 경로와 컴포넌트를 연결
- 브라우저 라우터(BrowserRouter): HTML5 History API를 사용하여 URL과 UI를 동기화
- 스위치(Switch) 또는 라우트(Routes): 매칭되는 첫 번째 라우트만 렌더링
예상되는 라우터 구성:
// App.js
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Home from "./routes/Home";
import Detail from "./routes/Detail";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/movies/:id" element={<Detail />} />
</Routes>
</BrowserRouter>
);
}
6. 라우팅의 이점
- 사용자 경험 향상: 전체 페이지를 새로고침하지 않고 콘텐츠만 변경
- 코드 구조화: 각 페이지를 별도의 컴포넌트로 관리
- URL 기반 상태 관리: 북마크 가능, 뒤로가기/앞으로가기 지원
- SEO 최적화 가능: 각 페이지에 고유한 URL 부여
라우터를 사용하면 URL을 통해 애플리케이션의 다양한 화면을 쉽게 탐색할 수 있으며, 사용자가 특정 영화의 상세 정보를 보기 위해 /movies/123
과 같은 URL로 이동할 수 있게 됩니다.