2025๋…„ 4์›” 14์ผยท5๋ถ„ ์ฝ๊ธฐ

๊ด€๋ฆฌ์ž ํŒจ๋„ ์ธ๋ฑ์‹ฑ: ์ž์ฃผ ์“ฐ๋Š” ํ•„ํ„ฐ๋ฅผ ๋จผ์ € ์ตœ์ ํ™”ํ•˜์„ธ์š”

๊ด€๋ฆฌ์ž ํŒจ๋„ ์ธ๋ฑ์‹ฑ: ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์žฅ ์ž์ฃผ ํด๋ฆญํ•˜๋Š” ํ•„ํ„ฐ(์ƒํƒœ, ๋‹ด๋‹น์ž, ๋‚ ์งœ ๋ฒ”์œ„, ํ…์ŠคํŠธ ๊ฒ€์ƒ‰)๋ฅผ ์‹ค์ œ ์ฟผ๋ฆฌ ํŒจํ„ด์— ๋”ฐ๋ผ ์šฐ์„  ์ตœ์ ํ™”ํ•˜์„ธ์š”.

๊ด€๋ฆฌ์ž ํŒจ๋„ ์ธ๋ฑ์‹ฑ: ์ž์ฃผ ์“ฐ๋Š” ํ•„ํ„ฐ๋ฅผ ๋จผ์ € ์ตœ์ ํ™”ํ•˜์„ธ์š”

๊ด€๋ฆฌ์ž ํŒจ๋„ ํ•„ํ„ฐ๊ฐ€ ๋А๋ ค์ง€๋Š” ์ด์œ 

๊ด€๋ฆฌ์ž ํŒจ๋„์€ ์ฒ˜์Œ์—๋Š” ๋น ๋ฅด๊ฒŒ ๋А๊ปด์ง‘๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋ฅผ ์—ด๊ณ  ์Šคํฌ๋กคํ•˜๊ณ  ๋ ˆ์ฝ”๋“œ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ธˆ๋ฐฉ ๋๋‚ฉ๋‹ˆ๋‹ค. ๋А๋ ค์ง์€ ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ์‹๋Œ€๋กœ ํ•„ํ„ฐ๋งํ•  ๋•Œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค: "์—ด๋ฆฐ ํ‹ฐ์ผ“๋งŒ", "Maya์—๊ฒŒ ํ• ๋‹น๋œ ํ•ญ๋ชฉ", "์ง€๋‚œ์ฃผ์— ์ƒ์„ฑ๋œ ๊ฒƒ", "์ฃผ๋ฌธ ID์— 1047 ํฌํ•จ"์ฒ˜๋Ÿผ์š”. ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ƒ๊ธฐ๊ณ  ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ˆ์ ๊ฑฐ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

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

์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ „์ฒด ํ…Œ์ด๋ธ”์„ ์ฝ์ง€ ์•Š๊ณ  ์ผ์น˜ํ•˜๋Š” ํ–‰์„ ์ฐพ๋Š” ์ง€๋ฆ„๊ธธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค๋Š” ๊ณต์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ €์žฅ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์‚ฝ์ž… ๋ฐ ๊ฐฑ์‹ ์„ ์•ฝ๊ฐ„ ๋А๋ฆฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์ด ์ถ”๊ฐ€ํ•˜๋ฉด ์“ฐ๊ธฐ๊ฐ€ ๋А๋ ค์ง€๊ณ  ์‹ค์ œ ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์„ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋‹ค์Œ ํ•„ํ„ฐ๋ฅผ ์šฐ์„ ์‹œํ•˜์„ธ์š”:

  • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ
  • ๋งŽ์€ ํ–‰์„ ๊ฑด๋“œ๋ฆฌ๋Š” ๊ฒƒ
  • ๋ˆˆ์— ๋„๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • ๊ฐ„๋‹จํ•˜๊ณ  ์ž˜ ๋งž๋Š” ์ธ๋ฑ์Šค๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

๋ฒ”์œ„๋ฅผ ์ข๊ฒŒ ์žก์€ ์ด์œ ๋Š” ์˜๋„์ ์ž…๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž ๋ฆฌ์ŠคํŠธ์—์„œ ์ฒ˜์Œ ์ œ๊ธฐ๋˜๋Š” ์„ฑ๋Šฅ ๋ถˆ๋งŒ์€ ๊ฑฐ์˜ ํ•ญ์ƒ ๋„ค ๊ฐ€์ง€ ํ•„ํ„ฐ ์œ ํ˜•์—์„œ ์˜ต๋‹ˆ๋‹ค: ์ƒํƒœ(status), ๋‹ด๋‹น์ž(assignee), ๋‚ ์งœ ๋ฒ”์œ„, ํ…์ŠคํŠธ ํ•„๋“œ. ์ด๋“ค์ด ์™œ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค: ์‹ค์ œ ์ฟผ๋ฆฌ ํŒจํ„ด์„ ๋ณด๊ณ , ๊ทธ์— ๋งž๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๋А๋ฆฐ ๊ฒฝ๋กœ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜์„ธ์š”.

์‹ค์ œ ๊ด€๋ฆฌ์ž ์ž‘์—… ๋’ค์˜ ์ฟผ๋ฆฌ ํŒจํ„ด

๊ด€๋ฆฌ์ž ํŒจ๋„์ด ๋А๋ ค์ง€๋Š” ์ด์œ ๋Š” ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ๋ฆฌํฌํŠธ ๋•Œ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜๋ฃจ ์ข…์ผ ์‚ฌ์šฉ๋˜๋Š” ๋ช‡๋ช‡ ํ™”๋ฉด์ด ์žˆ๊ณ , ๊ทธ ํ™”๋ฉด๋“ค์ด ์ž์ฃผ ์ž‘์€ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ ค์ง‘๋‹ˆ๋‹ค.

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

  • ์ƒํƒœ(Status): ์›Œํฌํ”Œ๋กœ๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค(์ƒˆ๋กœ์›€, ์—ด๋ฆผ, ๋ณด๋ฅ˜, ์™„๋ฃŒ)
  • ๋‹ด๋‹น์ž(Assignee): "๋‚ด ํ•ญ๋ชฉ"์ด๋‚˜ "๋ฏธํ• ๋‹น"์„ ๋ณด๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค
  • ๋‚ ์งœ ๋ฒ”์œ„: ๋ˆ„๊ตฐ๊ฐ€ ํ•ญ์ƒ "์ง€๋‚œ์ฃผ์— ๋ฌด์Šจ ์ผ์ด ์žˆ์—ˆ๋‚˜?"๋ผ๊ณ  ๋ฌป์Šต๋‹ˆ๋‹ค
  • ๊ฒ€์ƒ‰: ํŠน์ • ํ•ญ๋ชฉ์œผ๋กœ ๋ฐ”๋กœ ์ด๋™(์ฃผ๋ฌธ๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ)ํ•˜๊ฑฐ๋‚˜ ํ…์ŠคํŠธ(๋…ธํŠธ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ)๋ฅผ ํ›‘์–ด๋ณด๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์€ ์˜๋„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค:

  • ์ตœ์‹  ํ•ญ๋ชฉ ๋‘˜๋Ÿฌ๋ณด๊ธฐ(Browse newest): ์Šค์บ” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต "์ตœ์‹  ํ•ญ๋ชฉ์„ ๋ณด์—ฌ์ค˜, ์ƒํƒœ๋กœ ์ขํž ์ˆ˜๋„ ์žˆ๊ณ , ์ƒ์„ฑ ์‹œ๊ฐ„์œผ๋กœ ์ •๋ ฌ" ๊ฐ™์€ ํ˜•ํƒœ์ด๋ฉฐ ํŽ˜์ด์ง€๋„ค์ด์…˜์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํŠน์ • ํ•ญ๋ชฉ ์ฐพ๊ธฐ(Find a specific item): ์กฐํšŒ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๊ฐ€ ์ด๋ฏธ ID, ์ด๋ฉ”์ผ, ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ, ์ฐธ์กฐ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ฐ”๋กœ ์†Œ์ˆ˜์˜ ํ–‰์œผ๋กœ ์ ํ”„ํ•˜๊ธธ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌ์ž ํŒจ๋„์€ ๋˜ํ•œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•„ํ„ฐ๋ฅผ ์กฐํ•ฉํ•ฉ๋‹ˆ๋‹ค: "Open + Unassigned", "Pending + Assigned to me", "์ง€๋‚œ 30์ผ ์™„๋ฃŒ" ๋“ฑ. ์ธ๋ฑ์Šค๋Š” ์—ด ๋ชฉ๋ก๊ณผ ๋งž์ถ”๊ธฐ๋ณด๋‹ค๋Š” ์‹ค์ œ ์ฟผ๋ฆฌ ํ˜•ํƒœ์™€ ๋งž์ถœ ๋•Œ ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

