[React] 선반영, 후처리 유저 경험 및 성능 향상 - 낙관적 UI 업데이트 (Optimistic UI Update)
[React] 선반영, 후처리 유저 경험 및 성능 향상 - 낙관적 UI 업데이트 (Optimistic UI Update)
[React] AbortController와 zustand로 전역 fetch 취소 구현하기 (feat. 카카오 테크) [React] AbortController와 zustand로 전역 fetch 취소 구현하기 (feat. 카카오 테크)[Express] 레이어드 아키텍쳐 구현하기 (Layered Archite
blog.juyear.dev
이전 글 읽으러 가기!
👋 소개
안녕하세요! 대학생 개발자 주이어입니다!
오늘은 skeleton UI에 대해서 간단하게 소개하고, react-loading-skeleton 라이브러리를 적용하고 사용하는 방법에 대해서 정리해보려고 합니다.
❓ Skeleton UI 란?
Skeleton UI는 조금 잘 만들어진 웹 사이트라면 흔히 볼 수 있는 UI 기법 입니다.
아마 가장 쉽게 접할 수 있는 사이트는 유튜브일 것 같은데요.
바로 위와 같이 데이터를 불러오기 전에 사용자에게 미리 보여주는 UI를 Skeleton UI라고 합니다.
쉽게 뼈대를 미리 보여준다고 이해하시면 되는데요.
이로써 사용자는 어떤 식으로 화면이 렌더링 될지 미리 예상할 수 있으며, 로딩되는 부분임에도 불구하고 사용자 경험을 향상시킬 수 있는 장점으로 연결될 수도 있습니다.
또한 Skeleton UI를 실제 화면과 유사하게 만들수록 화면이 부드럽게 전화되며, 이는 사용자에게 깊은 인상을 주는 UI가 될 수도 있습니다.
🧾 직접 만들기
import style from "./book-item-skeleton.module.css";
export default function BookItemSkeleton() {
return (
<div className={style.container}>
<div className={style.cover_img}></div>
<div className={style.info_container}>
<div className={style.title}></div>
<div className={style.subtitle}></div>
<br />
<div className={style.author}></div>
</div>
</div>
);
}
(코드는 Next를 기준으로 작성되었지만, React도 똑같은 방식으로 진행 됩니다.)
Skeleton UI를 직접 만든다면 위와 같이 빈 태그를 이용하여 뼈대를 만들고,
.container {
display: flex;
gap: 15px;
padding: 20px 10px;
border-bottom: 1px solid rgb(220, 220, 220);
}
.cover_img {
width: 80px;
height: 105px;
background-color: rgb(230, 230, 230);
}
.info_container {
flex: 1;
}
.title,
.subtitle,
.author {
width: 100%;
height: 20px;
background-color: rgb(230, 230, 230);
}
해당 코드에 css를 추가해서 Skeleton UI를 직접 구현할 수 있습니다.
당연히 복잡한 UI도 오래 걸릴 뿐 제작이 가능하며, 굳이 라이브러리를 사용하지 않아도 되긴 합니다.
하지만 라이브러리를 사용하면 빠르게 제작이 가능하고, 초보자들도 고급진 UI를 적용시킬 수 있으니 사용하는게 좋겠죠.
⚡react-loading-skeleton
react-loading-skeleton
Make beautiful, animated loading skeletons that automatically adapt to your app.. Latest version: 3.5.0, last published: 9 months ago. Start using react-loading-skeleton in your project by running `npm i react-loading-skeleton`. There are 658 other project
www.npmjs.com
(npm 공식 사이트 : react-loading-skeleton)
라이브러리를 이용해서 만드는 방법도 직접 만드는 방법과 비슷하지만 훨씬 더 많은 기능을 쉽게 이용할 수 있습니다.
npm install react-loading-skeleton
먼저 터미널에 위와 같이 입력하여 라이브러리를 다운받아 줍니다.
import style from "./Schedule-skeleton.module.css";
import Skeleton, { SkeletonTheme } from "react-loading-skeleton";
import "react-loading-skeleton/dist/skeleton.css";
function ItemSkeleton() {
return (
<>
<div className={style.timeItem}>
<div className={style.skeletonH3}>
<Skeleton height="100%" />
</div>
<div className={style.skeletonActivity}>
<Skeleton height="100%" />
</div>
<div className={style.skeletonTip}>
<Skeleton height="100%" />
</div>
<div className={style.skeletonLink}>
<Skeleton height="100%" />
</div>
</div>
<hr className={style.skeletonLine} />
</>
);
}
export default function ScheduleSkeleton() {
return (
<SkeletonTheme baseColor="#D3D3D3" highlightColor="#E0E0E0">
<div className={style.container}>
<div className={style.buttons}>
<div className={style.skeletonButton}>
<Skeleton height="100%" style={{ borderRadius: "inherit" }} />
</div>
<div className={style.skeletonButton}>
<Skeleton height="100%" style={{ borderRadius: "inherit" }} />
</div>
</div>
{Array.from({ length: 6 }).map((_, index) => (
<ItemSkeleton key={index} />
))}
</div>
</SkeletonTheme>
);
}
현재 진행 중인 프로젝트에 react-loading-skeleton을 사용하여 Skeleton UI를 제작한 코드입니다.
사실 이 라이브러리를 사용하면 굳이 CSS를 작성하지 않아도 skeleton UI를 구현할 수 있지만,
저는 기존에 구현해두었던 뼈대에 그대로 적용시키기 위해서 자체 CSS를 작성했습니다.
참고로 'react-loading-skeleton/dist/skeleton.css'는 필수로 import 해줘야 스타일이 적용됩니다.
이 라이브러리는 Skeleton 태그를 사용하여 UI를 구현할 수 있으며 기본적으로 height값과 width값을 입력할 수 있고,
이 값을 토대로 UI를 생성하게 됩니다. (CSS를 따로 작성하지 않는 경우)
이외에도 지원하는 다양한 속성이 있으니 공식 문서를 통해 확인해보시는 것을 추천드립니다.
.container {
width: 700px;
margin: 10px auto 0 auto;
}
.buttons {
display: flex;
gap: 12px;
padding: 10px 0;
border-bottom: 1px solid lightgray;
border-radius: 5px;
}
.skeletonButton {
width: 68px;
height: 36px;
background-color: lightgray;
border-radius: 10px;
overflow: hidden;
}
.skeletonH3 {
background-color: lightgray;
width: 150px;
height: 27px;
margin-top: 10px;
border-radius: 5px;
overflow: hidden;
}
.skeletonActivity {
background-color: lightgray;
width: 350px;
height: 24px;
margin-top: 16px;
border-radius: 5px;
overflow: hidden;
}
.skeletonTip {
background-color: lightgray;
width: 600px;
height: 24px;
margin-top: 5px;
border-radius: 5px;
overflow: hidden;
}
.skeletonLink {
background-color: lightgray;
width: 120px;
height: 24px;
margin-top: 16px;
border-radius: 5px;
overflow: hidden;
}
.skeletonLine {
border: none;
border-bottom: 1px solid lightgray;
}
(CSS는 참고용으로 첨부합니다.)
이렇게 라이브러리를 이용하여 Skeleton UI를 생성할 경우,
위와 같이 예쁘게 로딩되는 듯한 애니메이션도 자동으로 추가되는 것을 알 수 있습니다.
배경색과 그라데이션, 로딩되는 듯한 효과 색깔 등 다양한 색깔을 커스텀할 수 있으니 이 부분도 참고하시길 바랍니다.
😊 마무리
지금까지 Skeleton UI에 대해서 간단하게 소개하고, react-loading-skeleton 라이브러리 사용법에 대해서 정리해보았습니다.
시작 부분에 얘기했듯이 Skeleton UI 기법은 사용자 경험을 크게 향상시킬 수 있고, 요즘은 많은 사이트에서 사용되니 한번씩 사용해보시고 정리해보시길 바랍니다.
무엇보다 적은 노력으로 큰 변화를 보여줄 수 있는 부분 중 하나이니 가성비도(?) 좋은 것 같습니다.
그럼 지금까지 읽어주셔서 감사드리고, 다음에는 더 흥미롭고 유익한 글로 돌아오도록 하겠습니다!
💬 함께 공부하고 싶은 내용이 있다면 댓글이나 피드백으로 알려주세요!
[TRAIVEL] 개인 맞춤형 여행 일정 생성 플랫폼 TRAIVEL
[TRAIVEL] 개인 맞춤형 여행 일정 생성 플랫폼 TRAIVEL
🚩 소개안녕하세요. 대학생 개발자 주이어입니다!오늘은 제가 이번에 진행하는 프로젝트에 대해서 비즈니스 & 마케팅 중심으로 글을 작성해보려고 합니다.흔히 "Product Launch" 라고 불리는 스타
blog.juyear.dev
추천 글 읽으러 가기!
KYT CODING COMMUNITY Discord 서버에 가입하세요!
Discord에서 KYT CODING COMMUNITY 커뮤니티를 확인하세요. 22명과 어울리며 무료 음성 및 텍스트 채팅을 즐기세요.
discord.com
KYT CODING COMMUNITY 가입하기!
'[React]' 카테고리의 다른 글
[React] 선반영, 후처리 유저 경험 및 성능 향상 - 낙관적 UI 업데이트 (Optimistic UI Update) (2) | 2025.06.25 |
---|---|
[React] AbortController와 zustand로 전역 fetch 취소 구현하기 (feat. 카카오 테크) (4) | 2025.06.17 |
[React] React + Node.js로 사용자별 알림 기능 구현하기 (Notification System) (1) | 2025.04.26 |
[React] 실시간 검색 - debouncing 기능 구현하기 (0) | 2025.04.19 |