Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Is that skill safe to install?
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
Are you the author of Adplacement?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/snwlee-adplacement)
---
name: adplacement
description: 광고 배치 설계 — 포맷별 지면, 전면 광고를 손가락이 멈춘 뒤에 띄우는 게이트, 쿨다운·세션 상한·이탈 지면. 노출을 줄이지 않고 타이밍만 옮긴다. 트리거 "광고 배치", "어디에 띄울까", "전면 광고 타이밍", "쿨다운", "배너 위치".
---
# adplacement
nereus:common 규칙을 따른다. 담당 에이전트: ads-engineer.
배치는 **정지 사유가 아니다.** 그래서 검사기가 없고 게이트도 아니다 — 설계 방법론이다.
정지 사유는 `adpolicy` 가 본다.
## 0. 배치가 정하는 것은 *언제*지 *몇 건*이 아니다
이 스킬의 모든 기법은 노출을 **한 건도 줄이지 않는다**. 줄이라는 처방은 수익이 바로
떨어지는 것이 보여서 지켜지지 않고, 지켜지지 않는 규칙은 꺼진다.
`Ruling: 광고 안전 처방은 노출을 줄이지 않는 형태여야 한다.`
옮길 수 있는 축은 셋이다: **언제**(타이밍) · **어느 지면**(위치) · **어느 포맷**(단가).
"몇 건"은 축이 아니다.
## 1. 전면 광고 — 손가락이 멈춘 뒤에 띄운다
가장 비싼 오클릭은 **사용자가 이미 탭하려던 자리에 광고가 올라온 것**이다.
사용자는 화가 나고, 구글은 그 클릭을 무효로 보고, 우리는 양쪽을 다 잃는다.
### 게이트의 형태
```
전면 광고 요청
→ 최근 입력이 있었나?
아니오 → 즉시 표시
예 → 입력이 멎을 때까지 대기
├ 멎었다 → 표시
└ 최대 대기 초과 → **그래도 표시**
```
**최대 대기 뒤에는 입력 상태와 무관하게 통과시킨다.** 이것이 이 게이트의 핵심이다.
"입력이 계속되면 영원히 안 띄운다"로 쓰면 스크롤을 멈추지 않는 사용자에게는
광고가 한 건도 안 나가고, 그 손실은 아무 로그에도 안 남는다.
**지연은 되돌릴 수 있고 포기는 되돌릴 수 없다.**
근거는 도너 `WallpaperEngineApp` 의 `ad_show_gate.dart` 다.
### 수치는 프로젝트가 정한다
정숙 임계(입력이 멎었다고 볼 시간)와 최대 대기는 **우리 운영값**이지 정책 수치가 아니다.
`ads-policy.json` 에 넣으면 정책 데이터인 척하면서 낡는다.
여기서는 **형태만** 정하고, 값은 그 앱의 인터랙션 밀도가 정한다.
값을 고를 때 물을 것:
- 이 앱에서 사용자가 **연속 입력을 하는 가장 긴 구간**은 무엇인가(스크롤·드래그·연타).
최대 대기가 그것보다 짧으면 게이트가 그 구간에서 무력해진다.
- 정숙 임계가 그 앱의 **탭 간 자연스러운 간격**보다 짧으면 게이트가 걸리지 않는다.
## 2. 포맷별 지면
| 포맷 | 지면 | 판단 기준 |
|---|---|---|
| `appOpen` | 콜드 스타트·백그라운드 복귀 | **첫 실행은 제외**한다. 실행 횟수로 따로 게이트된다 |
| `anchoredAdaptiveBanner` | 스크롤 목록의 고정 하단 | 적응형을 쓴다 — 기기 폭에 맞춰야 단가가 유지된다 |
| `fixedBanner` | 고정 높이가 강제되는 지면만 | 적응형이 가능하면 적응형이 낫다 |
| `interstitial` | **완료 경계** — 저장·공유·레벨 종료 직후 | 진행 중간이 아니라 끝난 직후다. 손가락이 자연스레 멈추는 지점 |
| `rewarded` | 사용자가 대가를 아는 지점 | 보상이 **광고 전에** 명시돼야 한다 |
| `rewardedInterstitial` | 전면과 같은 경계 + 사전 고지 | 고지 없이 띄우면 전면 광고인데 정책만 더 빡빡한 것이 된다 |
| `native` | 목록 항목 사이 | 콘텐츠와 구분되는 라벨이 필수다 |
**완료 경계 규칙**: 전면형은 사용자가 무언가를 *끝낸* 직후에만 둔다.
시작 직전이나 진행 중은 이탈을 만들고, 이탈한 사용자는 다음 노출도 가져가지 않는다.
## 3. 쿨다운과 세션 상한
둘 다 **필요하다**. 다만 이것도 "몇 건을 포기할까"가 아니라 **간격을 어디에 둘까**다.
- **쿨다운** — 직전 전면 이후 최소 간격. 없으면 완료 경계가 촘촘한 앱에서
전면이 연속으로 나가고, 그 구간의 사용자는 그 세션을 끝낸다.
- **세션 상한** — 한 세션의 전면 총량. 상한에 닿았다고 지면을 없애지 않는다.
**그 지면은 다음 세션에 그대로 살아 있다** — 노출이 사라진 것이 아니라 이동한 것이다.
값은 프로젝트가 정한다. 고를 때 물을 것:
- 이 앱의 **완료 경계가 한 세션에 몇 번** 오는가. 그것보다 상한이 크면 상한이 아무 일도 안 한다.
- 쿨다운이 완료 경계의 평균 간격보다 길면 뒤쪽 경계가 전부 죽는다.
## 4. 이탈 지면 — 되돌릴 수 없는 지면은 비운다
**광고를 두면 안 되는 자리**가 있다. 노출을 줄이라는 말이 아니라,
그 자리의 노출은 **다른 자리의 노출까지 같이 잃게** 만든다는 뜻이다.
- 온보딩·첫 실행 — `adpolicy` 가 게이트한다
- 결제·구독 흐름 — 전환을 깨면 광고 수익보다 큰 것을 잃는다
- 오류·복구 화면 — 이미 화난 사용자다
- 되돌릴 수 없는 조작의 확인 다이얼로그 위 — 오클릭이 데이터 손실이 된다
## 5. 하지 말 것
- **"덜 띄운다"로 설계하지 않는다.** 언제·어디·어느 포맷만 옮긴다.
- **최대 대기 없이 입력 게이트를 만들지 않는다.** 조용히 노출을 포기하게 된다.
- **쿨다운·상한 기본값을 하네스에 박지 않는다.** 정책 수치가 아니라 운영값이라 낡는다.
- **정지 사유를 여기서 판정하지 않는다.** `adpolicy` 가 검사기를 갖고 있다.