AppMaster๋กœ ๊ด€๋ฆฌ์ž ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๋ฉด, ์ด๋Ÿฐ ํŒจํ„ด์€ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ฆฌ์ŠคํŠธ ํ™”๋ฉด๊ณผ ๊ธฐ๋ณธ ํ•„ํ„ฐ๋งŒ ๋ด๋„ ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‹ค์ œ๋กœ ์ผ์ƒ ์ž‘์—…์„ ์›€์ง์ด๋Š” ๊ฒƒ๋“ค์„ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ๋จผ์ € ์ธ๋ฑ์‹ฑํ• ์ง€ ๊ณ ๋ฅด๋Š” ๋ฒ•

์ธ๋ฑ์‹ฑ์€ ํŠธ๋ฆฌ์•„์ฃผ์ฒ˜๋Ÿผ ๋‹ค๋ฃจ์„ธ์š”. ํ•„ํ„ฐ ๋“œ๋กญ๋‹ค์šด์— ๋‚˜์˜ค๋Š” ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€ ๋งˆ์„ธ์š”. ์‚ฌ๋žŒ๋“ค์„ ์งœ์ฆ๋‚˜๊ฒŒ ํ•˜๋Š” ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฟผ๋ฆฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์„ธ์š”.

์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์“ฐ๋Š” ํ•„ํ„ฐ ์ฐพ๊ธฐ

์•„๋ฌด๋„ ์•ˆ ์“ฐ๋Š” ํ•„ํ„ฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋œจ๊ฑฐ์šด ๊ฒฝ๋กœ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ์—ฌ๋Ÿฌ ์‹ ํ˜ธ๋ฅผ ๊ฒฐํ•ฉํ•˜์„ธ์š”:

  • UI ๋ถ„์„: ์–ด๋–ค ํ™”๋ฉด์ด ๊ฐ€์žฅ ๋งŽ์ด ์กฐํšŒ๋˜๋ฉฐ ์–ด๋–ค ํ•„ํ„ฐ๊ฐ€ ๊ฐ€์žฅ ์ž์ฃผ ํด๋ฆญ๋˜๋Š”๊ฐ€
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” API ๋กœ๊ทธ: ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•œ ์ฟผ๋ฆฌ์™€ ๊ฐ€์žฅ ๋А๋ฆฐ ์ƒ์œ„ ํผ์„ผํŠธ
  • ๋‚ด๋ถ€ ํ”ผ๋“œ๋ฐฑ: "๊ฒ€์ƒ‰์ด ๋А๋ฆฌ๋‹ค"๋Š” ๋ง์€ ๋ณดํ†ต ํŠน์ • ํ™”๋ฉด์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค
  • ๊ธฐ๋ณธ ๋žœ๋”ฉ ๋ฆฌ์ŠคํŠธ: ๊ด€๋ฆฌ์ž๊ฐ€ ํŒจ๋„์„ ์—ด์ž๋งˆ์ž ๋ฌด์—‡์ด ์‹คํ–‰๋˜๋Š”๊ฐ€

๋งŽ์€ ํŒ€์—์„œ ๊ธฐ๋ณธ ๋ทฐ๋Š” "์˜คํ”ˆ ํ‹ฐ์ผ“" ๋˜๋Š” "์ƒˆ ์ฃผ๋ฌธ" ๊ฐ™์€ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ด ๋ทฐ๋Š” ๋ˆ„๊ตฐ๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจํ•  ๋•Œ, ํƒญ์„ ์ „ํ™˜ํ•  ๋•Œ, ํšŒ์‹  ํ›„ ๋Œ์•„์˜ฌ ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ์ฟผ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ทธ๋ฃนํ™”ํ•˜์„ธ์š”

์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์ž์ฃผ ์“ฐ์ด๋Š” ์ฟผ๋ฆฌ๋ฅผ ๊ทธ ๋™์ž‘ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜์„ธ์š”. ๋Œ€๋ถ€๋ถ„์˜ ๊ด€๋ฆฌ์ž ๋ฆฌ์ŠคํŠธ ์ฟผ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฒ„ํ‚ท์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

  • ๋™๋“ฑ ๋น„๊ต(Equality) ํ•„ํ„ฐ: status = 'open', assignee_id = 42
  • ๋ฒ”์œ„(Range) ํ•„ํ„ฐ: created_at ๋‘ ๋‚ ์งœ ์‚ฌ์ด
  • ์ •๋ ฌ๊ณผ ํŽ˜์ด์ง€๋„ค์ด์…˜: ORDER BY created_at DESC ๊ทธ๋ฆฌ๊ณ  ํŽ˜์ด์ง€ 2 ๊ฐ€์ ธ์˜ค๊ธฐ
  • ํ…์ŠคํŠธ ์กฐํšŒ: ์ •ํ™• ์ผ์น˜(์ฃผ๋ฌธ ๋ฒˆํ˜ธ), ์ ‘๋‘์‚ฌ ์ผ์น˜(์ด๋ฉ”์ผ ์‹œ์ž‘), ๋˜๋Š” ํฌํ•จ ๊ฒ€์ƒ‰

๊ฐ ์ƒ์œ„ ํ™”๋ฉด์— ๋Œ€ํ•ด WHERE, ORDER BY, ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ํฌํ•จํ•œ ํ˜•ํƒœ๋ฅผ ์ ์–ด๋‘์„ธ์š”. UI์—์„œ ๋น„์Šทํ•ด ๋ณด์—ฌ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๋งค์šฐ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์€ ์šฐ์„  ๋ฐฐ์น˜๋ฅผ ๊ณ ๋ฅด์„ธ์š”

์šฐ์„ ์ˆœ์œ„ ๋ชฉํ‘œ ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”: ๊ด€๋ฆฌ์ž๊ฐ€ ์ฒ˜์Œ ๋ณด๋Š” ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ ์ฟผ๋ฆฌ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž์ฃผ ์“ฐ์ด๋Š” 2~3๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ๊ณ ๋ฅด์„ธ์š”. ๋ณดํ†ต ์ด ์ •๋„๋ฉด ๊ฐ€์žฅ ํฐ ์ง€์—ฐ์„ ์ค„์ด๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ: ์ง€์›ํŒ€์ด Tickets ๋ฆฌ์ŠคํŠธ๋ฅผ status = 'open'๋กœ ํ•„ํ„ฐํ•˜๊ณ  ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉฐ ์„ ํƒ์ ์œผ๋กœ ๋‹ด๋‹น์ž์™€ ๋‚ ์งœ ๋ฒ”์œ„๋ฅผ ์ ์šฉํ•œ๋‹ค๋ฉด, ๊ทธ ์ •ํ™•ํ•œ ์กฐํ•ฉ์„ ๋จผ์ € ์ตœ์ ํ™”ํ•˜์„ธ์š”. ๋น ๋ฅด๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐ€ ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…ํ•˜์„ธ์š”.

์ƒํƒœ ํ•„ํ„ฐ ์ธ๋ฑ์‹ฑ(๊ณผ์ž‰์„ ํ”ผํ•˜๋Š” ๋ฒ•)

