마케팅 푸시
🚀 추가된 버전: v1.10.0 v1.10.1 v1.10.1
🛠️ 개선된 버전: v1.11.2 v1.11.3 v1.11.3 - 네이티브 마케팅 수신 동의 팝업, 앱 설정 화면 추가
🔔 최신화 일자: 2026-08-24
이 문서는 광고성 푸시 알림(마케팅 푸시)의 법적 요구사항과 nachocode를 활용한 구현 방법을 안내합니다.
나쵸코드 대시보드의 광고성 푸시 설정에서 선택한 팝업 개발 방식에 따라 필요한 작업이 달라집니다.
- 나쵸코드로 만들게요 → 공통 SDK 연동과 [방법 A] 나쵸코드 동의 팝업 사용하기의 대시보드 설정만 진행하면 됩니다.
- 직접 개발할게요 → 공통 SDK 연동에 더해, [방법 B] 동의 팝업 직접 개발하기를 참고하여 동의 팝업과 동의 설정·조회를 직접 구현합니다.
아직 선택하지 않았다면 구현 방식 선택하기에서 두 방식을 비교해 보세요.
마케팅 푸시란?
마케팅 푸시(광고성 푸시)는 영리 목적으로 제품, 서비스, 이벤트 등을 홍보하기 위해 발송하는 푸시 알림입니다.
- 할인 쿠폰 및 프로모션 정보
- 이벤트 참여 유도 메시지
- 신규 상품 출시 안내
- 마케팅 캠페인 알림
마케팅 푸시는 정보성 푸시(주문 배송 안내, 결제 완료, 시스템 알림 등)와 구분되며,
정보통신망법에 따라 반드시 사용자의 사전 동의가 필요합니다.
법적 준수 의무
정보통신망법 제50조
정보통신망 이용촉진 및 정보보호 등에 관한 법률 제50조
제50조(영리목적의 광고성 정보 전송 제한)
① 누구든지 전자적 전송매체를 이용하여 영리목적의 광고성 정보를 전송하려는 자는 그 수신자의 명시적인 사전 동의를 받아야 한다.
② 제1항에 따른 사전 동의를 받은 자는 수신자가 언제든지 수신 거부 의사를 쉽게 표시할 수 있도록 하여야 한다.
③ 제1항에 따른 광고성 정보를 오후 9시부터 그 다음 날 오전 8시까지의 시간에 전송하려는 경우에는 제1항에 따른 사전 동의를 받을 때 별도로 야간 시간대 수신 동의를 받아야 한다.
마케팅 푸시 vs 정보성 푸시
| 구분 | 마케팅 푸시 (광고성) | 정보성 푸시 |
|---|---|---|
| 목적 | 상업적 홍보, 마케팅 | 서비스 이용에 필요한 정보 제공 |
| 법적 요구 | 사전 동의 필수 (정보통신망법 제50조) | 사전 동의 불필요 (서비스 이용 필수 정보) |
| 예시 | 할인 쿠폰, 이벤트 안내, 신상품 출시 | 주문 배송 안내, 결제 완료, 시스템 알림 |
| 야간 전송 | 별도 동의 필수 (21:00~08:00) | 제한 없음 (필요 시 전송 가능) |
| 수신 거부 | 언제든지 가능해야 함 | 서비스 필수 알림은 거부 불가 |
법적 준수 체크리스트
필수 준수 사항
- 사전 동의 받기: 마케팅 푸시 전송 전 반드시 사용자 동의 획득
- 야간 푸시 별도 동의: 21:00~08:00 시간대 전송 시 별도 동의 필요
- 명확한 동의 문구: 어떤 정보를 받게 되는지 구체적으로 설명
- 선택적 동의: 마케팅 동의는 서비스 이용의 필수 조건이 아님을 명시
- 수신 거부 기능: 설정에서 언제든 동의 철회 가능하도록 구현
- 동의 기록 보관: 서비스 서버에 동의 일시 및 내역 저장 (법적 분쟁 대비)
권장 사항
- 정보성 푸시와 구분: 시스템 알림과 마케팅 알림을 명확히 구분
- 동의 철회 안내: 마케팅 푸시 발송 시 수신 거부 방법 안내
nachocode 마케팅 동의 관리
어떤 구현 방식을 선택하든, nachocode의 마케팅 동의 관리 구조와 정책은 동일하게 적용됩니다.
이 섹션은 [방법 A]와 [방법 B] 모두에 공통으로 해당하는 내용입니다.
게스트 vs 회원 동의
- 게스트 동의 (
guest): 로그인하지 않은 상태에서 해당 기기 에 대한 마케팅 푸시 수신 동의 - 회원 동의 (
user): 로그인한 상태에서 해당 회원에 대한 마케팅 푸시 수신 동의
이 두 동의는 법적으로 별개이며, 각각 독립적으로 관리됩니다.
각 동의는 다음 세 가지 값으로 관리됩니다.
| 값 | 의미 |
|---|---|
true | 마케팅 푸시 수신 동의 |
false | 마케팅 푸시 수신 거부 |
null | 아직 동의 여부를 선택하지 않음 |
로그인 상태(게스트/회원)의 전환은 Nachocode.user.setUserId()와 Nachocode.user.deleteUserId()
호출을 기준으로 판단되며, 동의를 저장하는 시점의 로그인 상태에 따라 게스트 동의 또는 회원 동의로 기록됩니다.
// 비로그인 상태에서 동의 저장 → `guest` 동의로 기록
// 로그인(setUserId 호출) 후 동의 저장 → `user` 동의로 기록
야간 푸시 별도 동의
21:00 ~ 08:00 야간 시간대에 마케팅 푸시를 전송하려면 별도의 야간 마케팅 푸시 수신 동의가 필요합니다.
- 마케팅 푸시 동의와 야간 푸시 동의 모두 있어야 야간 시간대 광고성 푸시 알림 전송이 가능합니다.
야간 동의를 받는 방법은 구현 방식에 따라 다릅니다.
- [방법 A] 나쵸코드 동의 팝업: 팝업의 [선택] 야간 광고성 푸시 수신 동의 항목으로 함께 수집되며, 이후 앱 설정 화면에서 언제든 변경할 수 있습니다.
- [방법 B] 직접 개발:
setNightAllowed()또는setMarketingPreference()로 직접 설정합니다. (동의 설정하기 참고)
로그아웃, 회원 탈퇴 시 중요한 법적 원칙
정보통신망법 준수를 위해 다음 규칙을 반드시 지켜야 합니다.
- 회원이 수신거부하면 게스트 동의도 함께 철회됩니다
- 로그아웃 후에는 게스트 동의 상태를 기준으로 마케팅 푸시 전송 여부 판단
- 게스트 동의가 거부 상태라면 로그아웃 후 마케팅 푸시 전송 금지
- 회원 탈퇴 시, 회원/게스트 여부에 상관없이 모든 마케팅 동의 철회
nachocode는 이러한 법적 요구사항을 자동으로 준수하도록 설계되어 있습니다.
위 원칙이 실제 호출 흐름에서 어떻게 적용되는지는 [방법 B]의 동작 시나리오에서 코드 예시로 확인할 수 있습니다.
[방법 A]에서는 나쵸코드 팝업과 앱 설정 화면에서의 사용자 선택이 동일한 역할을 하 며, 상태 전환 원리는 같습니다.
nachocode가 자동으로 처리해주는 것들
위의 법적 원칙을 지키기 위한 복잡한 토픽 구독·상태 전환 로직은 nachocode가 자동으로 처리합니다.
개발자는 SDK 연동 메서드를 호출하기만 하면 되고, 사용자는 나쵸코드 팝업·앱 설정 화면에서 선택하기만 하면 됩니다.
| 시점 | 트리거 | nachocode가 자동으로 처리하는 것 |
|---|---|---|
| 로그인 | setUserId() | 회원 상태로 전환 · 푸시 토큰 등록 · 해당 userId의 기존 동의 정보 조회 및 자동 복원 |
| 동의 변경 | setMarketingAllowed() / setNightAllowed() 또는 나쵸코드 팝업·앱 설정 화면 선택 | 회원 여부를 확인하여 마케팅 토픽 구독/구독해제 자동 처리 |
| 로그아웃 | deleteUserId() | 게스트 상태로 자동 전환 · 저장된 게스트 동의 정보 자동 조회 · user 토픽 구독해제 · guest 토픽 구독 (동의한 경우에만) |
| 회원 탈퇴 | withdrawUser() | nachocode 서버에서 해당 userId의 모든 정보 완전 삭제 (모든 디바이스의 푸시 토큰 등록 해제, 마케팅 동의·설정 삭제) · 게스트 상태로 전환 · 모든 마케팅 토픽 구독해제 |
로그아웃·회원 탈퇴 후에도 법적으로 올바른 동의 상태가 자동으로 유지됩니다.
개발자는 복잡한 토픽 관리 로직을 작성할 필요 없이, SDK 메서드 호출만으로 모든 것이 자동 처리됩니다.
nachocode는 GDPR 및 개인정보 보호법을 준수합니다.
- 서버 측 완전 삭제: 회원 탈퇴 시 nachocode 서버에 저장된 해당 userId의 모든 데이 터가 복구 불가능하게 삭제됩니다
- 다중 디바이스 지원: 사용자가 여러 디바이스를 사용하더라도 모든 디바이스의 데이터가 삭제됩니다
- 법적 요구사항 충족: 탈퇴 즉시 모든 마케팅 푸시 전송이 중단되며 재가입 전까지 발송되지 않습니다
구현 방식 선택하기
nachocode는 광고성 푸시 수신 동의 팝업을 두 가지 방식으로 구현할 수 있도록 지원합니다.
나쵸코드 대시보드 > 푸시 알림 > 설정 > 광고성 푸시 설정 탭 > 광고성 푸시 활성화 > 1. 팝업 개발 방식

