#๋ฆฌํฌํŠธ ๋ช…๋ น (ko-KR)

์‚ฌ์ „ ์ค€๋น„์™€ registered-apps.json ์„ค์ •์€ README๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

#report:translate

์ˆ˜์ง‘๋œ ๋ฆฌ๋ทฐ JSON์„ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค.

  • npm run report:translate -- --my-app <owner> ...
  • node dist/translateReviews.js ...

#CLI ์˜ต์…˜

  • --my-app (ํ•„์ˆ˜)
  • --registered-apps-path
  • --input-dir (๊ธฐ๋ณธ๊ฐ’: data/{myAppId}/reviews)
  • --output-dir (๊ธฐ๋ณธ๊ฐ’: data/{myAppId}/reviews-ko)
  • --target-lang (๊ธฐ๋ณธ๊ฐ’ ko)
  • --provider (google-web | none, ๊ธฐ๋ณธ๊ฐ’ google-web)
  • --overwrite (๊ธฐ๋ณธ๊ฐ’ false)
  • --concurrency (๊ธฐ๋ณธ๊ฐ’ 4)
  • --output text|json

#์˜ˆ์‹œ

npm run report:translate -- --my-app golden-horizon

#์ถœ๋ ฅ

  • data/{myAppId}/reviews-ko/{competitor}.json
  • data/{myAppId}/reviews-ko/.translation-cache.json

#report:analyze

๋ฒˆ์—ญ ๋ฆฌ๋ทฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ์Ÿ์•ฑ ์ธ์‚ฌ์ดํŠธ ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • npm run report:analyze -- --my-app <owner> ...
  • node dist/analyzeCompetitors.js ...

#CLI ์˜ต์…˜

  • --my-app (ํ•„์ˆ˜)
  • --registered-apps-path
  • --input-dir (๊ธฐ๋ณธ๊ฐ’: data/{myAppId}/reviews-ko, ์—†์œผ๋ฉด reviews/ ํด๋ฐฑ)
  • --output-dir (๊ธฐ๋ณธ๊ฐ’: data/{myAppId}/reports)
  • --include-self (๊ธฐ๋ณธ๊ฐ’ false)
  • --top-quotes (๊ธฐ๋ณธ๊ฐ’ 3)
  • --output text|json

#์˜ˆ์‹œ

npm run report:analyze -- --my-app golden-horizon
npm run report:analyze -- --my-app golden-horizon --include-self

#์ถœ๋ ฅ

  • data/{myAppId}/reports/competitor-report.ko.md
  • data/{myAppId}/reports/competitor-report.ko.json
  • ์ƒ์„ฑ๋˜๋Š” ๋งˆํฌ๋‹ค์šด ์ œ๋ชฉ(H1)์€ {myAppId} ๋ฆฌ๋ทฐ ๋ฆฌํฌํŠธ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

#report:render-html

์•ก์…”๋„ˆ๋ธ” ๋งˆํฌ๋‹ค์šด ๋ฆฌํฌํŠธ๋ฅผ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ HTML๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • npm run report:render-html -- --my-app <owner> ...
  • npm run report:render-html -- --all
  • node dist/renderReportHtml.js ...
  • HTML ๋ฌธ์„œ ์ œ๋ชฉ(H1/<title>)์€ {myAppId} ๋ฆฌ๋ทฐ ๋ฆฌํฌํŠธ(์˜๋ฌธ ๋ฆฌํฌํŠธ๋Š” {myAppId} Review Report) ํ˜•์‹์œผ๋กœ ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ๋˜๋Š” HTML ์ƒ๋‹จ ์™ผ์ชฝ์—๋Š” ํ™ˆ์œผ๋กœ ์ด๋™ํ•˜๋Š” Home ๋ฒ„ํŠผ(/)์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ํ•„ํ„ฐ๋Š” ์ƒ๋‹จ ํ•„ํ„ฐ ๋ฒ„ํŠผ์œผ๋กœ ์—ฌ๋Š” ๋ณ„๋„ ํŒจ๋„์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ข์€ ํ™”๋ฉด์—์„œ๋Š” ํ•„ํ„ฐ ํŒจ๋„์ด ๋ฐ”ํ…€ ์‹œํŠธ๋กœ ์—ด๋ฆฝ๋‹ˆ๋‹ค.
  • ์ข์€ ํ™”๋ฉด์—์„œ๋Š” ๋…ธํŠธ ํŒจ๋„๋„ ์šฐ์ธก ์‚ฌ์ด๋“œ๋ฐ” ๋Œ€์‹  ๋ฐ”ํ…€ ์‹œํŠธ๋กœ ์—ด๋ฆฝ๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰์€ ๊ธฐ๋ณธ ๐Ÿ”Ž ๋ฒ„ํŠผ์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฒ€์ƒ‰ ์ž…๋ ฅ์ฐฝ์ด ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์ƒ๋‹จ ์ปจํŠธ๋กค์€ ํƒญ์— ๋”ฐ๋ผ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค: ๋ฆฌ๋ทฐ์—์„œ๋Š” ํ•„ํ„ฐ์™€ ๋…ธํŠธ, ๋ฆฌํฌํŠธ์—์„œ๋Š” ๊ทผ๊ฑฐ ํŽผ์น˜๊ธฐ/์šฐ์„ ์ˆœ์œ„ ํ•„ํ„ฐ์™€ ๋™์ผํ•œ ๋…ธํŠธ ๋ฒ„ํŠผ(์‚ฌ์ด๋“œ๋ฐ”ยท๋ฐ”ํ…€์‹œํŠธ)์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ƒ๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ƒํƒœ๋Š” ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋™๊ธฐํ™”๋˜๋ฉฐ, ์ƒˆ๋กœ๊ณ ์นจ ์‹œ์—๋„ ๋™์ผํ•œ UI ์ƒํƒœ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
    • tab (reviews|reports, review/raw, report/backlog ๋ณ„์นญ ํ—ˆ์šฉ)
    • q (๊ฒ€์ƒ‰์–ด)
    • tags (๋‹ค์ค‘ ์„ ํƒ ํƒœ๊ทธ, ์ฝค๋งˆ ๊ตฌ๋ถ„)
    • exclude (all|active|excluded)
    • min100 (100์ž ์ด์ƒ ํ™œ์„ฑ ์‹œ 1)
    • orig (์›์–ด ๋ณด๊ธฐ ํ™œ์„ฑ ์‹œ 1)
    • page (๋ฆฌ๋ทฐ ํƒญ ํ˜„์žฌ ํŽ˜์ด์ง€)
    • priority (๋ฆฌํฌํŠธ ํƒญ all|must|should|could)
  • ๋ฆฌํฌํŠธ์—์„œ๋Š” ๋ณด์กฐ ์ƒํƒœ์ค„(2๋‹จ)์ด ์ˆจ๊ฒจ์ ธ ๋„ค๋น„๊ฒŒ์ด์…˜์ด 1๋‹จ์œผ๋กœ๋งŒ ํ‘œ์‹œ๋˜๋ฉฐ, ๋ฆฌํฌํŠธ N/N ์นด์šดํŠธ ๋ผ๋ฒจ์€ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌํฌํŠธ๋Š” ์•ฑ๋ณ„ ์„น์…˜์ด ์•„๋‹Œ ์ „์ฒด ํ†ตํ•ฉ ๋ฐฑ๋กœ๊ทธ ํ…Œ์ด๋ธ”๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌํฌํŠธ์—์„œ๋Š” ์•ฑ์ด ๋‹ฌ๋ผ๋„ ๋™์ผํ•œ ๋ฐฑ๋กœ๊ทธ ํ•ญ๋ชฉ์ด๋ฉด ํ•˜๋‚˜์˜ ํ–‰์œผ๋กœ ํ†ตํ•ฉํ•ด ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋ฐฑ๋กœ๊ทธ ํ–‰์˜ ์•ฑ ๋ชฉ๋ก์€ 1์ค„ ํ…์ŠคํŠธ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, ๊ธธ๋ฉด ๋ง์ค„์ž„(...) ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌํฌํŠธ์—์„œ๋Š” ์šฐ์„ ์ˆœ์œ„ ํ•„ํ„ฐ(์ „์ฒด / MUST / SHOULD / COULD)๋กœ ํ–‰์„ ๋น ๋ฅด๊ฒŒ ๊ฑธ๋Ÿฌ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌํฌํŠธ ํ…Œ์ด๋ธ”์—๋Š” ๋ณ„๋„ ๊ทผ๊ฑฐ ์ปฌ๋Ÿผ์ด ์—†์œผ๋ฉฐ, ๊ทผ๊ฑฐ ์ˆ˜ ์˜† ํ™”์‚ดํ‘œ ๋ฒ„ํŠผ์œผ๋กœ ๊ทผ๊ฑฐ ํ–‰์„ ํŽผ์น˜๊ณ /์ ‘์Šต๋‹ˆ๋‹ค.
  • ๊ทผ๊ฑฐ ์ˆ˜๋Š” ์›๋ฌธ ์ธ์šฉ ๋ผ์ธ ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ, reviewId ๊ธฐ์ค€์œผ๋กœ ์ค‘๋ณต ์ œ๊ฑฐํ•œ ๊ณ ์œ  ๋ฆฌ๋ทฐ ์ˆ˜๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
  • ๊ทผ๊ฑฐ ํ–‰์„ ํŽผ์น˜๋ฉด ํ•œ๊ตญ์–ด ๋ฌธ์žฅ๋งŒ ๊ธฐ๋ณธ ํ‘œ์‹œ๋˜๋ฉฐ(KR: ์ ‘๋‘์‚ฌ ์—†์Œ), ์ž์„ธํžˆ๋ณด๊ธฐ์—์„œ ๋ฆฌ๋ทฐ ID/๋ฉ”ํƒ€/์›๋ฌธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทผ๊ฑฐ ํ–‰์„ ํŽผ์น˜๋ฉด ํ•ด๋‹น ๋ฐฑ๋กœ๊ทธ ํ•ญ๋ชฉ์— ๋งค์นญ๋œ ๊ทผ๊ฑฐ ๋ฆฌ๋ทฐ๋ฅผ ์ƒ˜ํ”Œ๋ง ์—†์ด ์ „๋ถ€ ๋ Œ๋”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ์—์„œ๋Š” ํ•ด์‹œํƒœ๊ทธ ํ•„ํ„ฐ๋ฅผ #โค๏ธ / #์š”์ฒญ๊ธฐ๋Šฅ / #๋งŒ์กฑ / #๋ถˆ๋งŒ์กฑ ๋‹ค์ค‘ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ณ , ํƒœ๊ทธ ์ „์ฒด๋กœ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ์—์„œ๋Š” ํ™œ์„ฑ ์ƒํƒœ ํ•„ํ„ฐ๋ฅผ ์ „์ฒด / ํ™œ์„ฑ / ๋น„ํ™œ์„ฑ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’ ์ „์ฒด).
  • ๋ฆฌ๋ทฐ์—์„œ๋Š” 100์ž ์ด์ƒ ํ† ๊ธ€๋กœ ๊ธด ๋ฆฌ๋ทฐ๋งŒ ๋น ๋ฅด๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•„ํ„ฐ ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ์œผ๋กœ ๊ฒ€์ƒ‰/์ƒํƒœ/ํƒœ๊ทธ/๊ธธ์ด ํ•„ํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•„ํ„ฐ ํŒจ๋„์˜ ์ „์ฒด ๋ฆฌ๋ทฐ ๋น„ํ™œ์„ฑ ๋ฆฌ์…‹ ๋ฒ„ํŠผ์œผ๋กœ ๋ชจ๋“  ๋ฆฌ๋ทฐ๋ฅผ ๋น„ํ™œ์„ฑ ์ƒํƒœ๋กœ ์ผ๊ด„ ์ „ํ™˜ํ•˜๊ณ  ํ•ด์‹œํƒœ๊ทธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ ํ•„ํ„ฐ ์‚ฌ์ด๋“œ๋ฐ”/๋ฐ”ํ…€์‹œํŠธ ํ—ค๋”์— ํ•„ํ„ฐ๋ง ๋ฆฌ๋ทฐ ์ˆ˜/์ „์ฒด ๋ฆฌ๋ทฐ ์ˆ˜๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ ํƒญ์€ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ์ง€์›ํ•˜๋ฉฐ ํŽ˜์ด์ง€ ํฌ๊ธฐ๋Š” 100๊ฐœ/ํŽ˜์ด์ง€๋กœ ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€๋„ค์ด์…˜์€ ํ˜„์žฌ ๊ฒ€์ƒ‰/ํ•„ํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ํŽ˜์ด์ง€๋„ค์ด์…˜ ์˜์—ญ์— ํ•„ํ„ฐ๋ง ๋ฆฌ๋ทฐ ์ˆ˜/์ „์ฒด ๋ฆฌ๋ทฐ ์ˆ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ ํƒญ์˜ ๊ฐ ์•ฑ ํ–‰ ์šฐ์ธก ์นด์šดํŠธ๋„ ํ•„ํ„ฐ๋ง ๋ฆฌ๋ทฐ ์ˆ˜/์ „์ฒด ๋ฆฌ๋ทฐ ์ˆ˜๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ œ๋ชฉ ์•„๋ž˜ ์ปจํ…์ŠคํŠธ ๋ธ”๋ก์€ ํƒญ์— ๋”ฐ๋ผ ์ „ํ™˜๋˜์–ด, ๊ฐ ํƒญ์— ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌํฌํŠธ ํƒญ ์ปจํ…์ŠคํŠธ๋Š” ์นด๋“œํ˜• ํ†ต๊ณ„/๋ฉ”ํƒ€ ์—†์ด, ๋ฐฑ๋กœ๊ทธ ๊ฑด์ˆ˜ยท์šฐ์„ ์ˆœ์œ„ ๊ทœ์น™(ํ•ด์‹œํƒœ๊ทธ ๊ธฐ์ค€)์„ ๊ฐ„๋‹จํ•œ ํ…์ŠคํŠธ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ ํƒญ ์ƒ๋‹จ ์š”์•ฝ ๋ธ”๋ก์€ ์นด๋“œ ์—†์ด ์ค„๊ธ€๋กœ ์•ฑ ์ˆ˜, ํ•ด์‹œํƒœ๊ทธ ์ •์˜, ํ™œ์„ฑ ์ƒํƒœ ์ •์˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ ์นด๋“œ์—์„œ #โค๏ธ / #์š”์ฒญ๊ธฐ๋Šฅ / #๋งŒ์กฑ / #๋ถˆ๋งŒ์กฑ, ๋น„ํ™œ์„ฑ/ํ™œ์„ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ ๋ณ„ ๋ฆฌ๋ทฐ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ ์„น์…˜ ๋Œ€์‹  ์„ ๋ณ„ ๋ฆฌ๋ทฐ (ํ•ด์‹œํƒœ๊ทธ ๊ธฐ๋ฐ˜) 1๊ฐœ ์„น์…˜์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ ์นด๋“œ์˜ ์›์–ด ์—ด๊ธฐ/๋‹ซ๊ธฐ๋Š” ๋ถ€๋“œ๋Ÿฌ์šด ํŽผ์นจ/์ ‘ํž˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ด์‹œํƒœ๊ทธ๋Š” ์นด๋“œ๊ฐ€ ํ™œ์„ฑ ์ƒํƒœ์ผ ๋•Œ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ๋‹จ ์šฐ์ธก ์ปจํŠธ๋กค์— ๋…ธํŠธ ๋ฒ„ํŠผ์ด ์žˆ์œผ๋ฉฐ, ์šฐ์ธก ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ์•ฑ ์…€๋ ‰ํ„ฐ๋ฅผ ์ „ํ™˜ํ•ด ์•ฑ ๋‹จ์œ„ ๋ฉ”๋ชจ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธํŠธ ํŒจ๋„์˜ ์•ฑ ์…€๋ ‰ํ„ฐ์—์„œ ํ˜„์žฌ ์ ์šฉํ•  ์•ฑ์„ ์„ ํƒํ•ด ๋ฉ”๋ชจ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธํŠธ ์‚ฌ์ด๋“œ๋ฐ”์—๋Š” ์„ ํƒํ•œ ์•ฑ์˜ ์Šคํ† ์–ด ๋งํฌ(App Store/Google Play)๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋…ธํŠธ๋Š” ์ž๋™ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ €์žฅ ๋ฒ„ํŠผ(๋˜๋Š” Ctrl/Cmd + S)์œผ๋กœ ์ˆ˜๋™ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ ๋ทฐ๋Š” ์•ฑ๋ณ„ ์ „์ฒด ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ(data/{myAppId}/reviews-ko/*.json, ์—†์œผ๋ฉด reviews/*.json)๋ฅผ ํ•จ๊ป˜ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
    • ๋ฆฌํฌํŠธ ์„ ๋ณ„ ๋ฆฌ๋ทฐ๋Š” ๊ธฐ๋ณธ ํ™œ์„ฑ
    • ๋ฏธ์„ ๋ณ„ ๋ฆฌ๋ทฐ๋Š” ๊ธฐ๋ณธ ๋น„ํ™œ์„ฑ ์ƒํƒœ๋กœ ํฌํ•จ๋˜์–ด ์ˆ˜๋™ ํ๋ ˆ์ด์…˜ ๊ฐ€๋Šฅ
  • preview ๋ชจ๋“œ์—์„œ๋Š” ์นด๋“œ ์ƒํƒœ์™€ ์•ฑ ๋…ธํŠธ๊ฐ€ data/{myAppId}/reports/preview-state.json์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค(์นด๋“œ ์ƒํƒœ๋Š” ์ฆ‰์‹œ ๋ฐ˜์˜, ๋…ธํŠธ๋Š” ์ €์žฅ ๋ฒ„ํŠผ์œผ๋กœ ๋ฐ˜์˜).
  • preview-state.json์€ v2 ์Šคํ‚ค๋งˆ(reviews.tags, reviews.excluded, appNotes)๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด favorite/notes ํ•„๋“œ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • data/{myAppId}/icon.png๊ฐ€ ์กด์žฌํ•˜๋ฉด HTML์— ์•„์ด์ฝ˜ ๋ฉ”ํƒ€ ํƒœ๊ทธ(icon, og:image, twitter:image)๊ฐ€ ์ž๋™ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

#CLI ์˜ต์…˜

  • --my-app (--all ๋ฏธ์‚ฌ์šฉ ์‹œ ํ•„์ˆ˜)
  • --all (๊ธฐ๋ณธ๊ฐ’ false): data/{appId}/reports/competitor-raw-actionable.ko.md๊ฐ€ ์žˆ๋Š” ์•ฑ ์ „์ฒด ์ผ๊ด„ ๋ Œ๋”๋ง
  • --registered-apps-path
  • --input (๊ธฐ๋ณธ๊ฐ’: data/{myAppId}/reports/competitor-raw-actionable.ko.md)
  • --output (๊ธฐ๋ณธ๊ฐ’: data/{myAppId}/reports/competitor-raw-actionable.ko.html)
  • --all์€ --my-app, --input, --output๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

#์˜ˆ์‹œ

npm run report:render-html -- --my-app aurora-eos
npm run report:render-html -- --all

#์ถœ๋ ฅ

  • data/{myAppId}/reports/competitor-raw-actionable.ko.html

#report:preview

localhost ํ”„๋ฆฌ๋ทฐ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๋Œ€์‹œ๋ณด๋“œ ๋ชจ๋“œ: ์•ฑ ๋ชฉ๋ก + ์ƒ์„ฑ๋œ ๋ฆฌํฌํŠธ ํŒŒ์ผ(.html, .md, .json) ํ‘œ์‹œ

  • ๋Œ€์‹œ๋ณด๋“œ ๋ชจ๋“œ์—์„œ data/{appId}/icon.png๊ฐ€ ์žˆ์œผ๋ฉด ์•ฑ ์•„์ด์ฝ˜ ํ‘œ์‹œ

  • ๋ฆฌํฌํŠธ ํ™”๋ฉด ์ƒ๋‹จ๋„ data/{appId}/icon.png๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์•„์ด์ฝ˜์ด ์—†์œผ๋ฉด appId ํ…์ŠคํŠธ๋กœ fallback

  • ๋Œ€์‹œ๋ณด๋“œ ๋ฐฐ๊ฒฝ์€ ๋ทฐํฌํŠธ ์ „์ฒด ๋†’์ด๋ฅผ ์ฑ„์šฐ๋„๋ก ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค(์งง์€ ์ฝ˜ํ…์ธ ์—์„œ๋„ ๋ฐฐ๊ฒฝ์ด ๋Š๊ธฐ์ง€ ์•Š์Œ).

  • ๋‹จ์ผ ํŒŒ์ผ ๋ชจ๋“œ: --file๋กœ HTML 1๊ฐœ ์„œ๋น™

  • ๋ฆฌ๋ทฐ ์นด๋“œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    • GET /api/preview-state/:appId
    • PUT /api/preview-state/:appId
    • ์ €์žฅ ํŒŒ์ผ: data/{myAppId}/reports/preview-state.json
  • npm run report:preview -- [options]

  • node dist/previewReport.js ...

#CLI ์˜ต์…˜

  • --my-app (์„ ํƒ): ๋Œ€์‹œ๋ณด๋“œ ํ•„ํ„ฐ
  • --registered-apps-path
  • --file: ๋‹จ์ผ ํŒŒ์ผ ๋ชจ๋“œ ๊ฒฝ๋กœ
  • --data-dir (๊ธฐ๋ณธ๊ฐ’: data/)
  • --host (๊ธฐ๋ณธ๊ฐ’: 127.0.0.1)
  • --port (๊ธฐ๋ณธ๊ฐ’: 4173)

#์˜ˆ์‹œ

npm run report:preview -- --port 4173
npm run report:preview -- --my-app aurora-eos --port 4173
npm run report:preview -- --file data/aurora-eos/reports/competitor-raw-actionable.ko.html --port 4173