์ƒํƒœ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์žฅ ๋จผ์ € ์ถ”๊ฐ€ํ•˜๋Š” ํ•„ํ„ฐ ์ค‘ ํ•˜๋‚˜๊ณ , ์ž˜๋ชปํ•˜๋ฉด ํšจ๊ณผ๊ฐ€ ์—†๊ฒŒ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์ƒํƒœ ํ•„๋“œ๋Š” ๋‚ฎ์€ ์นด๋””๋„๋ฆฌํ‹ฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค: ๊ฐ’์ด ๋ช‡ ๊ฐœ๋ฟ์ž…๋‹ˆ๋‹ค(open, pending, closed). ์ธ๋ฑ์Šค๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ์ขํž ๋•Œ ๊ฐ€์žฅ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ 80%~95%์˜ ํ–‰์ด ๋™์ผํ•œ ์ƒํƒœ๋ผ๋ฉด status ๋‹จ๋… ์ธ๋ฑ์Šค๋Š” ํฐ ๋ณ€ํ™”๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—ฌ์ „ํžˆ ๋งŽ์€ ํ–‰์„ ์ฝ์–ด์•ผ ํ•˜๊ณ , ์ธ๋ฑ์Šค๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ƒํ™ฉ์—์„œ ํšจ๊ณผ๋ฅผ ๋А๋ผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค:

  • ์–ด๋–ค ์ƒํƒœ๊ฐ€ ํฌ๊ท€ํ•œ ๊ฒฝ์šฐ(์˜ˆ: escalated)
  • ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅธ ์กฐ๊ฑด๊ณผ ๊ฒฐํ•ฉ๋˜์–ด ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์ž‘๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ
  • ์ƒํƒœ์™€ ์ •๋ ฌ์ด ์ผ๋ฐ˜์ ์ธ ๋ฆฌ์ŠคํŠธ ๋ทฐ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ

ํ”ํ•œ ํŒจํ„ด์€ "์˜คํ”ˆ ํ•ญ๋ชฉ์„ ๋ณด์—ฌ์ค˜, ์ตœ์‹ ์ˆœ"์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ•„ํ„ฐ์™€ ์ •๋ ฌ์„ ํ•จ๊ป˜ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๊ฒƒ์ด status ๋‹จ๋… ์ธ๋ฑ์Šค๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ์— ํšจ๊ณผ๋ฅผ ๋‚ด๋Š” ์กฐํ•ฉ ์˜ˆ:

  • status + updated_at (์ƒํƒœ๋กœ ํ•„ํ„ฐํ•˜๊ณ  ์ตœ๊ทผ ๋ณ€๊ฒฝ์ˆœ ์ •๋ ฌ)
  • status + assignee_id (์›Œํฌ ํ ๋ทฐ)
  • status + updated_at + assignee_id (์ •๋ง ๊ทธ ๋ทฐ๊ฐ€ ๋งŽ์ด ์“ฐ์ผ ๋•Œ๋งŒ)

๋ถ€๋ถ„ ์ธ๋ฑ์Šค(partial index)๋Š” ํ•œ ์ƒํƒœ๊ฐ€ ์ง€๋ฐฐ์ ์ธ ๊ฒฝ์šฐ ์ข‹์€ ํƒ€ํ˜‘์ฑ…์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "open" ๋ทฐ๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด open ํ–‰๋งŒ ์ธ๋ฑ์‹ฑํ•˜๋ฉด ์ธ๋ฑ์Šค๊ฐ€ ์ž‘์•„์ง€๊ณ  ์“ฐ๊ธฐ ๋น„์šฉ๋„ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.

-- PostgreSQL example: index only open rows, optimized for newest-first lists
CREATE INDEX CONCURRENTLY tickets_open_updated_idx
ON tickets (updated_at DESC)
WHERE status = 'open';

์‹ค์šฉ์ ์ธ ํ…Œ์ŠคํŠธ: ๋А๋ฆฐ ๊ด€๋ฆฌ์ž ์ฟผ๋ฆฌ๋ฅผ ์ƒํƒœ ํ•„ํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋บ€ ์ƒํƒœ๋กœ ์‹คํ–‰ํ•ด ๋ณด์„ธ์š”. ๋‘˜ ๋‹ค ๋А๋ฆฌ๋ฉด ์ƒํƒœ๋งŒ์˜ ์ธ๋ฑ์Šค๋Š” ์†Œ์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ •๋ ฌ๊ณผ ์‹ค์ œ๋กœ ๋ชฉ๋ก์„ ์ค„์ด๋Š” ๋‘ ๋ฒˆ์งธ ํ•„ํ„ฐ์— ์ง‘์ค‘ํ•˜์„ธ์š”.

๋‹ด๋‹น์ž ํ•„ํ„ฐ๋ง: ๋™๋“ฑ ๋น„๊ต ์ธ๋ฑ์Šค์™€ ํ”ํ•œ ์กฐํ•ฉ

ํ•„ํ„ฐ๋ฅผ ์‹ค์ „ ํ™”๋ฉด์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”
PostgreSQL์— ํ…Œ์ด๋ธ”์„ ๋ชจ๋ธ๋งํ•˜๊ณ  ํŒ€์ด ์‹ค์ œ๋กœ ์“ฐ๋Š” ๋ฐฉ์‹์— ๋งž๋Š” ๋ฆฌ์ŠคํŠธ ๋ทฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ถœ์‹œํ•˜์„ธ์š”.
๋นŒ๋“œ ์‹œ์ž‘

๋Œ€๋ถ€๋ถ„ ๊ด€๋ฆฌ์ž ํŒจ๋„์—์„œ ๋‹ด๋‹น์ž๋Š” ๋ ˆ์ฝ”๋“œ์— ์ €์žฅ๋œ ์‚ฌ์šฉ์ž ID์ž…๋‹ˆ๋‹ค: assignee_id ๊ฐ™์€ ์™ธ๋ž˜ ํ‚ค. ์ด๋Š” ์ „ํ˜•์ ์ธ ๋™๋“ฑ ๋น„๊ต ํ•„ํ„ฐ์ด๊ณ , ๋‹จ์ˆœ ์ธ๋ฑ์Šค๋กœ ๋น ๋ฅธ ์„ฑ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ด๋‹น์ž๋Š” ๋‹ค๋ฅธ ํ•„ํ„ฐ์™€ ํ•จ๊ป˜ ์ž์ฃผ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ๊ด€๋ฆฌ์ž๊ฐ€ "Alex์—๊ฒŒ ํ• ๋‹น๋œ ํ•ญ๋ชฉ"์œผ๋กœ ํ•„ํ„ฐํ•œ ๋’ค "์˜คํ”ˆ"์œผ๋กœ ์ขํž™๋‹ˆ๋‹ค. ์ด ๋ทฐ๊ฐ€ ๋А๋ฆฌ๋ฉด ๋‹จ์ผ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค ์ด์ƒ์ด ํ•„์š”ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘์ ์œผ๋กœ ์ข‹์€ ๋ณตํ•ฉ ์ธ๋ฑ์Šค:

  • assignee_id, status โ€” "๋‚ด๊ฐ€ ํ• ๋‹น๋œ ์˜คํ”ˆ ํ•ญ๋ชฉ"
  • assignee_id, status, updated_at โ€” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ตœ๊ทผ ํ™œ๋™ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋  ๋•Œ

๋ณตํ•ฉ ์ธ๋ฑ์Šค์—์„œ ์ˆœ์„œ๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋™๋“ฑ ๋น„๊ต ํ•„ํ„ฐ(๋ณดํ†ต assignee_id, ๊ทธ๋‹ค์Œ status)๋ฅผ ์•ž์— ๋‘๊ณ , ์ •๋ ฌ์ด๋‚˜ ๋ฒ”์œ„ ์ปฌ๋Ÿผ(updated_at)์€ ๋’ค์— ๋‘ก๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฏธํ• ๋‹น(unassigned)์€ ํ”ํ•œ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์‹œ์Šคํ…œ์ด ๋ฏธํ• ๋‹น์„ assignee_id = NULL๋กœ ํ‘œํ˜„ํ•˜๊ณ  ๊ด€๋ฆฌ์ž๋Š” ์ด๋ฅผ ์ž์ฃผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ฟผ๋ฆฌ ํ˜•ํƒœ์— ๋”ฐ๋ผ NULL ๊ฐ’์€ ์‹คํ–‰ ๊ณ„ํš์„ ๋ฐ”๊ฟ” ์ธ๋ฑ์Šค๊ฐ€ ๋‹ด๋‹น๋œ ํ•ญ๋ชฉ์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•ด๋„ ๋ฏธํ• ๋‹น์—๋Š” ์“ธ๋ชจ์—†๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏธํ• ๋‹น ํ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ์ ‘๊ทผ์„ ์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜์„ธ์š”:

  • assignee_id๋ฅผ nullable๋กœ ์œ ์ง€ํ•˜๋˜ WHERE assignee_id IS NULL ์ฟผ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค ์ „๋žต์„ ๋งˆ๋ จํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ๋งž๋Š”๋‹ค๋ฉด ์ „์šฉ ๊ฐ’(์˜ˆ: ํŠน๋ณ„ํ•œ "Unassigned" ์‚ฌ์šฉ์ž)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ง€์›ํ•˜๋ฉด ๋ฏธํ• ๋‹น ํ–‰์— ๋Œ€ํ•œ ๋ถ€๋ถ„ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

