다크 모드, 트렌드인가 필수인가

요약

스마트폰 사용자의 82%가 다크 모드를 씁니다. 더 이상 트렌드가 아닙니다. iOS·Android가 시스템 수준에서 지원하면서 사용자는 모든 앱·웹에서 같은 경험을 기대합니다. 디자인 시스템에 처음부터 반영하면 추가 비용이 거의 없습니다.

다크 모드는 더 이상 트렌드가 아닙니다. Android Authority의 2024년 조사에 따르면 스마트폰 사용자의 82%가 다크 모드를 사용하고 있습니다. iOS와 Android 모두 시스템 수준에서 다크 모드를 지원하면서, 사용자들은 앱과 웹사이트에서도 동일한 경험을 기대하게 되었습니다.

그렇다면 모든 프로젝트에 다크 모드를 넣어야 할까요? 프로덕트 메이커의 경험을 바탕으로 현실적인 판단 기준을 공유합니다.

다크 모드의 실질적 이점

다크 모드의 장점은 크게 세 가지입니다. 첫째, 눈의 피로 감소입니다. 어두운 환경에서 밝은 화면을 보면 눈이 빠르게 피로해지는데, 다크 모드는 이 문제를 크게 완화합니다. 특히 장시간 사용하는 서비스에서 효과가 큽니다.

둘째, OLED 디스플레이에서의 배터리 절약입니다. OLED는 검은 픽셀을 표시할 때 전력을 소모하지 않기 때문에, 다크 모드 사용 시 최대 30%까지 배터리를 절약할 수 있습니다. 모바일 사용자가 주요 타겟인 서비스라면 무시할 수 없는 수치입니다.

셋째, 모던하고 프리미엄한 브랜드 이미지입니다. 테크 기업, 크리에이티브 도구, 프리미엄 서비스에서 다크 모드는 세련된 인상을 줍니다.

구현은 색상 반전이 아닙니다

다크 모드 구현에서 가장 큰 오해는 "색상만 반전하면 된다"는 것입니다. 실제로는 완전히 별도의 디자인 시스템이 필요합니다. 별도의 색상 토큰(Color Token) 체계를 설계해야 합니다. 라이트 모드의 $bg-primary가 #FFFFFF라면, 다크 모드에서는 #121212나 #0a0a0a 같은 값으로 매핑됩니다.

이미지와 그림자도 조정해야 합니다. 밝은 배경을 전제로 만든 PNG 이미지는 어두운 배경에서 테두리가 보이거나 부자연스러워집니다. 그림자 효과도 다크 모드에서는 거의 보이지 않으므로 보더나 미세한 밝기 차이로 대체해야 합니다.

폼과 입력 필드의 스타일링도 별도로 필요하고, 서드파티 컴포넌트의 테마도 맞춰야 합니다. 지도 API, 에디터, 차트 라이브러리 등 외부 컴포넌트의 다크 모드 대응은 예상보다 많은 시간이 소요됩니다.

CSS 구현 방법

기술적으로는 CSS의 prefers-color-scheme 미디어 쿼리와 CSS Custom Properties(변수)를 조합하는 것이 표준 접근법입니다. :root에 라이트 모드 변수를 정의하고, @media (prefers-color-scheme: dark)에서 변수를 오버라이드합니다.

사용자가 직접 토글할 수 있게 하려면 data 속성이나 클래스를 활용한 수동 전환 로직도 추가해야 합니다. React와 Next.js 환경에서는 Context API나 상태 관리 라이브러리로 테마 상태를 관리하고, localStorage에 사용자의 선호를 저장하는 것이 일반적인 패턴입니다.

흔한 실수들