| 구분 | [방법 A] 나쵸코드로 만들게요 | [방법 B] 직접 개발할게요 |
|---|---|---|
| 동의 팝업 UI | 대시보드에서 노코드로 제작 (팝업 / 바텀 시트 / 풀스크린) | 웹 프론트엔드에서 직접 개발 |
| 팝업 노출 시점 | 대시보드에서 설정 (로그인 직후 또는 앱 실행 시) | 직접 제어 |
| 동의 저장·토픽 구독 | 네이티브 레이어에서 자동 처리 | 동의 설정 메서드 직접 호출 |
| 야간 동의 수집 | 팝업 내 선택 항목으로 함께 수집 | 직접 구현 |
| 수신 동의 변경 화면 | 네이티브 앱 설정 화면 제공 | 직접 구현 (또는 네이티브 앱 설정 화면 활용) |
| 필요한 SDK 연동 | 공통 SDK 연동 3가지 메서드만 | 공통 SDK 연동 + 동의 설정·조회 메서드 |
| 필요 버전 | SDK v1.11.2+, 앱소스 v1.11.3+ | SDK v1.10.0+, 앱소스 v1.10.1+ |
| 추천 대상 | 빠르게 도입하고 싶거나 개발 리소스가 제한적인 경우 | 팝업 디자인, 노출 시점, 동의 항목을 세밀하게 제어해야 하는 경우 |
| 가이드 바로가기 | [방법 A] 나쵸코드 동의 팝업 사용하기 | [방법 B] 동의 팝업 직접 개발하기 |
어떤 방식을 선택하더라도 마케팅 동의 관리 정책과 아래의 SDK 연동은 공통으로 적용됩니다.
SDK 연동
어떤 방식을 선택하든, 앱은 사용자의 상태 변화(로그인·로그아웃·회원 탈퇴)를 nachocode에 알려주어야 합니다.
대시보드 광고성 푸시 설정의 설정 마무리 단계에서 안내하는 SDK 연동이 바로 이 작업입니다.
광고성 푸시 알림이 고객에게 도착하지 않습니다.
nachocode 서버와 네이티브 레이어는 아래 메서드 호출 없이는 사용자의 로그인 상태를 스스로 알 수 없으므로, 동의 팝업 노출과 마케팅 토픽 구독이 정상적으로 처리되지 않습니다.
서비스의 해당 시점에 아래 3가지 메서드를 호출해 주세요.
| 시점 | 호출 메서드 | 설명 |
|---|---|---|
| 로그인 | Nachocode.user.setUserId(userId) | 회원 상태로 전환하고 해당 회원의 동의 정보를 동기화합니다 |
| 로그아웃 | Nachocode.user.deleteUserId() | 게스트 상태로 전환합니다 |
| 회원 탈퇴 | Nachocode.user.withdrawUser() | 모든 유저·디바이스 정보를 삭제합니다 |
각 호출 시 nachocode가 자동으로 처리하는 내용은 nachocode가 자동으로 처리해주는 것들을 참고하세요.
로그인 시 — setUserId()
사용자가 로그인에 성공한 직후 호출합니다.
[방법 A]를 사용하는 경우, 이 호출을 기준으로 동의 팝업이 노출됩니다.
// 로그인 핸들러에서 사용
async function handleLogin(userId) {
// 서비스 로그인 성공 후 nachocode에 사용자 ID 설정
const result = await Nachocode.user.setUserId(userId);
if (result.status === 'success') {
console.log('사용자 ID가 설정되었습니다:', userId);
} else {
console.error('사용자 ID 설정 실패:', result.message);
}
}
setUserId()는 registerPushToken()이 수행하던 푸시 토큰 등록을 내부적으로 함께 처리합니다.
setUserId()를 사용한다면 registerPushToken()을 중복 호출하지 않는 것을 권장합니다.
앱을 다시 실행했을 때 저장된 세션으로 자동 로그인되는 경우에도 setUserId()를 호출해 주세요.
앱 실행 시마다 호출해도 문제없으며, 이미 동의 여부를 선택한 사용자에게는 팝업이 중복 노출되지 않습니다.
로그아웃 시 — deleteUserId()
사용자가 로그아웃할 때 호출합니다. 앱이 게스트 상태로 전환되며, 저장되어 있던 게스트 동의 정보를 기준으로 마케팅 푸시 수신 여부가 결정됩니다.
// 로그아웃 핸들러에서 사용
async function handleLogout() {
// 서비스 로그아웃 처리 후 nachocode에 사용자 ID 제거
const result = await Nachocode.user.deleteUserId();
if (result.status === 'success') {
console.log('사용자 ID가 삭제되었습니다.');
} else {
console.error('사용자 ID 삭제 실패:', result.message);
}
}
명시적으로 사용자가 로그아웃 할 때뿐 아니라, 토큰, 세션 만료 등으로 인한 유저 로그아웃 시에도 반드시 deleteUserId()를 호출해서 유저 상태를 관리해주세요.
네이티브 레이어와 nachocode 측 서버에서는 해당 메서드를 호출하지 않을 경우 유저의 현재 로그인 상태를 자체적으로 알 수 없습니다.
회원 탈퇴 시 — withdrawUser()
사용자가 회원 탈퇴를 완료했을 때 호출합니다. nachocode 서버에서 해당 회원의 모든 유저 및 디바이스 정보가 완전히 삭제되고, 마케팅 푸시 전송이 즉시 중단됩니다.
// 회원 탈퇴 핸들러에서 사용
async function handleWithdraw() {
// 서비스 회원 탈퇴 처리 후 nachocode 유저 및 디바이스 정보 초기화
const result = await Nachocode.user.withdrawUser();
if (result.status === 'success') {
console.log('사용자 탈퇴가 완료되었습니다.');
// 탈퇴 완료 후 처리 (ex. 로그인 페이지로 이동)
window.location.href = '/login';
} else {
console.error('사용자 탈퇴 실패:', result.message);
}
}
withdrawUser()는 마케팅 동의 정보를 포함한 모든 사용자 데이터를 영구 삭제합니다. 실행 전에 사용자에게 명확한 확인 절차를 제공하는 것을 강력히 권장합니다.
서버에 서 [DELETE] /api/app-user/v2 API를 호출하여 withdrawUser()와 동일하게 탈퇴 처리할 수 있습니다.
[방법 A] 나쵸코드 동의 팝업 사용하기
대시보드에서 나쵸코드로 만들게요를 선택하면, 광고성 푸시 수신 동의 팝업이 앱의 네이티브 레이어에서 직접 제공됩니다.
동의 팝업 UI, 동의 저장, 토픽 구독, 수신 동의 변경 화면까지 모두 nachocode가 처리하므로,
개발자는 공통 SDK 연동의 3가지 메서드만 연동하면 됩니다.
1단계. 대시보드에서 팝업 설정하기
대시보드의 광고성 푸시 설정은 아래 4단계로 구성됩니다.