AppMaster๋กœ ๊ด€๋ฆฌ์ž ํŒจ๋„์„ ๋งŒ๋“ ๋‹ค๋ฉด ํŒ€์ด ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ํ•„ํ„ฐ์™€ ์ •๋ ฌ์„ ๋กœ๊น…ํ•˜๊ณ , ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๊ทธ๋Ÿฐ ํŒจํ„ด์„ ๋ฐ˜์˜ํ•œ ์†Œ์ˆ˜์˜ ์ž˜ ์„ ํƒ๋œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋‚ ์งœ ๋ฒ”์œ„: ์‚ฌ๋žŒ๋“ค์ด ํ•„ํ„ฐํ•˜๋Š” ๋ฐฉ์‹์— ๋งž์ถ˜ ์ธ๋ฑ์Šค

๊ฒ€์ƒ‰์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๊ณ„ํ•˜์„ธ์š”
์ดˆ๊ธฐ๋ถ€ํ„ฐ ์ •ํ™•ํ•œ ์กฐํšŒ์™€ ํ†ต์ œ๋œ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•˜๋Š” ๊ด€๋ฆฌ์ž UI๋ฅผ ์ถœ์‹œํ•˜์„ธ์š”.
ํŒจ๋„ ๋งŒ๋“ค๊ธฐ

๋‚ ์งœ ํ•„ํ„ฐ๋Š” ๋ณดํ†ต "์ง€๋‚œ 7์ผ", "์ง€๋‚œ 30์ผ"๊ณผ ๊ฐ™์€ ํ”„๋ฆฌ์…‹๊ณผ ์‹œ์ž‘/๋์„ ๊ณ ๋ฅด๋Š” ์ปค์Šคํ…€ ์„ ํƒ๊ธฐ๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•ด ๋ณด์ด์ง€๋งŒ ํฐ ํ…Œ์ด๋ธ”์—์„œ๋Š” ๋งค์šฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ด‰๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์–ด๋–ค ํƒ€์ž„์Šคํƒฌํ”„ ์—ด์„ ์˜๋ฏธํ•˜๋Š”์ง€ ๋ถ„๋ช…ํžˆ ํ•˜์„ธ์š”. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • ์ƒˆ ํ•ญ๋ชฉ ๋ทฐ๋Š” created_at
  • ์ตœ๊ทผ ๋ณ€๊ฒฝ ๋ทฐ๋Š” updated_at

ํ•ด๋‹น ์ปฌ๋Ÿผ์— ์ผ๋ฐ˜์ ์ธ btree ์ธ๋ฑ์Šค๋ฅผ ๋‘์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด "์ง€๋‚œ 30์ผ" ํด๋ฆญ์ด ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ”์œผ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ฆฌ์…‹ ๋ฒ”์œ„๋Š” ๋ณดํ†ต created_at >= now() - interval '30 days' ๊ฐ™์€ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒ”์œ„ ์กฐ๊ฑด์ด๊ณ  created_at ์ธ๋ฑ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UI๊ฐ€ ์ตœ์‹ ์ˆœ ์ •๋ ฌ๋„ ํ•จ๊ป˜ ํ•œ๋‹ค๋ฉด ์ •๋ ฌ ๋ฐฉํ–ฅ(์˜ˆ: PostgreSQL์˜ created_at DESC)๊ณผ ์ผ์น˜์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋งŽ์ด ์“ฐ์ด๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋‚ ์งœ๊ฐ€ ์ƒํƒœ๋‚˜ ๋‹ด๋‹น์ž ๊ฐ™์€ ๋‹ค๋ฅธ ํ•„ํ„ฐ์™€ ๊ฒฐํ•ฉ๋  ๋•Œ๋Š” ์‹ ์ค‘ํ•˜์„ธ์š”. ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋Š” ๊ทธ ์กฐํ•ฉ์ด ํ”ํ•  ๋•Œ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์“ฐ๊ธฐ ๋น„์šฉ๋งŒ ์ฆ๊ฐ€์‹œํ‚ฌ ๋ฟ์ž…๋‹ˆ๋‹ค.

์‹ค์šฉ ๊ทœ์น™:

  • ๋Œ€๋ถ€๋ถ„์˜ ๋ทฐ๊ฐ€ ์ƒํƒœ๋กœ ๋จผ์ € ํ•„ํ„ฐํ•œ ๋’ค ๋‚ ์งœ๋กœ ์ขํžŒ๋‹ค๋ฉด (status, created_at)์ด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์ƒํƒœ๋Š” ์„ ํƒ์ ์ด์ง€๋งŒ ๋‚ ์งœ๊ฐ€ ํ•ญ์ƒ ์กด์žฌํ•˜๋ฉด ๋‹จ์ˆœํ•œ created_at ์ธ๋ฑ์Šค๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ๋งŽ์ด ๋งŒ๋“ค์ง€ ๋งˆ์„ธ์š”.
  • ๋ชจ๋“  ์กฐํ•ฉ์„ ๋งŒ๋“ค์ง€ ๋งˆ์„ธ์š”. ๊ฐ ์ธ๋ฑ์Šค๋Š” ์ €์žฅ ๊ณต๊ฐ„์„ ๋Š˜๋ฆฌ๊ณ  ์“ฐ๊ธฐ๋ฅผ ๋А๋ฆฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ž„์กด๊ณผ ๊ฒฝ๊ณ„๋Š” "๋ ˆ์ฝ”๋“œ ๋ˆ„๋ฝ" ๋ฒ„๊ทธ์˜ ์ฃผ์š” ์›์ธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋‚ ์งœ(์‹œ๊ฐ„ ์—†์ด)๋ฅผ ์„ ํƒํ•˜๋ฉด ์ข…๋ฃŒ์ผ์„ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ• ์ง€ ๊ฒฐ์ •ํ•˜์„ธ์š”. ์•ˆ์ „ํ•œ ํŒจํ„ด์€ ์‹œ์ž‘ ํฌํ•จ, ์ข…๋ฃŒ ์ œ์™ธ: created_at >= start ๊ทธ๋ฆฌ๊ณ  created_at < end_next_day. ํƒ€์ž„์Šคํƒฌํ”„๋Š” UTC๋กœ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ UTC๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค ์ฟผ๋ฆฌํ•˜์„ธ์š”.

์˜ˆ: ์šด์˜ ๊ด€๋ฆฌ์ž๊ฐ€ 1์›” 10์ผ~1์›” 12์ผ์„ ์„ ํƒํ•˜๊ณ  1์›” 12์ผ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๊ธฐ๋Œ€ํ•˜๋Š”๋ฐ ์ฟผ๋ฆฌ๊ฐ€ <= '2026-01-12 00:00'๋ผ๋ฉด 1์›” 12์ผ์˜ ๊ฑฐ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋ˆ„๋ฝํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค ์ž์ฒด๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ฒฝ๊ณ„ ๋กœ์ง์ด ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ํ•„๋“œ: ์ •ํ™• ๊ฒ€์ƒ‰ ๋Œ€ ํฌํ•จ ๊ฒ€์ƒ‰

ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์€ ๋งŽ์€ ๊ด€๋ฆฌ์ž ํŒจ๋„์ด ๋А๋ ค์ง€๋Š” ์ง€์ ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ํ•œ ๋ฐ•์Šค์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์ฐพ๊ธธ ๊ธฐ๋Œ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ฐœ์„ ์€ ๋‘ ๊ฐ€์ง€ ํ•„์š”๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค: ์ •ํ™• ์ผ์น˜(๋น ๋ฅด๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅ)์™€ ํฌํ•จ ๊ฒ€์ƒ‰(์œ ์—ฐํ•˜์ง€๋งŒ ๋ถ€๋‹ด์ด ํผ).

