Closed HiimKwak closed 2 years ago
아, 추가로 다같이 읽어보면 좋을 양질의 글을 발견하여 공유해봅니다.
Atomic Design Pattern의 Best Practice 여정기
제가 위 글에서 '스켈레톤'과 '컴포넌트'라는 단어를 사용했는데, 이런 페이지 구분 단위에 대해서도 확실한 기준을 가지고 정해놔야 혼란이 없을 것 같습니다.
위 이미지는 제가 공유드린 글에서 사용한 이미지 중 하나인데요, Atomic Design Pattern의 핵심을 압축한 그림입니다.
저희도 얼추 위와 비슷하게 구분을 지어 작업하고 있긴 했습니다. 사진을 보시면 원래 이렇게 작업하고 있는거 아니였나?
싶을 정도로 특별한 내용은 아닙니다. 글을 더 읽어보시면 중간에 아래와 같은 구조를 언급하고 있습니다.
/components ㄴ /atoms ㄴ /molecules ㄴ /organisms ㄴ /templates /pages
구조를 보시면 여기도 components와 pages를 구분짓고 있네? 헛수고한거 아니야? 할 수 있지만
2안처럼 가져간다면 말이 달라지겠죠? 각 개인의 능률도 올라갈테고 추후 merge와 같이 합병 혹은 새로운 팀원(머나먼 미래의 일이지만..)이 만약 저희의 레거시 코드들을 관리하기 위해 들여다볼 때 훨씬 설득력있는 생명력이 긴 코드가 될 것입니다(위 사진 2안에서 제일 상위 Components 폴더명은 저희 프로젝트에서는 Pages가 될테고, 그 한 단계 아래 A와 B가 Home/Search/Detail이 될 것입니다).
오 글 써놓고 보니 댓글에 써놓은 구조가 더 좋아보이네요... 그럼 결론은 바로 위에 적어놓은 2안 구조로 하겠습니다 ㅋㅋㅋ
천천히 읽어보시고 답변 달아주시면 감사하겠습니다.
일단 pages랑 components를 구분한 이유는 container-presenter 구조를 생각했기 때문입니다.
이 구조는 필연적으로 props drilling 문제를 발생시키는데 이를 해결하기 위해 Recoil을 통한 전역적인 상태관리를 생각했습니다. 아무튼 컴포넌트 렌더링을 넘어서 페이지 자체의 에러 핸들링 (예를 들면, 로그인 실패나 과도한 로딩 등등) 더 나아가 배포 전 test를 위해서라도 pages-components 구분은 필요하다고 생각합니다.
atomic design은 좋은 생각인 것 같습니다만 저희 현재 프로젝트 디렉 구조와 똑같이 무한 폴더 리스트의 굴레 빠지는 건 아닌가 하는 생각이 들었습니다. 재사용할 컴포넌트가 그렇게 많은가? 우리 프로젝트가 5단계로 계층을 분리할 정도인가? 오히려 컨벤션에 집착하다가 진행이 느려지는건 아닌가?
하는 문제들이 생각났습니다.
당장 위 컴포넌트만 보더라도 이렇게 나눌 수도 있고 다른 방안이 있을 수도 있습니다. molecules와 organisms을 나눌 명확한 기준을 정하지 않는 한 세세하게 나누기보다는 좀 더 큰 단위로 진행하는게 나을 것 같기도 합니다.
+atomic design pattern으로 간다면 1안이 더 많이 사용되는 것 같습니다. boostcamp github < 이 레포와 같은 구조가 많더라구요 참고하면 좋을 것 같습니다!
제가 생각한 폴더 구조 안은 기존 방식을 유지하되 정리를 하자
입니다~
대략 이 정도인데 글보다는 직접 보는게 좋으니 제가 참고한 레포 보시면 좋을 것 같습니다👍 [유사한 기술 스택의 repo] < 이 레포의 폴더구조대로 가면 어떨까요?
두가지 방안이 나왔으니 둘 중 하나 고르면 될 것 같습니당
팀장님 의견 읽어보니 폴더 구조를 개편하기보다는 기존 방식을 유지하고 정리하는게 더 낫겠다는 생각이 듭니다. 제가 atomic design pattern 글을 공유한 이유도 이 방식을 도입하고 싶어서라기 보단 우리가 작업하는 방식을 선택하는 폭을 넓히고 선택할 때 왜 그 방안을 선택했는지에 대한 이유를 보완하려는 목적이었습니다.
다만 몇 가지 질문이 있는데요,
전에는 pages를 container로 생각해서 pages 레벨에서 api 통신하려고 했는데 각각의 컴포넌트에서 다 처리하자는 말씀은 저희 기존 방식인 container - presenter에서 presenter 단에서 api 통신을 하자는 말씀으로 이해하면 되나요? container - presenter 구조에 대해서는 말씀해주신 것 덕분에 그 필요성을 납득할 수 있었는데, api 통신 문제를 Presenter단으로 내리자는 말씀은 잘 이해가 안되어 여쭤봅니다. (혹시 props drilling 문제때문에 그런건가요?)
스타일과 jsx를 합치는 건 불필요한 하위 폴더들이 생성되는 문제때문에 고안하신건가요? 스타일과 jsx를 한 파일에 합치는 건 못할 것은 아닙니다만 저도 개인적으로 선호하는 방식이 아니라.. 선뜻 합치기가 꺼려지네요 ㅜ
0831 회의)
해야할 것)
안녕하세요 횐님들. 이번엔 pages - components 폴더 두 개에 대한 단상입니다
현재 저희 prefragrance-client 프로젝트의 src 파일 아래 pages와 components 폴더의 구조를 살펴보면 아래와 같습니다
저희가 상호 합의한 것과 같이 pages 폴더에는 정말 각 페이지를 구성하는 컴포넌트 단위로 잘라놓은 '스켈레톤' 형태의 프레임 파일만 존재하고
그 각각의 구성품들은 pages 관련 내용이지만 pages 폴더 바깥 components 폴더에 따로 위치하여 세포분열(?)하는 모습을 띄고 있습니다.
그런데 여기서 한 가지 다시 생각해볼 점은,
pages 폴더 아래에 각 페이지의 프레임 파일만 존재할거면 굳이 pages 폴더가 따로 구분되어야 할 필요가 있을까?
란 점입니다.각 페이지 스켈레톤(프레임 or 템플릿) 파일과 각각의 컴포넌트 코드들이 같은 줄기에 연속적으로 놓여있지 않고 서로 완전히 구분된 위치에 놓여있어
특히나 컴포넌트 코드를 고치려 할 때 내가 보려는 페이지가 아닌 다른 페이지 폴더들과 같은 선상에 존재하고 있어 작업할 때 불편한 경험을 줍니다.
아래와 같이 바꿔보는건 어떨까요?
각 페이지 스켈레톤 파일들이 분기를 해야할 정도로 비대하지 않음에도 분기하여 불필요한 비효율을 발생시키는 것을 차단하고,
각 페이지를 구성하는 재활용 가능하지 않은 컴포넌트들은 각 페이지 폴더 아래에 그대로 존속되게 하고
예를 들어 홈페이지부터 모든 페이지에 전역적으로 재사용되는 NavBar같은 컴포넌트들은 코드의 재사용을 위하여 components - shared 폴더에 위치시켜 재활용하는 것입니다. (글을 쓰다 생각해보니 components 아래 shared 폴더를 만들기보다는 shared 폴더가 components보다 상위에 위치하는게 더 확장성 있을 것 같긴 하네요 ㅋㅋ)
이렇게 하면 저희가 지금 페이지 단위로 테스크를 분할해 작업하고 있는데 굳이 components 폴더를 펼쳐서 잘 구분도 안되는 shared 폴더와 home/search/detail 폴더를 펼쳤다 닫았다 들락날락 하지 않아도 되고
깔끔하게 pages - 각자 작업하는 페이지 폴더만 딱 열어놓고 작업할 수 있게 됩니다. 굉장히 편하지 않을까요?
횐님들은 어떻게 생각하시는지 알려주십쇼. 감사합니다.