์คํ ์ด ์คํฌ๋ฆฐ์ท ์์ฑ๊ธฐ
์๋ณธ ์ฑ ์คํฌ๋ฆฐ์ท์ ๋ฐ์ โ ๊ธฐ๊ธฐ ํ๋ ์ + ๋ธ๋๋ ๋ฐฐ๊ฒฝ + ํ๋ณด ๋ฌธ๊ตฌ๋ฅผ ์น์ ์คํ ์ด ๋ฑ๋ก์ฉ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค.
์์ด์ ํธ ํธํ
์ด ์คํฌ์ Claude Code์ OpenAI Codex ์ด๋์๋ ๋์ํ๋ค. ๋ณธ๋ฌธ์ ํํ์ ์คํ ์ค์ธ ์์ด์ ํธ์ ๋ง๊ฒ ํด์ํ๋ค:
- "์ ํ์ง๋ก ๋ฌป๋๋ค" โ ์ ํ์ง UI ํด์ด ์์ผ๋ฉด ๊ทธ๊ฑธ ์ฐ๊ณ (Claude Code: AskUserQuestion, multiSelect ์ง์), ์์ผ๋ฉด(Codex ๋ฑ) ๋ฒํธ๋ฅผ ๋งค๊ธด ์ ํ์ง๋ฅผ ํ
์คํธ๋ก ์ ์ํ๊ณ ๋ฒํธ๋ก ๋ตํ๊ฒ ํ๋ค. ์ถ์ฒ ํญ๋ชฉ์๋ "(Recommended)"๋ฅผ ๋ถ์ธ๋ค.
- "์ด๋ฏธ์ง๋ฅผ ์ด์ด ํ์ธํ๋ค" โ ์์ด์ ํธ์ ์ด๋ฏธ์ง ์ด๋ ์๋จ์ ์ด๋ค(Claude Code: Read, Codex: view_image).
- ์๋ณธ ํด๋ ์ธ์ โ Claude Code๋
$ARGUMENTS, Codex๋ ์คํฌ ํธ์ถ ๋ฌธ์ฅ์ ํจ๊ป ์ ํ ๊ฒฝ๋ก๋ฅผ ์ด๋ค.
์ ๋ ๊ท์น
- ์ปจํ ์ ์๋ ์ ์ฒด ๋ ๋๋ง์ ํ์ง ์๋๋ค. ๋ฌธ๊ตฌ ์ด์ ํ + ์์ 1์ฅ(์ฒซ ์ฌ๋ผ์ด๋)์ ๋ณด์ฌ์ฃผ๊ณ ์ฌ์ฉ์ OK๋ฅผ ๋ฐ์ ๋ค์๋ง ๋๋จธ์ง๋ฅผ ๋ ๋๋งํ๋ค.
- ์ต์ข
PNG๋ ์ ๋ถ ํฝ์
ํฌ๊ธฐ๋ฅผ ๊ฒ์ฆ(
sips ๋๋ ImageMagick identify)ํ๊ณ , ๊ท๊ฒฉ ํ์ ๋ค๋ฅด๋ฉด ๋ค์ ๋ ๋๋งํ๋ค.
- ๊ธฐ๊ธฐ ํ๋ ์์ ์ธ๋ถ์์ ๋ค์ด๋ก๋ํ์ง ์๊ณ HTML/CSS๋ก ์ง์ ๊ทธ๋ฆฐ๋ค(๋ผ์ด์ ์คยท๋คํธ์ํฌ ๋ฌธ์ ์์). ์ค์ฌ ํ๋ ์์ ์ํ๋ฉด ์๋ "์ค์ฌ ํ๋ ์" ์ฐธ๊ณ .
- ์ค๊ฐ ์์
ํ์ผ(html ๋ฑ)์ ์์ ํด๋(์คํฌ๋์นํจ๋ ๋ฑ)์ ๋๊ณ , ์ถ๋ ฅ ํด๋์๋ ์ต์ข
PNG๋ง ๋จ๊ธด๋ค.
- ์ฌ์ฉ์์๊ฒ ์์ ์ฐ๊ฒ ํ์ง ์๋๋ค. ํ๋ฉด ์ ํยทํญ ๊ฐ์ ๊ธฐ๊ธฐ ์กฐ์์ ์์ด์ ํธ๊ฐ adb/idb/AppleScript๋ก ์ง์ ํ๋ค(์๋ "์๋ ์บก์ฒ"). ์ฌ์ฉ์์ ๊ฐ์
์ ์ ํ์ง ๊ณ ๋ฅด๊ธฐ๋ ์งง์ ํ์ดํ๊น์ง๋ง. "ํ๋ฉด ๋์ฐ๊ณ ๋ฉ์์ง ๋ณด๋ด์ฃผ์ธ์" ๊ฐ์ ์งํ์ ๊ธ์ง โ ์๋ํ ์๋จ์ด ์ ๋ถ ์คํจํ์ ๋๋ง ์ ํ์ง๋ก ์๋ ์งํ ์ฌ๋ถ๋ฅผ ๋ฌป๋๋ค.
์ํฌํ๋ก
1. ์๋ณธ ์์ง
- ์ฌ์คํ์ด๋ฉด ๋จผ์ ๋ฌป๋๋ค. ์ถ๋ ฅ ํด๋(
store-screenshots/)๋ ์ด์ ์ ์ฐ๋ ์๋ณธ์ด ์ด๋ฏธ ์๋ ์ํ์์ "๋ค์ ํด์ค" ๋ฅ์ ์์ฒญ์ด ์ค๋ฉด, ์์
์ ์ ์ ํ์ง๋ก ๋ฌป๋๋ค:
- "๊ธฐ์กด ์คํฌ๋ฆฐ์ท ์ฌํ์ฉํด์ ์
๋ฐ์ดํธ (Recommended)" โ ์บก์ฒ๋ฅผ ์๋ตํ๊ณ ๊ธฐ์กด ์๋ณธ์ผ๋ก ๋ฌธ๊ตฌยท๋์์ธยท๊ท๊ฒฉ๋ง ๋ค์ ์์
ํ๋ค.
- "์ฒ์๋ถํฐ ์๋ก ๋ง๋ค๊ธฐ" โ ์ฑ์์ ์๋ณธ ์บก์ฒ๋ถํฐ ์ ๋ถ ๋ค์ ํ๋ค.
- ์ด๋ ์ชฝ์ด๋ ๋ ๋๋ง ์ ์ ๋์ ์ถ๋ ฅ ํด๋๋ฅผ ๋น์, ์ฅ์๊ฐ ๋ฌ๋ผ์ก์ ๋ ์ด์ ํ์ผ์ด ์์ด์ง ์๊ฒ ํ๋ค.
- ์ธ์๋ก ํด๋๋ฅผ ๋ฐ์์ผ๋ฉด ๊ฑฐ๊ธฐ์, ์๋๋ฉด ํ์ฌ ๋๋ ํ ๋ฆฌ์์ png/jpg๋ฅผ ์ค์บํ๋ค:
find . -maxdepth 2 \( -iname '*.png' -o -iname '*.jpg' \) -not -path '*/store-screenshots/*'
- ํ์ผ์ด ์์ผ๋ฉด ์์ด์ ํธ๊ฐ ์ง์ ๊ธฐ๊ธฐ๋ฅผ ์กฐ์ํด์ ์บก์ฒํ๋ค(์๋ ์๋ ์บก์ฒ). ์ฌ์ฉ์์๊ฒ ํ๋ฉด ์ ํ์ ๋ถํํ์ง ์๋๋ค.
- ๊ฐ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ด์ด ๋ฌด์จ ํ๋ฉด์ธ์ง ํ์
ํ๋ค. ๋ฌธ๊ตฌ๋ ์ค์ ํ๋ฉด ๋ด์ฉ์ ๊ทผ๊ฑฐํด์ผ ํ๋ค. ์ง์ ์บก์ฒํ ๊ฒฝ์ฐ์๋ ์บก์ฒ ์งํ ์ด๋ฏธ์ง๋ฅผ ์ด์ด ์๋ํ ํ๋ฉด์ด ๋ง๋์ง ํ์ธํ๊ณ , ์๋๋ฉด ๋ค์ ํ์ํด์ ์ฌ์บก์ฒํ๋ค.
- ์ฑ ์ด๋ฆยท์์ด์ฝ์ ์ฐพ์ ์ ์์ผ๋ฉด ์ฐธ๊ณ ํ๋ค(Info.plist, strings.xml, ic_launcher, ์ฑ ์์ด์ฝ ํ์ผ ๋ฑ).
- ์บก์ฒํ ํ๋ฉด ๋ชฉ๋ก(ํ, ํต์ฌ ๊ธฐ๋ฅ ํ๋ฉด ๋ฑ)์ ์์ด์ ํธ๊ฐ ์ฑ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ ์ค์ค๋ก ์ ํ๋, ์ ๋งคํ๋ฉด 2๋จ๊ณ ์ง๋ฌธ์ ์ ํ์ง๋ก ๋ผ์์ ๊ฐ์ด ๋ฌป๋๋ค.
์๋ ์บก์ฒ โ Android (adb, ์์ ์๋)
adb devices๋ก ๊ธฐ๊ธฐ/์๋ฎฌ๋ ์ดํฐ ํ์ธ. ์ฑ ์คํ: adb shell monkey -p <package> 1 ๋๋ adb shell am start -n <package>/<activity>.
- ํ์ฌ ํ๋ฉด์ UI ๊ตฌ์กฐ๋ฅผ ๋คํํด์ ํญยท๋ฒํผ ์ขํ๋ฅผ ์ป๋๋ค:
adb exec-out uiautomator dump /dev/tty โ XML์ bounds="[x1,y1][x2,y2]"์์ ์ค์ฌ ์ขํ ๊ณ์ฐ.
- ์ด๋ โ ์์ ํ โ ์บก์ฒ๋ฅผ ํ ๋ฒ์ (sleep์ ๊ธฐ๊ธฐ ์ชฝ์์ ์คํ):
adb shell "input tap X Y; sleep 1" && adb exec-out screencap -p > 02-mypet.png
- ํ๋ฉด๋ง๋ค 2~3์ ๋ฐ๋ณต. ์คํฌ๋กค์ด ํ์ํ๋ฉด
adb shell input swipe, ํ
์คํธ ์
๋ ฅ์ adb shell input text.
์๋ ์บก์ฒ โ iOS ์๋ฎฌ๋ ์ดํฐ
์บก์ฒ๋ xcrun simctl io booted screenshot 01.png. ํ๋ฉด ์ด๋์ ์ฐ์ ์์๋๋ก:
- ๋ฅ๋งํฌ๊ฐ ์ต์ฐ์ . ์ฑ ์์ค์์ URL scheme์ ์ฐพ๋๋ค(Info.plist์
CFBundleURLTypes, ๋ผ์ฐํ
์ฝ๋). ์์ผ๋ฉด ํญ์ด ์์ ํ์ ์๋ค:
xcrun simctl openurl booted "myapp://calendar" โ 1์ด ๋๊ธฐ โ ์บก์ฒ. simctl๋ง์ผ๋ก 100% ์๋ํ๋๋ฏ๋ก ์๋ ๋๊ตฌ๋ค์ด ์ ๋ถ ๋ถํ์. scheme์ด ์๋ ์ฑ์ด๋ฉด "ํญ๋ณ ๋ฅ๋งํฌ๋ฅผ ์ฑ์ ์ถ๊ฐํด์ค๊น?"๋ฅผ ์ ํ์ง๋ก ์ ์ํด๋ณผ ๊ฒ โ ๋ช ์ค์ด๋ฉด ๋๊ณ ์ดํ ์ฌ์คํ๋ ํธํด์ง๋ค.
- idb๊ฐ ์์ผ๋ฉด(
command -v idb): idb ui describe-all๋ก ์์ ์ขํ๋ฅผ ์ป๊ณ idb ui tap X Y.
- Maestro๊ฐ ์์ผ๋ฉด(
command -v maestro): tapOn/takeScreenshot์ผ๋ก flow yaml์ ๋ง๋ค์ด maestro test.
- ๋ ๋ค ์์ผ๋ฉด AppleScript๋ก Simulator ์ฐฝ์ ์ง์ ํด๋ฆญ(์์ฌ์ด ์ฌ์ฉ ๊ถํ ํ์):
System Events๋ก Simulator ์ฐฝ์ position/size๋ฅผ ์ป๊ณ , ๊ธฐ๊ธฐ ํด์๋ โ ์ฐฝ ์ขํ๋ก ๋น๋ก ๋ณํํด
click at {x, y}, ์ฌ์ด์ฌ์ด delay 1.
- ์ ๋ถ ์คํจํ์ ๋๋ง ์ ํ์ง๋ก ๋ฌป๋๋ค: "idb ์ค์น ํ ์๋ ์งํ (Recommended)" / "์ฑ์ ๋ฅ๋งํฌ ์ถ๊ฐํ๊ณ ์งํ" / "๋ด๊ฐ ์ง์ ํ๋ฉด์ ๋๊ธธ๊ฒ". ์๋์ ๊ณจ๋์ ๋๋ง ์ฌ์ฉ์์๊ฒ ํ๋ฉด ์ ํ์ ๋ถํํ๋ค.
์บก์ฒ ์ ์ํ๋ฐ ์ ๋ฆฌ (์คํ ์ด ํ์ง)
๋ชจ๋ ์บก์ฒ์ ์๊ณยท๋ฐฐํฐ๋ฆฌยท์ํ
๋๋ฅผ ํต์ผํ๋ฉด ๊ฒฐ๊ณผ๋ฌผ์ด ํ ์ธํธ๋ก ๋ณด์ธ๋ค. ์บก์ฒ ์์ ์ ์ ๊ฑธ๊ณ , ๋๋๋ฉด ํด์ ํ๋ค.
- iOS:
xcrun simctl status_bar booted override --time "9:41" --batteryLevel 100 --cellularBars 4 --wifiBars 3
# ์บก์ฒ ๋๋ ๋ค: xcrun simctl status_bar booted clear
- Android (๋ฐ๋ชจ ๋ชจ๋):
adb shell settings put global sysui_demo_allowed 1
adb shell am broadcast -a com.android.systemui.demo -e command enter
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 0941
adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100 -e plugged false
adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4
# ์บก์ฒ ๋๋ ๋ค: adb shell am broadcast -a com.android.systemui.demo -e command exit
2. ์ง๋ฌธ ํ๋ก์ฐ (์ ๋ถ ์ ํ์ง๋ก)
์ด๋ฏธ ๋ํ์์ ๋ต์ด ๋์จ ํญ๋ชฉ์ ๋ค์ ๋ฌป์ง ์๋๋ค. ์ฌ์ฉ์๊ฐ ํ์ดํ ์์ด ์ ํ๋ง์ผ๋ก ๋ตํ ์ ์๊ฒ ์ ํ์ง๋ก ๋ฌป๋๋ค.
1์ฐจ โ ํ๋ซํผ (์ง๋ฌธ 1๊ฐ):
- App Store (iOS) / Google Play (Android) / ๋ ๋ค
2์ฐจ โ ์ธ๋ถ (์ง๋ฌธ 4๊ฐ๋ฅผ ํ ๋ฒ์, ๊ธฐ์ข
์ ํ์ง๋ 1์ฐจ ๋ต์ ๋ง์ถฐ ๊ตฌ์ฑ):
| ์ง๋ฌธ | ์ ํ์ง |
|---|
| ๊ธฐ์ข
(๋ณต์ ์ ํ) | iOS: iPhone(Recommended), iPad ยท Android: Galaxy ํฐ(Recommended), Fold, Flip, ํ๋ธ๋ฆฟ ยท ๋ ๋ค: iPhone, iPad, Galaxy ํฐ, FoldยทFlip |
| ์คํ์ผ | ๊ธฐ์กด ์ฑ ๋์์ธ์ ๋ง์ถ๊ธฐ(Recommended) / ๋ชจ๋ยท๋ฏธ๋๋ฉ / ๋ฐ๊ณ ํํ๊ฒ / ๋คํฌยท์ธ๋ จ |
| ์ฅ์ | 4์ฅ / 5์ฅ(Recommended) / 6์ฅ / ์คํ ์ด ์ต๋ |
| ์ดํ ๋ฐฉํฅ | ์์์ ๋ฝ์์ค(Recommended) / ํต์ฌ ๊ธฐ๋ฅ ์ง์ ์ง์ โ ์ง์ ์ง์ ์ด๋ฉด ์์ ์
๋ ฅ(Other)์ผ๋ก ๊ธฐ๋ฅ์ ์ ๊ฒ ํ๋ค |
3. ๋ฐฐ๊ฒฝ ๋์์ธ ๊ฒฐ์
์คํ์ผ ๋ต์ ๋ฐ๋ผ ๋ฐฐ๊ฒฝยท์ฅ์ยทํค์ ์ ํ๋ค.
- ๊ธฐ์กด ์ฑ ๋์์ธ์ ๋ง์ถ๊ธฐ (๊ธฐ๋ณธ): ์ฑ์ ์ค์ ๋์์ธ ์์คํ
์์ ๋ฝ๋๋ค.
- ์: Android๋
res/values/colors.xmlยทthemes.xml, iOS๋ Assets.xcassets์ Color Set, Flutter๋ ThemeData, ์น ๊ธฐ๋ฐ์ด๋ฉด CSS ๋ณ์ยทtailwind config. ์์ค๊ฐ ์์ผ๋ฉด ์ฑ ์์ด์ฝยท์คํฌ๋ฆฐ์ท์์ ์ฃผ์กฐ์๊ณผ ํฌ์ธํธ์์ ์ถ์ถํ๋ค.
- ํค: ์ฑ UI๊ฐ ๋ผ์ดํธ๋ฉด ๋ฐ๊ฒ, ๋คํฌ๋ฉด ์ด๋ก๊ฒ. ์ฑ์ ์ฝ๋ radius๊ฐ ํฌ๋ฉด ๋ฐฐ๊ฒฝ ์ฅ์๋ ๋ฅ๊ธ๊ฒ, ๋ฒํผ์ด ๊ฐ์ง๋ฉด ์ฅ์๋ ๊ฐ์ง๊ฒ.
- ๋ชจ๋ยท๋ฏธ๋๋ฉ: ๋ฐ์ ๋จ์ ๋๋ ์์ฃผ ์
์ ๊ทธ๋ผ๋ฐ์ด์
, ์ฌ๋ฐฑ ํฌ๊ฒ, ์ฅ์ ์์. ํค๋๋ผ์ธ ๋ณผ๋ + ์๋ธ์นดํผ ์
๊ฒ.
- ๋ฐ๊ณ ํํ๊ฒ: ์ฑ๋ ๋์ ๊ทธ๋ผ๋ฐ์ด์
(์ฃผ์กฐ์ ยฑ ์ธ์ ์), ํฐ ๋ธ๋กญยท๋ํ ์ฅ์ 1~2๊ฐ, ๊ธฐ์ธ์ ์ ๊ทน ์ฌ์ฉ.
- ๋คํฌยท์ธ๋ จ:
#0b0b0f ๊ณ์ด ์ด๋์ด ๋ฐฐ๊ฒฝ + ์ฃผ์กฐ์ ๊ธ๋ก์ฐยท๊ทธ๋ผ๋ฐ์ด์
ํฌ์ธํธ, ํ๋ ์ ๊ทธ๋ฆผ์ ๊ฐํ๊ฒ.
๊ณตํต: ํ
์คํธ๋ ์๋จ 12~18%์ ๋ฐฐ๊ฒฝ๊ณผ ๋๋น ํ์คํ ์, ํฐํธ -apple-system, "Apple SD Gothic Neo", "Malgun Gothic", sans-serif. ์ฌ๋ผ์ด๋๋ง๋ค ๊ฐ์ hue์์ ๋ช
๋๋ง ์ด์ง ๋ฐ๊พธ๋ฉด ์ธํธ ๋๋์ด ๋๋ค. ๊ธฐ๊ธฐ๋ ํ๋จ ์ค์ + bottom bleed(ํ๋ฉด ์๋๋ก ์ด์ง ์๋ฆฌ๊ฒ) + box-shadow, ํ์ ์ฅ -2๋ / ์ง์ ์ฅ +2๋ ๊ธฐ์ธ์ด๋ฉด ๋ฆฌ๋ฌ๊ฐ(๊ธฐ์ธ์ ์ฌ๋ถ๋ ์ปจํ ๋ ์ธ๊ธ).
4. ์์ + ๋ฌธ๊ตฌ ์ด์ โ ์ปจํ ๊ฒ์ดํธ
- ์ฌ๋ผ์ด๋ ๊ตฌ์ฑ (2์ฐจ ์ง๋ฌธ์ ์ฅ์ ๋ต ๋ฐ์, App Store ์ต๋ 10์ฅยทPlay ํผํฉํฐ๋น 2~8์ฅ):
- 1์ฅ: ํ
โ ์ฑ์ ํต์ฌ ๊ฐ์น ํ ์ค. ๋ชฉ๋ก์์ 1~2์ฅ๋ง ๋ณด์ด๋ฏ๋ก ๊ฐ์ฅ ์ค์ํ๋ค.
- ์ค๊ฐ: ์๋ํ ๊ธฐ๋ฅ ํ๋์ฉ (์ดํ ๋ฐฉํฅ ๋ฐ์).
- ๋ง์ง๋ง: ์ ๋ขฐยท๋ง๋ฌด๋ฆฌ(๋ฆฌ๋ทฐ, ๋ค์ด๋ก๋ ์, CTA) โ ๊ทผ๊ฑฐ๊ฐ ์์ ๋๋ง.
- ๋ฌธ๊ตฌ ๊ท์น:
- ํค๋๋ผ์ธ: ํ๊ธ 6~14์, ํํ ์ค์ฌ. "ํ ์ผ์ ์์ง ์๊ฒ" > "์๋ฆผ ๊ธฐ๋ฅ".
- ์๋ธ์นดํผ: 0~1์ค, 20์ ์ด๋ด.
- "1์", "์ต๊ณ " ๊ฐ์ ํํ์ ๊ทผ๊ฑฐ๊ฐ ์์ ๋๋ง.
- ๋ฌธ๊ตฌ ํ + ์์ 1์ฅ์ ํจ๊ป ์ ์ํ๋ค:
- ํ: | # | ์๋ณธ ํ์ผ | ํค๋๋ผ์ธ | ์๋ธ์นดํผ |
- ์์: 1๋ฒ ์ฌ๋ผ์ด๋๋ง ์ค์ ๊ท๊ฒฉ์ผ๋ก ๋ ๋๋งํด์ macOS๋ฉด
open <ํ์ผ>๋ก ๋์ ๋ณด์ฌ์ค๋ค. ๋ฐฐ๊ฒฝยทํ๋ ์ยท๋ฌธ๊ตฌ๋ฅผ ์ค๋ฌผ๋ก ํ์ธ์ํค๊ธฐ ์ํจ.
- ์์ ์์ฒญ์ด ์ค๋ฉด ๋ฐ์ํด ๋ค์ ์ ์ํ๋ค(์์๋ ๋ค์ ๋ ๋๋ง). OK๋ฅผ ๋ฐ์ผ๋ฉด ์ ์ฒด ๋ ๋๋ง์ผ๋ก.
5. ๋ ๋๋ง
-
ํ๊น ร ์ฌ๋ผ์ด๋๋ง๋ค HTML ํ์ผ์ ์์ฑํ๋ค(์๋ ํ
ํ๋ฆฟ). body ํฌ๊ธฐ = ์คํ ์ด ๊ท๊ฒฉ ํฝ์
.
-
์๋ณธ ์ด๋ฏธ์ง๋ ์๋๊ฒฝ๋ก <img src="./01.png">๋ก ์ฐธ์กฐํ๋ค(data URI ๋ถํ์ โ ๊ฐ์ ํด๋์ ๋ณต์ฌํด ๋๋ฉด ๋๋ค).
-
๋ ๋ ๋ช
๋ น (๊ธฐ๋ณธ: ํค๋๋ฆฌ์ค ํฌ๋กฌ):
# ํฌ๋กฌ ์คํ ํ์ผ ์ฐพ๊ธฐ (OS์ ๋ง๊ฒ)
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" # macOS
command -v google-chrome >/dev/null 2>&1 && CHROME=google-chrome # Linux
command -v chromium >/dev/null 2>&1 && CHROME=chromium
"$CHROME" --headless=new --screenshot="$OUT" --window-size=1320,2868 \
--force-device-scale-factor=1 --hide-scrollbars --virtual-time-budget=2000 "$HTML"
-
ํฌ๋กฌ์ด ์์ผ๋ฉด ํด๋ฐฑ: npx -y playwright screenshot --viewport-size=1320,2868 "$HTML" "$OUT" (์ฒซ ์คํ ์ npx playwright install chromium ํ์ํ ์ ์์).
6. ๊ฒ์ฆยท๋ณด๊ณ
- ํฝ์
ํฌ๊ธฐ ์ ์ ํ์ธ ํ ๊ท๊ฒฉ ํ์ ๋์กฐ: macOS๋
sips -g pixelWidth -g pixelHeight <ํ์ผ>, ๊ทธ ์ธ OS๋ identify -format '%wx%h\n' <ํ์ผ>(ImageMagick).
- ์ฌ๋ผ์ด๋ ์ต์ 1์ฅ์ ์ด๋ฏธ์ง๋ก ์ง์ ์ด์ด ํ์ธ: ๊ธ์ ์๋ฆผ, ํ๋ ์ ๋น์จ ์๊ณก, ์คํฌ๋ฆฐ์ท ์ํ๋จ ์๋ฆผ.
- ์ถ๋ ฅ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ์คํ ์ด ์ด๋ ์ฌ๋กฏ์ ์ฌ๋ฆฌ๋ฉด ๋๋์ง ์๋ดํ๋ฉฐ ๋ง๋ฌด๋ฆฌํ๋ค.
์ถ๋ ฅ ๊ตฌ์กฐ:
store-screenshots/
โโโ appstore-iphone-69/01.png โฆ # 1320ร2868
โโโ appstore-iphone-65/ # 1284ร2778 โ iPhone์ ํญ์ ๋ ์ธํธ
โโโ appstore-ipad-13/
โโโ play-phone/
โโโ play-foldable/
์คํ ์ด ๊ท๊ฒฉ (2026๋
8์ ๊ธฐ์ค, ๊ณต์ ๋ฌธ์ ๊ฒ์ฆ ์๋ฃ)
| ํ๊น | ํฌ๊ธฐ(px, ์ธ๋ก) | ์ฅ์ | ๋น๊ณ |
|---|
| App Store iPhone 6.9" | 1320ร2868 | ์ต๋ 10 | 1290ร2796๋ ํ์ฉ. iPhone AirยทiPhone 17 Pro Maxยท16 Pro Max ํฌํจ |
| App Store iPhone 6.5" | 1284ร2778 | ์ต๋ 10 | 1242ร2688๋ ํ์ฉ |
| App Store iPad 13" | 2064ร2752 | ์ต๋ 10 | iPad ์ง์ ์ฑ์ด๋ฉด ํ์. 2048ร2732 ํ์ฉ |
| Play ํฐ | 1080ร1920 | 2~8 | 9:16. ํผ์ฒ๋ง ์กฐ๊ฑด: ์ต์ 1080px, 4์ฅ ์ด์ |
| Play ํ๋ธ๋ฆฟ 7"/10" | 1080ร1920 ๋๋ 1920ร1080 | ์ต๋ 8 | ํ๋ธ๋ฆฟ ์ง์ ์ |
| Play ํด๋๋ธ | ํฐ ์ฌ๋กฏ์ ํฌํจ | โ | ๋ณ๋ ์ฌ๋กฏ ์์. Fold ํผ์นจ ํ๋ฉด์ ํ๋ธ๋ฆฟ ์ฌ๋กฏ์๋ ํ์ฉ ๊ฐ๋ฅ |
- iPhone์ 6.9"์ 6.5" ๋ ์ธํธ๋ฅผ ๋ชจ๋ ๋ ๋๋งํ๋ค. App Store Connect๋ ์ฑ์ ๊ธฐ๊ธฐ ์ง์ ๋ฒ์์ ๋ฐ๋ผ 6.5" ๊ท๊ฒฉ(1284ร2778 / 1242ร2688)์ ์๊ตฌํ๊ธฐ๋ ํด์, 6.9" ํ ์ธํธ๋ง ๋ง๋ค๋ฉด ์
๋ก๋๊ฐ ๊ฑฐ๋ถ๋ ์ ์๋ค. ๊ฐ์ HTML์์ body ํฌ๊ธฐ๋ง ๋ฐ๊ฟ ๋ค์ ์บก์ฒํ๋ฉด ๋๋ฏ๋ก ๋น์ฉ์ด ๊ฑฐ์ ์๋ค.
๊ท๊ฒฉ์ ๋ฐ๋ ์ ์๋ค. ํ์ ์ด ์์ผ๋ฉด ๋ ๋๋ง ์ ์ ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํ๋ค:
- App Store: developer.apple.com/help/app-store-connect/reference/screenshot-specifications
- Play: support.google.com/googleplay/android-developer/answer/9866151
๊ธฐ๊ธฐ ํ๋ ์ ์คํ (CSS๋ก ๊ทธ๋ฆฌ๊ธฐ)
| ๊ธฐ๊ธฐ | ํ๋ฉด๋น(์ธ๋ก) | ์ฝ๋ radius | ๋ฒ ์ ค | ์๋จ ์์ |
|---|
| iPhone | 1320:2868 | ํ๋ ์ ํญ์ ~14% | ๊ท ์ผ ~2% | Dynamic Island ์์ฝ (ํญ ~26%, ์๋จ์์ ~1.8%) |
| iPad | 3:4 | ~4% | ๊ท ์ผ ~3.5% | ์์ |
| Galaxy S | 9:19.5 | ~7% | ๊ท ์ผ ~1.5% | ์ค์ ํ์นํ (์ง๋ฆ ~3%) |
| Galaxy Fold ํผ์นจ | 1856:2160 (๊ฑฐ์ ์ ์ฌ๊ฐ) | ~5% | ~2% | ์ฐ์ธก ์๋จ ํ์นํ + ์ค์ ์ธ๋ก ํ์ง ๋ผ์ธ(์์ฃผ ์
๊ฒ) |
| Galaxy Flip | 9:22 | ~8% | ~1.5% | ์ค์ ํ์นํ |
- ํ๋ ์ =
div (๋ฐฐ๊ฒฝ #101014, border-radius, padding = ๋ฒ ์ ค, inset box-shadow๋ก ๊ธ์ ํ
๋๋ฆฌ ๋๋ ํ ์ค).
- ํ๋ฉด =
img { object-fit: cover; object-position: top; border-radius: ๋ฐ๊นฅradius โ ๋ฒ ์ ค }.
- ์๋ณธ ๋น์จ์ด ํ๋ ์๊ณผ ๋ค๋ฅด๋ฉด cover๋ก ์ฑ์ฐ๋ ์๋จ ๊ณ ์ (์ํ๋ฐ ์ชฝ์ด ๋ณด์ด๋ ๊ฒ ์์ฐ์ค๋ฝ๋ค).
- Galaxy ํ์นํ: ์์ฝ ๋์
.hole { width:34px; height:34px; border-radius:50%; background:#000; top:40px; left:50%; }.
- Fold ํ์ง: ํ๋ฉด ์์ ์ธ๋ก 1์ค
linear-gradient ์ค๋ฒ๋ ์ด(ํฌ๋ช
โ์ด์ง ์ด๋ก๊ฒโํฌ๋ช
).
์ค์ฌ ํ๋ ์์ ์ํ ๋
์ฌ์ฉ์๊ฐ "์ง์ง ๊ธฐ๊ธฐ ์ฌ์ง ํ๋ ์"์ ์ํ๋ฉด ์ง์ ๋ค์ด๋ก๋ํ์ง ๋ง๊ณ ์๋ดํ๋ค:
- Apple ๊ณต์ ๋ฒ ์ ค: developer.apple.com/design/resources (Product Bezels, ๋ง์ผํ
๊ฐ์ด๋๋ผ์ธ ํ์ธ ํ์)
- Samsung: Samsung Developers / Samsung Newsroom์ ๊ณต์ ๋ชฉ์
๊ฒ์
์ฌ์ฉ์๊ฐ ํ์ผ์ ๋ฐ์ ๊ฒฝ๋ก๋ฅผ ์ฃผ๋ฉด, CSS ํ๋ ์ ๋์ ๊ทธ ์ด๋ฏธ์ง๋ฅผ ๊ฒน์ณ ์ด๋ค.
์ฌ๋ผ์ด๋ HTML ํ
ํ๋ฆฟ (iPhone 6.9" ์์)
๋ค๋ฅธ ๊ธฐ๊ธฐ๋ body ํฌ๊ธฐ, .device์ aspect-ratioยทborder-radiusยท์๋จ ์์๋ง ์ ํ๋๋ก ๋ฐ๊พผ๋ค.
<!doctype html>
<html><head><meta charset="utf-8">
<style>
:root { --c1:#4F46E5; --c2:#312E81; } /* ์ฑ ์ฃผ์กฐ์์ผ๋ก ๊ต์ฒด */
* { margin:0; box-sizing:border-box; }
body {
width:1320px; height:2868px; overflow:hidden;
background:linear-gradient(165deg,var(--c1),var(--c2));
font-family:-apple-system,"Apple SD Gothic Neo","Malgun Gothic",sans-serif;
display:flex; flex-direction:column; align-items:center;
}
.copy { text-align:center; margin-top:220px; color:#fff; padding:0 90px; }
.copy h1 { font-size:118px; font-weight:800; letter-spacing:-2px; line-height:1.15; }
.copy p { font-size:52px; font-weight:500; opacity:.85; margin-top:36px; }
.device {
margin-top:170px; width:1010px; aspect-ratio:1320/2868;
background:#101014; border-radius:145px; padding:24px;
box-shadow:0 80px 160px rgba(0,0,0,.45), inset 0 0 0 5px #3c3c40;
position:relative; transform:rotate(-2deg);
}
.device img { width:100%; height:100%; object-fit:cover; object-position:top; border-radius:121px; }
.island { position:absolute; top:52px; left:50%; transform:translateX(-50%);
width:270px; height:78px; border-radius:44px; background:#000; }
</style></head>
<body>
<div class="copy"><h1>ํค๋๋ผ์ธ</h1><p>์๋ธ์นดํผ</p></div>
<div class="device"><img src="./01-home.png"><div class="island"></div></div>
</body></html>
๋ฌธ๊ตฌ ํค ๊ฐ์ด๋
- ์คํ ์ด ๋ชฉ๋ก์์ ์ค์ ๋ก ๋ณด์ด๋ ๊ฑด 1~2์ฅ โ ์ฒซ ์ฅ์ ์ฑ์ ์กด์ฌ ์ด์ ๋ฅผ ๋ด๋๋ค.
- ํํ > ๊ธฐ๋ฅ: "๊ฐ๊ณ๋ถ๊ฐ ์๋์ผ๋ก ์จ์ง๋ค" > "SMS ํ์ฑ ๊ธฐ๋ฅ".
- ์ฌ์ฉ์๊ฐ "์์์"๋ฅผ ๊ณจ๋์ผ๋ฉด: ์คํฌ๋ฆฐ์ท์ ๋ณด๊ณ ์ฐจ๋ณ์ ์ด ํฐ ์์๋ก 4๊ฐ๋ฅผ ๋ฝ์, ์ ๊ทธ๊ฑธ ๊ณจ๋๋์ง ๊ทผ๊ฑฐ์ ํจ๊ป ์ ์ํ๋ค.
- ๋ก์ผ์ผ: ๊ธฐ๋ณธ ํ๊ตญ์ด. ์์ด ์คํ ์ด์๋ ์ฌ๋ฆฐ๋ค๋ฉด ๊ฐ์ ๋ ์ด์์์ ์์ด ๋ฌธ๊ตฌ ์ธํธ๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ๋ค.