์ •ํ™• ์ผ์น˜ ํ•„๋“œ์—๋Š” ์ฃผ๋ฌธ ID, ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ, ์ „ํ™”๋ฒˆํ˜ธ, ์™ธ๋ถ€ ์ฐธ์กฐ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํ•„๋“œ๋Š” ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๊ฐ€ ID๋‚˜ ์ด๋ฉ”์ผ์„ ๋ถ™์—ฌ๋„ฃ์–ด ์ฐพ๋Š” ๊ฒฝ์šฐ ๋‹จ์ˆœ ์ธ๋ฑ์Šค + ๋™๋“ฑ ๋น„๊ต๋กœ ์ฆ‰์‹œ ๋А๊ปด์ง€๋Š” ์‘๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌํ•จ ๊ฒ€์ƒ‰์€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ "refund"๋‚˜ "john" ๊ฐ™์€ ์กฐ๊ฐ์„ ์ž…๋ ฅํ•ด ์ด๋ฆ„, ๋…ธํŠธ, ์„ค๋ช…์—์„œ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต LIKE %term%์œผ๋กœ ๊ตฌํ˜„๋˜๋Š”๋ฐ ์„ ํ–‰ ์™€์ผ๋“œ์นด๋“œ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ B-tree ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด ๋งŽ์€ ํ–‰์„ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ณผ๋ถ€ํ•˜๋ฅผ ์ฃผ์ง€ ์•Š๊ณ  ๊ฒ€์ƒ‰์„ ๊ตฌ์ถ•ํ•˜๋Š” ์‹ค์šฉ์  ๋ฐฉ๋ฒ•:

  • ์ •ํ™• ์ผ์น˜ ๊ฒ€์ƒ‰(ID, ์ด๋ฉ”์ผ, ์‚ฌ์šฉ์ž๋ช…)์„ ์šฐ์„  ๊ธฐ๋Šฅ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋ช…ํ™•ํžˆ ๋ผ๋ฒจ๋งํ•˜์„ธ์š”.
  • ์ ‘๋‘์‚ฌ ๊ฒ€์ƒ‰(term%)์€ ํ‘œ์ค€ ์ธ๋ฑ์Šค๋กœ ์–ด๋А ์ •๋„ ๋„์›€์ด ๋˜๋ฉฐ ์ด๋ฆ„ ๊ฒ€์ƒ‰์— ์ถฉ๋ถ„ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • ํฌํ•จ ๊ฒ€์ƒ‰์€ ๋กœ๊ทธ๋‚˜ ๋ถˆ๋งŒ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•จ์„ ๋ณด์—ฌ์ค„ ๋•Œ๋งŒ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
  • ํฌํ•จ ๊ฒ€์ƒ‰์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” PostgreSQL full-text search๋‚˜ trigram ์ธ๋ฑ์Šค ๊ฐ™์€ ์ ์ ˆํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ผ๋ฐ˜ ์ธ๋ฑ์Šค๋กœ LIKE %term%์„ ๊ณ ์น˜๋ ค ํ•˜์ง€ ๋งˆ์„ธ์š”.

์ž…๋ ฅ ๊ทœ์น™์€ ๋Œ€๋ถ€๋ถ„์˜ ํŒ€์ด ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ํฐ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ๋ฅผ ์ค„์ด๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค:

  • ํฌํ•จ ๊ฒ€์ƒ‰์˜ ์ตœ์†Œ ๊ธธ์ด๋ฅผ ์ •ํ•˜์„ธ์š”(์˜ˆ: 3์ž ์ด์ƒ).
  • ๋Œ€์†Œ๋ฌธ์ž ์ •๊ทœํ™”๋ฅผ ํ•˜๊ฑฐ๋‚˜ ๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ ๋น„๊ต๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ์•ž๋’ค ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜๋ณต ๊ณต๋ฐฑ์„ ์ถ•์†Œํ•˜์„ธ์š”.
  • ์ด๋ฉ”์ผ๊ณผ ID๋Š” ์ผ๋ฐ˜ ๊ฒ€์ƒ‰ ๋ฐ•์Šค์— ์ž…๋ ฅ๋˜๋”๋ผ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •ํ™• ์ผ์น˜๋กœ ์ฒ˜๋ฆฌํ•˜์„ธ์š”.
  • ๊ฒ€์ƒ‰์–ด๊ฐ€ ๋„ˆ๋ฌด ๊ด‘๋ฒ”์œ„ํ•˜๋ฉด ํฐ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋ง๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ตฌ์ฒดํ™”๋ฅผ ์š”์ฒญํ•˜์„ธ์š”.

์ž‘์€ ์˜ˆ: ์ง€์› ๋งค๋‹ˆ์ €๊ฐ€ "ann"์„ ๊ฒ€์ƒ‰ํ•ด ๊ณ ๊ฐ์„ ์ฐพ์œผ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ๋…ธํŠธ, ์ด๋ฆ„, ์ฃผ์†Œ ์ „์ฒด์— LIKE %ann%์„ ์‹คํ–‰ํ•˜๋ฉด ์ˆ˜์ฒœ ํ–‰์„ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ด๋ฉ”์ผ์ด๋‚˜ ๊ณ ๊ฐ ID ๊ฐ™์€ ์ •ํ™• ํ•„๋“œ๋ฅผ ํ™•์ธํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ๋งŒ ๋” ์ •๊ตํ•œ ํ…์ŠคํŠธ ์ธ๋ฑ์Šค๋กœ ํด๋ฐฑํ•˜๋ฉด ๊ฒ€์ƒ‰์ด ๋น ๋ฅด๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ์›Œํฌํ”Œ๋กœ

์›Œํฌ ํ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋Ÿฐ์นญํ•˜์„ธ์š”
Open, Unassigned, Recent ๊ฐ™์€ ๊ธฐ๋ณธ ํ๋ฅผ ์†์ฝ”๋”ฉ ์—†์ด ๋น ๋ฅด๊ฒŒ ์„ค์ •ํ•˜์„ธ์š”.
์ง€๊ธˆ ๋นŒ๋“œ

์ธ๋ฑ์Šค๋Š” ์ถ”๊ฐ€ํ•˜๊ธฐ๋Š” ์‰ฝ์ง€๋งŒ ํ›„ํšŒํ•˜๊ธฐ๋„ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์•ˆ์ „ํ•œ ์›Œํฌํ”Œ๋กœ๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ์˜์กดํ•˜๋Š” ํ•„ํ„ฐ์— ์ง‘์ค‘ํ•˜๊ฒŒ ํ•˜๊ณ , ๋‚˜์ค‘์— ํ›„ํšŒํ•  "ํ˜น์‹œ ๋„์›€์ด ๋ ๊นŒ" ์ธ๋ฑ์Šค๋ฅผ ํ”ผํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์‚ฌ์šฉ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์„ธ์š”. ์ƒ์œ„ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ถ”์ถœํ•˜์„ธ์š”:

  • ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•œ ์ฟผ๋ฆฌ
  • ๊ฐ€์žฅ ๋А๋ฆฐ ์ฟผ๋ฆฌ

