최근 모던 웹 개발에서는 alert() 창을 잘 쓰지 않는 추세입니다. 디자인을 해치고, 사용자 경험(UX)을 끊어먹기 때문이죠. 대신 예쁜 디자인의 '토스트 메시지(Toast)''모달(Modal)'을 주로 사용합니다.

하지만 크롬 확장프로그램, 특히 자동화 도구를 개발할 때는 여전히 alert()가 강력한 무기가 될 때가 있습니다. 오늘은 Grok 동영상 생성 코드를 예시로, 왜 때로는 세련된 토스트 대신 투박한 경고창을 써야 하는지 알아보겠습니다.


alert() vs showToast(): 무엇이 다른가?

showToast() : 비동기 알림

  • 특징: 화면 하단에 잠시 나타났다 사라지는 메시지.
  • 장점: 작업 흐름을 방해하지 않고 매끄럽다.
  • 단점: 사용자가 못 보고 지나칠 수 있다. 오류가 나도 다음 코드가 실행될 위험이 있다.

alert() : 동기 알림

  • 특징: 사용자가 '확인'을 누를 때까지 브라우저의 모든 동작을 멈춤.
  • 장점: 사용자가 무조건 보게 됨. 코드 실행을 강제로 일시 정지시킴.
  • 단점: 디자인 커스터마이징 불가, 다소 강압적인 느낌.

실제 코드 사례: Grok 자동화 기능

우리가 개발 중인 기능은 이미지를 그록(Grok) AI에게 보내 동영상을 만드는 기능입니다. 여기서 이미지 변환에 실패했을 때를 가정해 봅시다.

❌ 기존 방식 (Toast 사용)

if (!res.success) {
    this.showToast('이미지 변환 실패', 'error');
    // 사용자가 메시지를 못 보고 멍하니 기다릴 수 있음
}

토스트 메시지는 3초 뒤에 사라집니다. 만약 사용자가 다른 곳을 보고 있었다면, 왜 동영상이 안 만들어지는지 영문도 모른 채 기다리게 됩니다.

✅ 변경된 방식 (Alert 사용)

if (!res.success) {
    alert('❌ 이미지 변환에 실패했습니다.');
    return; // 확실한 중단
}

alert()를 쓰면 팝업창이 화면 중앙에 뜨고 사용자가 '확인'을 누르기 전까지는 아무것도 할 수 없습니다. 즉, "에러가 났으니 확인하고 조치해라!"라고 강력하게 신호를 주는 것입니다.

확장 프로그램 개발 시 alert() 활용 팁

  1. 치명적인 오류에만 사용하세요:
    단순한 안내 문구("저장되었습니다")는 토스트가 좋지만, 프로세스를 더 이상 진행할 수 없는 오류("API 키 없음", "이미지 로드 실패")는 alert가 효과적입니다.
  2. return과 함께 사용하세요:
    if (error) {
        alert('에러 발생!');
        return; // 여기서 코드 실행을 멈춰야 함
    }

    경고창만 띄우고 코드가 계속 실행되면 더 큰 오류를 낳습니다.

  3. Background.js에서는 사용 금지! (주의)
    매니페스트 V3의 서비스 워커(background.js)에서는 alert()를 사용할 수 없습니다. alert()는 오직 popup.jscontent script와 같이 화면이 있는 곳에서만 작동합니다.

결론

"보기 좋은 떡이 먹기도 좋다"는 말이 있지만, 개발에서 가장 중요한 건 "정확한 동작""명확한 피드백"입니다.

사용자가 오류를 인지하지 못해 발생하는 혼란을 막고 싶다면, 가끔은 구식처럼 보이는 alert() 함수가 가장 세련된 해결책이 될 수 있습니다.

오늘의 교훈: 디자인보다 중요한 건 확실한 전달력이다!