배달의민족 Flutter 도입과 아키텍처 설계 교훈

배달의민족은 주문접수 채널에서 Flutter를 도입하여 멀티 플랫폼 대응력을 높이고, Clean Architecture를 통해 효율적인 코드 관리를 실현했습니다. 이 글에서는 Flutter 도입과 아키텍처 설계의 과정에서 얻은 교훈을 바탕으로, 변화하는 비즈니스 요구에 맞추기 위한 혁신적인 접근을 소개합니다. 또한, 이러한 경험이 다른 기업이나 개발자에게도 유용한 전략이 될 수 있도록 공유하고자 합니다. Flutter 도입으로 인한 혁신적인 변화 배달의민족은 Flutter 도입을 통해 플랫폼 전환과 유지보수 측면에서 큰 혁신을 이루었습니다. 기존의 Windows, Android, iOS 플랫폼에 추가하여 macOS와 다양한 Android 디바이스로까지 확장할 필요성을 느꼈습니다. Flutter의 도움으로 단일 코드베이스에 의해 멀티 플랫폼을 동시에 지원할 수 있게 되었고, 이를 통해 개발자 수를 줄이고 생산성을 향상시킬 수 있었습니다. 개발자들은 각 플랫폼에 대해 반복적으로 구현할 필요가 없어졌고, 버그 수정이나 기능 변경 시에도 이전에 비해 적은 시간에 모든 플랫폼에 적용할 수 있게 되었습니다. Flutter의 도입은 크로스 플랫폼 반응형 UI 구현을 가능하게 하여, 사용자 경험의 일관성을 높였습니다. 이제 파트너들은 다양한 OS 환경에서 동일한 경험을 하게 되므로, 학습 비용도 줄어들고, 혼란이 줄어드는 장점을 경험하고 있습니다. 이러한 변화는 단순히 기술적인 접근방식이 아닌, 사업의 방향성을 전환하는 계기로 작용했습니다. 파트너사들이 원하는 효율적인 주문 관리 시스템을 제공하기 위해, 기존의 네이티브 아키텍처에서 벗어나 새로운 기술 스택으로 과감히 옮겨갔습니다. Firebase와 같은 클라우드 서비스를 활용하여 실시간 데이터 업데이트와 동기화가 가능하게 되었고, Flutter의 강점을 극대화하여 사용자 친화적인 UI/UX도 구현됐습니다. 이로 인해 즉각적인 피드백을 수렴할 수 있는 구조가 마련됐습니다. 결국 Flutter의 도입은 배달의...

Vite CSS 우선순위 문제 해결 사례

## 서론 우아한공방은 일관된 UI/UX를 제공하기 위해 개발된 디자인 시스템으로, 이번 글에서는 Vite 환경에서 발생한 CSS 우선순위 문제를 해결한 사례를 공유하고자 합니다. 이 문제는 컴포넌트의 스타일이 의도와 다르게 나타나는 원인이 되었으며, 일관성을 유지하기 위해 여러 시행착오를 거쳤습니다. 이를 통해 Vite에서 CSS 우선순위를 관리하는 방법을 깊이 있게 살펴보겠습니다.

## Vite에서 발생한 CSS 우선순위 문제 ### Step 1: 현상 파악 우아한공방은 코어 패키지를 중심으로 운영되며, 각 패키지는 서로 다른 스타일 파일을 갖고 있습니다. 특정 컴포넌트를 추가하거나 빌드 시 발생하는 CSS 우선순위 충돌은, 주로 스타일 import 순서에 따라 발생합니다. 특히 Chip 컴포넌트에서 발생한 스타일 문제는, reset CSS와 공용 스타일이 아닌 Flex 컴포넌트의 스타일이 덮어쓰는 현상을 보여주었습니다. 이는 의도하지 않은 스타일 적용으로, 사용자의 혼란을 초래할 수 있습니다. 우아한공방에서는 이와 같은 스타일 우선순위 문제를 해결하기 위해, import 순서에 따라 클래스가 변동하는 구조를 명확히 이해할 필요가 있었습니다. 이를 위해 다양한 테스트와 분석을 수행하였고, Vite의 빌드 프로세스가 ESM import 규칙을 준수한다는 사실을 발견했습니다. 이를 통해 import 순서가 최종 style.css에 어떻게 영향을 미치는지를 명확히 이해하게 되었습니다.

### Step 2: 문제 재현과 원인 분석 정확한 원인 분석 후, Vite의 CSS 우선순위 문제를 해결하기 위한 단계로 나아갔습니다. Vite는 Core CSS Plugin을 통해 각 스타일 청크를 load하고 build 과정에서 순차적으로 결합하는 방식을 취합니다. 이러한 과정에서 import 순서가 변동되면, 최종적으로 생성되는 style.css의 순서에도 영향을 미친다는 점을 확인했습니다. 특히, VanillaExtract와 같은 CSS 모듈 방식은 각 청크가 Vite Core CSS Plugin에 의해 순차적으로 추가되기 때문에, 각 청크의 load 순서가 매우 중요하다는 사실을 깨달았습니다. 이러한 문제는 특히, 스타일이 모듈화되어 있거나 패키지 간 의존관계가 복잡한 상황에서 더 두드러지게 나타났습니다. 올바른 import 순서가 보장되지 않으면 클래스명이 중복되거나, 의도한 스타일 적용이 실패할 가능성이 높아지기 때문에, 이 문제를 해결하기 위한 방법을 포괄적으로 탐색할 필요가 있었습니다.

### Step 3: 근본적 해결책 제안 마침내 문제 해결을 위해 새로운 접근 방식을 모색했습니다. 각 스타일 청크에 뱅코멘트를 추가하여 ID를 부여하고, 해당 ID를 기준으로 우선순위를 정렬하는 두 가지 플러그인을 개발하기로 하였습니다. 이러한 방식은 기존의 import 순서에 의한 불안정성을 해소하고, 항상 같은 우선순위를 보장할 수 있습니다. 이를 통해 우아한공방의 개발자들은 코드 수정이 이루어지더라도 CSS 우선순위 문제에서 자유로워질 것입니다. 이후 구현된 BangCommentPlugin과 ReorderPlugin이 각 스타일 청크의 헤더에 뱅코멘트를 추가하고, 이를 기준으로 청크를 재정렬하는 과정을 거쳤습니다. 이로써 다양한 패키지에서 발생할 수 있는 스타일 충돌 문제 또한 효과적으로 방지하게 되었습니다. 이 경험은 CSS 우선순위 문제를 해결하는 데 실질적인 인사이트를 제공하였습니다.

## 결론 이번 글에서는 Vite에서의 CSS 우선순위 문제에 대한 원인 분석과 그 해결 과정을 자세히 살펴보았습니다. Vite의 구조와 CSS 빌드 과정에서 발생하는 이슈를 이해하고, 이를 해결하기 위한 새로운 접근 방식을 개발함으로써, 프로젝트 환경에서 문제를 성공적으로 해결하였습니다. 다음 단계로, 이제 각자가 적용한 BangCommentPlugin과 ReorderPlugin을 차별적으로 활용하여, 더욱 효율적인 CSS 관리 체계로 발전시킬 수 있을 것입니다. 또한, 이 과정에서 얻은 인사이트를 바탕으로 더 다양한 경우의 수를 고려하여 우아한공방의 디자인 시스템을 한층 더 발전시키기를 기대합니다.

이 블로그의 인기 게시물

우아한형제들의 실시간 알림 혁신: SSE(Server-Sent Events)로 이룬 효율성과 안정성

우아한 디버깅 툴 개선으로 QA 업무 효율화

물어보새의 진화와 지식 공유 확장