Locations Plugin ๐ŸŒ

์ง€๊ธˆ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœํ† ํƒ€์ž… ์ž‘์—…์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฐ ์ตœ๊ทผ ํ›„์›์ž๋“ค์—๊ฒŒ ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ(ํ›„์› ๋“ฑ๊ธ‰๊ณผ ๊ด€๊ณ„์—†์ด) ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์กฐ๊ธฐ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์•ž์œผ๋กœ๋Š” ๊ฐœ์ธ ํ›„์›์ž/์†Œ๊ทœ๋ชจ ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ๋Š” ์›” 7๋‹ฌ๋Ÿฌ, ๋น„์ฆˆ๋‹ˆ์Šค์—๊ฒŒ๋Š” ์›” 40๋‹ฌ๋Ÿฌ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ์กฐ๊ธฐ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

5๊ฐœ์˜ ์ข‹์•„์š”

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

์Šคํฐ์„œ ๋ชฉ๋ก์€ ๋งค์ผ ๊ฒ€ํ† ๋˜๋ฏ€๋กœ, Locations์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ œ ์ž‘์—…์„ ์ง€์›ํ•˜๊ณ ์ž ํ•˜์‹ ๋‹ค๋ฉด ์Šคํฐ์„œ๋ฅผ ๊ณ ๋ คํ•ด ์ฃผ์„ธ์š”.

๋ฐฑ์ปค์Šค๋Š” ํ•ญ์ƒ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋จผ์ € ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์€ ๊ฐœ๋ณ„์ ์œผ๋กœ, ๊ทธ๋ฆฌ๊ณ  ์ผ์ • ์ง€์—ฐ ํ›„ ๊ณต๊ฐœ ์ €์žฅ์†Œ๋กœ ์ด์ „๋ฉ๋‹ˆ๋‹ค โ€ฆ

3๊ฐœ์˜ ์ข‹์•„์š”

๋ฐฉ๊ธˆ ์ž๋™ ์‚ฌ์šฉ์ž ์œ„์น˜ ๊ฒฐ์ •(Automated User Location Determination) ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” Maxmind๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๋Š” ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค์—์„œ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด app.yml ํŒŒ์ผ์€ ํ›Œ๋ฅญํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜์ง€๋งŒ, ๋” ์ด์ƒ Maxmind ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ฃผ์„์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ์ž์‹ ๊ฐ์ด ์—†๋Š” ์…€ํ”„ํ˜ธ์ŠคํŒ… ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋” ์ ‘๊ทผํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•œ๋‹ค๋ฉด, ๋ช…ํ™•ํ•œ ์„ค๋ช…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์Œ ์ฃผ์ œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:


๊ทธ๋ฆฌ๊ณ  - ์‚ฌ์†Œํ•œ UX ๊ด€๋ จ ์‚ฌํ•ญ

์›์น˜ ์•Š๋Š”(์ €๋Š” ์›์น˜ ์•Š์Šต๋‹ˆ๋‹ค) ์ง€๋„ ๋งํฌ๊ฐ€ ์‚ฌ์ด๋“œ๋ฐ”์— ํ‘œ์‹œ๋˜๋ฉฐ, ์ด๋Š” ์–ด๋–ค ์„ค์ •์œผ๋กœ๋„ ์ œ์–ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ฅผ ์ˆจ๊ฒผ์Šต๋‹ˆ๋‹ค:

// ์‚ฌ์šฉ์ž ์ง€๋„ ๋งํฌ ์ˆจ๊ธฐ๊ธฐ
.sidebar-sections li[data-list-item-name="users map"] {
    display: none;
}

์•„๋งˆ๋„ ์ด ๋งํฌ์™€ (์„ค์ •์œผ๋กœ ์ œ์–ด๋˜๋Š”) ์ฃผ์ œ ์ง€๋„ ๋งํฌ๋ฅผ ๋ชจ๋‘ ๋น„์ถ”์ฒœ(deprecate)ํ•  ๋•Œ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๊ฐ€ ์›ํ•œ๋‹ค๋ฉด ์ด์ œ ํ‘œ์ค€ UI๋ฅผ ํ†ตํ•ด ์ด๋“ค์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

ํ˜„์žฌ ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์ด๋“œ๋ฐ”์— ์ถ”๊ฐ€ํ•œ ๋งํฌ๋Š” ๋ฒˆ์—ญ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค ์–ธ์–ด๋ฅผ ์„ ํ˜ธํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ฒฝ์šฐ, ์‚ฌ์ด๋“œ๋ฐ”์— ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

