프로그레스바

컴포넌트

프로그레스바

Progress Bar

프로그레스바는 진행 중인 작업이 어디까지 왔는지 막대로 보여 주는 요소로, 진행률을 알 수 있는지에 따라 두 형태로 나뉩니다.

60%
종류
진행률60%

정의

프로그레스바는 진행 중인 작업이 지금 어디까지 왔는지 막대로 보여 주는 요소입니다. 크게 두 종류로 나뉩니다. 하나는 진행률을 계산할 수 있을 때 쓰는 형태로, 파일 업로드처럼 전체 대비 몇 퍼센트가 끝났는지 알 수 있으면 막대가 그만큼 채워집니다. 다른 하나는 진행률을 알 수 없을 때 쓰는 형태로, 서버 응답을 기다리는 동안처럼 끝을 예측하기 어려우면 막대 위로 무언가가 계속 흘러가는 애니메이션을 반복해 작업이 멈추지 않고 진행되고 있음을 알립니다. 이 둘을 구분해 쓰는 것이 핵심이며, 어떤 형태를 고르느냐는 진행률을 계산할 수 있느냐 없느냐에 따라 자연히 정해집니다.

왜 중요한가

프로그레스바가 중요한 이유는 사용자의 기다림을 견딜 만한 것으로 바꿔 주기 때문입니다. 똑같은 시간을 기다리더라도, 얼마나 남았는지 눈에 보이면 사람은 훨씬 덜 답답해하고 화면을 떠나지 않습니다. 아무 피드백 없이 멈춰 있는 화면은 사용자에게 고장 났다는 의심을 심어 주지만, 조금씩 차오르는 막대는 시스템이 살아서 일하고 있다는 안심을 줍니다. 스피너가 그저 기다리라는 신호라면, 진행률을 아는 프로그레스바는 얼마나 남았는지까지 알려 주는 더 친절한 신호입니다. 그래서 남은 시간을 예측할 수 있는 작업일수록 프로그레스바로 진행 상황을 보여 주는 편이 사용자 경험에 크게 도움이 됩니다.

흔한 실수

  • 진행률을 알 수 있는데도 흐르는 애니메이션만 보여 주는 경우입니다. 실제로는 퍼센트를 계산할 수 있는 작업인데 막연히 도는 표시만 쓰면, 사용자는 끝이 언제인지 가늠하지 못해 불필요하게 불안해합니다.
  • 막대가 중간에 오래 멈춰 있는 경우입니다. 90퍼센트에서 한참을 정지해 있으면 사용자는 진행 표시 자체를 믿지 못하게 되어, 차라리 없는 편이 나았을 신뢰를 잃고 작업이 멈춘 것은 아닌지 의심하게 됩니다.
  • 진행이 끝난 뒤 아무 마무리 신호도 주지 않는 경우입니다. 막대가 슬그머니 사라지기만 하면 사용자는 작업이 성공했는지 실패했는지 몰라 한 번 더 확인하게 되고, 끝났다는 확신을 얻지 못한 채 화면을 떠나게 됩니다.

실무 팁

  • 진행률을 계산할 수 있으면 채워지는 막대로 퍼센트를 보여 주고, 알 수 없으면 흐르는 형태를 쓰세요. 안다는 것을 아는 대로, 모른다는 것을 모르는 대로 정직하게 표현하는 것이 사용자에게 가장 큰 안심을 줍니다.
  • 아주 짧게 끝나는 작업에는 프로그레스바를 굳이 띄우지 마세요. 나타났다 곧바로 사라지는 막대는 오히려 화면을 산만하게 만들고 깜빡임처럼 느껴져, 없는 편이 더 매끄럽게 보일 때가 많습니다.
  • 막대와 함께 지금 무엇을 하는 중인지 짧은 문구를 곁들이면 좋습니다. 파일 정리 중처럼 맥락을 덧붙이면 같은 시간도 더 짧게 느껴지고, 사용자는 자신이 무엇을 기다리는지 이해한 채로 기다리게 되어 답답함이 한결 줄어듭니다.

AI에게 시키기

로딩/대기 UI를 처음부터 설계할 때

[작업 설명 — 예: 이미지 여러 장 업로드]의 진행 표시를 설계해줘. 먼저 이 작업이 진행률(전체 대비 몇 %)을 계산할 수 있는지부터 판단해서, 계산 가능하면 그만큼 채워지는 determinate 막대로, 서버 응답 대기처럼 끝을 예측 못 하면 계속 흘러가는 indeterminate 형태로 골라 이유와 함께 알려줘. 1초 안에 끝나는 짧은 작업이면 깜빡임처럼 보이니 막대를 아예 띄우지 말라고 판단해주고, 막대 옆엔 '파일 정리 중' 같은 지금 뭐 하는지 한 줄 상태 문구를 같이 넣어줘. determinate면 role="progressbar"에 aria-valuenow/aria-valuemin/aria-valuemax까지 붙인 마크업으로 줘.

도는 스피너만 있는데 실제론 진행률을 알 수 있을 때

아래에 붙여넣을 코드는 진행률을 알 수 있는 작업인데도 계속 도는 indeterminate 표시만 쓰고 있어. [진행 데이터 출처 — 예: XHR upload.onprogress의 loaded/total]로 실제 퍼센트를 계산해서 그 값만큼 채워지는 determinate 막대로 바꿔줘. 막대는 실제 진행에 맞춰 정직하게 움직이게 하고 가짜로 90%에 멈춰 두지 말고, 다 차면 100%까지 도달시킨 뒤 완료 상태로 넘어가게 해줘. role="progressbar"의 aria-valuenow를 실제 %로 갱신하고 aria-valuemin=0·aria-valuemax=100을 붙인 코드로 줘.

이미 만든 프로그레스바가 어딘가 미덥지 않을 때(점검)

아래에 붙여넣을 프로그레스바 코드를 사용자 신뢰 관점에서 점검해줘. 특히 막대가 90% 같은 지점에서 오래 멈춰 사용자가 표시 자체를 못 믿게 되는 구간이 있는지 찾아 고쳐주고, 작업이 끝난 뒤 막대가 슬그머니 사라지기만 하는지도 봐줘. 끝났으면 성공/실패를 명확히 알리는 완료 신호(예: 체크 아이콘 + '완료' 또는 오류 메시지)를 반드시 넣어서 사용자가 결과를 한 번 더 확인하지 않아도 되게 해줘. 발견한 문제와 고친 부분을 근거와 함께 정리해줘.

관련 개념