색상 코드 완벽 가이드: HEX, RGB, HSL의 차이와 활용
디지털 색상 표현의 역사
웹 디자인에서 색상을 코드로 표현하는 방법은 크게 세 가지가 있습니다: HEX, RGB, HSL. 각각은 장단점이 있으며, 상황에 따라 적절한 형식을 선택하는 것이 중요합니다.
1990년대 초 웹이 탄생했을 때, 색상은 16진수 코드(HEX)로 표현되었습니다. 이는 HTML에서 간결하고 표준화된 방식이었기 때문입니다. 1996년 CSS1이 등장하면서 rgb() 함수가 추가되었고, 2011년 CSS3에서는 인간 친화적인 hsl() 함수가 표준화되었습니다.
현대 웹 디자인에서는 CSS 변수(Custom Properties)와 HSL을 결합한 확장 가능한 색상 시스템이 대세입니다. HSL은 색상 변형이 쉬워 다크 모드, 테마 변경, 동적 색상 조정에 최적입니다.
HEX 색상: #RRGGBB 형식
HEX란?
HEX 코드는 16진수(Hexadecimal)로 색상을 표현하는 방식입니다. # 기호 뒤에 6자리 (또는 3자리 단축형)로 Red, Green, Blue 값을 나타냅니다.
#FF5733
- FF = Red (255)
- 57 = Green (87)
- 33 = Blue (51)
16진수 변환 원리
| 10진수 | 16진수 | 설명 |
|---|---|---|
| 0 | 00 | 최소값 (색상 없음) |
| 127 | 7F | 중간값 |
| 255 | FF | 최대값 (전체 밝기) |
단축 표기법
같은 숫자가 두 번 반복되면 3자리로 축약할 수 있습니다.
#FF0000=#F00(빨강)#00FF00=#0F0(초록)#0000FF=#00F(파랑)#FFFFFF=#FFF(흰색)#000000=#000(검정)
HEX의 장점
- 간결함: 6자리로 모든 색상 표현 (약 1,677만 색)
- 널리 사용: 디자인 툴, 컬러 피커에서 기본 형식
- 호환성: 모든 브라우저에서 지원 (IE 3.0부터)
HEX의 단점
- 가독성 낮음:
#3498DB가 어떤 색인지 즉시 파악 어려움 - 조작 어려움: “밝기를 20% 높이기” 같은 작업이 직관적이지 않음
- 투명도 미지원: 8자리 HEXA (#RRGGBBAA)는 최신 브라우저만 지원
RGB 색상: 빛의 삼원색
RGB란?
RGB는 Red, Green, Blue의 약자로, 각 색상을 0~255 범위의 십진수로 표현합니다. 빛의 삼원색 이론에 기반하며, 세 색을 섞으면 다양한 색상을 만들 수 있습니다.
rgb(255, 87, 51)
- 255 = Red (최대)
- 87 = Green (중간)
- 51 = Blue (낮음)
RGB vs HEX 비교
| 색상 | HEX | RGB | 미리보기 |
|---|---|---|---|
| 빨강 | #FF0000 |
rgb(255, 0, 0) |
|
| 초록 | #00FF00 |
rgb(0, 255, 0) |
|
| 파랑 | #0000FF |
rgb(0, 0, 255) |
|
| 주황 | #FF5733 |
rgb(255, 87, 51) |
|
| 보라 | #9B59B6 |
rgb(155, 89, 182) |
|
| 청록 | #1ABC9C |
rgb(26, 188, 156) |
RGBA: 투명도 지원
RGB에 Alpha(투명도) 채널을 추가하면 반투명 색상을 표현할 수 있습니다. Alpha 값은 0 (완전 투명) ~ 1 (불투명) 범위입니다.
rgba(255, 87, 51, 1)
rgba(255, 87, 51, 0.7)
rgba(255, 87, 51, 0.4)
rgba(255, 87, 51, 0.1)
RGB의 장점
- 직관적: 0~255 숫자로 이해하기 쉬움
- 계산 용이: JavaScript에서 산술 연산 가능
- 투명도 지원: RGBA로 반투명 색상 표현
- 범용성: Photoshop, Canvas API 등에서 기본 사용
RGB의 단점
- 색상 변형 어려움: “밝기만 조절” 같은 작업이 복잡
- 긴 표기: HEX보다 문자 수 많음 (rgb(255, 87, 51) vs #FF5733)
HSL 색상: 인간 친화적 표현
HSL란?
HSL은 Hue(색조), Saturation(채도), Lightness(밝기)의 약자로, 색상을 인간이 인지하는 방식과 유사하게 표현합니다.
- Hue (색조): 0~360도 (색상환의 각도)
- 0° / 360° = 빨강
- 120° = 초록
- 240° = 파랑
- Saturation (채도): 0%~100% (색의 순수도)
- 0% = 회색 (무채색)
- 100% = 순수한 색
- Lightness (밝기): 0%~100%
- 0% = 검정
- 50% = 기본 색
- 100% = 흰색
hsl(9, 100%, 60%)
- 9 = 주황 계열 (색조)
- 100% = 순수한 색 (채도)
- 60% = 약간 밝음 (밝기)
색조(Hue) 색상환
| 각도 | 색상 | HSL 예시 | 미리보기 |
|---|---|---|---|
| 0° / 360° | 빨강 | hsl(0, 100%, 50%) |
|
| 60° | 노랑 | hsl(60, 100%, 50%) |
|
| 120° | 초록 | hsl(120, 100%, 50%) |
|
| 180° | 청록 | hsl(180, 100%, 50%) |
|
| 240° | 파랑 | hsl(240, 100%, 50%) |
|
| 300° | 자홍 | hsl(300, 100%, 50%) |
밝기(Lightness) 변화
L: 10%
L: 30%
L: 50%
L: 70%
L: 90%
HSL의 장점
- 색상 변형 용이: 밝기만 조절하거나 채도만 변경 가능
- 직관적: “파란색의 밝은 버전” 같은 개념 표현 쉬움
- 디자인 시스템 최적: CSS 변수로 테마 색상 관리 편리
- 접근성: 대비 조절이 쉬워 WCAG 접근성 기준 충족 용이
HSL의 단점
- 브라우저 지원: IE 8 이하에서 미지원 (2026년엔 무관)
- 색 공간 한계: 지각적으로 균일하지 않음 (L*a*b*에 비해)
세 형식 비교: 언제 무엇을 쓸까?
| 기준 | HEX | RGB | HSL |
|---|---|---|---|
| 표기 길이 | 짧음 (#FF5733) | 중간 (rgb(255,87,51)) | 중간 (hsl(9,100%,60%)) |
| 가독성 | 낮음 | 중간 | 높음 |
| 색상 조작 | 어려움 | 중간 | 쉬움 |
| 투명도 | 8자리 필요 (#RRGGBBAA) | RGBA 지원 | HSLA 지원 |
| 디자인 툴 | 기본 형식 | Photoshop 등에서 사용 | 일부 툴만 지원 |
| JS 조작 | 변환 필요 | 직접 연산 가능 | 테마 변경 용이 |
| 브라우저 지원 | 완벽 | 완벽 | IE 9+ (2026년엔 무관) |
권장 사용 시나리오
HEX 사용 권장
- 디자인 툴에서 복사한 색상
- 간결한 코드 선호
- 정적 색상 (변경 없음)
- 레거시 프로젝트
RGB 사용 권장
- Canvas API, 이미지 처리
- JavaScript로 색상 계산
- 투명도 필요 (RGBA)
- Photoshop 작업
HSL 사용 권장
- 디자인 시스템 구축
- 다크 모드 / 테마 변경
- 색상 변형 (밝기/채도 조절)
- 접근성 개선 (대비 조절)
색상 변환 방법
HEX → RGB
function hexToRgb(hex) {
const r = parseInt(hex.slice(1, 3), 16);
const g = parseInt(hex.slice(3, 5), 16);
const b = parseInt(hex.slice(5, 7), 16);
return `rgb(${r}, ${g}, ${b})`;
}
hexToRgb('#FF5733'); // "rgb(255, 87, 51)"
RGB → HEX
function rgbToHex(r, g, b) {
return '#' + [r, g, b]
.map(x => x.toString(16).padStart(2, '0'))
.join('').toUpperCase();
}
rgbToHex(255, 87, 51); // "#FF5733"
RGB → HSL
function rgbToHsl(r, g, b) {
r /= 255; g /= 255; b /= 255;
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
let h, s, l = (max + min) / 2;
if (max === min) {
h = s = 0; // achromatic
} else {
const d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r: h = ((g - b) / d + (g < b ? 6 : 0)) / 6; break;
case g: h = ((b - r) / d + 2) / 6; break;
case b: h = ((r - g) / d + 4) / 6; break;
}
}
return `hsl(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`;
}
rgbToHsl(255, 87, 51); // "hsl(9, 100%, 60%)"
2026년 모던 웹 개발 트렌드
CSS 변수 + HSL로 디자인 시스템 구축
:root {
/* HSL로 기본 색상 정의 */
--primary-h: 9;
--primary-s: 100%;
--primary-l: 60%;
/* 변형 색상 자동 생성 */
--primary: hsl(var(--primary-h), var(--primary-s), var(--primary-l));
--primary-light: hsl(var(--primary-h), var(--primary-s), 80%);
--primary-dark: hsl(var(--primary-h), var(--primary-s), 40%);
}
/* 다크 모드 */
[data-theme="dark"] {
--primary-l: 70%; /* 밝기만 조절 */
}
/* 사용 */
.button {
background: var(--primary);
}
.button:hover {
background: var(--primary-dark);
}
동적 색상 생성
/* 기본 색만 정의하면 나머지 자동 생성 */
:root {
--brand-color: 220; /* 파란색 */
}
.primary { color: hsl(var(--brand-color), 70%, 50%); }
.secondary { color: hsl(calc(var(--brand-color) + 30), 70%, 50%); }
.tertiary { color: hsl(calc(var(--brand-color) + 60), 70%, 50%); }
접근성 개선: 대비 자동 조절
:root {
--text-color: hsl(0, 0%, 20%);
--bg-color: hsl(0, 0%, 98%);
}
/* 다크 모드: 밝기만 반전 */
[data-theme="dark"] {
--text-color: hsl(0, 0%, 95%);
--bg-color: hsl(0, 0%, 10%);
}
ToolZipper 색상 도구
결론
HEX, RGB, HSL은 각각 고유한 장점이 있으며, 상황에 맞게 선택하는 것이 중요합니다. 2026년 웹 개발에서는 HSL과 CSS 변수를 결합한 확장 가능한 디자인 시스템이 표준이 되어가고 있습니다.
핵심 요약
- HEX: 16진수 6자리 (#FF5733), 간결하고 가장 널리 사용
- RGB: rgb(255, 87, 51), 0-255 범위, 직관적이고 계산 용이
- HSL: hsl(9, 100%, 60%), 색조/채도/밝기, 색상 변형에 최적
- 투명도: RGBA와 HSLA로 0~1 범위 alpha 값 지원
- 2026년 트렌드: CSS 변수 + HSL로 디자인 시스템 구축, 다크 모드 쉬움
- 권장: 정적 색상 = HEX, 계산/투명도 = RGB, 테마/변형 = HSL
지금 바로 색상 변환기에서 세 형식을 비교해보세요!