개발자
안녕하세요. 주니어 프론트엔드 개발자입니다. 고민이 있어서 이렇게 질문을 드려요. 현재 회사에서 프로젝트 크기가 꽤 큰 작업을 하고 있어요. 어드민 페이지의 메이저 버전 업데이트를 리액트로 만들고 있습니다. 여기서 고민이 components 폴더와 pages 폴더의 구분을 어떻게 해야할지 모르겠습니다. 폴더의 이름처럼 pages엔 페이지 단위의 컴포넌트를, components 폴더엔 더 작은 단위의 컴포넌트들을 넣다보니, 복잡성이 늘어나는 느낌이 들어요. 그래서 제가 생각한 방안은 pages 폴더에 페이지 단위의 폴더를 만들어 관련된 컴포넌트들을 그곳에서 관리하고, components 폴더엔 재사용의 목적인 컴포넌트만 넣는 거에요.(e.g. ON/OFF 버튼) 다른 곳에서도 조언을 구했어요. 어떤 분은 후자의 방법으로 해봤는데, 오히려 더 보기가 어려워서 components 폴더 내에 common 폴더를 만들어 관리한다고 하더라구요. 사내에서 혼자 프론트 개발을 하다보니 다양한 경험 공유가 필요해요. 조언이나 경험들을 말씀해 주시면 감사하겠습니다!

답변 3
우선 페이지와 컴포넌트가 해깔리신다면 페이지를 하나의 레고 작품이고 컴포넌트는 레고 조각이라고 이해하시면 좋을거 같습니다. 프론트엔드의 폴더구조는 팀마다 다른 경우가 워낙 많아서 좀 조심럽지만 오픈된 곳을 기준으로 참고하자면 아래와 같은 자료가 있습니다. https://github.com/alan2207/bulletproof-react/blob/master/docs/project-structure.md https://www.robinwieruch.de/react-folder-structure/ https://www.freecodecamp.org/news/a-better-way-to-structure-react-projects/ 일단 pages 폴더에 페이지 단위의 폴더를 만들어 관련된 컴포넌트들을 그곳에서 관리하면 문제는 페이지폴더 기준으로 라우터를 자동으로 만들기 때문에 필요치 않는 페이지들이 생성됨으로 비추천드리며 components에 pages폴더들의 라우터들 이름 그대로 폴더를 만들어서 사용하면 될거 같고 말씀하신 components안에 common은 버튼 등의 공통적으로 사용하면 되는 것으로 넣으심 될거 같습니다. 컴포넌트를 만들다보면 컴포넌트는 아닌데 화면에서는 좀 더 나눠야 되겠다 생각이 드신다면 아래의 아토믹 글을 보시면 됩니다. https://medium.com/@janelle.wg/atomic-design-pattern-how-to-structure-your-react-application-2bb4d9ca5f97 전 솔직히 아토믹대로 만든다는건 현실세계에선(디자인에선 가능하나 코딩에선 어려운) 어렵다고 생각하여서 템플릭이나 오가닉 개념을 containrs 폴더 안에 넣어서 처리하려고 하는 편입니다.

김병연(Vintz)
작성자
Frontend Developer | KDT Instructor • 2023년 04월 14일
안녕하세요 성주님. 오..제가 잘 이해한 것인지 잘 모르겠지만, 혹시 리액트도 pages 폴더 내에 컴포넌트 생성 시 라우터를 자동으로 만드나요? 파일 시스템 기반 라우팅은 Next.js에 해당하는 것으로 알고 있어서요. 첨부해 주신 링크도 잘 봤습니다. 앱 전체에 공유되는 루트 디렉토리의 components 폴더와, 기능 기반 features 폴더 내에 components로 관리를 하는군요..🤩 페이지 폴더 이름은 routes, screens, pages 등 다양한 것 같네요. 그리고 아토믹 디자인 패턴에 대해선 저도 공감합니다. 개인적으로는 3개 정도로 나누는 게 낫다고 생각하는데, 저는 아주 신입일 때 한번 도입했었다가 크게 데인 적이 있어서 잘 안하게 되더라구요..😅 (주변에서도 회의적인 반응이 대부분이었습니다.) 아직 크게 와닿은 글을 찾지 못했기 때문일 수도 있구요. 마지막으로, "레고를 조립한다고 생각하라"는 조언 감사드립니다. :)

진성주
무신사 프론트엔드 개발자 • 2023년 04월 14일
오 맞네요 ㅋㅋㅋㅋㅋ 제가 뇌가 요새 nextjs에 쩔어있어서 ^^; 음 근데 현업에서는 nextjs을 많이 쓰다보기도 하고 pages아래에 생성되는 컴포넌트들은 페이지들이라고 인식하는 경우가 많아서 해깔릴거 같습니다
리액트에서 components 폴더와 pages 폴더의 구분은 프로젝트의 크기, 구조, 컴포넌트의 재사용성 등에 따라 다르게 결정될 수 있습니다. 하지만 일반적으로는 다음과 같은 기준으로 구분하는 것이 좋습니다. 1. components 폴더: 재사용 가능한 작은 단위의 컴포넌트를 저장하는 폴더입니다. 예를 들어, 버튼, 인풋박스, 모달 등의 컴포넌트들이 이에 해당됩니다. 이 폴더 내부에는 카테고리별로 폴더를 만들어서 관리할 수 있습니다. 예를 들어, common, form, layout, ui 등의 폴더를 만들어서 관련된 컴포넌트들을 그 폴더 안에 넣는 식으로 관리할 수 있습니다. 2. pages 폴더: 페이지 단위의 컴포넌트를 저장하는 폴더입니다. 예를 들어, 로그인 페이지, 회원가입 페이지, 대시보드 페이지 등의 컴포넌트들이 이에 해당됩니다. 이 폴더 내부에는 각 페이지별로 폴더를 만들어서 관리할 수 있습니다. 예를 들어, login, signup, dashboard 등의 폴더를 만들어서 관련된 컴포넌트들을 그 폴더 안에 넣는 식으로 관리할 수 있습니다. 위의 방식을 따르면, components 폴더와 pages 폴더의 구분이 명확하게 이루어지기 때문에, 복잡성이 늘어나는 일을 방지할 수 있습니다. 또한, 재사용성이 높은 컴포넌트들은 components 폴더에서 관리하고, 페이지 단위의 컴포넌트들은 pages 폴더에서 관리하면, 컴포넌트의 재사용성과 유지보수성이 높아질 수 있습니다.
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!