2019년 4월 11일, 네이버 프론트엔드 테크콘서트에서 진행되었던 플랫폼 UI 개발 전략의 모든 것 세미나를 듣고 내용을 정리한 글입니다.
플랫폼이란
공통의 활용 요소를 바탕으로 보완적인 파생 상품, 서비스를 개발할 수 있는 기반
기존 설계의 문제점
(스마트 에디터 3.0 사례)
- 에디터를 사용하는 서비스마다 디자인/요구사항이 조금씩 다름
- 컴포넌트 사이의 간격이 매우 다양함 : 이미지, 이미지 설명, 인용구 등
- UI 개발 전략이 없었음
플랫폼을 고려하지 않은 UI 개발
- 커스텀, 확장에 대한 고려가 없음 : 서비스 요구사항을 수용하기 어려움
- 플랫폼 CSS, 서비스 CSS의 간섭이 발생, 우선 순위 관리 어려움
- 에디터 UI 요소간 관계 파악이 어려워 버그, 사이드 이펙트 발생
(다소 다른 맥락이긴 하지만) 확장앱을 개발하면서 삽입하는 CSS, 기존 CSS 우선 순위 관리가 어려워서 공감되었습니다.
새로운 설계 방향
스마트에디터 원 : 플랫폼이 갖춰야 할 조건 고려
플랫폼 UI 설계에서 중요한 것
- UI 공통화 : 디자인 중심이 아닌 기능 중심
- 조건과 상태에 따라 다른 스타일 적용
- 각기 다른 요구사항을 쉽고 빠르게 적용
동적인 UI 스타일 로직
컴포넌트 간격과 연관된 UI 스펙 분석과 구현
스펙 분석
- 인접한 컴포넌트에 따라 간격이 달라질 수 있음 * 제목, 이미지, 이미지 위에 인용구가 있을 때, 이미지 위에 이미지가 있을 때 등
- 간격과 같은 높이의 숨겨진 UI(텍스트 추가 버튼)가 필요 * 공백 영역(숨겨진 영역)을 클릭하면 새로운 컨텐츠를 삽입할 수 있는 영역이 나옴
스마트 에디터 3.0을 많이 사용했었는데, 개발자분들의 노력을 직접 확인하니 새삼 감사했습니다.
플랫폼 관점에서 설계 포인트
컴포넌트 사이 간격은 서비스별로 요구사항이 다를 수 있음
구현
SCSS를 사용하여 설정 부분을 따로 빼내면, 서비스에 따라 쉽게 수정이 가능
$config: (
image: (
component-edge-button: true,
spacing: (
base: 30px,
adjacent: (
image: 15px,
text: 20px,
...
)
)
)
)
@include spacing-and-hidden-button-style(image);
플랫폼 UI 설계 전략
모듈화
- 디자인보다는 각 요소가 하는 기능에 집중하여 모듈화
- 현재 요구사항에 맞게 최소한의 기능으로 모듈화하고, 확장 가능성은 배제 * 확장 가능성을 초기부터 고려하면 복잡해질 수 있음
- 같은 기능을 사용하는 요소는 동일한 HTML 구조를 사용
설정과 공통 코드
- 간격, 색상, 서체, 폰트 사이즈 등 서비스 별 변경이 쉽도록 설정으로 관리
- 반복적인 코드는 css pre-processor의 기능을 활용하여 구현
- 연관된 UI, 수치는 반드시 공통으로 묶어 관계를 명확하게 함
플랫폼은 만능이 아님
- 모든 요구사항을 플랫폼 공통 코드로 소화할 수 없음
- 때로는 스펙 협의, 커뮤니케이션이 설계보다 중요할 수 있음
- 플랫폼 공통 코드는 불변이 아니며, 지속적 리팩토링이 필요