| 단계 | 설정 항목 | 내용 |
|---|---|---|
| 1 | 팝업 개발 방식 | 나쵸코드로 만들게요 선택 |
| 2 | 팝업 | 팝업 타입(팝업 / 바텀 시트 / 풀스크린), 모서리(각진 / 보통 / 둥근), 제목·본문 등 팝업의 디자인과 문구 설정 |
| 3 | 이벤트 | 팝업 노출 시점 설정 — 로그인 기능 있어요(로그인 직후 노출) / 로그인 기능 없어요(앱 실행 시 노출) |
| 4 | 앱 설정 화면 | 사용자가 언제든 수신 동의 여부를 변경할 수 있도록 앱 설정 화면을 앱 내 페이지에 연결 (3단계 참고) |
로그인 기능 없어요를 선택하면 앱 실행 시점에 동의 팝업이 노출되며, 동의 여부는 게스트(기기) 동의로 관리됩니다.
로그인이 없어 setUserId() 등으로 알려줄 유저 상태가 없으므로, 2단계 SDK 연동은 건너뛰고 3단계 앱 설정 화면 연결만 진행하면 됩니다.
2단계. SDK 연동 진행하기
대시보드 이벤트 단계의 이벤트 설정 마무리에서 안내하는 SDK 연동입니다.

