인프런 커뮤니티 질문&답변
컴포넌트 그리고 폴더 구조에 대해
작성
·
16
0
안녕하세요.
리액트를 공부하면서 컴포넌트 나누는 기준이 헷갈려서 질문드립니다.
강의에서 컴포넌트 분리에 대해 설명을 듣긴 했는데,
막상 제가 직접 코드를 짜다 보니까 어디까지 나누는 게 맞는지 감이 잘 안 옵니다.
제가 헷갈리는 부분은 이런 점들입니다.
컴포넌트는
중복되는 UI가 있을 때만 나누는 건지,
아니면 처음부터 최대한 작고 이해하기 쉬운 단위로 나누는 게 좋은 건지 잘 모르겠습니다.
또 컴포넌트 안에서 코드를 작성하다 보면
“이건 그냥 이 컴포넌트 안에 둬도 되나?”
“아니면 여기서 한 번 더 분리하는 게 맞나?”
이런 판단을 어떤 기준으로 해야 하는지도 잘 모르겠습니다.
폴더 구조도 사람마다 다 달라서
어떤 구조가 좋은 구조인지,
초보자 입장인 저한테는 아직 잘 모르겠습니다
이론적으로는 이해한 것 같은데,
실제 코드에서는
이 분리가 과한 건지, 부족한 건지 판단이 잘 안 됩니다.
리액트에서 컴포넌트를 나눌 때
어떤 생각 흐름으로 판단하면 좋은지,
알기 쉽게 설명해주시면 감사하겠습니다.
답변 2
0
안녕하세요!
리액트에서 컴포넌트를 나누는 기준은 하나의 정답으로 정해져 있기보다는, 코드를 더 읽기 쉽고 이해하기 쉽게 만들기 위한 판단의 연속이라고 볼 수 있습니다. 처음 리액트를 공부하실 때 컴포넌트 분리가 어렵게 느껴지는 것은 매우 자연스러운 일이며, 대부분의 학습자들이 같은 고민을 겪습니다.
컴포넌트를 나누는 가장 기본적인 기준 중 하나는 역할과 책임입니다. 하나의 컴포넌트는 가능한 한 하나의 역할에 집중하는 것이 좋으며, 서로 다른 역할을 하는 코드들이 한 컴포넌트 안에 섞여 있다면 분리를 고려해볼 수 있습니다. 또한 컴포넌트의 길이가 길어지고 JSX와 로직이 복잡하게 섞여 읽기 어려워진다면, 이 역시 분리가 필요하다는 신호로 볼 수 있습니다.
컴포넌트 분리는 중복되는 UI가 있을 때만 하는 것은 아닙니다. 중복은 분리를 결정하는 강한 이유이긴 하지만, 가독성 향상이나 코드의 구조를 명확히 하기 위한 목적만으로도 충분히 컴포넌트를 나눌 수 있습니다. 특히 특정 부분의 코드가 “지금 이 컴포넌트의 핵심 역할과는 조금 다른 것 같다”는 느낌이 든다면, 그 부분을 별도의 컴포넌트로 분리하는 것이 전체 흐름을 이해하는 데 도움이 됩니다.
처음부터 컴포넌트를 잘게 나누어 설계해야 한다는 부담을 가질 필요는 없습니다. 실제로는 하나의 컴포넌트로 구현을 시작한 뒤, 코드가 점점 길어지고 관리하기 어려워질 때 분리하는 방식이 더 자연스럽습니다. 컴포넌트 분리는 설계의 영역이기보다는 리팩토링의 과정에 가깝다고 생각하셔도 됩니다.
폴더 구조 역시 정해진 정답은 없으며, 초보자일수록 본인이 찾기 쉽고 이해하기 쉬운 구조를 사용하는 것이 가장 좋습니다. 프로젝트의 규모가 커지기 전까지는 단순한 구조로 시작하고, 필요해질 때 점진적으로 정리해 나가도 충분합니다.
마지막으로 컴포넌트 분리가 과한지 부족한지를 판단하는 가장 좋은 기준은 ‘읽기 쉬운가’입니다. 컴포넌트를 나누었을 때 오히려 흐름을 따라가기 어렵다면 과한 분리일 수 있고, 하나의 파일이 지나치게 길고 복잡하다면 분리가 부족한 상태일 수 있습니다. 결국 리액트에서 컴포넌트를 나누는 기준은 정해진 규칙이 아니라, 코드를 읽는 사람이 더 쉽게 이해할 수 있도록 만드는 방향이라고 정리할 수 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다. JEOUNG WOOYOUNG님.
리액트 컴포넌트의 분리와 폴더 구조에 관한 질문을 해주셨네요. 컴포넌트 분리를 어떻게 해야 할지 고민하시는 것 같습니다. 리액트에서 컴포넌트를 분리할 때 어떤 기준을 적용할지 설명드리겠습니다.
컴포넌트 분리 기준
단일 책임 원칙(Single Responsibility Principle): 각 컴포넌트는 하나의 책임(혹은 기능)만을 가져야 한다는 원칙입니다. 컴포넌트가 특정 기능이나 섹션을 담당하도록 분리하면 유지보수와 확장이 쉬워집니다.
재사용성: UI의 특정 부분이 여러 곳에서 반복되는 경우, 별개의 컴포넌트로 분리하여 재사용할 수 있습니다. 예를 들어, 버튼이나 입력 폼 같은 요소들이 여기에 해당합니다.
가독성과 이해도: 컴포넌트가 너무 커져서 이해하기 어렵다면 작은 단위로 나누는 것이 좋습니다. 작은 컴포넌트는 읽기 쉽고 이해하기 쉬운 코드를 만드는데 도움이 됩니다.
베지어(BAC) 패턴: ‘폴더는 역할별로, 컴포넌트는 기능별로 분리한다’가 BAC 패턴의 핵심입니다. 이 패턴을 따라 컴포넌트를 기능 단위로 분리하고 폴더는 그 역할에 따라 구성합니다.
폴더 구조
폴더 구조는 코드의 규모와 팀의 문화에 따라 달라질 수 있습니다. 일반적으로는 다음과 같은 구조가 유용할 수 있습니다.
- components/: UI 컴포넌트를 모아두는 폴더.
- containers/: Redux나 Context API를 통해 상태와 로직을 관리하는 컴포넌트.
- pages/: 각각의 페이지를 담당하는 컴포넌트를 모아두는 폴더.
- styles/: CSS 파일이나 스타일 관련 파일을 모아두는 폴더.
- utils/: 유틸리티 함수들을 모아두는 폴더.
실제 판단 과정
- 지속적인 리팩토링: 처음 개발을 시작할 때 모든 것을 완벽히 나누려고 하기보다는, 개발을 진행하면서 코드의 복잡도가 증가할 때 적절히 리팩토링을 통해 분리하는 과정도 중요합니다.
- 팀의 의견과 스타일: 팀원이 있다면 어느 정도의 분리가 적절한지 논의해보는 것도 좋습니다. 코드 리뷰를 통해 피드백을 받고 배울 수 있습니다.
위의 기준과 예시를 참고하시면서, 중요한 것은 자신만의 스타일과 팀의 규칙에 맞게 적응하는 것입니다. 경험을 쌓으면서 자연스럽게 어떤 구조가 효율적인지 감이 잡히실 거예요.
관련된 추가 학습 자료를 아래 링크에서 확인하실 수 있습니다.
- 컴포넌트 설계 및 파일 구조
- 리액트 프로젝트 폴더 구조에 대한 고찰
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





감사합니다!