์นดํ…Œ๊ณ ๋ฆฌ์— ์ฃผ์ œ ์ง€๋ฆฌ ์œ„์น˜ ์„ค์ •์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :thinking: (ํ˜„์žฌ ๋ฒ„์ „์€ 2026.5.0-latest์ž…๋‹ˆ๋‹ค)

1๊ฐœ์˜ ์ข‹์•„์š”

์ด ๋ฌธ์ œ๋Š” ์ด์ œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ˆ˜์ • ์‚ฌํ•ญ์€ ํ˜ธํ™˜์„ฑ ๊ด€๋ จ ์ˆ˜์ • ์‚ฌํ•ญ๋“ค๊ณผ ํ•จ๊ป˜ Early Access ๋ฒ„์ „๊ณผ ๊ณต๊ฐœ(Public) ๋ฒ„์ „์˜ ์ €์žฅ์†Œ์— ๋ฐฐํฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์˜ ์ผํ™˜์œผ๋กœ ๋ฒ„์ „ ๊ฐ„ ์ฐจ์ด๋ฅผ ํ™•๋Œ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถฉ๋ถ„ํ•œ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์Šคํฐ์„œ์—๊ฒŒ ๊ณต๊ฐœ๋˜๋Š” Early Access ๋ฒ„์ „์—๋Š” ํ˜„์žฌ ๊ณต๊ฐœ ๋ฒ„์ „์˜ Locations์— ์—†๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

์ œ๋ชฉ ์„ค๋ช…
์‚ฌ์šฉ์ž ์ง€๋„ ์ง€๊ตฌ๋ณธ ์‚ฌ์šฉ์ž ์ง€๋„์— ์•„๋ฐ”ํƒ€๋ฅผ ์œ„์น˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ณ , ๋“œ๋ž˜๊ทธ/ํ„ฐ์น˜ ํšŒ์ „, ์คŒ, ์ดˆ๊ธฐํ™”, ๊ฒ€์ƒ‰ ํฌ์ปค์Šค, ์‚ฌ์šฉ์ž ์นด๋“œ ํด๋ฆญ, ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ์ผœ์ ธ ์žˆ๋Š” ๋ฒ”ํ”„ ๋งคํ•‘์„ ์ง€์›ํ•˜๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ 3D ์ง€๊ตฌ๋ณธ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
์ง€๊ตฌ๋ณธ ์Šคํฌ๋ฆฐ์„ธ์ด๋ฒ„ ํ—ค๋” ์•„๋ž˜์—์„œ ์‚ฌ์šฉ์ž ์•„๋ฐ”ํƒ€๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ํšŒ์ „ํ•˜๋Š” 3D ์ง€๊ตฌ๋ณธ์„ ๋ณด์—ฌ์ฃผ๋Š” ์„ ํƒ์  ์‹คํ—˜์  ์œ ํœด ์Šคํฌ๋ฆฐ์„ธ์ด๋ฒ„์ž…๋‹ˆ๋‹ค.
ํ–ฅ์ƒ๋œ ์‚ฌ์šฉ์ž ์ง€๋„ ํ•„ํ„ฐ ์‚ฌ์šฉ์ž ์ง€๋„์—์„œ ๊ฒฐ๊ณผ ์ œํ•œ, ๊ฒ€์ƒ‰ ์œ ํ˜•, ๊ฒ€์ƒ‰์–ด, ๊ทธ๋ฃน ํ•„ํ„ฐ๋ง์„ ์œ„ํ•œ ์ปจํŠธ๋กค์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€๊นŒ์šด ์ฃผ์ œ ํ•„ํ„ฐ ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๊ฐ€๊นŒ์šด ์ฃผ์ œ ๋ชฉ๋ก ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
IP ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์œ„์น˜ ์กฐํšŒ IP ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ •ํ•˜์—ฌ ์ €์žฅํ•˜๋ฉฐ, ์„ค์ • ๊ฐ€๋Šฅํ•œ ํŠธ๋ฆฌ๊ฑฐ ๋ชจ๋“œ, ์„ธ๋ฐ€๋„, ์ฟจ๋‹ค์šด, GeoNames ํ•ด์„, ๊ธฐ์กด ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋™์ž‘, ๊ทธ๋ฆฌ๊ณ  ๋””๋ฒ„๊ทธ ๋กœ๊น…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋Š” ๊ณต๊ฐœ ๋ฒ„์ „์ด ์•ฝ๊ฐ„ ํ•˜ํ–ฅ ์กฐ์ •๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ œ ์Šคํฐ์„œ๋“ค์ด ์ถฉ๋ถ„ํ•œ ํ˜œํƒ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ์กฐ์น˜์ž…๋‹ˆ๋‹ค.