나쵸코드 동의 팝업은 로그인 직후에 노출되고, 동의 상태는 로그인·로그아웃·탈퇴에 따라 게스트/회원 상태가 전환됩니다.
앱이 이러한 사용자의 상태 변화를 감지할 수 있도록, 공통 SDK 연동 섹션에 따라 아래 3가지 메서드를 연동해 주세요.
- 로그인:
setUserId() - 로그아웃:
deleteUserId() - 회원 탈퇴:
withdrawUser()
3단계. 앱 설정 화면 연결하기
정보통신망법에 따라 사용자는 언제든지 수신 거부 의사를 쉽게 표시할 수 있어야 합니다.
nachocode는 마케팅 푸시 동의와 야간 푸시 동의를 사용자가 직접 변경할 수 있는 네이티브 앱 설정 화면을 제공합니다.

대시보드 앱 설정 화면 단계의 체크리스트에 따라, 로그인 후 접근 가능한 페이지(마이페이지, 설정 등)에 앱 설정 화면으로 이동하는 버튼을 추가해 주세요.

연결 방법은 두 가지 중 편한 방식을 선택하면 됩니다.
방법 1. 앱 설정 화면 URL 연결 (노코드)
대시보드에서 제공하는 앱 설정 화면 URL을 복사하여 버튼의 링크로 삽입합니다.
- 대시보드 4. 앱 설정 화면 단계에서 앱 설정 화면 URL 복사
- 로그인으로 접근 가능한 페이지에 버튼 추가
- 버튼에 복사한 앱 설정 화면 URL 삽입
<!-- ex. 마이페이지의 '앱 설정' 버튼 -->
<a href="https://cdn.nachocode.io/nachocode/client-widget/open-app-setting">
앱 설정
</a>
방법 2. SDK 메서드 호출
Nachocode.setting.openAppSettingView()를 호출하면 동일한 네이티브 앱 설정 화면이 열립니다.
// '앱 설정' 버튼 클릭 시 네이티브 앱 설정 화면 열기
document.getElementById('app-setting-button').addEventListener('click', () => {
Nachocode.setting.openAppSettingView();
});
앱 설정 화면은 nachocode 앱 환경에서만 동작합니다.
웹 브라우저에서는 버튼을 숨기고 싶다면 Nachocode.env.isApp()으로 앱 환경 여부를 확인하세요.