2026.07.22 (์ˆ˜)

โœจ GPT-5.6 Sol์˜ ์š”์•ฝ ใ€€

๊ธฐ์กด ์—ฐ์ฐจ ์ด‰์ง„ ๊ธฐ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ NAS ํ™˜๊ฒฝ์œผ๋กœ ์˜ฎ๊ธฐ๊ณ , ์™ธ๋ถ€ HTTPS ์—ฐ๊ฒฐ ๋’ค ์‹ค์ œ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ ๋“œ๋Ÿฌ๋‚œ UI ๊ฒฐํ•จ๊นŒ์ง€ ๊ณ ์นœ ๊ธฐ๋ก.

๋ ˆ๊ฑฐ์‹œ ์—ฐ์ฐจ ์ž๋™ํ™”์˜ ๊ธฐ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ NAS ํ™˜๊ฒฝ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ , ์™ธ๋ถ€ HTTPS ์š”์ฒญ์ด NAS ๋‚ด๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์—ฐ๊ฒฐํ–ˆ๋‹ค. ๋‹จ์ˆœํžˆ container๋ฅผ ๋„์šด ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ์—…๋ฌด ํ๋ฆ„์„ ์ƒˆ ์šด์˜ ํ™˜๊ฒฝ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์ด์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ƒˆ ํ™”๋ฉด์ด ๋œฌ๋‹ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ด๊ด€๋๋‹ค๊ณ  ๋งํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ์ง์›๊ณผ ์—ฐ์ฐจ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์—ฌ์•ผ ํ•˜๊ณ , ์ด‰์ง„ ๋Œ€์ƒ๊ณผ ๋ฌธ์ž ๋ฌธ๊ตฌ๊ฐ€ ๊ธฐ์กด๊ณผ ๊ฐ™์•„์•ผ ํ–ˆ๋‹ค. ํ•˜๋ฃจ 130๊ฑด์„ ๋„˜๊ธด ๋ฌธ์ž๋Š” ๋‹ค์Œ ๋‚ ๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ–ˆ๊ณ  ๋ฐœ์†ก ๋Œ€๊ธฐ์—ด๊ณผ ์ด๋ ฅ๋„ ์ด์–ด์ ธ์•ผ ํ–ˆ๋‹ค. ํ•˜๋‚˜๋ผ๋„ ๋น ์ง€๋ฉด ์ด๋ฆ„๋งŒ ๋ฐ”๋€ ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ๋œ๋‹ค.

์•ž์„œ ์˜์—… ์ž๋™ํ™”์™€ ์ง์› ํ–‰์ •์„ ๋‹ค์‹œ ๋‚˜๋ˆ„๋ฉด์„œ ๊ธฐ์กด ์—ฐ์ฐจ ์ด‰์ง„ ๊ธฐ๋Šฅ์€ ๋จผ์ € ์žฌํ˜„ํ•œ ๋’ค ์˜ฎ๊ธฐ๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋ง‰์ƒ ์‹œ์ž‘ํ•ด ๋ณด๋‹ˆ ๊ทธ ์ˆœ์„œ๊ฐ€ ๋” ์ค‘์š”ํ–ˆ๋‹ค. NAS ๋ฐฐํฌ๋Š” ์ž ์‹œ ๋’ค๋กœ ๋ฏธ๋ค˜๋‹ค.

๋กœ์ปฌ ๊ธฐ๋Šฅ ์žฌํ˜„๊ณผ ๋ฐ์ดํ„ฐ ๋ณต์›