์ด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋“ค์„ ์›ํ•˜์‹ ๋‹ค๋ฉด, ์ €๋ฅผ ์Šคํฐ์„œ๋กœ ํ›„์›ํ•ด ์ฃผ์‹œ๊ณ  Early Access๋ฅผ ํฌํ•จํ•˜๋Š” ์›”๊ฐ„ ํ‹ฐ์–ด๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”. ์ ์ ˆํ•œ ํ‹ฐ์–ด๋กœ ํ›„์›ํ•ด ์ฃผ์‹œ๋ฉด 24์‹œ๊ฐ„ ์ด๋‚ด์— Early Access ๋ฒ„์ „์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”

@merefield ๋‹˜, ๋น ๋ฅธ ๋Œ€์‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :+1:.

1๊ฐœ์˜ ์ข‹์•„์š”

์ตœ๊ทผ Discourse ๋ฒ„์ „์—์„œ ๋น„์ถ”์ฒœ(deprecation) ์•Œ๋ฆผ์„ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค:

[PLUGIN discourse-locations] ๋น„์ถ”์ฒœ ์•Œ๋ฆผ: model:composer์— api.modifyClass๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋น„์ถ”์ฒœ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  addModelField, addModelAccessor/addModelGetter/addModelSetter, addModelMethod, addModelSaveProperty, addModelCallback API๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. [Discourse 2026.8๋ถ€ํ„ฐ ๋น„์ถ”์ฒœ] [deprecation id: discourse.modify-class-model]

์ƒ์ƒ ์† ์นœ๊ตฌ์—๊ฒŒ ๋ฌผ์–ด๋ณด์•˜์ง€๋งŒ, ์ œ ์ดˆ๋ณด์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ ฅ์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ํž˜๋“  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹คโ€ฆ :see_no_evil_monkey:

1๊ฐœ์˜ ์ข‹์•„์š”

์ฐธ๊ณ :

[๊ด€๋ฆฌ์ž ๊ณต์ง€] ํ”Œ๋Ÿฌ๊ทธ์ธ 'discourse-locations'์—๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. (id:discourse.modify-class-model)

์ €๋„ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

์ด ๋ฌธ์ œ๋Š” @cvx ๋‹˜์˜ ๊ธฐ์—ฌ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (์‚ฌ์‹ค 5์ผ ์ „์— ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! :sweat_smile:)

์ตœ๊ทผ PR

PR ์ฃผ์š” ๋ชฉ์  ์ž‘์„ฑ์ž
#168 ๋ณด์•ˆ ๊ฒฝ๊ณ ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Ruby ๋ฐ JavaScript ์˜์กด์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. angusmcleod
#169 ๋น„์ถ”์ฒœ๋˜๋Š” Composer modifyClass ์‚ฌ์šฉ๋ฒ•์„ ํ˜„๋Œ€์ ์ธ ๋ชจ๋ธ ํ™•์žฅ API๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. cvx
#171 Composer ์œ„์น˜ ๊ธฐ๋ณธ๊ฐ’ ํ…Œ์ŠคํŠธ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์นดํ…Œ๊ณ ๋ฆฌ ์ „ํ™˜ ์‹œ ์œ„์น˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. merefield
#172 ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฆฐํŒ… ๋ฐ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ํ˜„์žฌ Discourse ํ”Œ๋Ÿฌ๊ทธ์ธ ์Šค์ผˆ๋ ˆํ†ค๊ณผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. merefield
#173 use-after-free ์ทจ์•ฝ์ ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด Ruby json ์ œ๋ฌผ์„ 2.21.1์—์„œ 2.21.2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. dependabot
#174 ์œ„์น˜ ๊ฒ€์ƒ‰ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ณต์›ํ•˜๊ณ , ๋นˆ ์ง€์˜ค์ฝ”๋”ฉ ์š”์ฒญ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ๋งต ์•ˆ์ „ ์žฅ์น˜ ๋ฐ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. merefield

