Project/Piggy AI

[PiggyAI] ์ถ”์ฒœ ์นดํŽ˜ List ์บ์‹ฑ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋น„์šฉ ๊ฐœ์„ 

ํ•œ33 2025. 5. 23. 17:29

๐Ÿท ๋ฌธ์ œ ์ƒํ™ฉ

์‚ฌ์šฉ์ž๊ฐ€ ์ง€์—ญ์„ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ํ˜„์žฌ ๋กœ์ง์€ Kakao ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ง€์—ญ์˜ ์นดํŽ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ OpenAI ๊ฐ€ ์ถ”์ฒœ ์นดํŽ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋งค๋ฒˆ Kakao api, OpenAI api ํ˜ธ์ถœ์„ ํ•˜๋ฉด ๋น„์šฉ์ ์ธ ๋ฌธ์ œ์™€ ์‘๋‹ต์†๋„ ๋ฉด์—์„œ ์•„์‰ฌ์›€์ด ์žˆ์—ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋งค๋ฒˆ ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ๋งˆ๋‹ค ์ถ”์ฒœ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ ์—ญ์‹œ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์ด ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ง„์งœ๋กœ ์ถ”์ฒœ์ด ๋œ ๋ฆฌ์ŠคํŠธ์ผ๊นŒ? ํ•˜๋Š” ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ ๋„ ํŒ๋‹จํ–ˆ๊ณ , 7์ผ์˜ TTL ์„ค์ •์ด๋ผ๋ฉด ์ฃผ๋ณ€ ์นดํŽ˜ ์ตœ์‹ ํ™”์—๋„ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ด ์ด๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

 

  • ๋™์ผํ•œ ํ‚ค์›Œ๋“œ๋กœ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•  ๋•Œ๋„ ๋งค๋ฒˆ Kakao, OpenAI ํ˜ธ์ถœ
  • OpenAI ์‘๋‹ต ์‹œ๊ฐ„: ํ‰๊ท  2.5~5์ดˆ
  • ํ•˜๋ฃจ 500~1000๊ฑด ์ด์ƒ์˜ ๊ฒ€์ƒ‰ ๋ฐœ์ƒ → ๋น„์šฉ ์ฆ๊ฐ€, ์†๋„ ์ €ํ•˜

 

๐Ÿท ์บ์‹ฑ ์ „๋žต ๋„์ž…

 

  • Redis๋ฅผ ๋„์ž…ํ•ด ๊ฒ€์ƒ‰์–ด๋ณ„ ์ถ”์ฒœ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑ
  • ์บ์‹œ ํ‚ค: search:query:<๊ฒ€์ƒ‰์–ด>
  • TTL(Time To Live)์€ 7์ผ๋กœ ์„ค์ •ํ•ด, ์ถ”์ฒœ ๊ฒฐ๊ณผ๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋ž˜๋˜์ง€๋Š” ์•Š๋„๋ก ์ œ์–ด

๐Ÿท ์ธก์ • ๊ฒฐ๊ณผ

๊ตฌ๋ถ„ ์บ์‹ฑ ์ „ ์บ์‹ฑ ํ›„
ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ 3.54์ดˆ 0.14์ดˆ
OpenAI ํ˜ธ์ถœ ์ˆ˜ 100% ์•ฝ 40~60% ๊ฐ์†Œ
OpenAI ๋น„์šฉ ๊ณ ์ • ์ƒ์Šน ์œ ์ง€ ๋˜๋Š” ํ•˜๋ฝ ๊ฐ€๋Šฅ์„ฑ ์ƒ๊น€

 

๊ธฐ์กด์— ์บ์‹ฑ์ด ๋œ ๋ฐ์ดํ„ฐ๋ผ๋ฉด ํ‰๊ท  ์‘๋‹ต์†๋„๊ฐ€ ๋Œ€ํญ ์ƒ์Šนํ–ˆ๋‹ค.

์–ด๋А ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ๋Š” ์บ์‹ฑ ์ „ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— 3์ดˆ ์ค‘๋ฐ˜๋Œ€์˜ ์‘๋‹ต์†๋„๋ฅผ ์œ ์ง€ํ•˜๊ฒ ์ง€๋งŒ ์ดํ›„ 7์ผ๊ฐ„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘๋ณต ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ์‹œ 0.14์ดˆ๋กœ ๋Œ€ํญ ์‘๋‹ต์†๋„๋ฉด์—์„œ ํ–ฅ์ƒ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ์•„์ง ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋ฐฐํฌ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— OpenAI ํ˜ธ์ถœ ์ˆ˜๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ, ์‚ฌ์šฉ์ž๋“ค์ด ์ฃผ๋กœ ์นดํŽ˜๋“ค์ด ๋ชฐ๋ ค์žˆ๋Š” ์ง€์—ญ์„ ๊ฒ€์ƒ‰ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น % ๋ณด๋‹ค ๋” ๊ฐ์†Œ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•œ๋‹ค.

์ด๋Š” OpenAI, Kakao API ๋น„์šฉ ๋ฉด์—์„œ๋„ ๋Œ€ํญ ํ•˜๋ฝํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋œ๋‹ค.

 

๐Ÿท ์บ์‹ฑ ๋ฐ์ดํ„ฐ ์ •์ œ

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์บ์‹ฑ์„ ํ•˜์˜€์„ ๋•Œ ์บ์‹ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๋‹ค๋ณด๋ฉด ํ˜„์žฌ Upstash Free tier ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์–ธ์  ๊ฐ€๋Š” ํ•ด๋‹น ํ•œ๊ณ„ ์šฉ๋Ÿ‰์ธ 256MB ๋ฅผ ์ดˆ๊ณผํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜์—ˆ๋‹ค. ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ค„์ผ ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ํ•„์š”์น˜ ์•Š์€ ๋ฐ์ดํ„ฐ๋“ค์„ ์ค„์ž„์œผ๋กœ์จ ๊ธฐ์กด ์ €์žฅ ํ˜•ํƒœ์˜€๋˜ json ํƒ€์ž…์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•„๋“œ๋“ค๋งŒ ์ •์ œํ•˜์—ฌ redis ์— ์บ์‹ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์šฉ๋Ÿ‰์„ 50% ์ด์ƒ ์ค„์˜€๋‹ค.

์ •์ œ ์ „

 

์ •์ œ ํ›„

// ์บ์‹œ์— ์ €์žฅํ•  allCafes ์ •์ œ
if (page === 1) {
    const compactAllCafes = cafes.map(cafe => ({
        name: cafe.place_name,
        address: cafe.road_address_name,
        placeUrl: cafe.place_url,
        x: cafe.x,
        y: cafe.y,
    }));

 

์œ„์ฒ˜๋Ÿผ name, address, placeUrl ๋“ฑ ํ•„์š”ํ•œ ํ•„๋“œ๋“ค๋งŒ ์œ ์ง€ํ•ด์ฃผ์—ˆ๋‹ค.

 

ํ•˜๋ฃจ 1000 ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹ฑ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  7์ผ์˜ TTL ์‹œ๊ฐ„๋™์•ˆ ์œ ์ง€๋œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด

3.4KB ์˜ ๊ฐœ๋‹น ๋ฐ์ดํ„ฐ x 1000 x 7 ๋กœ ์˜ˆ์ƒ 24MB ์˜ ์šฉ๋Ÿ‰์œผ๋กœ Free tier ํ•œ๊ณ„์น˜์ธ 256MB ์— ์—ฌ์œ ๋กญ๊ฒŒ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.