inflearn logo
강의

講義

知識共有

TypeScriptで学ぶReact.js:基礎から最新技術まで完璧に

コンポーネントを分離する

컴포넌트 그리고 폴더 구조에 대해

59

JEOUNG WOOYOUNG

投稿した質問数 10

0

안녕하세요.
리액트를 공부하면서 컴포넌트 나누는 기준이 헷갈려서 질문드립니다.

강의에서 컴포넌트 분리에 대해 설명을 듣긴 했는데,
막상 제가 직접 코드를 짜다 보니까 어디까지 나누는 게 맞는지 감이 잘 안 옵니다.

제가 헷갈리는 부분은 이런 점들입니다.

컴포넌트는

또 컴포넌트 안에서 코드를 작성하다 보면
“이건 그냥 이 컴포넌트 안에 둬도 되나?”
“아니면 여기서 한 번 더 분리하는 게 맞나?”
이런 판단을 어떤 기준으로 해야 하는지도 잘 모르겠습니다.

폴더 구조도 사람마다 다 달라서
어떤 구조가 좋은 구조인지,
초보자 입장인 저한테는 아직 잘 모르겠습니다

이론적으로는 이해한 것 같은데,
실제 코드에서는
이 분리가 과한 건지, 부족한 건지 판단이 잘 안 됩니다.

리액트에서 컴포넌트를 나눌 때
어떤 생각 흐름으로 판단하면 좋은지,

알기 쉽게 설명해주시면 감사하겠습니다.

react react-router redux-toolkit zustand react.js

回答 2

0

sucoding

안녕하세요!

리액트에서 컴포넌트를 나누는 기준은 하나의 정답으로 정해져 있기보다는, 코드를 더 읽기 쉽고 이해하기 쉽게 만들기 위한 판단의 연속이라고 볼 수 있습니다. 처음 리액트를 공부하실 때 컴포넌트 분리가 어렵게 느껴지는 것은 매우 자연스러운 일이며, 대부분의 학습자들이 같은 고민을 겪습니다.

컴포넌트를 나누는 가장 기본적인 기준 중 하나는 역할과 책임입니다. 하나의 컴포넌트는 가능한 한 하나의 역할에 집중하는 것이 좋으며, 서로 다른 역할을 하는 코드들이 한 컴포넌트 안에 섞여 있다면 분리를 고려해볼 수 있습니다. 또한 컴포넌트의 길이가 길어지고 JSX와 로직이 복잡하게 섞여 읽기 어려워진다면, 이 역시 분리가 필요하다는 신호로 볼 수 있습니다.

컴포넌트 분리는 중복되는 UI가 있을 때만 하는 것은 아닙니다. 중복은 분리를 결정하는 강한 이유이긴 하지만, 가독성 향상이나 코드의 구조를 명확히 하기 위한 목적만으로도 충분히 컴포넌트를 나눌 수 있습니다. 특히 특정 부분의 코드가 “지금 이 컴포넌트의 핵심 역할과는 조금 다른 것 같다”는 느낌이 든다면, 그 부분을 별도의 컴포넌트로 분리하는 것이 전체 흐름을 이해하는 데 도움이 됩니다.

처음부터 컴포넌트를 잘게 나누어 설계해야 한다는 부담을 가질 필요는 없습니다. 실제로는 하나의 컴포넌트로 구현을 시작한 뒤, 코드가 점점 길어지고 관리하기 어려워질 때 분리하는 방식이 더 자연스럽습니다. 컴포넌트 분리는 설계의 영역이기보다는 리팩토링의 과정에 가깝다고 생각하셔도 됩니다.

폴더 구조 역시 정해진 정답은 없으며, 초보자일수록 본인이 찾기 쉽고 이해하기 쉬운 구조를 사용하는 것이 가장 좋습니다. 프로젝트의 규모가 커지기 전까지는 단순한 구조로 시작하고, 필요해질 때 점진적으로 정리해 나가도 충분합니다.

마지막으로 컴포넌트 분리가 과한지 부족한지를 판단하는 가장 좋은 기준은 ‘읽기 쉬운가’입니다. 컴포넌트를 나누었을 때 오히려 흐름을 따라가기 어렵다면 과한 분리일 수 있고, 하나의 파일이 지나치게 길고 복잡하다면 분리가 부족한 상태일 수 있습니다. 결국 리액트에서 컴포넌트를 나누는 기준은 정해진 규칙이 아니라, 코드를 읽는 사람이 더 쉽게 이해할 수 있도록 만드는 방향이라고 정리할 수 있습니다.

0

JEOUNG WOOYOUNG

감사합니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. JEOUNG WOOYOUNG님.

