Technote

성능 최적화 실무

연재 이미지가 사이트를 느리게 하지 않으려면 8부 중 6부

SVG 를 쓸 자리와 쓰지 않을 자리

아이콘과 도표는 이미지 파일이 아니어도 됩니다. 벡터로 두면 크기별 사본이 필요 없고, 색을 CSS 로 바꿀 수 있습니다.

지금까지의 회차는 전부 픽셀 이미지를 어떻게 잘 다룰 것인가였습니다. 그런데 어떤 그림들은 애초에 픽셀일 필요가 없습니다. 아이콘 · 로고 · 도표 · 차트가 그렇습니다. 이것들을 벡터로 두면 앞선 회차의 문제들이 상당수 사라집니다.

SVG 가 이미지 파일과 다른 점

SVG 는 픽셀의 배열이 아니라 도형을 그리는 지시입니다. “이 좌표에서 저 좌표로 선을 긋고, 이 원을 이 색으로 채워라” 가 텍스트로 적혀 있습니다. 이 차이에서 세 가지 성질이 따라옵니다.

벡터로 두었을 때 따라오는 성질들

두 번째 성질이 특히 실무에서 큽니다. 브랜드 색이 바뀌면 픽셀 아이콘은 전부 다시 내보내야 하지만, SVG 는 스타일 한 줄로 따라옵니다. 다크 모드 대응도 마찬가지입니다 — 밝은 판과 어두운 판 두 벌을 관리하지 않아도 됩니다.

쓸 자리와 쓰지 않을 자리

경계는 분명합니다. 사진에는 쓰지 않습니다. 사진을 벡터로 표현하려면 수천 개의 도형이 필요해 파일이 오히려 커집니다. 또 도형 수가 아주 많은 정교한 일러스트도 주의합니다 — 브라우저가 그 도형들을 매번 그려야 하므로, 파일이 작아도 그리는 비용이 생깁니다.

그림의 복잡도와 성질이 경계를 정한다

업로드해서 쓸 것인가, 마크업에 넣을 것인가

SVG 를 쓰는 방법은 둘입니다. 하나는 이미지처럼 파일로 불러오는 것이고, 다른 하나는 마크업 안에 직접 넣는 것입니다. 색을 CSS 로 바꾸려면 후자여야 합니다 — 파일로 불러온 SVG 는 바깥 스타일이 닿지 않습니다.

여기서 한 가지 주의가 필요합니다. 워드프레스가 기본적으로 SVG 업로드를 허용하지 않는 데는 이유가 있습니다. SVG 는 스크립트를 품을 수 있는 문서 형식이기 때문에, 검증 없이 업로드를 열면 편집 권한을 가진 사람이 실수로 위험한 파일을 올릴 수 있습니다. 업로드를 허용해야 한다면 정화(sanitize) 처리를 함께 두고, 권한도 필요한 역할에만 줍니다.

실무에서 가장 안전하고 편한 조합은 디자이너가 만든 SVG 를 개발자가 검토해 테마 자산으로 넣는 것입니다. 브랜드 아이콘 세트처럼 자주 바뀌지 않는 자산에 특히 잘 맞습니다.

보안 관점의 배경은 보안 아카이브에서 다루고, 아이콘 자산을 정리하고 안전하게 배선하는 작업은 최적화 지원 사업의 범위 안에 있습니다.

다음 회차

이미지는 정리됐습니다. 다음 회차는 페이지에서 가장 무거워지기 쉬운 요소 — 동영상 임베드입니다. 아무도 재생 버튼을 누르지 않아도 로드되는 것들이 있습니다.

이 주제의 다른 글

노하우 목록으로

성능 최적화 심화

프론트엔드 예산 — 상한을 정하고 지키는 법

페이지는 한 번에 무거워지지 않습니다. 각각 합리적인 작은 추가가 쌓여 무거워집니다. 상한을 정하고 재는 절차가 그 누적을 끊습니다.

개발자 4분 읽기

성능 최적화 심화

전환 감사 — 유입부터 완료까지 새는 곳 찾기

아무도 도달하지 않는 페이지를 다듬는 일이 가장 흔한 낭비입니다. 경로 전체를 처음부터 끝까지 걸어 보면 어디서 새는지 먼저 보입니다.

마케터 4분 읽기

성능 최적화 실무

팝업의 대가 — 검색과 전환에 동시에 걸립니다

모바일에서 본문을 가리는 팝업은 검색 평가에서 불리하게 작용하고, 같은 팝업이 전환에서도 비용을 만듭니다. 조절할 수 있는 것은 타이밍 · 트리거 · 닫기 세 가지입니다.

마케터 4분 읽기

₩270,000 · 신청하기