최근 Storybook에 대해서 학습을 하고 있습니다. Storybook에 대한 기본 개념을 파악하기 위해 Storybook 공식 페이지의 Why Storybook? 부분을 읽던 중 컴포넌트 주도 개발이란 개념에 대해 알게되었습니다. 이번 글에서는 컴포넌트 주도 개발이 무엇이고, 왜 나왔으며, 어떻게 컴포넌트 주도로 개발을 진행할 수 있는 지에 대해서 학습한 내용을 공유하고자 합니다.
Storybook
우선 컴포넌트 주도 개발에 자세히 알아보기 전에 Storybook에 대해 알아보겠습니다. Storybook이란 UI 개발을 위한 툴로, 컴포넌트를 테스트하고, 문서화하여 더 안정적이고 효율적으로 웹 개발을 할 수 있도록 도와줍니다. Storybook은 React, Vue.js 등 많은 자바스크립트 UI 프레임워크를 지원하기 때문에, 어떤 프레임워크를 사용하시든 한번 확인 해보시면 좋을 것 같습니다. Storybook에 대한 자세한 내용은 추후에 정리해서 올려보도록 하겠습니다.
아무튼 Storybook은 '컴포넌트'를 독립적인 환경에서 테스트하고, 문서화하는 것을 도와줍니다. 즉, 컴포넌트를 만들고, 이를 조립하여 더 큰 컴포넌트를 만들고, 그것들을 또 결합하여 하나의 페이지를 생성하는 방식을 효율적으로 할 수 있도록 도와준다는 것입니다. 방금 말한 컴포넌트를 조립하여 웹 어플리케이션을 만드는 것, 이게 바로 컴포넌트 주도 개발입니다.
왜 컴포넌트를 사용하는가?
왜 컴포넌트를 사용하여 UI를 만드는 걸까요? 아마 우리는 다 이유를 알고 있을 것입니다. 유저 인터페이스는 날이 갈수록 복잡해지고 있습니다. 사람들은 더 완성도 높은, 개인화된 기능을 요구합니다. 그에 따라 개발자들과 디자이너들은 더 많은 로직을 UI에 추가하게 되고, 이는 웹이 커질수록 개발하기 복잡하고, 디버깅도 어려우며, 시간도 오래걸립니다. 따라서 우리는 이런 UI를 컴포넌트라고 하는 작은 모듈들로 쪼개서 안정적이지만 유연한 UI를 만듭니다. 각 컴포넌트가 맡은 역할과 상태를 분리하면 복잡한 UI를 단계별로 접근할 수 있으며, 컴포넌트를 재사용하여 사용할 수 있기 때문입니다.
어떻게 컴포넌트 주도 개발을 하는가?
그렇다면 컴포넌트 주도 개발은 어떻게 이루어지는 걸까요?
- 한번에 하나의 컴포넌트만 만든다. 각 컴포넌트는 독립적으로 만들며, 컴포넌트가 가지는 각 상태에 대해 정의한다. 가능한 작게 시작한다. (Button, Input 등)
- 컴포넌트를 결합한다. 작은 컴포넌트를 결합하여 하나의 큰 컴포넌트를 만들고, 새로운 기능을 가능하게 하고 복잡성을 조금씩 증가시킨다.(Form, Table 등)
- 페이지를 조합한다. 컴포넌트를 결합하여 페이지를 생성한다. mock 데이터로 페이지를 시뮬레이션하여 접근하기 어려운 상태와, edge case에 대해 테스트한다.(Home Page, Profile Page 등)
- 페이지들을 통합하여 어플리케이션을 생성한다. 이 과정에서 백엔드 API 등 서비스와 연결한다.
컴포넌트 주도 개발의 장점
- Quality: 각 컴포넌트를 독립적으로 생성하고, 여러 상태에 대해 정의하므로 UI가 여러 시나리오에서 정상적으로 동작한다는 것을 검증할 수 있습니다.
- Durability: 컴포넌트 레벨에서 테스트가 가능하여 버그를 명확하게 잡아낼 수 있습니다.
- Speed: 컴포넌트를 재사용하여 UI를 더 빠르게 만들 수 있습니다.
- Efficiency: UI를 여러 독립적인 컴포넌트로 분리하여 여러 팀원들이 동시에 작업을 진행할 수 있습니다.
마치며
복잡해보였지만, 컴포넌트 주도 개발은 사실 React, Vue.js 등 UI 프레임워크를 사용하는 개발자라면 이미 익숙한 개념일것입니다. 페이지의 여러 부분들을 하나의 컴포넌트로 보고, 이러한 컴포넌트를 결합하여 하나의 페이지를 만들죠. 이는 이러한 프레임워크들이 컴포넌트 주도 개발을 따르기 때문입니다. 그러므로 왜 컴포넌트 주도 개발에 대해 또 정리하며 학습하냐고 할 수도 있을 것 같습니다. 다만 왜 컴포넌트 주도 개발이 왜 나왔는지, 장점이 무엇인지, 어떤식으로 진행이 되어야하는지에 대해 명확히 알고 있으면 Storybook등의 UI 툴의 용도와 활용법을 명확히 이해할 수 있을 것같습니다.
레퍼런스
https://storybook.js.org/docs/react/why-storybook
https://www.componentdriven.org/
'개발 용어 정리' 카테고리의 다른 글
| HTTP Cache Control (0) | 2023.05.07 |
|---|---|
| Monorepo란? (0) | 2022.09.08 |