다크 모드 구현에서 자주 발생하는 실수들이 있습니다. 순수 검정(#000000) 배경 사용이 대표적입니다. 순수 검정은 텍스트와의 대비가 너무 강해 눈이 피로해집니다. #0a0a0a, #121212, #1a1a1a 같은 매우 어두운 회색을 사용하는 것이 좋습니다.

이미지 처리를 잊는 것도 흔한 실수입니다. 흰 배경의 로고 이미지가 다크 모드에서 그대로 표시되면 매우 어색합니다. 페이지별 일관성이 깨지는 것도 문제입니다. 메인 페이지는 완벽한데 설정 페이지에서 라이트 모드 요소가 튀어나오면 사용자 경험이 무너집니다.

서드파티 임베드(유튜브, 지도, 결제 모듈)가 라이트 모드로 고정되는 것도 놓치기 쉬운 부분입니다.

비용과 판단 기준

다크 모드를 추가하면 프론트엔드 개발 시간이 약 10~15% 증가합니다. 디자인 작업까지 포함하면 전체 프로젝트 비용의 5~10% 정도가 추가됩니다. 도입할 가치가 있는 경우는 소비자 대상 앱, 콘텐츠 중심 사이트, 테크 또는 프리미엄 브랜딩을 추구하는 서비스입니다.

반면 B2B 어드민 패널, 인쇄 중심 워크플로우, 예산이 극히 제한된 MVP에서는 우선순위를 낮춰도 됩니다.

프로덕트 메이커의 접근: 다크 퍼스트

프로덕트 메이커의 자사 사이트 productmaker.io는 다크 퍼스트(Dark-first)로 설계되었습니다. $dark-bg-primary, $accent-cyan 등 커스텀 디자인 시스템을 구축해 모든 페이지에서 일관된 다크 모드 경험을 제공합니다.

여기서 핵심 인사이트가 있습니다. 다크 퍼스트로 처음부터 설계하는 것은 비교적 수월하지만, 기존 라이트 모드 사이트에 다크 모드를 후에 추가하는 것은 2~3배 더 어렵습니다. 색상 체계가 하드코딩되어 있으면 모든 컴포넌트를 일일이 수정해야 하기 때문입니다.

다크 모드를 계획하고 있다면, 프로젝트 초기부터 CSS 변수 기반의 색상 체계를 설계하는 것을 강력히 권장합니다.

다른 포스팅

다크 모드, 트렌드인가 필수인가

다크 모드는 더 이상 트렌드가 아닙니다. Android Authority의 2024년 조사에 따르면 스마트폰 사용자의 82%가 다크 모드를 사용하고 있습니다. iOS와 Android 모두 시스템 수준에서 다크 모드를 지원하면서, 사용자들은 앱과 웹사이트에서도 동일한 경험을 기대하게 되었습니다.

그렇다면 모든 프로젝트에 다크 모드를 넣어야 할까요? 프로덕트 메이커의 경험을 바탕으로 현실적인 판단 기준을 공유합니다.

다크 모드의 실질적 이점

다크 모드의 장점은 크게 세 가지입니다. 첫째, 눈의 피로 감소입니다. 어두운 환경에서 밝은 화면을 보면 눈이 빠르게 피로해지는데, 다크 모드는 이 문제를 크게 완화합니다. 특히 장시간 사용하는 서비스에서 효과가 큽니다.

둘째, OLED 디스플레이에서의 배터리 절약입니다. OLED는 검은 픽셀을 표시할 때 전력을 소모하지 않기 때문에, 다크 모드 사용 시 최대 30%까지 배터리를 절약할 수 있습니다. 모바일 사용자가 주요 타겟인 서비스라면 무시할 수 없는 수치입니다.

셋째, 모던하고 프리미엄한 브랜드 이미지입니다. 테크 기업, 크리에이티브 도구, 프리미엄 서비스에서 다크 모드는 세련된 인상을 줍니다.

구현은 색상 반전이 아닙니다

다크 모드 구현에서 가장 큰 오해는 "색상만 반전하면 된다"는 것입니다. 실제로는 완전히 별도의 디자인 시스템이 필요합니다. 별도의 색상 토큰(Color Token) 체계를 설계해야 합니다. 라이트 모드의 $bg-primary가 #FFFFFF라면, 다크 모드에서는 #121212나 #0a0a0a 같은 값으로 매핑됩니다.

이미지와 그림자도 조정해야 합니다. 밝은 배경을 전제로 만든 PNG 이미지는 어두운 배경에서 테두리가 보이거나 부자연스러워집니다. 그림자 효과도 다크 모드에서는 거의 보이지 않으므로 보더나 미세한 밝기 차이로 대체해야 합니다.

폼과 입력 필드의 스타일링도 별도로 필요하고, 서드파티 컴포넌트의 테마도 맞춰야 합니다. 지도 API, 에디터, 차트 라이브러리 등 외부 컴포넌트의 다크 모드 대응은 예상보다 많은 시간이 소요됩니다.

CSS 구현 방법

기술적으로는 CSS의 prefers-color-scheme 미디어 쿼리와 CSS Custom Properties(변수)를 조합하는 것이 표준 접근법입니다. :root에 라이트 모드 변수를 정의하고, @media (prefers-color-scheme: dark)에서 변수를 오버라이드합니다.

사용자가 직접 토글할 수 있게 하려면 data 속성이나 클래스를 활용한 수동 전환 로직도 추가해야 합니다. React와 Next.js 환경에서는 Context API나 상태 관리 라이브러리로 테마 상태를 관리하고, localStorage에 사용자의 선호를 저장하는 것이 일반적인 패턴입니다.

흔한 실수들

다크 모드 구현에서 자주 발생하는 실수들이 있습니다. 순수 검정(#000000) 배경 사용이 대표적입니다. 순수 검정은 텍스트와의 대비가 너무 강해 눈이 피로해집니다. #0a0a0a, #121212, #1a1a1a 같은 매우 어두운 회색을 사용하는 것이 좋습니다.

이미지 처리를 잊는 것도 흔한 실수입니다. 흰 배경의 로고 이미지가 다크 모드에서 그대로 표시되면 매우 어색합니다. 페이지별 일관성이 깨지는 것도 문제입니다. 메인 페이지는 완벽한데 설정 페이지에서 라이트 모드 요소가 튀어나오면 사용자 경험이 무너집니다.

서드파티 임베드(유튜브, 지도, 결제 모듈)가 라이트 모드로 고정되는 것도 놓치기 쉬운 부분입니다.

비용과 판단 기준

다크 모드를 추가하면 프론트엔드 개발 시간이 약 10~15% 증가합니다. 디자인 작업까지 포함하면 전체 프로젝트 비용의 5~10% 정도가 추가됩니다. 도입할 가치가 있는 경우는 소비자 대상 앱, 콘텐츠 중심 사이트, 테크 또는 프리미엄 브랜딩을 추구하는 서비스입니다.

반면 B2B 어드민 패널, 인쇄 중심 워크플로우, 예산이 극히 제한된 MVP에서는 우선순위를 낮춰도 됩니다.

프로덕트 메이커의 접근: 다크 퍼스트

프로덕트 메이커의 자사 사이트 productmaker.io는 다크 퍼스트(Dark-first)로 설계되었습니다. $dark-bg-primary, $accent-cyan 등 커스텀 디자인 시스템을 구축해 모든 페이지에서 일관된 다크 모드 경험을 제공합니다.

여기서 핵심 인사이트가 있습니다. 다크 퍼스트로 처음부터 설계하는 것은 비교적 수월하지만, 기존 라이트 모드 사이트에 다크 모드를 후에 추가하는 것은 2~3배 더 어렵습니다. 색상 체계가 하드코딩되어 있으면 모든 컴포넌트를 일일이 수정해야 하기 때문입니다.

다크 모드를 계획하고 있다면, 프로젝트 초기부터 CSS 변수 기반의 색상 체계를 설계하는 것을 강력히 권장합니다.

다른 포스팅