본문으로 건너뛰기

안동민 개발노트

본문 시작

최종 프로젝트

지금까지 익힌 상태·라우팅·데이터 요청·폼·성능·배포 기술을 하나의 서비스형 React 프로젝트에 통합합니다.

이 절의 목표는 단순히 새로운 기능을 구현하는 것을 넘어, 실제 서비스 수준의 애플리케이션 개발 프로세스를 경험하고 지금까지 배운 내용을 종합적으로 적용하는 것입니다.

HTML 다이어그램: /docs/react/ch11/ch11-5/1.html

최종 프로젝트의 목표

이 최종 프로젝트는 강제로 특정 기능을 요구하지 않습니다.

대신, 여러분이 스스로 주제를 정하고 기획하며, 지금까지 배운 리액트 기술 스택을 총동원하여 하나의 완전한 웹 애플리케이션을 만들어보는 데 중점을 둡니다.

핵심 목표
HTML 다이어그램: /docs/react/ch11/ch11-5/2.html

아이디어 구상 및 기획: 여러분이 만들고 싶은 앱의 주제와 주요 기능을 스스로 정의합니다.

프로젝트 초기화: Vite(권장) 또는 여러분이 선호하는 다른 방식으로 프로젝트를 시작합니다.

컴포넌트 설계 및 구현: 앱의 구조를 컴포넌트 단위로 나누어 설계하고, 각 컴포넌트를 구현합니다.

  • 함수형 컴포넌트와 훅(State, Effect, Context, Memo 등)을 적극적으로 활용합니다.

상태 관리: 앱의 복잡도에 따라 useState, useReducer, Context API 중 적절한 상태 관리 기법을 선택하여 적용합니다. (선택적으로 Redux, Zustand 등 외부 라이브러리 사용도 가능)

라우팅 구현: react-router-dom을 사용하여 여러 페이지 간의 내비게이션을 구현합니다.

데이터 페칭 및 관리: API 호출 등을 통해 외부 데이터를 가져오고 화면에 표시하는 기능을 구현합니다. (예: fetch, axios, React Query 등)

성능 최적화 적용: React.memo, useCallback, useMemo 등을 적절히 사용하여 불필요한 리렌더링을 방지하고 앱의 성능을 최적화합니다.

React Developer Tools의 Profiler를 사용하여 최적화 효과를 확인합니다.

배포: 빌드 과정을 거쳐 Netlify, Vercel, GitHub Pages 등 정적 호스팅 서비스에 앱을 배포합니다.

SPA 라우팅 문제를 해결하는 _redirects 파일 설정 등을 잊지 않습니다.

(선택) Git & CI/CD: GitHub/GitLab 저장소를 만들고, Netlify/Vercel의 자동 배포 기능을 활용하여 CI/CD 워크플로우를 경험합니다.


프로젝트 아이디어 제안

너무 거창할 필요는 없습니다.

작지만 여러분이 흥미를 느끼는 주제를 선택하는 것이 중요합니다.

다음은 몇 가지 아이디어 제안입니다.

  • To-Do List (고급 버전)
    • 상태 관리 심화 (Context API 또는 useReducer)
    • 필터링, 정렬 기능 (useMemo 활용)
    • 아이템 편집, 삭제 기능
    • 라우팅 (예: todos/active, todos/completed)
    • 로컬 스토리지에 데이터 저장/불러오기
  • 간단한 날씨 앱
    • 외부 날씨 API (OpenWeatherMap 등) 연동
    • 도시 검색 및 선택 기능
    • 현재 날씨 및 예보 표시
    • React Query로 데이터 페칭 최적화
  • 영화/도서 검색 앱
    • 영화/도서 정보 API (TMDB, Naver 책 API 등) 연동
    • 검색 기능 및 결과 목록 표시
    • 상세 정보 페이지 (라우팅)
    • 로딩 스피너, 에러 메시지 처리
  • 간단한 포트폴리오 웹사이트
    • 자기소개, 스킬, 프로젝트 목록 페이지
    • 반응형 디자인 (미디어 쿼리 또는 Styled Components)
    • 연락처 폼 (Netlify Forms 활용)
  • 미니 쇼핑몰 상품 목록
    • 가상의 상품 데이터 표시
    • 카테고리별 필터링, 가격 정렬
    • 상품 상세 페이지
    • 장바구니 기능 (상태 관리 중요)
  • 간단한 그림판/메모장
    • canvas 엘리먼트를 이용한 그리기 기능
    • 텍스트 입력, 저장/불러오기
    • 상태 관리가 중요

: 너무 복잡한 아이디어보다는, 핵심 기능을 먼저 구현하고 점진적으로 확장하는 것을 추천합니다.

아이디어를 고른 뒤에는 첫 버전에 남길 기능과 다음 버전으로 미룰 기능을 나누어야 완성 가능성이 높아집니다.

HTML 다이어그램: /docs/react/ch11/ch11-5/4.html

프로젝트 진행 가이드

진행 가이드는 체크리스트처럼 훑기보다, 실행 가능한 마일스톤 단위로 끊어 관리하면 좋습니다.

HTML 다이어그램: /docs/react/ch11/ch11-5/5.html
주제 선정 및 기능 정의
  • 무엇을 만들고 싶은가요?
  • 주요 기능은 무엇인가요? (최소 3~5가지 핵심 기능 정의)
  • 어떤 데이터가 필요한가요? (정적 데이터, 외부 API?)
  • 어떤 페이지들이 필요한가요? (라우팅 경로 정의)
