해결된 질문
작성
·
108
0
강의를 만들어주셔서 감사합니다.
몇가지 질문이 있습니다.
Frontend와 Backend폴더를 만든이유가 협업과 소스코드관리를 위한것이라고 생각합니다.
그런데 node-modules를 Frontend와 Backend에 각각 설치하신 이유가 있으실까요?
company-website에 설치해서 두곳다 이용하는방법도 있을것같은데 Frontend와 Backend를 따로 설치하신이유가 궁금합니다.
깃허브에는 node-modules가 저장되게 하지 않았는데요
그러면 현재 사용하는 노트북이 아닌 다른 노트북이나 데스크톱에서 현재 개발한것을 이어서하고싶을 경우 Ch0-3과Ch0-4의 설치를 다시 해주면되나요?
본강의를 듣고 저만의 웹페이지를 만드는게 목표인데 react에 대해 찾아보다가 Create React App(CRA)로 만드는법과 Vite, Next.js로 만드는방법이 있었습니다. 이중 Vite를 고른 이유가 있을까요?
빠르다는 장점으로 선택하신건가요? 선택이유가 궁금합니다.
답변 1
0
안녕하세요. 질문 남겨주셔서 감사합니다!
A1. 일단 Frontend 폴더와 Backend 폴더를 나눠서 개발을 진행한 이유를 설명드리면
두 영역은 역할과 기술 스택이 완전히 다르기 때문에, 프로젝트 구조상 기능별로 분리하는 것이 효율적이기 때문입니다.
프론트엔드는 React-Vite 라이브러리를 사용해서 사용자 인터페이스(UI)를 구성하고, 브라우저 환경에서 동작하는 코드가 많습니다. 반면, 백엔드는 Express 프레임워크로 서버 API를 구성하며, 데이터베이스와의 통신이나 인증 로직 등 서버 측 비즈니스 로직을 담당합니다.
물론, React-Vite와 Express를 같은 루트 폴더에 함께 설치해서 운용하는 것도 가능합니다. 실제로 하나의 package.json
에 프론트엔드와 백엔드에서 사용하는 모든 의존성을 함께 설치하고, React 개발 서버와 Express 서버를 동시에 구동하도록 npm scripts
를 설정하는 방식이 있습니다.
이런 방식은 초기 개발 속도가 빠르고 폴더 구조가 단순하다는 장점이 있어서, 특히 혼자 개발하거나 소규모 프로젝트에서는 사용해볼 만합니다.
다만 이 구조는 다음과 같은 단점이 있습니다:
의존성 충돌 가능성: 프론트엔드와 백엔드에서 사용하는 동일한 패키지(예: dotenv
, axios
)의 버전 충돌이 발생할 수 있습니다.
빌드 및 배포의 혼합: React 빌드 파일(dist/
)과 백엔드 서버 파일이 같은 공간에 얽히면, 정리나 배포 시 혼동이 생길 수 있습니다.
테스트 및 CI/CD의 복잡성 증가: 두 환경을 분리해서 테스트하거나, 각각 배포하고자 할 때 설정이 복잡해집니다.
말씀하신 node_modules
도 동일한 이유입니다.
프론트엔드와 백엔드가 같은 루트 폴더에서 작동한다면 하나의 node_modules
만으로도 모든 패키지를 공유할 수 있지만, 이는 곧 두 영역의 의존성 관리가 얽히게 된다는 단점을 의미합니다. 예를 들어, 프론트에서만 필요한 vite
, react-dom
같은 패키지와 백엔드에서만 쓰는 express
, cors
등이 한 공간에 뒤섞이면, 어떤 패키지가 어느 역할을 위해 설치된 것인지 파악하기 어렵고, 불필요한 패키지까지 함께 설치/배포되는 비효율이 발생합니다.
결국 이런 이유들로 인해, 프로젝트를 보다 명확하게 관리하고 확장성을 고려하려면 초기부터 프론트엔드와 백엔드를 폴더 단위로 분리하고, node_modules
역시 각자 독립적으로 유지하는 구조가 더 바람직합니다.
A2. node_modules
폴더는 용량이 크고 수많은 파일을 포함하고 있어, GitHub 같은 버전 관리 시스템에 업로드하게 되면 저장소가 불필요하게 무거워지고 관리가 어려워집니다. 실제로 프로젝트 내의 node_modules 폴더의 용량을 확인해보시면 수십~수백 MB의 용량일 것입니다.
또한, 이 폴더는 각 개발 환경에 따라 자동으로 다시 생성할 수 있기 때문에, 직접 업로드할 필요도 없습니다. 그래서 일반적으로 .gitignore
파일에 node_modules
를 명시해 Git 추적 대상에서 제외하게 됩니다.
다른 개발 환경에서 프로젝트를 이어받아 작업하려면, 루트 폴더에 포함된 package.json
과 package-lock.json
만 있으면 됩니다. 이 파일들은 프로젝트에 필요한 모든 의존성과 버전 정보를 담고 있어서, 동일한 개발 환경을 자동으로 복원할 수 있도록 도와줍니다.
특히 package.json
은 단순히 패키지 목록을 담는 것을 넘어서, 프로젝트 이름, 설명, 실행 스크립트, Node.js 버전 등 핵심 설정 정보를 포함하고 있어 협업과 유지보수, 배포의 기반이 되는 중요한 파일입니다.
따라서 node_modules
없이도, 이 설정 파일들만 잘 유지하면 npm install
명령어를 통해 언제든지 같은 개발 환경을 재현하며 작업을 이어갈 수 있습니다.
Create React App(CRA), Vite, Next.js 중에서 Vite를 선택한 이유는 개발 속도가 빠르고 설정이 간편하기 때문입니다. Vite는 코드 변경 시 실시간으로 빠르게 반영되기 때문에, 개발하면서 더 효율적으로 작업할 수 있습니다. 또한, Vite는 빌드 속도가 빠르고, 설정이 간단해서 프로젝트를 빠르게 시작할 수 있습니다. Next.js는 추가적인 서버 사이드 렌더링(SSR) 같은 기능을 제공하지만, 단순한 React 애플리케이션을 만들기엔 Vite가 더 적합하다고 생각했습니다.
도움이 되셨길 바랍니다. 감사합니다!
오오!
정말 궁금했던 질문들이였는데 자세히 답변해주셔서 감사합니다!
지피디에게 물어봐도 이렇게 이해하기 쉽게 설명해주지 않았는데 이해가 확실히 되었습니다.
도움을 주셔서 감사합니다^^