SweetAlert2 전역 설정으로 재사용 팝업 만들기|Global Defaults 활용

SweetAlert2 전역 설정으로 프로젝트 전역에 동일한 스타일과 옵션으로 팝업 UI를 일관성 있게 유지할 수 있습니다. Global Defaults 기능을 활용하면 매번 옵션을 작성할 필요 없이 재사용 팝업을 손쉽게 만들 수 있습니다. 이번 글에서는 전역 설정 방법과 재사용 팝업 제작, 그리고 고급 활용 예제를 함께 살펴봅니다.

👉 SweetAlert2 공식 웹페이지 바로가기

전역 설정(Global Defaults) 개념

SweetAlert2의 Swal.mixin() 또는 Swal.setDefaults()를 사용하면 모든 팝업에 공통적으로 적용되는 설정을 지정할 수 있습니다.
이 방식은 디자인, 버튼 색상, 아이콘 스타일 등을 한 번에 통일할 때 유용합니다.

전역 설정 예제 – Swal.mixin() 사용

<!-- SweetAlert2 CDN -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

<script>
// 공통 팝업 설정
const swalDefault = Swal.mixin({
  confirmButtonColor: '#3085d6',
  cancelButtonColor: '#d33',
  confirmButtonText: '확인',
  cancelButtonText: '취소',
  showCancelButton: true,
  background: '#f9f9f9',
  customClass: {
    popup: 'my-swal-popup'
  }
});

// 팝업 호출
document.getElementById('btn1').addEventListener('click', () => {
  swalDefault.fire({
    title: '전역 설정 팝업',
    text: '이 팝업은 공통 스타일을 사용합니다.',
    icon: 'info'
  });
});
</script>

<button id="btn1">팝업 열기</button>
HTML

💡 TIP

  • Swal.mixin()새로운 Swal 인스턴스를 반환하므로 변수에 담아 사용
  • CSS를 customClass로 지정해 전체 디자인을 맞출 수 있음

전역 설정 예제 – Swal.setDefaults() 사용

// SweetAlert2 기본 옵션 설정
Swal.setDefaults({
  confirmButtonColor: '#3085d6',
  cancelButtonColor: '#d33',
  showCancelButton: true,
  confirmButtonText: '확인',
  cancelButtonText: '취소'
});

// 팝업 호출
Swal.fire({
  title: 'SetDefaults 사용',
  text: '전역 기본값이 적용된 팝업입니다.',
  icon: 'success'
});
JavaScript

💡 TIP

  • setDefaultsSwal 자체의 기본 옵션을 변경
  • 프로젝트 전역에서 동일한 옵션을 쓸 때 가장 간단한 방법

재사용 팝업 함수 만들기

function showAlert(title, text, icon = 'info') {
  Swal.fire({
    title: title,
    text: text,
    icon: icon
  });
}

// 호출 예시
showAlert('환영합니다!', '로그인이 완료되었습니다.', 'success');
showAlert('경고', '다시 시도해주세요.', 'error');
JavaScript

💡 TIP

  • 재사용 함수를 만들면 코드 반복 최소화 + 유지보수 편의성 향상
  • API 호출 후 성공/실패 메시지 같은 패턴에 적합

실무 활용 팁

  • 프로젝트 규모가 클수록 전역 설정 필수 – UI 일관성 유지
  • CSS 클래스 활용 – 디자인 변경 시 코드 수정 없이 스타일 업데이트 가능
  • i18n(다국어 지원) – 전역 설정에서 버튼 텍스트를 locale에 맞춰 변경
  • 테마별 전역 설정 – mixin 여러 개를 만들어 다크모드/라이트모드 전환 가능

고급 예제 – 다크모드/라이트모드 테마 전역 설정

<style>
/* 공통 팝업 스타일 */
.my-popup {
  border-radius: 16px;
  font-size: 16px;
}

/* 다크모드 전용 */
.my-popup-dark {
  background: #2c2c2c;
  color: #fff;
}

/* 라이트모드 전용 */
.my-popup-light {
  background: #ffffff;
  color: #333;
}
</style>

<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
// 라이트모드 팝업
const swalLight = Swal.mixin({
  confirmButtonColor: '#3085d6',
  cancelButtonColor: '#d33',
  showCancelButton: true,
  customClass: {
    popup: 'my-popup my-popup-light'
  }
});

// 다크모드 팝업
const swalDark = Swal.mixin({
  confirmButtonColor: '#4cafef',
  cancelButtonColor: '#e57373',
  showCancelButton: true,
  customClass: {
    popup: 'my-popup my-popup-dark'
  }
});

// 모드 전환에 따라 팝업 호출
function showThemedAlert(mode, title, text, icon) {
  const swalInstance = mode === 'dark' ? swalDark : swalLight;
  swalInstance.fire({ title, text, icon });
}

// 예시
document.getElementById('btnLight').addEventListener('click', () => {
  showThemedAlert('light', '라이트모드 팝업', '밝은 테마입니다.', 'info');
});

document.getElementById('btnDark').addEventListener('click', () => {
  showThemedAlert('dark', '다크모드 팝업', '어두운 테마입니다.', 'info');
});
</script>

<button id="btnLight">라이트모드 팝업</button>
<button id="btnDark">다크모드 팝업</button>
HTML

💡 TIP

  • customClass.popup으로 모드별 스타일 완전 변경 가능
  • 버튼 색상, 배경, 글자 색 등 UI 전체를 테마에 맞춤

고급 예제 – API 응답별 자동 팝업 처리

// 전역 기본 설정
Swal.setDefaults({
  confirmButtonColor: '#3085d6',
  cancelButtonColor: '#d33',
  showCancelButton: false
});

// API 응답 처리 팝업 함수
function handleApiResponse(response) {
  const { status, message } = response;

  if (status === 'success') {
    Swal.fire({ title: '성공!', text: message, icon: 'success' });
  } else if (status === 'warning') {
    Swal.fire({ title: '경고', text: message, icon: 'warning' });
  } else {
    Swal.fire({ title: '실패', text: message, icon: 'error' });
  }
}

// 예시 응답
handleApiResponse({ status: 'success', message: '데이터가 저장되었습니다.' });
handleApiResponse({ status: 'error', message: '저장 중 오류가 발생했습니다.' });
JavaScript

💡 TIP

  • SPA(React, Vue) 환경에서 API 응답에 따라 팝업 자동 호출 가능
  • 응답 처리 로직과 UI 호출을 일원화해 유지보수 편리

마무리

SweetAlert2의 Global Defaults 기능을 사용하면 팝업 디자인과 옵션을 일관성 있게 유지할 수 있습니다.
Swal.mixin()은 특정 스타일 팝업 재사용에, Swal.setDefaults()는 전체 팝업 기본값 지정에 적합합니다.
고급 예제처럼 테마별 설정과 API 응답 처리 팝업을 결합하면 실무 활용도가 극대화됩니다.

관련 포스팅들

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

위로 스크롤