๊ด€๋ฆฌ์ž ํŒจ๋„์—์„œ๋Š” ์ด๋“ค์ด ๋ณดํ†ต ํ•„ํ„ฐ์™€ ์ •๋ ฌ์ด ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณด๋Š” ๊ทธ๋Œ€๋กœ ์ฟผ๋ฆฌ ํ˜•ํƒœ๋ฅผ ์บก์ฒ˜ํ•˜์„ธ์š”. ์ •ํ™•ํ•œ WHERE์™€ ORDER BY๋ฅผ ์ ์–ด๋‘์„ธ์š”(์ •๋ ฌ ๋ฐฉํ–ฅ๊ณผ ํ”ํ•œ ์กฐํ•ฉ ํฌํ•จ). ์ž‘์€ ์ฐจ์ด๋„ ์–ด๋–ค ์ธ๋ฑ์Šค๊ฐ€ ๋„์›€์ด ๋˜๋Š”์ง€๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”:

  • ํ•œ ๊ฐœ์˜ ๋А๋ฆฐ ์ฟผ๋ฆฌ์™€ ํ•œ ๊ฐ€์ง€ ์ธ๋ฑ์Šค ๋ณ€๊ฒฝ์„ ๊ณ ๋ฅด์„ธ์š”.
  • ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์กฐ์ •ํ•˜์„ธ์š”.
  • ๊ฐ™์€ ํ•„ํ„ฐ์™€ ๊ฐ™์€ ์ •๋ ฌ๋กœ ์žฌ์ธก์ •ํ•˜์„ธ์š”.
  • ์‚ฝ์ž… ๋ฐ ๊ฐฑ์‹ ์ด ๋ˆˆ์— ๋„๊ฒŒ ๋А๋ ค์ง€์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • ๋Œ€์ƒ ์ฟผ๋ฆฌ๊ฐ€ ๋ช…ํ™•ํžˆ ๊ฐœ์„ ๋˜๋ฉด ๋ณ€๊ฒฝ์„ ์œ ์ง€ํ•˜์„ธ์š”.

ํŽ˜์ด์ง€๋„ค์ด์…˜๋„ ๋ณ„๋„๋กœ ํ™•์ธํ•˜์„ธ์š”. ์˜คํ”„์…‹ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง€๋„ค์ด์…˜(OFFSET 20000)์€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์–ด๋„ ๋” ๊นŠ์€ ํŽ˜์ด์ง€๋กœ ๊ฐˆ์ˆ˜๋ก ๋А๋ ค์ง‘๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋งค์šฐ ๊นŠ์€ ํŽ˜์ด์ง€๋กœ ์ž์ฃผ ์ด๋™ํ•œ๋‹ค๋ฉด ์ปค์„œ ์Šคํƒ€์ผ ํŽ˜์ด์ง€๋„ค์ด์…˜("์ด ํƒ€์ž„์Šคํƒฌํ”„/ID ์ด์ „ ํ•ญ๋ชฉ ํ‘œ์‹œ")์„ ๊ณ ๋ คํ•ด ์ธ๋ฑ์Šค๊ฐ€ ํฐ ํ…Œ์ด๋ธ”์—์„œ๋„ ์ผ๊ด€๋œ ์ž‘์—…์„ ํ•˜๊ฒŒ ํ•˜์„ธ์š”.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ธ๋ฑ์Šค ๋ชฉ๋ก์„ ๋ช‡ ๋‹ฌ ํ›„์—๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ„๋‹จํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ธฐ์„ธ์š”: ์ธ๋ฑ์Šค ์ด๋ฆ„, ํ…Œ์ด๋ธ”, ์นผ๋Ÿผ(์ˆœ์„œ ํฌํ•จ), ์ง€์›ํ•˜๋Š” ์ฟผ๋ฆฌ.

๊ด€๋ฆฌ์ž ํŒจ๋„์—์„œ ํ”ํ•œ ์ธ๋ฑ์‹ฑ ์‹ค์ˆ˜

๊ณจ๋“  ํŒจ์Šค ์ตœ์ ํ™”
๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์ŠคํŠธ ๋ทฐ๋ฅผ ๋จผ์ € ํ”„๋กœํ† ํƒ€์ž…ํ•˜๊ณ , ์‹ค์ œ ์ฟผ๋ฆฌ ํ˜•ํƒœ์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค๋ฅผ ๋‹ค๋“ฌ์œผ์„ธ์š”.
์‹œ๋„ํ•ด๋ณด๊ธฐ

์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์ •๋ ฌํ•˜๋ฉฐ ํŽ˜์ด์ง€๋ฅผ ๋„˜๊ธฐ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ด€๋ฆฌ์ž ํŒจ๋„์ด ๋А๋ ค์ง‘๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” ์ €์žฅ ๊ณต๊ฐ„๊ณผ ๋ชจ๋“  ์‚ฝ์ž…/๊ฐฑ์‹ ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ž‘์—…์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์ˆ˜

๋‹ค์Œ ํŒจํ„ด์ด ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค:

  • "ํ˜น์‹œ ๋ชฐ๋ผ์„œ" ๋ชจ๋“  ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค ์ถ”๊ฐ€
  • ์ž˜๋ชป๋œ ์ปฌ๋Ÿผ ์ˆœ์„œ๋กœ ๋ณตํ•ฉ ์ธ๋ฑ์Šค ์ƒ์„ฑ
  • ์ •๋ ฌ๊ณผ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๋ฌด์‹œ
  • LIKE '%term%' ๊ฐ™์€ ํฌํ•จ ๊ฒ€์ƒ‰์„ ์ผ๋ฐ˜ ์ธ๋ฑ์Šค๋กœ ํ•ด๊ฒฐํ•˜๋ ค ๊ธฐ๋Œ€
  • UI ๋ณ€๊ฒฝ ํ›„ ์˜ค๋ž˜๋œ ์ธ๋ฑ์Šค๋ฅผ ๋‚จ๊ฒจ๋‘ 

ํ”ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค: ์ง€์›ํŒ€์ด Status = Open์œผ๋กœ ํ•„ํ„ฐํ•˜๊ณ  updated ์‹œ๊ฐ„์œผ๋กœ ์ •๋ ฌํ•˜๋ฉฐ ํŽ˜์ด์ง€๋ฅผ ๋„˜๊น๋‹ˆ๋‹ค. status์—๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์—ฌ์ „ํžˆ ์—ด๋ฆฐ ํ‹ฐ์ผ“์„ ๋ชจ๋‘ ๋ชจ์œผ๊ณ  ์ •๋ ฌํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„ํ„ฐ์™€ ์ •๋ ฌ์„ ํ•จ๊ป˜ ๋งž์ถ˜ ์ธ๋ฑ์Šค๊ฐ€ 1ํŽ˜์ด์ง€ ๋ฐ˜ํ™˜์„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์žก๋Š” ๋น ๋ฅธ ๋ฐฉ๋ฒ•

๊ด€๋ฆฌ์ž UI ๋ณ€๊ฒฝ ์ „ํ›„์— ์งง์€ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜์„ธ์š”:

  • ์ƒ์œ„ ํ•„ํ„ฐ์™€ ๊ธฐ๋ณธ ์ •๋ ฌ์„ ๋‚˜์—ดํ•˜๊ณ , WHERE + ORDER BY ํŒจํ„ด์„ ๋งŒ์กฑํ•˜๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • ์„ ํ–‰ ์™€์ผ๋“œ์นด๋“œ(LIKE '%term%')๋ฅผ ์ฐพ์•„ ํฌํ•จ ๊ฒ€์ƒ‰์ด ์ •๋ง ํ•„์š”ํ•œ์ง€ ๊ฒฐ์ •ํ•˜์„ธ์š”.
  • ์ค‘๋ณต๋˜๊ฑฐ๋‚˜ ๊ฒน์น˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”.
  • ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ผ์ • ๊ธฐ๊ฐ„ ์ถ”์ ํ•œ ๋’ค ํ•„์š” ์—†๋‹ค๊ณ  ํ™•์‹ ๋˜๋ฉด ์ œ๊ฑฐํ•˜์„ธ์š”.

AppMaster๋กœ PostgreSQL ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ์ž ํŒจ๋„์„ ๋งŒ๋“ ๋‹ค๋ฉด, ์ด ๋ฆฌ๋ทฐ๋ฅผ ์ƒˆ ํ™”๋ฉด์„ ๋ฐฐํฌํ•  ๋•Œ ๋ฃจํ‹ด์œผ๋กœ ์‚ผ์œผ์„ธ์š”. ์˜ฌ๋ฐ”๋ฅธ ์ธ๋ฑ์Šค๋Š” UI๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•„ํ„ฐ์™€ ์ •๋ ฌ์—์„œ ์ง์ ‘ ๋„์ถœ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์ ๊ฒ€ ๋ฐ ๋‹ค์Œ ๋‹จ๊ณ„