FastAPI, Next.js, MariaDB๋ฅผ ๊ฒฉ๋ฆฌ๋œ ๋กœ์ปฌ Compose ํ™˜๊ฒฝ์—์„œ ๋จผ์ € ์‹คํ–‰ํ–ˆ๋‹ค. ๊ธฐ์กด ์„œ๋น„์Šค์™€ ๋ถ€๋”ชํžˆ์ง€ ์•Š๋„๋ก port, network, volume๊ณผ credential๋„ ๋”ฐ๋กœ ์žก์•˜๋‹ค. ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ์„ ํ•˜๊ณ  ์ง์›ยท์—ฐ์ฐจ ๋ฐ์ดํ„ฐ๋ฅผ ์—ด์–ด ๋ณธ ๋‹ค์Œ, ์ด‰์ง„ ๋Œ€์ƒ๊ณผ ์ƒ์„ฑ๋œ ๋ฌธ๊ตฌ, 130๊ฑด ์ œํ•œ์„ ๋„˜๊ธด ์˜ˆ์•ฝ ๊ฑด, queue์™€ ์ด๋ ฅ์„ ๊ธฐ์กด ํ๋ฆ„๊ณผ ๋งž์ถฐ ๋ดค๋‹ค.

์šด์˜ DB์— ๋ฐ”๋กœ ์†๋Œ€๊ณ  ์‹ถ์ง€๋Š” ์•Š์•˜๋‹ค. ๊ธฐ์กด SQL backup์„ ๋ณ„๋„ MariaDB์— ๋ณต์›ํ•œ ๋’ค schema์™€ ํ•ต์‹ฌ table count๋ฅผ ๋น„๊ตํ–ˆ๋‹ค. backend๋ฅผ ๋‹ค์‹œ ๋„์šด ๋’ค์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„ ์žˆ๋Š”์ง€ ๋ดค๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ๋˜๊ณ  ๋‚˜์„œ์•ผ ๋กœ์ปฌ ๋™์ž‘ ๊ธฐ์ค€์ด ์ƒ๊ฒผ๋‹ค. ์ดํ›„ NAS์—์„œ ๋ฌธ์ œ๊ฐ€ ๋‚˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋‹ฌ๋ผ์ง„ ๊ฒƒ์ธ์ง€, image๋‚˜ network๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์ธ์ง€ ๋‚˜๋ˆ  ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

backup์ด ๋ณต์›๋๋‹ค๋Š” ์‚ฌ์‹ค๋งŒ์œผ๋กœ ์šด์˜ ์ „ํ™˜์ด ๋๋‚œ ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ๋‹ค. ๊ด€๋ฆฌ์ž ๊ณ„์ •๋„, ์—…๋ฌดํฐ๋„, ์‹ค์ œ ๋ฌธ์ž๋„ ์•„์ง ์ƒˆ ๊ฒฝ๋กœ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ์•Š์•˜๋‹ค.

์‹ค์ œ SMS ๋ฐœ์†ก ๊ฒฝ๋กœ์˜ ์ด์ค‘ ์ œํ•œ

๊ทธ๋‹ค์Œ ๋ง‰ํžˆ๋Š” ์ง€์ ์€ ์‹ค์ œ SMS์˜€๋‹ค. ๋ฌธ์ž๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์œผ๋ฉด Android ์—…๋ฌดํฐ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ๊ฒฝ๋กœ๋ฅผ ๋๊นŒ์ง€ ๋ณผ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  production ๋ฐœ์†ก์„ ์—ด์–ด ๋†“๊ณ  ์‹œํ—˜ํ•  ์ˆ˜๋„ ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ server์˜ ๋ฐœ์†ก mode๋ถ€ํ„ฐ ์„ธ ๊ฐœ๋กœ ๊ฐˆ๋ž๋‹ค.

NO_SEND
ALLOWLIST_SEND
PRODUCTION

ํ‰์†Œ์—๋Š” NO_SEND๋‹ค. ์‹œํ—˜ํ•  ๋•Œ๋งŒ ํ—ˆ์šฉํ•œ ์ˆ˜์‹ ์ž ํ•œ ๋ช…์„ ALLOWLIST_SEND์— ๋„ฃ์—ˆ๋‹ค. ์ „ํ™”๋ฒˆํ˜ธ ์›๋ฌธ ๋Œ€์‹  SHA-256 hash๋กœ ๋Œ€์ƒ์„ ๋งž์ท„๊ณ  server๊ฐ€ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑด์ˆ˜๋ฅผ 1๊ฑด์œผ๋กœ ์ œํ•œํ–ˆ๋‹ค. Android ์•ฑ ์•ˆ์—๋„ ๋ณ„๋„์˜ 1๊ฑด budget์„ ๋„ฃ์—ˆ๋‹ค. server์™€ ์•ฑ ์ค‘ ํ•œ์ชฝ์„ ์ž˜๋ชป ๋‹ค๋ค„๋„ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž๋Š” ๋‚˜๊ฐ€์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

