Dooray!가 마이크로 프론트엔드를 적용하는 이유 중 하나였던 서비스 별 독립적인 배포를 적용하기에 적합한 기술이었던 것.
webpack.config.js 를 드라이브 - 메인 서비스로 설정한 후
연결고리(remoteEntry.js)를 생성
이런 방식으로 진행했다고 한다.
물론 특정 서비스만 재배포하는 경우 캐싱이 제대로 처리되지 않는 문제가 있었는데... 이것을 remoteEntry에 버전을 Date.now() 정도로 동적으로 사용하는 방식으로 바꾸어 처리했다고 한다.
들으면서 저렇게 파일을 계속 가져와도 되나? 하는 생각이 들었는데, 딱 그 부분을 명쾌하게 설명해주셨다. remoteEntry.js는 노출된 소스코드의 경로만 보여주기 때문에 가벼워서 매번 불러와도 성능에 무리가 없었다고.
코딩보다 중요한 것들
마무리하며 Dooray!의 사례만이 일반적인 것은 아니란 점을 짚고 넘어갔다.
마이크로 프론트엔드는 구체적인 기술이 아니다.
서비스가 커져서 복잡도가 늘어나면 선택할 수 있는 여러 대안 중 하나에 불과
코드 중복은 어쩔 수 없는 문제. 이득에 초점을 맞추자.
메일 FE엔지니어가 대화해야할 대상은 드라이브 FE엔지니어가 아니라 메일서비스 기획자, 메일서비스 BE엔지니어.
궁금했던 점
발표를 들으며 Dooray!가 죽어버린 앵귤러를 쓰고 있었다는 사실에 좀 놀랐다. 초기에 왜 앵귤러를 선택했는지, 그리고 왜 React가 아닌 Vue로 바꾸려 했었는지 그 의사결정의 과정이 궁금했다.
구글 사례로 짚어보는 디자인 시스템의 진화
나는 Figma에 관심이 좀 있고, 최근 UX 분야도 스터디를 하고 있기 때문에 무척 재미있었던 섹션이었다.
이 섹션은 비공개로 사진 촬영이 제한되어 있었다. 따라서 회사와 관련된 내용은 생략하고, 일반적인 내용만 적어보겠다.
디자인 시스템을 구축하는 이유
Effciency
일관적인 용어 사용해 효율성, 생산성 상승
개발과 디자인의 Sync가 이뤄진다.
Usability
일관성 있는 UX
복잡한 상황에서도 즉시 이해가능한 유저 플로우
Product Identity
제품의 인상을 결정하는 Color, Typography 등을 통일
디자인 시스템, 언제 시작할까?
디자인 시스템을 시작하기 좋은 신호들
팀이 점점 커지고 그에 따라 일관성이 무너지는 경우
사람 = document가 되는 경우 (ㅋㅋ)
비슷한 색상이 너무 많은 경우 (gray 계열만 수십가지라면? 당연히 일관성이 없다.)
유사한 아이콘이 너무 많은 경우 (단순 arrow 아이콘만 해도 수십 수백가지다.)
프로덕트가 많아지면서 회사 차원의 Design Language가 필요한 시기
UX조직의 스케일이 커지고 역할을 확장해야 하는 시기
Research 강화
A/B 테스팅 및 experiment 확대
Product User Value 정의
CUJ Model 도입
제품의 전체적인 디자인 리프레쉬를 앞두고 있는 경우
새로운 디자인 툴의 도입과 발맞춰...
Figma를 쓰기로 했는데 디자인 시스템을 구축 안하는 건 이상할 지경.
디자인 시스템, 적용 노하우와 팁
디자인 시스템과 열정적인 엔지니어와 함께
이름에 디자인이 들어갈 뿐, 디자이너만 리딩하는 것이 아니다.
엔지니어 레벨에서도 디자인에서 알기 힘든 코드 레거시, 중복된 리소스 등을 알려줘야 한다.
손에 잡히는 가시적인 마일스톤
디자인 시스템은 긴 시간을 투자해야 하는 바닥 공사와 같다.
Product Impact를 초기부터 설정
Visibility를 생각하고, 팀을 키우기
초기부터 사람들에게 공유하고, 피드백을 받기
완벽함을 추구하기보다 당장 팀에게 도움이 되는 부분을 공유하면 더 큰 관심과 서포트를 받을 수 있다.
열린 자세로, 여러 채널로 커뮤니케이션
디자인 시스템이 때로는 Creativity를 구속하는 인상을 줄 수도 있다.
더 좋은 제안과 아이디어를 언제든지 환영하는 방향으로, 또 자발적인 기여를 권장하는 쪽으로 나아가기
업데이트된 내용에 대해서는 뉴스레터, 메일, 미팅, 문서 등 가능한 모든 채널을 동원해 전파하기
디자인 시스템을 꾸준히 운영되는 모델로 만들기
프로세스 자체가 디자인 시스템의 절반 이상
궁금했던 점
디자인도 도메인 별로 나눠서 만들까?
괴물같이 변한 Dooray! 웹앱 정리하기
11시에 진행했던 마이크로 프론트엔드 구축기의 연장선 같았던 발표였다. 앗 시작 표지 못찍었다
왜? 정리를 시작했을까?
Dooray!의 웹앱을 정리할 때 생긴 고민을 이러했다고 한다.
앵귤러와 뷰로 나눠진 컴포넌트를 어떻게 동일화할 수 있을까?
하나씩 만든다. -> 쉬우나 번거로움 (앵 따로 뷰 따로)
Dooray!는 초기에 앵귤러로 개발되었고, Vue로 점진적으로 바꾸고 있었다고 한다.
하지만 그 바꾸는 Vue의 버전이 2.x대였는지... 역시나 타입 추론과 관리가 아주 어려웠던 듯 하다.
뷰로 정리한 코드의 문제점도 들을 수 있었다.
Vue 2.x 대는 타입 추론이 어려움
빅 컴포넌트
watch 코드 연쇄로 코드 추적 어려움
코드 스타일 파편화
Vue도 사용하는 입장에서 매우 공감되었다. 템플릿, 스크립트, 스타일이 모두 vue 하나에 들어가고, 상태 변화를 감지하기 쉽다보니 엉키는 경우가 많다.
따라서 Dooray!는 리액트로 점진적이지 않은 새로운 구축을 시도했다고 한다.
리액트를 도입하며 바뀐 부분은 이러하다.
명시적으로 코드를 호출
순수한 함수의 호출 형태(타입 추론이 잘 된다!)
컴포넌트는 어떻게 정리했을까?
공통 컴포넌트 공유
중복적인 컴포넌트가 나오면 안됨
상태가 있는 것과 없는 것을 구분하기?!
상태를 주입하는 껍데기 컴포넌트를 생성.
컨테이너/프레젠터 패턴
컴포넌트 메모
컴포넌트가 동일한 props, 동일한 결과를 렌더링해낸다면, React.memo를 호출하고 결과를 메모이징하는 것이 중요했다.