리액트 컴포넌트의 분리와 폴더 구조에 관한 질문을 해주셨네요. 컴포넌트 분리를 어떻게 해야 할지 고민하시는 것 같습니다. 리액트에서 컴포넌트를 분리할 때 어떤 기준을 적용할지 설명드리겠습니다.

컴포넌트 분리 기준

  1. 단일 책임 원칙(Single Responsibility Principle): 각 컴포넌트는 하나의 책임(혹은 기능)만을 가져야 한다는 원칙입니다. 컴포넌트가 특정 기능이나 섹션을 담당하도록 분리하면 유지보수와 확장이 쉬워집니다.

  2. 재사용성: UI의 특정 부분이 여러 곳에서 반복되는 경우, 별개의 컴포넌트로 분리하여 재사용할 수 있습니다. 예를 들어, 버튼이나 입력 폼 같은 요소들이 여기에 해당합니다.

  3. 가독성과 이해도: 컴포넌트가 너무 커져서 이해하기 어렵다면 작은 단위로 나누는 것이 좋습니다. 작은 컴포넌트는 읽기 쉽고 이해하기 쉬운 코드를 만드는데 도움이 됩니다.

  4. 베지어(BAC) 패턴: ‘폴더는 역할별로, 컴포넌트는 기능별로 분리한다’가 BAC 패턴의 핵심입니다. 이 패턴을 따라 컴포넌트를 기능 단위로 분리하고 폴더는 그 역할에 따라 구성합니다.

폴더 구조

폴더 구조는 코드의 규모와 팀의 문화에 따라 달라질 수 있습니다. 일반적으로는 다음과 같은 구조가 유용할 수 있습니다.

  • components/: UI 컴포넌트를 모아두는 폴더.
  • containers/: Redux나 Context API를 통해 상태와 로직을 관리하는 컴포넌트.
  • pages/: 각각의 페이지를 담당하는 컴포넌트를 모아두는 폴더.
  • styles/: CSS 파일이나 스타일 관련 파일을 모아두는 폴더.
  • utils/: 유틸리티 함수들을 모아두는 폴더.

실제 판단 과정

  • 지속적인 리팩토링: 처음 개발을 시작할 때 모든 것을 완벽히 나누려고 하기보다는, 개발을 진행하면서 코드의 복잡도가 증가할 때 적절히 리팩토링을 통해 분리하는 과정도 중요합니다.
  • 팀의 의견과 스타일: 팀원이 있다면 어느 정도의 분리가 적절한지 논의해보는 것도 좋습니다. 코드 리뷰를 통해 피드백을 받고 배울 수 있습니다.

위의 기준과 예시를 참고하시면서, 중요한 것은 자신만의 스타일과 팀의 규칙에 맞게 적응하는 것입니다. 경험을 쌓으면서 자연스럽게 어떤 구조가 효율적인지 감이 잡히실 거예요.

관련된 추가 학습 자료를 아래 링크에서 확인하실 수 있습니다.
- 컴포넌트 설계 및 파일 구조
- 리액트 프로젝트 폴더 구조에 대한 고찰

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cloudinary 관련

0

39

3

useOptimistic 실전-1 useState

0

60

2

discord 초대장 갱신이 필요한거같습니다.

0

61

1

할일 관리 앱(메모이제이션)

0

79

2

Web 플랫폼 등록

0

107

2

함수 정의 기준

0

76

2

fetch는 사용되는가

0

75

2

전역상태 관리 선택 기준

0

85

2

tailwind css는 언제 사용되는가 또 다른 css와의 차이

0

153

2

카카오 web플랫폼 등록

0

144

2

152강 보는중입니다. 초시계부분이구요. 넘버가 timeout을 받을수없다는 에러가 나오고 있어요

0

42

1

폼테그 다른 태그를 하나의 상태 객체로 묶기

0

43

2

class를 className으로 전부 수정하실 때

0

42

2

JWT에 대한 개념도 학습할 수 있나요?

0

64

2

수업자료 다운로드

0

51

2

리액트 객체의 타입을 알기위하여 마우스를 올렸을 때 나오는 형식이 강의와 다른 부분 문의 드립니다.

0

65

2

useState 자동생성 하실때 누른 키보드가 궁금합니다.

0

51

1

타입스크립트 타입이 불일치하는데 에러가 안납니다.

0

75

3

default format >> prettier 이 실행이 안됩니다.

0

65

2

윈도우 사용자입니다. homebrew 윈도우 설치법은 없나요?

0

343

3

리렌더링 관련 문의

0

56

2

공부 방향에 대해서

0

62

2

form action 과 onSubmit

0

59

2

카카오로그인 에러

0

74

3