프로젝트 시작
npm create vite@latest my-final-project -- --template react
cd my-final-project
npm install

또는 선호하는 Next.js 등으로 시작해도 좋습니다.

환경 설정
  • react-router-dom 설치: npm install react-router-dom
  • 외부 API를 사용할 경우, axios 또는 fetch 준비
  • index.css에 기본적인 전역 스타일링 추가 (Chapter 9의 스타일을 활용해도 좋습니다).
컴포넌트 구조 설계
  • src/components/, src/pages/, src/hooks/, src/utils/ 등으로 폴더를 나누어 코드의 응집도를 높입니다.
  • 각 컴포넌트의 역할과 프롭스, 상태를 간략하게 스케치합니다.
핵심 기능 구현 (반복)
  • 가장 중요한 기능부터 차례로 구현합니다.
  • 각 기능을 구현할 때마다 useState, useEffect 등 적절한 훅을 사용합니다.
  • UI와 로직을 분리하는 연습을 합니다.
  • React Developer Tools로 컴포넌트 트리와 상태 변화를 확인합니다.
라우팅 적용
  • App.js 또는 index.jsBrowserRouter를 설정합니다.
  • RoutesRoute 컴포넌트를 사용하여 페이지 라우팅을 구현합니다.
  • Link 컴포넌트나 useNavigate 훅으로 페이지 이동을 구현합니다.
데이터 페칭 및 관리
  • useEffect를 사용하여 컴포넌트 마운트 시 데이터를 가져옵니다.
  • 로딩 상태, 에러 상태를 처리하여 사용자에게 피드백을 줍니다.
  • React QuerySWR을 사용해보는 것을 강력히 추천합니다.
성능 최적화 적용
  • Profiler 탭에서 불필요한 리렌더링이 발생하는 지점을 찾습니다.
  • React.memo로 렌더링 비용이 높은 컴포넌트를 감쌉니다.
  • useCallback으로 자식 컴포넌트에 전달되는 콜백 함수를 메모이제이션합니다.
  • useMemo로 고비용 계산 결과나 참조가 중요한 객체/배열을 메모이제이션합니다.
  • 적용 후 다시 프로파일링하여 개선 효과를 확인합니다. 과도한 최적화는 피합니다.
배포 준비
  • 프로젝트 코드를 GitHub/GitLab 등 원격 저장소에 푸시합니다.
  • public 폴더 안에 _redirects 파일을 생성하고 /* /index.html 200 내용을 추가하여 SPA 라우팅 문제를 해결합니다.
배포
  • npm run build 명령어를 실행하여 빌드합니다.
  • Netlify, Vercel 등 선호하는 정적 호스팅 서비스에 접속하여 Git 저장소와 연동하고 dist 폴더를 배포합니다.
  • 배포된 URL을 통해 앱에 접속하고 모든 기능이 정상적으로 작동하는지 확인합니다.

HTML 다이어그램: /docs/react/ch11/ch11-5/3.html

배포까지 마친 뒤에는 기능이 “보인다”는 수준에서 멈추지 말고, 핵심 흐름, 예외 상태, README, 실제 배포 URL, 다음 개선점을 함께 점검해야 프로젝트 경험이 다음 작업으로 이어집니다.

HTML 다이어그램: /docs/react/ch11/ch11-5/6.html

최종 프로젝트의 목표와 프로젝트 아이디어 제안 중심으로 정리한 보조 다이어그램입니다.

HTML 다이어그램: /docs/react/ch11/ch11-5/7.html

셀프 피드백 및 개선

프로젝트를 완성한 후, 다음 질문들을 스스로에게 던져보며 피드백하고 개선점을 찾아보세요.

  • 이 앱에서 가장 중요한 기능은 무엇이었나요? 잘 구현되었나요?
  • 코드는 이해하기 쉽고 유지보수하기 쉬운가요?
  • 컴포넌트들은 각자의 책임에 따라 잘 분리되어 있나요?
  • 상태 관리는 효율적이었나요?
  • 성능 문제는 없었나요? 최적화는 적절히 이루어졌나요?
  • 다음 버전에서는 어떤 기능을 추가하고 싶은가요?
  • 이 프로젝트를 통해 새로 배운 점은 무엇인가요?
  • 어려웠던 점은 무엇이었고, 어떻게 해결했나요?

마무리: React 학습 이후 확인할 것

이 책에서는 React의 핵심 개념, 컴포넌트 기반 개발, 상태 관리, 훅, 라우팅, 데이터 페칭, 성능 최적화, 배포 흐름을 다뤘습니다.

특히 최종 프로젝트를 통해 이 모든 과정을 통합하여 하나의 완제품을 만들어내는 소중한 경험을 하셨을 것입니다.

웹 개발 생태계는 빠르게 바뀌지만, React의 핵심 개념을 이해하면 새 도구를 평가하고 적용하는 기준을 세우기 쉽습니다.

이후에는 공식 문서와 실제 프로젝트를 기준으로 부족한 주제를 하나씩 보완하는 방식으로 학습을 이어가면 됩니다.

HTML 다이어그램: /docs/react/ch11/ch11-5/9.html