์ด ์ƒํƒœ๋Š” ์ฝ”๋“œ๋งŒ ๋ณด๊ณ  ๋„˜๊ธฐ์ง€ ์•Š์•˜๋‹ค. Computer Use๋กœ ์‹ค์ œ ๊ด€๋ฆฌ ํ™”๋ฉด์„ ์—ด์–ด NO_SEND, ์ง€๊ธˆ claim ๊ฐ€๋Šฅํ•œ ๊ฑด์ˆ˜, queue์™€ ์ด๋ ฅ์„ ํ™•์ธํ–ˆ๋‹ค. ๊ฐ™์€ ํ™”๋ฉด์—์„œ Codex์˜ ์ž‘์—… ๊ฒฐ๊ณผ์™€ ๊ตฌํ˜„ ์ฝ”๋“œ๋„ ๊ฐ™์ด ๋Œ€์กฐํ–ˆ๋‹ค.

Computer Use๋กœ NO_SEND๊ฐ€ ์ ์šฉ๋œ ๋ฌธ์ž queueยท์ด๋ ฅ ํ™”๋ฉด์„ ํ™•์ธํ•˜๋ฉด์„œ Codex ์ž‘์—… ๊ฒฐ๊ณผ์™€ ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ๋Œ€์กฐํ•œ ํ™”๋ฉด. ์‹ค์ œ ์„œ๋น„์Šค ์ฃผ์†Œ, ๋น„๊ณต๊ฐœ ์ธ๋ฌผ ํ‘œ์‹œ์™€ ํšŒ์‚ฌ ์‹๋ณ„ ํ‘œ๊ธฐ๋ฅผ ๋ชจ์ž์ดํฌ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

์šด์˜ ์•ฑ์„ ๊ทธ๋Œ€๋กœ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋„๋ก ํ…Œ์ŠคํŠธ package๋„ ๋”ฐ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. USB๋กœ ์—ฐ๊ฒฐํ•œ Android ๊ธฐ๊ธฐ์—๋Š” adb reverse๋กœ ๋กœ์ปฌ endpoint๋ฅผ ๋ถ™์˜€๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์‹ค์ œ ๋ฌธ์ž ํ•œ ๊ฑด์ด SUCCESS๋กœ ๋๋‚ฌ๊ณ  ์ˆ˜์‹  ๊ธฐ๊ธฐ์—์„œ๋„ ๋„์ฐฉํ•œ ๋ฌธ์ž๋ฅผ ๋ดค๋‹ค.

์—ฌ๊ธฐ์„œ ์• ๋งคํ•œ ๊ฒฐ๊ณผ๋„ ํ•˜๋‚˜ ๋‚˜์™”๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ฌธ์ž๋ฅผ ๋ฐ›์•˜์ง€๋งŒ Android delivery callback์€ ์žกํžˆ์ง€ ์•Š์•˜๋‹ค. SUCCESS๋Š” ํ†ต์‹ ์‚ฌ ๋ฐœ์†ก ์š”์ฒญ์ด ์ ‘์ˆ˜๋๋‹ค๋Š” ๋œป์ด์ง€, delivery callback๊นŒ์ง€ ๋๋‚ฌ๋‹ค๋Š” ๋œป์€ ์•„๋‹ˆ์—ˆ๋‹ค. ์‹ค์ œ ์ˆ˜์‹ ๊ณผ callback ์ƒํƒœ๋ฅผ ๊ฐ™์€ ์„ฑ๊ณต์œผ๋กœ ๋ฌถ์œผ๋ฉด ๋‚˜์ค‘์— UNKNOWN ๊ฑด์„ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ์ง€ ๋” ํ—ท๊ฐˆ๋ฆด ๊ฒƒ ๊ฐ™์•˜๋‹ค.

ํ•œ ๊ฑด์„ ๋ณธ ๋’ค์—๋Š” ๊ณง๋ฐ”๋กœ NO_SEND๋กœ ๋Œ๋ ธ๋‹ค. Android readiness๋Š” 0, server claim์€ 204 No Content๊ฐ€ ๋‚˜์™”๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ํ•œ ๋ฒˆ ๋” ๋ˆŒ๋ฆฌ๋”๋ผ๋„ ๋‹ค์Œ ๋ฌธ์ž๊ฐ€ ์—†๋‹ค๋Š” ์ƒํƒœ์—์„œ ๋๋ƒˆ๋‹ค.

linux/amd64 Docker ์ด๋ฏธ์ง€์˜ NAS ์ด๊ด€

NAS์—๋Š” ์ „์ฒด ์ž๋™ํ™” ํ”Œ๋žซํผ์ด ์•„๋‹ˆ๋ผ ์—ฐ์ฐจ ์ž๋™ํ™” ์„œ๋น„์Šค๋งŒ ๋”ฐ๋กœ ์˜ฌ๋ ธ๋‹ค. NAS์—์„œ source๋ฅผ ๋‹ค์‹œ buildํ•˜์ง€ ์•Š๊ณ  Mac์—์„œ linux/amd64 image๋ฅผ ๋งŒ๋“  ๋’ค hash๋ฅผ ํ™•์ธํ•ด ์˜ฎ๊ฒผ๋‹ค. Compose project๋„ ๊ธฐ์กด stack๊ณผ ๋ถ„๋ฆฌํ–ˆ๋‹ค. backend ํ•˜๋‚˜๋ฅผ ๊ต์ฒดํ•  ๋•Œ MariaDB์™€ Frontend๊นŒ์ง€ ๊ฐ™์ด ๋‹ค์‹œ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋Š” ๊ตฌ์„ฑ์ด์—ˆ๋‹ค.

์™ธ๋ถ€ HTTPS์™€ Reverse Proxy ์—ฐ๊ฒฐ

์ƒˆ ์ฃผ์†Œ๋กœ ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ์—ด๋ฆฌ๊ณ  ๊ธฐ์กด ์ง์›ยท์—ฐ์ฐจ ๋ฐ์ดํ„ฐ๋„ ๋ณด์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™ธ๋ถ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ MariaDB๊นŒ์ง€ ์š”์ฒญ์ด ์–ด๋–ป๊ฒŒ ๋“ค์–ด๊ฐ€๋Š”์ง€ ๊ธ€๋งŒ์œผ๋กœ๋Š” ํ•œ๋ˆˆ์— ์žกํžˆ์ง€ ์•Š์•˜๋‹ค. ํŠนํžˆ 3101์ด ์ธํ„ฐ๋„ท์— ์—ด๋ฆฐ port์ธ์ง€, NAS ์•ˆ์—์„œ๋งŒ ์“ฐ๋Š” port์ธ์ง€ ์„ค๋ช…ํ•  ๋•Œ ์ž๊พธ ๊ฒฝ๊ณ„๊ฐ€ ์„ž์˜€๋‹ค. ์š”์ฒญ ๊ฒฝ๋กœ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ์˜ฎ๊ฒจ ๋ดค๋‹ค.

์™ธ๋ถ€์—์„œ๋Š” HTTPS 443๋งŒ ์‚ฌ์šฉํ•˜๊ณ  NAS ์•ˆ์—์„œ Frontend 3101, Backend 8000, MariaDB 3306์œผ๋กœ ์ด์–ด์ง€๋Š” ์—ฐ์ฐจ ์ž๋™ํ™” ์š”์ฒญ ํ๋ฆ„

๊ทธ๋ฆผ์œผ๋กœ ๋†“๊ณ  ๋ณด๋‹ˆ ์™ธ๋ถ€์— ํ•„์š”ํ•œ ๊ฒƒ์€ HTTPS 443 ํ•˜๋‚˜์˜€๋‹ค. Router๊ฐ€ 443์„ NAS๋กœ ๋„˜๊ธฐ๊ณ , NAS reverse proxy๊ฐ€ hostname์„ ๋ณด๊ณ  127.0.0.1:3101์˜ Frontend๋กœ ๋ณด๋‚ธ๋‹ค. Backend 8000๊ณผ MariaDB 3306์€ Docker network ์•ˆ์—์„œ๋งŒ ์—ฐ๊ฒฐ๋œ๋‹ค. 3101๋„ NAS loopback์—๋งŒ ๋ฌถ์—ฌ ์žˆ์œผ๋‹ˆ ์ธํ„ฐ๋„ท์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

Cloudflare๋ฅผ ๊ธฐ๋ณธ ๊ฒฝ๋กœ์— ๋„ฃ์ง€ ์•Š์€ ๊ฒƒ๋„ ๊ฐ™์€ ์ด์œ ์˜€๋‹ค. ์ด๋ฏธ ์“ฐ๊ณ  ์žˆ๋Š” authoritative DNS์™€ ๊ณ ์ • ๊ณต์ธ IP๊ฐ€ ์žˆ๊ณ  Router๋„ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์„œ๋น„์Šค์šฉ A record๋งŒ ์ถ”๊ฐ€ํ•˜๊ณ  NAS์—์„œ ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ์ค‘๊ฐ„ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํ•˜๋‚˜ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋Œ€์‹  ์ธ์ฆ์„œ ๊ฐฑ์‹ ๊ณผ port forwarding์€ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ยท๊ฐฑ์‹ ์šฉ 80์„ ์ œ์™ธํ•˜๋ฉด ์‹ค์ œ ์„œ๋น„์Šค ์š”์ฒญ์€ 443์œผ๋กœ๋งŒ ๋ฐ›๋Š”๋‹ค.

์‹ค์ œ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ๊ฒ€์ฆ๊ณผ ๋ฐ˜์‘ํ˜• UI ์ˆ˜์ •

์™ธ๋ถ€ HTTPS ์ฃผ์†Œ๊ฐ€ ์—ด๋ ธ๋‹ค๊ณ  ์ด๊ด€์ด ๋๋‚œ ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ๋‹ค. USB๋กœ ์—ฐ๊ฒฐํ•œ ์‹ค์ œ Android ๊ธฐ๊ธฐ์—์„œ ๋ชจ๋ฐ”์ผ๋ง์œผ๋กœ ์ƒˆ ์ฃผ์†Œ์— ์ ‘์†ํ•˜๊ณ , ๋กœ๊ทธ์ธ๋ถ€ํ„ฐ ๋Œ€์‹œ๋ณด๋“œ์™€ ์ง์› ๋ชฉ๋ก, SMS ์ด๋ ฅ, ์—ฐ์ฐจ ๊ด€๋ฆฌ๊นŒ์ง€ ์ง์ ‘ ๋Œ์•„๋ดค๋‹ค. ํ™”๋ฉด์€ ์—ด๋ ธ์ง€๋งŒ ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋Š” ์•„๋‹ˆ์—ˆ๋‹ค.

PC ๋ธŒ๋ผ์šฐ์ €์—์„œ ํญ๋งŒ ์ค„์˜€์„ ๋•Œ๋Š” ๋†“์ณค๋˜ ๋ฌธ์ œ๊ฐ€ ์‹ค์ œ ๊ธฐ๊ธฐ์—์„œ ํ•œ๊บผ๋ฒˆ์— ๋ณด์˜€๋‹ค. ๋Œ€์‹œ๋ณด๋“œ๋Š” ๋ฐ์Šคํฌํ†ฑ sidebar๊ฐ€ ํ™”๋ฉด ๋Œ€๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•ด ์นด๋“œ์™€ ๊ธ€์ž๊ฐ€ ์„ธ๋กœ๋กœ ์ฐŒ๊ทธ๋Ÿฌ์กŒ๋‹ค.

์•„๋ž˜ ๋น„๊ต ์ด๋ฏธ์ง€๋Š” ๋ชจ๋‘ ์™ผ์ชฝ์ด ์ˆ˜์ • ์ „, ์˜ค๋ฅธ์ชฝ์ด ์ˆ˜์ • ํ›„๋‹ค.

์‹ค์ œ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ ๋ฐœ๊ฒฌํ•œ ๋Œ€์‹œ๋ณด๋“œ ๋ ˆ์ด์•„์›ƒ ๊ฒฐํ•จ๊ณผ ์ˆ˜์ • ๊ฒฐ๊ณผ

์ง์› ๋ชฉ๋ก์—์„œ๋Š” ์ œ๋ชฉ๊ณผ ๋ฒ„ํŠผ์ด ํ•œ ๊ธ€์ž์”ฉ ๋–จ์–ด์กŒ๊ณ , ๋„“์€ table์€ ์ž‘์€ ํญ์— ์–ต์ง€๋กœ ๋ˆŒ๋ ค ์žˆ์—ˆ๋‹ค. ์ œ๋ชฉ๊ณผ ๋™์ž‘ ์˜์—ญ์ด ๊ฐ€๋กœ ํ๋ฆ„์„ ์œ ์ง€ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , table์€ ๋‚ด์šฉ์„ ์ฐŒ๊ทธ๋Ÿฌ๋œจ๋ฆฌ๋Š” ๋Œ€์‹  ํ•„์š”ํ•œ ๋งŒํผ ๊ฐ€๋กœ๋กœ ๋„˜๊ฒจ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋ฐ”๊ฟจ๋‹ค.

์ง์› ๋ชฉ๋ก์˜ ์ œ๋ชฉยท๋™์ž‘ ์˜์—ญ๊ณผ table์„ ๋ชจ๋ฐ”์ผ ํญ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•œ ์ „ํ›„ ํ™”๋ฉด

SMS ์ด๋ ฅ๊ณผ ์—ฐ์ฐจ ๊ด€๋ฆฌ์˜ filter๋„ ๊ฐ™์€ ๋ฌธ์ œ์˜€๋‹ค. ์—ฌ๋Ÿฌ ์ž…๋ ฅ์นธ๊ณผ ๋‚ ์งœ ๋ฒ”์œ„๋ฅผ ํ•œ ์ค„์— ์šฑ์—ฌ๋„ฃ๊ณ  ์žˆ์—ˆ๋‹ค. ์ž‘์€ ํ™”๋ฉด์—์„œ๋Š” ๋‘ ์—ด์„ ์ค‘์‹ฌ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  ๋‚ ์งœ ๋ฒ”์œ„๋Š” ๋ณ„๋„ ํ–‰์œผ๋กœ ๋‚ด๋ ค, ๊ฐ ํ•ญ๋ชฉ์ด ๋ฌด์—‡์ธ์ง€ ์ฝ๊ณ  ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.

SMS ๋ฐœ์†ก ์ด๋ ฅ filter๋ฅผ ๋ชจ๋ฐ”์ผ์—์„œ ์ฝ๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฐ”๊พผ ์ „ํ›„ ํ™”๋ฉด

์—ฐ์ฐจ ๊ด€๋ฆฌ filter๋ฅผ ๋ชจ๋ฐ”์ผ ํญ์— ๋งž๊ฒŒ ๋‹ค์‹œ ๋ฐฐ์น˜ํ•œ ์ „ํ›„ ํ™”๋ฉด

์ˆ˜์ • ๋’ค์—๋Š” ์ƒˆ Docker image๋ฅผ ๋‹ค์‹œ ๋ฐฐํฌํ•˜๊ณ  ๊ฐ™์€ ํœด๋Œ€ํฐ์—์„œ ๋‹ค์‹œ ๋กœ๊ทธ์ธํ–ˆ๋‹ค. ๋ฉ”๋‰ด๋ฅผ ์—ด๊ณ , ํ™”๋ฉด์„ ์Šคํฌ๋กคํ•˜๊ณ , ๊ฐ filter์™€ table์„ ์ง์ ‘ ๋ณด๋ฉด์„œ ์ฒ˜์Œ ๋ฐœ๊ฒฌํ•œ ๊ฒฐํ•จ์ด ์‚ฌ๋ผ์กŒ๋Š”์ง€ ํ™•์ธํ–ˆ๋‹ค. ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ๊ฐ€ NAS์˜ container๊นŒ์ง€ ๋‹ฟ๋Š”์ง€๋งŒ ๋ณด๋ ค๋˜ ๊ฒ€์ฆ์ด ์‹ค์ œ ์‚ฌ์šฉ ํ™”๋ฉด๊นŒ์ง€ ๊ณ ์น˜๋Š” ๊ณผ์ •์œผ๋กœ ์ด์–ด์กŒ๋‹ค.

๋‹จ๊ณ„๋ณ„ ์ด๊ด€ ์ƒํƒœ์™€ ๊ด€๋ฆฌ์ž UI/E2E ๊ฒ€์ฆ

NAS ์ด๊ด€๊ณผ ์™ธ๋ถ€ ์ ‘์†, ๋‚ด๋ถ€ ๋ฌธ์ž ํ•œ ๊ฑด๊นŒ์ง€ ์ด์–ด ๋†“๊ณ  ์ „์ฒด ๋กœ๋“œ๋งต์„ ๋‹ค์‹œ ํŽผ์ณ ๋ณด๋‹ˆ 1~3๋‹จ๊ณ„๋Š” ๋„˜์–ด์™€ ์žˆ์—ˆ๋‹ค. ์ง€๊ธˆ ์œ„์น˜๋Š” ๊ฐœ์„ ํ•œ ๊ด€๋ฆฌ์ž UI๋ฅผ ์ƒˆ image๋กœ ๋ฐฐํฌํ•˜๊ณ , ADB์™€ ์‹ค์ œ ๊ธฐ๊ธฐ์—์„œ ์ „ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ณด๋Š” 4๋‹จ๊ณ„์˜€๋‹ค.

Operations Automation์—์„œ ๊ธฐํšยท๋ ˆ๊ฑฐ์‹œ ์ด๊ด€ยทNAS ์—ฐ๊ฒฐ์„ ๋งˆ์น˜๊ณ  ๊ด€๋ฆฌ์ž UI/UX ๋ฐฐํฌ์™€ ์‹ค๊ธฐ๊ธฐ E2E๋ฅผ ์ง„ํ–‰ ์ค‘์ธ ๋‹จ๊ณ„๋„

์ด ๊ทธ๋ฆผ์„ ๋ถ™์—ฌ ๋†“์œผ๋‹ˆ ์ด๋ฒˆ ์ž‘์—…์˜ ๋‹ค์Œ ๊ฒฝ๊ณ„๋„ ์„ ๋ช…ํ•ด์กŒ๋‹ค. ์™ธ๋ถ€ ์ ‘์† ์ž์ฒด๋Š” ์ด๋ฏธ ํ†ต๊ณผํ–ˆ์ง€๋งŒ ๊ด€๋ฆฌ์ž ํ™”๋ฉด์˜ ์‹ค๊ธฐ๊ธฐ ์žฌ๊ฒ€์ฆ์ด ๋๋‚˜๊ธฐ ์ „์—๋Š” ๋ณธ์‚ฌ dogfooding์œผ๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ƒˆ ๊ธฐ๋Šฅ์„ ๋” ๋ถ™์ด๋Š” ์ผ์ด ์•„๋‹ˆ๋ผ, ์ˆ˜์ •ํ•œ UI๊ฐ€ ๋ฐ์Šคํฌํ†ฑ๊ณผ ๋ชจ๋ฐ”์ผ ๋ชจ๋‘์—์„œ ๊ฐ™์€ ์—…๋ฌด ํ๋ฆ„์„ ์œ ์ง€ํ•˜๋Š”์ง€ ๋๊นŒ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์žก์•˜๋‹ค.

์šด์˜ ์ „ํ™˜ ์ „ ์•ˆ์ „ ์ƒํƒœ์™€ ๋กค๋ฐฑ

์ง€๊ธˆ ์ƒˆ stack์€ ์ผ๋ถ€๋Ÿฌ ์ž๋™์œผ๋กœ ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š๊ฒŒ ํ•ด๋’€๋‹ค.

ENABLE_SCHEDULER=False
SMS_SEND_MODE=NO_SEND
SMS_ALLOWLIST_MAX_CLAIMS=0

๊ด€๋ฆฌ์ž credential์€ Compose๋‚˜ image์— ์ ์ง€ ์•Š์•˜๋‹ค. NAS์—์„œ๋Š” ๊ถŒํ•œ์ด 0600์ธ secret file๋กœ ๋„ฃ๊ณ  Mac์—์„œ๋Š” Keychain์— ๋ณด๊ด€ํ–ˆ๋‹ค.

์ƒˆ ์ฃผ์†Œ์—์„œ ๋กœ๊ทธ์ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๊ณ , ์ œํ•œ๋œ ์กฐ๊ฑด์—์„œ๋Š” ๋ฌธ์ž ํ•œ ๊ฑด๋„ ๋„์ฐฉํ–ˆ๋‹ค. ์™ธ๋ถ€ ๋ชจ๋ฐ”์ผ๋ง์—์„œ๋„ ๋กœ๊ทธ์ธ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ์™€ ํ™”๋ฉด ์กฐ์ž‘๊นŒ์ง€ ํ™•์ธํ–ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ธฐ์กด ์—ฐ์ฐจ ๋ฌธ์ž ์„œ๋น„์Šค๋ฅผ ์ง€์šฐ๊ธฐ์—๋Š” delivery callback์ด ์—†๋Š” ๊ฑด์˜ ๋ณต๊ตฌ ๋ฐฉ์‹๊ณผ ์‹ค์ œ ๋ฐœ์†ก ์กฐ๊ฑด ์Šน์ธ์ด ๋‚จ์•„ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ธฐ์กด container์™€ volume์€ ์ค‘์ง€๋งŒ ํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ๋’€๋‹ค. ์ง€๊ธˆ ๋‹ค์Œ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒƒ์€ ๊ตฌ์„ฑ์„ ๋” ๋Š˜๋ฆฌ๋Š” ์ผ์ด ์•„๋‹ˆ๋‹ค. callback์ด ์—†๋Š” ๋ฐœ์†ก ๊ฑด์„ ์–ด๋–ป๊ฒŒ ๋ณต๊ตฌํ• ์ง€ ์ •ํ•˜๊ณ , ์‹ค์ œ ๋ฐœ์†ก๋„ ์Šน์ธ๋œ ์กฐ๊ฑด์—์„œ ์ œํ•œ๋œ ๊ฑด์ˆ˜๋ถ€ํ„ฐ ์—ฌ๋Š” ๊ฒƒ์ด๋‹ค.

๊ธฐ์ˆ  ์ด๊ด€๊ณผ ๋ณ„๊ฐœ๋กœ, AI๊ฐ€ ์‹ค์ œ ํœด๋Œ€ํฐ๊ณผ ๊ณต์œ ๊ธฐยทNAS ๊ด€๋ฆฌ์ž ํ™”๋ฉด๊นŒ์ง€ ํ•จ๊ป˜ ๋ณด๊ฒŒ ํ•˜๋ฉฐ ๋‚ด๊ฐ€ ๋А๋‚€ ๋ณ€ํ™”๋Š” AI๋ฅผ ์ ๊ทน ํ™œ์šฉํ•  ์ค„ ์•Œ๋ฉด ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ๋ฌด๊ถ๋ฌด์ง„ํ•ด์ง„๋‹ค์— ๋”ฐ๋กœ ์ ์—ˆ๋‹ค.

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