๊ธฐ์—ฌํ•ด ์ฃผ์‹  @angus ๋‹˜๊ณผ @cvx ๋‹˜๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ๋ฌด๋ฃŒ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์Šคํฐ์„œ ์ „์šฉ ์กฐ๊ธฐ ์ ‘๊ทผ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋‘์— ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, Chatbot์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์œ„์น˜๋ฅผ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์Šคํฐ์„œ ์ „์šฉ ์ €์žฅ์†Œ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์  ์—ญ๋Ÿ‰์„ ํ•œ์ธต ๋” ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Locations Early Access๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

5๊ฐœ์˜ ์ข‹์•„์š”

์˜ค๋Š˜ ์ €๋Š” ์–ผ๋ฆฌ ์•ก์„ธ์Šค์—์„œ ๋ฉ”์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์—ฌ๋Ÿฌ ๋น„๊ธฐ๋Šฅ์  ๊ฐœ์„  ์‚ฌํ•ญ์„ ๋ฐฑํฌํŠธํ–ˆ์Šต๋‹ˆ๋‹ค:

2๊ฐœ์˜ ์ข‹์•„์š”

๋ถ๋งˆํฌ ๋ฉ”๋ชจ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ, Locations๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ํ”„๋กœ ์Šคํฐ์„œ๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋ฐ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…์„ ๊ฐ„์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์กฐ์น˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์ด ๋” ์‹ ์†ํ•˜๊ฒŒ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด์ „์— โ€œ์–ผ๋ฆฌ ์•ก์„ธ์Šคโ€๋ผ๊ณ  ๋ถˆ๋ฆฌ๋˜ ๋ฒ„์ „์„ ์Šคํฐ์„œ ์ „์šฉ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ํ™•์ •๋œ ํ”„๋ฆฌ๋ฏธ์—„ ํ™•์žฅ์œผ๋กœ ํ™•๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ ์–ผ๋ฆฌ ์•ก์„ธ์Šค ํด๋ก  ๋ช…๋ น์–ด๋ฅผ app.yml์—์„œ ๋‹ค์Œ์œผ๋กœ ๊ต์ฒดํ•˜์„ธ์š”. ์ด๋•Œ ๊ธฐ๋ฐ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋จผ์ € ๋ฐฐ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  git clone https://github.com/merefield/discourse-locations.git
  git clone https://YOUR_GITHUB_USERNAME:YOUR_TOKEN@github.com/merefield/discourse-locations-pro-ext.git

๊ทธ ํ›„ Discourse๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์„ธ์š”. ๊ธฐ์กด ์œ„์น˜ ๋ฐ์ดํ„ฐ๋Š” ์œ ์ง€๋˜๋ฏ€๋กœ ์ˆ˜๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„ ๋ณ€๊ฒฝ ํ›„์—๋„ ์ €์žฅ์†Œ ์ ‘๊ทผ ๊ถŒํ•œ์€ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๊ทผ ๋˜๋Š” ์„ค์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ธฐ๊บผ์ด ๋„์›€์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋น„์Šคํฐ์„œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ฐ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์ง€๋งŒ, ์‚ฌ์ดํŠธ๋Š” ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๊ณ„์†๋œ ๊ด€์‹ฌ๊ณผ ์ง€์›์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

GitHub์—์„œ ์›” 7๋‹ฌ๋Ÿฌ ์ด์ƒ์˜ ๋ธŒ๋ก ์ฆˆ ๋“ฑ๊ธ‰์œผ๋กœ ์Šคํฐ์„œ๋ฅผ ๋“ฑ๋กํ•˜๋ฉด Locations Pro์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๊ธฐ๋Šฅ