๋” ๋งŽ์€ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์ด๋ฏธ ์žˆ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๋งค์ผ ์“ฐ์ด๋Š” ์ •ํ™•ํ•œ ํ•„ํ„ฐ์— ๋„์›€์ด ๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ข‹์€ ๊ด€๋ฆฌ์ž ํŒจ๋„์€ ํ”ํ•œ ๊ฒฝ๋กœ์—์„œ ์ฆ‰์‹œ ๋ฐ˜์‘ํ•ด์•ผ ํ•˜๊ณ , ๋“œ๋ฌธ ๊ฒ€์ƒ‰์—์„œ๋งŒ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ ๊ฒ€๋งŒ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๊ฐ€์žฅ ํ”ํ•œ ํ•„ํ„ฐ ์กฐํ•ฉ(์ƒํƒœ, ๋‹ด๋‹น์ž, ๋‚ ์งœ ๋ฒ”์œ„ + ๊ธฐ๋ณธ ์ •๋ ฌ)์„ ์—ด์–ด ํ…Œ์ด๋ธ”์ด ์ปค์ ธ๋„ ๋น ๋ฅด๊ฒŒ ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • ๋А๋ฆฐ ๋ทฐ๋งˆ๋‹ค ์ฟผ๋ฆฌ๊ฐ€ WHERE์™€ ORDER BY ๋ชจ๋‘์— ๋งž๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ํ•œ์ชฝ๋งŒ ๋งž์œผ๋ฉด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ธ๋ฑ์Šค ๋ชฉ๋ก์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•ด ๊ฐ ์ธ๋ฑ์Šค์˜ ๋ชฉ์ ์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์„ธ์š”.
  • ์ธ๋ฑ์Šค ์ถ”๊ฐ€ ํ›„ ์ž‘์„ฑ/๊ฐฑ์‹  ์ž‘์—…(create, update, status change)์ด ๋А๋ ค์กŒ๋Š”์ง€ ๊ด€์ฐฐํ•˜์„ธ์š”. ๋А๋ ค์กŒ๋‹ค๋ฉด ์ธ๋ฑ์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ฑฐ๋‚˜ ๊ฒน์ณ์ ธ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • UI์—์„œ "๊ฒ€์ƒ‰"์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•˜์„ธ์š”: ์ •ํ™• ์ผ์น˜, ์ ‘๋‘์‚ฌ, ํฌํ•จ ์ค‘ ์–ด๋–ค ๊ฒƒ์ธ์ง€. ์ธ๋ฑ์‹ฑ ๊ณ„ํš์€ ์ด ์„ ํƒ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์šฉ์ ์ธ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณจ๋“  ํŒจ์Šค๋ฅผ ๋ฌธ์žฅ์œผ๋กœ ์ ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค: "์ง€์› ์—์ด์ „ํŠธ๋Š” ์˜คํ”ˆ ํ‹ฐ์ผ“์„ ํ•„ํ„ฐํ•˜๊ณ , ๋‚ด๊ฒŒ ํ• ๋‹น๋œ ํ•ญ๋ชฉ, ์ง€๋‚œ 7์ผ, ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค." ๊ทธ๋Ÿฐ ๋ฌธ์žฅ๋“ค์„ ์‚ฌ์šฉํ•ด ๊ทธ ๊ฒฝ๋กœ๋“ค์„ ๋ช…ํ™•ํžˆ ์ง€์›ํ•˜๋Š” ์†Œ์ˆ˜์˜ ์ธ๋ฑ์Šค๋ฅผ ์„ค๊ณ„ํ•˜์„ธ์š”.

์•„์ง ๊ฐœ๋ฐœ ์ดˆ๊ธฐ๋ผ๋ฉด ๋„ˆ๋ฌด ๋งŽ์€ ํ™”๋ฉด์„ ๋งŒ๋“ค๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋ณธ ํ•„ํ„ฐ๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. AppMaster (appmaster.io)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ด€๋ฆฌ์ž ๋ทฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐ˜๋ณตํ•˜๊ณ , ์‹ค์ œ ์‚ฌ์šฉ์ด ๋œจ๊ฑฐ์šด ๊ฒฝ๋กœ๋ฅผ ๋“œ๋Ÿฌ๋‚ธ ๋’ค ์†Œ์ˆ˜์˜ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

๊ด€๋ฆฌ์ž ํŒจ๋„์—์„œ ๋ฌด์—‡์„ ๋จผ์ € ์ธ๋ฑ์‹ฑํ•ด์•ผ ํ•˜๋‚˜์š”?

๋จผ์ € ๊ด€๋ฆฌ์ž๋“ค์ด ์ฒ˜์Œ ๋ณด๋Š” ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ ๋ทฐ์™€ ํ•˜๋ฃจ ์ข…์ผ ํด๋ฆญํ•˜๋Š” 2โ€“3๊ฐœ์˜ ํ•„ํ„ฐ๋ฅผ ์ตœ์šฐ์„ ์œผ๋กœ ํ•˜์„ธ์š”. ์‚ฌ์šฉ ๋นˆ๋„์™€ ์ฒด๊ฐ ์ง€์—ฐ(๊ฐ€์žฅ ๋А๋ฆฐ ์ฟผ๋ฆฌ)์„ ์ธก์ •ํ•œ ๋’ค, ์ •ํ™•ํ•œ ์ฟผ๋ฆฌ ํ˜•ํƒœ์— ๋Œ€ํ•ด ๊ธฐ๋‹ค๋ฆผ์„ ์ค„์—ฌ์ฃผ๋Š” ๊ฒƒ๋งŒ ์ธ๋ฑ์‹ฑํ•˜์„ธ์š”.

์™œ ๊ฐ™์€ ํ…Œ์ด๋ธ”์ธ๋ฐ ์–ด๋–ค ํ•„ํ„ฐ๋Š” ๋น ๋ฅด๊ณ  ์–ด๋–ค ํ•„ํ„ฐ๋Š” ๋„ˆ๋ฌด ๋А๋ฆฐ๊ฐ€์š”?

ํ•„ํ„ฐ๋งˆ๋‹ค ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์–‘์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ํ•„ํ„ฐ๋Š” ์ž‘์€ ํ–‰ ์ง‘ํ•ฉ์œผ๋กœ ์ขํ˜€ ์ธ๋ฑ์Šค๋ฅผ ์ž˜ ํ™œ์šฉํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ํ•„ํ„ฐ๋Š” ๋„“์€ ๋ฒ”์œ„๋ฅผ ์ฝ๊ฑฐ๋‚˜ ํฐ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ด์•ผ ํ•ด์„œ ์Šค์บ”๊ณผ ์ •๋ ฌ์ด ๋งŽ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ™์€ ํ…Œ์ด๋ธ”์ด๋ผ๋„ ํ•œ ์ฟผ๋ฆฌ๋Š” ๋น ๋ฅด๊ณ  ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋Š” ๋А๋‚„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒํƒœ(status) ์ปฌ๋Ÿผ์— ํ•ญ์ƒ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋‚˜์š”?

status ์ปฌ๋Ÿผ์— ํ•ญ์ƒ ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํ–‰์ด ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋ฉด status๋งŒ์˜ ์ธ๋ฑ์Šค๋Š” ํฐ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ ํฌ๊ท€ํ•˜๊ฑฐ๋‚˜ ์ƒํƒœ์™€ ์ •๋ ฌยท๋‹ค๋ฅธ ํ•„ํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ธ๋ฑ์‹ฑํ•ด ์‹ค์ œ ๋ทฐ๋ฅผ ์žฌํ˜„ํ•  ๋•Œ ํšจ๊ณผ๋ฅผ ๋ด…๋‹ˆ๋‹ค.

โ€œ์˜คํ”ˆ ์•„์ดํ…œ, ์ตœ์‹ ์ˆœโ€ ๋ทฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‚˜์š”?

์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ํ•˜๋Š” ๋™์ž‘์„ ๋ฐ˜์˜ํ•˜๋Š” ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์˜ˆ: ์ƒํƒœ๋กœ ํ•„ํ„ฐํ•˜๊ณ  ์ตœ๊ทผ ํ™œ๋™ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ทฐ๋ผ๋ฉด ์ƒํƒœ์™€ ์ •๋ ฌ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•œ ์ธ๋ฑ์Šค๊ฐ€ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. PostgreSQL์—์„œ๋Š” ํŠน์ • ์ƒํƒœ๋งŒ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๋ถ€๋ถ„ ์ธ๋ฑ์Šค(partial index)๊ฐ€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ด๋‹น์ž(assignee) ํ•„ํ„ฐ๋ง์€ ์–ด๋–ป๊ฒŒ ์ธ๋ฑ์‹ฑํ•ด์•ผ ํ•˜๋‚˜์š”?

์ผ๋ฐ˜์ ์œผ๋กœ assignee_id์— ๋‹จ์ผ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋น ๋ฅธ ์Šน์ˆ˜์ž…๋‹ˆ๋‹ค(๋™๋“ฑ ๋น„๊ต). โ€œ๋‚ด๊ฐ€ ํ• ๋‹น๋œ ์˜คํ”ˆ ํ•ญ๋ชฉโ€ ๊ฐ™์€ ํ•ต์‹ฌ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ค‘์š”ํ•˜๋ฉด (assignee_id, status) ๋˜๋Š” ์ •๋ ฌ์„ ํฌํ•จํ•ด (assignee_id, status, updated_at) ๊ฐ™์€ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๊ฐ€ ๋‹จ์ผ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋ณด๋‹ค ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋Š” ์นผ๋Ÿผ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์™œ unassigned(๋ฏธํ• ๋‹น) ํ•„ํ„ฐ๋ง์€ assignee_id ์ธ๋ฑ์Šค ์ดํ›„์—๋„ ๋А๋ฆฐ๊ฐ€์š”?

์ข…์ข… unassigned๋Š” assignee_id๊ฐ€ NULL์ธ ๊ฒƒ์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. WHERE assignee_id IS NULL ์ฟผ๋ฆฌ๋Š” = 123๊ณผ ๋‹ค๋ฅธ ์‹คํ–‰ ๊ณ„ํš์„ ํƒˆ ์ˆ˜ ์žˆ์–ด ์ธ๋ฑ์Šค๊ฐ€ ๊ธฐ๋Œ€๋งŒํผ ํšจ๊ณผ์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. unassigned ํ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋ฉด ํŠน์ • ์ „๋žต(์˜ˆ: ๋ถ€๋ถ„ ์ธ๋ฑ์Šค)์„ ํ…Œ์ŠคํŠธํ•ด ๋ณด์„ธ์š”.

โ€˜์ง€๋‚œ 7์ผโ€™ ๊ฐ™์€ ๋‚ ์งœ ๋ฒ”์œ„ ํ•„ํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ์ธ๋ฑ์‹ฑํ•˜๋‚˜์š”?

์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์–ด๋–ค ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์˜๋ฏธํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•˜์„ธ์š”: created_at์€ ์ƒˆ ํ•ญ๋ชฉ, updated_at์€ ์ตœ๊ทผ ๋ณ€๊ฒฝ. ํ•ด๋‹น ์ปฌ๋Ÿผ์— btree ์ธ๋ฑ์Šค๋ฅผ ๋‘๋ฉด ์ตœ๊ทผ 30์ผ ๊ฐ™์€ ๋ฒ”์œ„ ์ฟผ๋ฆฌ๊ฐ€ ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ”์œผ๋กœ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์ฃผ ์“ฐ์ด๋Š” ์กฐํ•ฉ์ด๋ฉด (status, created_at) ๊ฐ™์€ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋„ ๊ณ ๋ คํ•˜์„ธ์š”.

๊ด€๋ฆฌ์ž ๋‚ ์งœ ํ•„ํ„ฐ์—์„œ ํƒ€์ž„์กด๊ณผ ์ข…๋ฃŒ์ผ ๋ฒ„๊ทธ๋ฅผ ์–ด๋–ป๊ฒŒ ํ”ผํ•˜๋‚˜์š”?

๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋Š” ๋ฒ”์œ„ ๊ฒฝ๊ณ„์™€ ํƒ€์ž„์กด ์ฒ˜๋ฆฌ์—์„œ ์˜ต๋‹ˆ๋‹ค. ์•ˆ์ „ํ•œ ํŒจํ„ด์€ ์‹œ์ž‘์€ ํฌํ•จ, ๋์€ ์ œ์™ธ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค: created_at >= start ๊ทธ๋ฆฌ๊ณ  created_at < end_next_day. ํƒ€์ž„์Šคํƒฌํ”„๋Š” UTC๋กœ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ UTC๋กœ ๋ณ€ํ™˜ํ•ด ์ฟผ๋ฆฌํ•˜์„ธ์š”.

์™œ ์ผ๋ฐ˜ ์ธ๋ฑ์Šค๊ฐ€ ํ…์ŠคํŠธ ํ•„๋“œ์˜ 'contains' ๊ฒ€์ƒ‰์„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋‚˜์š”?

LIKE %term% ๊ฐ™์€ contains ๊ฒ€์ƒ‰์€ ์ผ๋ฐ˜ B-tree ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•ด ๋งŽ์€ ํ–‰์„ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค. ID, ์ด๋ฉ”์ผ, ์ฃผ๋ฌธ๋ฒˆํ˜ธ ๊ฐ™์€ ์ •ํ™• ์ผ์น˜ ํ•„๋“œ๋ฅผ ์šฐ์„  ์ง€์›ํ•˜๊ณ , ์ ‘๋‘์‚ฌ ๊ฒ€์ƒ‰(term%)์€ ์ผ๋ฐ˜ ์ธ๋ฑ์Šค๋กœ ์–ด๋А ์ •๋„ ์ปค๋ฒ„๋ฉ๋‹ˆ๋‹ค. ์ง„์ •ํ•œ contains ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•˜๋ฉด PostgreSQL full-text search๋‚˜ trigram ์ธ๋ฑ์Šค ๊ฐ™์€ ์ ์ ˆํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋ชจ๋“  ํ•„ํ„ฐ ๊ฐ€๋Šฅํ•œ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ๋‹ค๋Š” ๊ฑด ์•ˆ ๋˜๋‚˜์š”?

์ธ๋ฑ์Šค๋ฅผ ๋ฌด์ž‘์ • ๋งŽ์ด ์ถ”๊ฐ€ํ•˜๋ฉด ์ €์žฅ ๊ณต๊ฐ„์ด ๋Š˜๊ณ  ์‚ฝ์ž…/๊ฐฑ์‹  ๋น„์šฉ์ด ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ WHERE + ORDER BY ํŒจํ„ด๊ณผ ๋งž์ง€ ์•Š์œผ๋ฉด ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค๋งŒ ๋ฐ”๊ฟ”์„œ ์ธก์ •ํ•˜๊ณ , ์‹ค์ œ๋กœ ๋А๋ฆฐ ์ฟผ๋ฆฌ๊ฐ€ ๊ฐœ์„ ๋  ๋•Œ๋งŒ ์ ์šฉํ•˜์„ธ์š”.

AppMaster๋กœ ๊ด€๋ฆฌ์ž ํ™”๋ฉด์„ ๋งŒ๋“ ๋‹ค๋ฉด, ํŒ€์ด ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•„ํ„ฐ์™€ ์ •๋ ฌ์„ ๊ธฐ๋กํ•˜๊ณ  ๊ทธ ์‹ค์ œ ๋ทฐ์— ๋งž๋Š” ์†Œ์ˆ˜์˜ ์ธ๋ฑ์Šค๋งŒ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
๊ด€๋ฆฌ์ž ํŒจ๋„ ์ธ๋ฑ์‹ฑ: ์ž์ฃผ ์“ฐ๋Š” ํ•„ํ„ฐ๋ฅผ ๋จผ์ € ์ตœ์ ํ™”ํ•˜์„ธ์š” | AppMaster