Discourse Locations๋Š” ์™„์ „ํ•œ ์œ„์น˜ ์ €์žฅ, ์ง€์˜ค์ฝ”๋”ฉ, ์ง€๋„ ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์ ์ธ Pro ํ™•์žฅ ๊ธฐ๋Šฅ์€ ๊ณ ๊ธ‰ ํƒ์ƒ‰, ์ž๋™ํ™”, ์‚ฌ์šฉ์ž ์ง€๋„ ํ‘œ์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ, ์ด ๊ธฐ๋ฐ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ Pro ํ™•์žฅ
๊ตฌ์กฐํ™”๋œ ์ฃผ์ œ ์œ„์น˜ ๋ฐ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ž…๋ ฅ ํ•„๋“œ :white_check_mark: โ€”
์—ฌ๋Ÿฌ ์ œ๊ณต์ž๋ฅผ ํ†ตํ•œ ์„ ํƒ ๋˜๋Š” ํ•„์ˆ˜ ์ง€์˜ค์ฝ”๋”ฉ :white_check_mark: โ€”
์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ ์‚ฌ์ดํŠธ ์ „์ฒด ์ฃผ์ œ ์ง€๋„ ๋ณด๊ธฐ :white_check_mark: โ€”
๊ฒŒ์‹œ๋ฌผ, ํ”„๋กœํ•„, ์นด๋“œ, ๋””๋ ‰ํ„ฐ๋ฆฌ ์ง€๋„์— ํ‘œ์‹œ๋˜๋Š” ์‚ฌ์šฉ์ž ์œ„์น˜ :white_check_mark: โ€”
์ง€์—ญ ์ด๋ฆ„ ๋ฐ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•œ Leaflet ์‚ฌ์šฉ์ž ์ง€๋„ :white_check_mark: โ€”
๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์œ„์น˜ ๋ผ๋ฒจ, ๊ตญ๊ธฐ, ์ง€๋„ ๋งˆ์ปค, ํด๋Ÿฌ์Šคํ„ฐ๋ง, ํƒ€์ผ :white_check_mark: โ€”
์ƒˆ ์ฃผ์ œ๋ฅผ ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋กœ ๊ธฐ๋ณธ ์„ค์ • :white_check_mark: โ€”
IP ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์œ„์น˜ ์ž๋™ ์ถ”์ • โ€” :white_check_mark: ๋…์ 
ํ˜„์žฌ ์‚ฌ์šฉ์ž ์œ„์น˜ ๊ธฐ๋ฐ˜์˜ ์ธ๊ทผ ์ฃผ์ œ ํƒ์ƒ‰ โ€” :white_check_mark: ๋…์ 
์œ„์น˜ ์ธ์‹ Discourse Chatbot ๋„๊ตฌ (์„ ํƒ) โ€” :white_check_mark: ๋…์ 
๊ถŒํ•œ ์ธ์‹ ๊ทธ๋ฃน ๋ฐ ๊ฒฐ๊ณผ ์ œํ•œ ์‚ฌ์šฉ์ž ์ง€๋„ ํ•„ํ„ฐ โ€” :white_check_mark: ๋…์ 
์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ WebGL ์‚ฌ์šฉ์ž ์ง€๋„ ์ง€๊ตฌ๋ณธ โ€” :white_check_mark: ๋…์ 
์œ ํœด ์ง€๊ตฌ๋ณธ ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ โ€” :white_check_mark: ๋…์ 

Pro๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋…์  ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ์ถ”๊ฐ€๋˜๋ฉฐ, ๊ธฐ๋ฐ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋Œ€์ฒดํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

์ด์ „์—๋Š” ์šฐํšŒ ์กฐ์น˜๋กœ ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ, ์ดํ›„ PM CSS๊ฐ€ ์ผ๋ฐ˜์ ์ธ ์ฃผ์ œ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , PM ์‚ฌ์šฉ์ž ์œ„์น˜ ๋ผ๋ฒจ ์ •๋ ฌ์„ ๋‹ค์‹œ ๊น”๋”ํ•˜๊ฒŒ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค:

1๊ฐœ์˜ ์ข‹์•„์š”

์‚ฌ์šฉ์ž ์ •์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•  ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋”ด ์‚ฐ์žฅ ๊ฐ™์€ ๊ฒฝ์šฐ, ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ์ขŒํ‘œ๋กœ ์œ„์น˜๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ ์‰ฝ๊ฒŒ ๊ฒ€์ƒ‰ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์œ„๋„/๊ฒฝ๋„ ์ขŒํ‘œ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

๋„ค. ์ขŒํ‘œ๋งŒ ์ฃผ์ œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์‚ฌํ•ญ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”:

์ž…๋ ฅ ํ•„๋“œ๋ฅผ ๋„๋ฉด ์œ„์น˜ ์ •๋ณด ์ œ๊ณต์ž์— ํ•ด๋‹น ์œ„์น˜ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ํ•œ ์ผ๋ฐ˜ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

1๊ฐœ์˜ ์ข‹์•„์š”

6๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์ด ๊ธฐ์กด ์ฃผ์ œ์— ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: [๊ด€๋ฆฌ์ž ์•ˆ๋‚ด] ํ…Œ๋งˆ ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ค‘ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค