Feathers: CRUD์šฉ GUI๋ฅผ ์ง€์›ํ•ด์ฃผ์„ธ์š”

์— ๋งŒ๋“  2016๋…„ 03์›” 19์ผ  ยท  57์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: feathersjs/feathers

์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์™„์ „ํ•œ CRUD ์ž‘์—…์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ GUI๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠœํ† ๋ฆฌ์–ผ์ด๋‚˜ ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ๊ธฐ๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Feather๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ๋ฏธ์นœ ์”จ์•—์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.๋Œ„์„œ:

Discussion Proposal

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/ForestAdmin/lumber

๋ชจ๋“  57 ๋Œ“๊ธ€

@takaaptech ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” @feathersjs/core-team ์‚ฌ์ด์—์„œ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฝค ๋งŽ์ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์„ ํƒ์  ํ”Œ๋Ÿฌ๊ทธ์ธ์ด์–ด์•ผ ํ•˜์ง€๋งŒ ํ™•์‹คํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” 3.0 ์ด์ •ํ‘œ์— ์ด๊ฒƒ์„ ์ž ์ •์ ์œผ๋กœ ๋•Œ๋ฆด ๊ฒƒ์ด๋‹ค.

@ekryski ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊นƒํ„ธ์€ ์ •๋ง ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” CRUD ์ž‘์—…์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ GUI๊ฐ€ ์žˆ๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“œ๋Š”๋ฐ, ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ณ„ํš์ธ์ง€ ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ORM์ด ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ๋ชจ๋ธ ์ •์˜๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด JSON ์Šคํ‚ค๋งˆ์™€ ๊ฐ™์€ ๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ €๋Š” ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ GUI๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์„ ๋งŽ์ด ํ•ด์™”๊ณ  ํ•ด๋‹น ์Šคํ‚ค๋งˆ๋ฅผ ํ•ด๋‹น ํ•„๋“œ์™€ ํ•จ๊ป˜ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ(์ตœ๋Œ€ ๊ธธ์ด, ๋ฌธ์ž์—ด ์ •๊ทœ์‹ ๋“ฑ), ์†์„ฑ ํŽธ์ง‘๊ธฐ(๋‚ ์งœ ์œ ํ˜• ํ•„๋“œ์˜ ๋‚ ์งœ, ๋‚ ์งœ/์‹œ๊ฐ„ ๋˜๋Š” ์‹œ๊ฐ„ ํŽธ์ง‘) ๋“ฑ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์Šคํ‚ค๋งˆ ์ •์˜(bookshelf์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ฐฑ๋ณธ ์Šคํƒ€์ผ ํ™•์žฅ์ด ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜ ๋‹จ์ˆœ JSON ๊ธฐ๋ฐ˜)๋ฅผ ์—ฐ๊ด€๊ณผ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•˜๊ณ  ๋‹ค๋ฅธ ORM์— ๋Œ€ํ•œ ์Šคํ‚ค๋งˆ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋ธ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ swagger๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ORM ๊ฐ„์— ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด Strapi๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์˜ studio ๋ฐ admin panel ๋ฅผ ๋ณด์‹ญ์‹œ์˜ค.

https://www.youtube.com/watch?v=UOQszbaZfSc

Strapi๋Š” ์ˆ˜์„ ๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , parse-dashboard(https://github.com/ParsePlatform)๋ผ๋Š” parse๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ORM ์ค‘์—์„œ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ๊นƒํ„ธ๊ณผ ๊ฐ™์€ ์œ ์—ฐ์„ฑ์€ ์—†์Šต๋‹ˆ๋‹ค.

๊นƒํ„ธ์ด ์‹ค์ œ๋กœ ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด ๊นƒํ„ธ์ด ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ์ง€ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณด๋Š” ์†”๋ฃจ์…˜์€ ๊ธฐ๋Šฅ์„ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ชจ๋“ˆ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • GUI ํ‘œ์‹œ์™€ ๊ฐ™์€ ์ฃผ์š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊นƒํ„ธ ํ”Œ๋Ÿฌ๊ทธ์ธ
  • ORM์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์šฉ ์–ด๋Œ‘ํ„ฐ

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๊ฐ ORM์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ ๊ณ ์œ ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋งŽ์€ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์—๋Š” ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

1) API๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” UI ์ธํ„ฐํŽ˜์ด์Šค. ํ›„ํฌ์™€ ์„œ๋น„์Šค์˜ ํ๋ฆ„์œผ๋กœ ์—ฌ๊ธฐ์—๋Š” ์ƒ๋‹นํ•œ ์ž ์žฌ๋ ฅ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
2) API๋กœ ์ž‘์—…ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„์˜ ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค. Postman ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ํŠนํžˆ Feathers์šฉ์ž…๋‹ˆ๋‹ค.
3) ์•ฑ์—์„œ CRUD ๊ด€๋ฆฌ์ž ๋ฐฑ์—”๋“œ ์ƒ์„ฑ. ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๊ฐ€์žฅ ์–ด๋ ต๊ณ  ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌํ˜„์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ(Feathers ์œ„์— "๊ณต์‹" ํ”„๋ก ํŠธ์—”๋“œ ์Šคํƒ์ด ์—†๋Š” ๊ฒฝ์šฐ) ์ƒ์„ฑ๊ธฐ๋Š” ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ ˆ๋Œ€ CRUD๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์น˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— tcomb , tcomb-form , feathers-tcomb ๋ฐ feathers-action ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฏธ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. business-stack ์—์„œ ๋ชจ๋‘ ํ•จ๊ป˜ ํ™•์ธํ•˜์„ธ์š”. ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. :)

@ahdinosaur ์ •๋ง ๋ฉ‹์ง€๋„ค์š”. @daffl ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ์ค‘ ์ผ๋ถ€๋ฅผ ๋น›๋‚˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ feathers-tcomb ์ •๋„. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๋ฐ”๋กœ ๊ทธ ๋ฐฉ๋ฒ•์ด๋ฉฐ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋“  API ๋ฌธ์„œ์™€ CRUD UI๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ผ๋ถ€ ๋ชจ๋ธ/๋ฆฌ์†Œ์Šค ์ •์˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. feathers-swagger ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชฝ๊ตฌ์Šค ๋ชจ๋ธ ์ •์˜๋ฅผ Swagger์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ DB์™€ ORM์ด ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๋ถ„ํ• ํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” tcomb ๊ฐ™์€ ๊ฒƒ์ด ๊ฝค ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๊ทธ๊ฒƒ์ด ORM์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ ์„ ๋ฌดํšจํ™”ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด ๋ฐ˜๋“œ์‹œ ๋‚˜์œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์•„๋ž˜์˜ DB์— ๊ด€๊ณ„์—†์ด ์Šคํ‚ค๋งˆ/๋ชจ๋ธ/๋ฆฌ์†Œ์Šค ์ •์˜์—์„œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋ฏ€๋กœ Sequelize ๋ชจ๋ธ, mongoose ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š์ง€๋งŒ Tcomb ๋˜๋Š” ๊ธฐํƒ€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ DB์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

admin ๋˜๋Š” ๋ฌด์–ธ๊ฐ€์˜ UI ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋‹ค์Œ ์‚ฌํ•ญ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

A) ์˜ค๋Š˜์˜ ํ”„๋ก ํŠธ ์—”๋“œ ํ’๋ฏธ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚œ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
B) ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ํ”„๋ก ํŠธ ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด, ์˜ˆ๋ฅผ ๋“ค์–ด React์—์„œ, ๊ทธ ์˜†์— ๋Œ€์•ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

Django์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ CRUD-GUI ๋˜๋Š” ์ผ์ข…์˜ ๊ด€๋ฆฌ์ž์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์„ ์ฐพ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋ธ์— ๋Œ€ํ•œ JSON ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€์•˜์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ฝ”๋“œ, mongoose[1] ๋ฐ ๊ธฐํƒ€ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋ฅผ ํŽ˜๋”์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์Šคํ‚ค๋งˆ์™€ ng-admin[2] ๋ผ์ธ์„ ๋”ฐ๋ผ ๋ฌด์–ธ๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ต์  ๊ฐ„๋‹จํ•ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์žฅ์ ์€ ํŠน๋ณ„ํžˆ ๊นƒํ„ธ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (JSON ์Šคํ‚ค๋งˆ ์ƒ์„ฑ๊ธฐ ๋ฐ ์ผ๋ถ€ ์ƒ์„ฑ๋œ ์ ‘์ฐฉ์ œ ์ œ์™ธ) "์˜ค๋Š˜์˜ ๋ง›"์— ๋Œ€ํ•œ ๊ฑฑ์ •์ด ์—†๊ณ  ๊นƒํ„ธ์ด ๊ทธ๊ฒƒ์ด ์ •๋ง๋กœ ์ค‘์š”ํ•œ ๊ณณ, ๊ทธ๊ฒƒ์ด ์ œ๊ณตํ•˜๋Š” REST ๋ฐ Socket.io ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

๋‹จ์ง€ ๋‚ด 2์„ผํŠธ, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋‚˜๋Š” ์•ž์œผ๋กœ 2~3์ฃผ ์•ˆ์— ์ด๊ฒƒ์— ๋Œ€ํ•œ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

[1] json-schema to mongoose ๋ณ€ํ™˜๊ธฐ: https://www.npmjs.com/package/json-schema-to-mongoose
[2] ng-admin, CRUD ๊ด€๋ฆฌ์ž: https://github.com/marmelab/ng-admin

@AndreSteenveld ์ž‘๋…„์— ์ด์™€ ๊ฐ™์€ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์—ฌ๊ธฐ์— ๋ชจ์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/marshallswain/AmityApp. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ ํ˜• ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ํŽ˜๋” ์„œ๋น„์Šค ๋ชจ์Œ์ธ Amity ์–ด๋Œ‘ํ„ฐ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” MongoDB ๋ฒ„์ „๋งŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/marshallswain/amity-mongodb

amity-mongodb ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด MongoDB ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊นƒํ„ธ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์ด Feathers ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ปฌ๋ ‰์…˜์„ ์ถ”๊ฐ€/์ œ๊ฑฐํ•˜๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์•„์ง amity ์„œ๋ฒ„๋ฅผ Feathers 2.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์—์„œ ๋‹น์‹ ์ด ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

์™„์ „ํžˆ ๋ชจ๋“ˆ์‹์œผ๋กœ ๋งŒ๋“ค์—ˆ์œผ๋ฏ€๋กœ ์›ํ•˜๋Š” ๊ฒฝ์šฐ amity ์–ด๋Œ‘ํ„ฐ ์œ„์— ๊ณ ์œ ํ•œ UI๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ์•„๋งˆ๋„ ng-admin์„ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด ํŠน์ • ๋ฐฑ์—”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Angular๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ riot.js๋กœ ๊ฑฐ์˜ ํฌํŒ…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ http://forestadmin.com/์ด๋ผ๋Š” ๊ฝค ์ข‹์€ ๋Œ€์•ˆ์ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์œ ๋ฃŒ ๋ฐ ํ˜ธ์ŠคํŒ…์ด์ง€๋งŒ ๋ฌด๋ฃŒ๋กœ ๋กœ์ปฌ์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์ž‘์ž๋Š” Forest ๋ฏธ๋“ค์›จ์–ด ๋‹ค์Œ์— Feathers ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋กœ๋“œํ•˜๋ฉด ์ฆ‰์‹œ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณง ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@ekryski @SeyZ
๋ฌด๋ฃŒ ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๊นŒ?

Hey @josx - 1๋ช…์˜ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค :)

์‹œ๋„ / ์‚ฌ์šฉ / ๋ณธ ์ ์ด ์žˆ๋‹ค๋ฉด StrongLoop API ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” RestFUL ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋งค์šฐ ๋ฉ‹์ง„ ์›น UI๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค ... ์ง€๊ธˆ์€ http://loopback.io ์ž…๋‹ˆ๋‹ค (IBM์ด Strongloop๋ฅผ ์ธ์ˆ˜ ํ•œ ํ›„). ์–ด์จŒ๋“  ๊ฑฐ๊ธฐ์— ๋น›๋‚˜๋Š” ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค...

@ekryski-forestadmin.com ์„ ๋ณด์•˜์ง€๋งŒ ๋กœ์ปฌ์—์„œ ๋ฌด๋ฃŒ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜/๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฐจ์„ธ๋Œ€ ๊ธฐ์—…(์ธํ„ฐ๋„ท ์•ก์„ธ์Šค๊ฐ€ ์—†๋Š” ๋ฐฉํ™”๋ฒฝ ๋’ค)์„ ๊ธฐ๋ฐ˜์œผ๋กœ feathersjs๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ๊ฒƒ์ด ๋กœ์ปฌ์—์„œ ํ˜ธ์ŠคํŒ…๋  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. :)

์•ˆ๋…•ํ•˜์„ธ์š” @sjmcdowall - ์‚ฌ์šฉํ•˜๋Š” ORM( Sequelize , Mongoose ๋˜๋Š” Loopback )์— ๋”ฐ๋ผ Forest ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ Forest๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ง์ ‘ ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— localhost ํ™˜๊ฒฝ( http://localhost... )์—์„œ Forest๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1๋ช…์˜ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์™„์ „ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค ๐Ÿ‘

์ด๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. Strapi์™€ Treeline(Sails ๋’ค์— ์žˆ๋Š” ๋™์ผํ•œ ํŒ€) ๋ชจ๋‘ ์ด๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

@ekryski Forest Admin์ด ์–ผ๋งˆ๋‚˜ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”? ๋งŽ์€ ์†์ง“์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๊นŒ? ๋ฐ˜์‘์—์„œ ์ž์ฒด ์‚ฌ์šฉ์ž ์ง€์ • ๊ด€๋ฆฌ UI๋ฅผ ๊ตฌ์ถ•ํ–ˆ์ง€๋งŒ ํฌ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋ฉด ์›Œํฌ๋กœ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ฃ ?

@Mentioum ๋‚˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ mongoose์™€ ํ•จ๊ป˜ ์šด์ด ์—†์—ˆ๊ณ  ์šฐ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์ด‰๋ฐ•ํ•˜์—ฌ ng-admin์œผ๋กœ ๊ฐ”๋‹ค. Forest, Feathers ๋˜๋Š” ๋‚ด๊ฐ€ ๋ฐ”๋ณด์ธ์ง€ ์—ฌ๋ถ€๋ฅผ Forest ํŒ€๊ณผ ํ•จ๊ป˜ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ์ฃผ ํ›„๋ฐ˜์— ๋˜ ๋‹ค๋ฅธ ์ ์ ˆํ•œ ๊ธฐํšŒ๋ฅผ ์ค„ ์‹œ๊ฐ„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๋‹ค์‹œ๋ณด๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Mentioum ์ฐจ์ž„์„ ํ—ˆ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Forest์—์„œ @SeyZ ์™€ ํ•จ๊ป˜ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @ekryski์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“  Forest์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ Sandro ๋˜๋Š” ์ €์—๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์‹ญ์‹œ์˜ค(์ด๋ฉ”์ผ์€ [email protected]). ๊ทธ๋Ÿฌ๋ฉด ํ•จ๊ป˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

Forest๋Š” ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด Sequelize๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ FeathersJS๋ฅผ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ mongoose๋กœ ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Forest๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์กฐ์ •๋œ app.js ํŒŒ์ผ์˜ ์š”์ง€ ์ž…๋‹ˆ๋‹ค.

๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ž์œ  ์†Œํ”„ํŠธ์›จ์–ด/์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ˆฒ๊ณผ ๊ฐ™์€ ๊ด€๋ฆฌ์ž ์ž‘์—…์— ๋Œ€ํ•œ ์š”์ ์„ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ngadmin o ์œ ์‚ฌํ•œ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ekryski ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@VinzGhyz ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ์นœ์ ˆํ•˜์ง€๋งŒ ๊ฐ์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. mongoose์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ธฐ ์ „๊นŒ์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ์Šค์Šค๋กœ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ์ž‘๋™ ์†”๋ฃจ์…˜์ด ์ด๋ฏธ ์žˆ์œผ๋ฏ€๋กœ ์ด์— ์ „๋…ํ•  ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ํ˜„์žฌ ์†”๋ฃจ์…˜๋ณด๋‹ค ์ž‘์—… ๋ถ€ํ•˜๊ฐ€ 0์ด๊ฑฐ๋‚˜ ์ž‘์—… ๋ถ€ํ•˜๊ฐ€ ์ ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์ง€์ผœ๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

(์ด์ „์— ์–ธ๊ธ‰ํ•œ ์ ์ด ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ KeystoneJS์—๋Š” ElementalUI( react )๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฝค ๊ฒฌ๊ณ ํ•œ ์˜ต์…˜์„ ๊ฐ–์ถ˜ ํ›Œ๋ฅญํ•œ ์ž๋™ ์ƒ์„ฑ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@Mentioum ์–ธ๊ธ‰ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. KeystoneJS์˜ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ๐Ÿ˜€

์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ Keystone์ด ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ฐœ๋…์ธ Keystone Lists์™€ Admin UI์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Feathers์— ๋Œ€ํ•ด ์ž ์‹œ ๊นŠ์ด ํŒŒ๊ณ ๋“ค์ง€ ์•Š์•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋ณธ ๊ฒƒ์€ ๋ฉ‹์ง€๊ฒŒ ๋ณด์ด๋ฉฐ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์˜์—ญ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฃผ ๋ฒ„์ „์ด ์ž„๋ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค(๋‹ค์Œ ๋‚  ์ •๋„์— ๋ฒ ํƒ€ ์ถœ์‹œ๋ฅผ ํฌ๋งํ•จ). ์ด๋Š” ์™„์ „ํ•œ ๋ฐ˜์‘/๋ฆฌ๋•์Šค UI ๋ฐ ์ƒˆ๋กœ์šด API๋ฅผ ํฌํ•จํ•˜์—ฌ 1๋…„ ๋™์•ˆ ์žฌ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Feathers์™€ ํ˜‘๋ ฅํ•˜์—ฌ ํฌ๋กœ์Šค์˜ค๋ฒ„๋ฅผ ์ค„์ด๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋ง์ด์ฃ .

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋ฉ€์ง€ ์•Š์€ ๋ฏธ๋ž˜์— mongoose์— ๋Œ€ํ•œ ์–ด๋ ค์šด ์—ฐ๊ฒฐ์—์„œ ํ•ด๋ฐฉ๋˜๊ธฐ๋ฅผ ํฌ๋งํ•˜๋ฉฐ, API/๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์˜ฌ๋ฐ”๋ฅธ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋” ์ž˜ ๋งž์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

Feathers ํŒ€ - ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋ฌธ์˜ํ•˜์„ธ์š”.

@JedWatson ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์™„์ „ํžˆ ํ˜‘๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์„ ๋ณด๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‹ค์ œ๋กœ Feathers๋ฅผ ๋ฐฑ์—”๋“œ ์กฐ๊ฐ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Keystone์„ ํ•ดํ‚นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@Mentioum ์ €๋„ ๋‹˜๊ณผ ๊ฐ™์€ ๋ฐฐ๋ฅผ ํƒ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋ฐ”๋น ์„œ. Hopefull์€ ์ด๋ฒˆ ์ฃผ์— ๋‚ด๊ฐ€ Forest๋ฅผ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด 30๋ถ„ ์ •๋„ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ng-admin์— ๊นŠ์€ ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค(์ €๋Š” Angular์˜ ์—ด๋ ฌํ•œ ํŒฌ์€ ์•„๋‹ˆ์ง€๋งŒ). ๊ทธ๋Ÿฌ๋‚˜ ์Šคํ‚ค๋งˆ ์„œ๋ฒ„ ์ธก์—์„œ ์ด๋ฏธ ์ •์˜ํ•œ ํ•ญ๋ชฉ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋Š” ์ƒ์šฉ๊ตฌ/์ค‘๋ณต์ด ์—ฌ์ „ํžˆ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊นƒํ„ธ์— ์๊ธฐ๋Œ์„ ๋†“๋Š” ๊ฒƒ์€ ๊ธˆ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋‚ด๊ฐ€ ๊ธฐ์—ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@JedWatson @ekryski @daffl

๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค. ์ €๋Š” Keystone์œผ๋กœ ๋งŽ์€ ๊ฒƒ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. (์ €๋Š” ํŒฌ์ž…๋‹ˆ๋‹ค) (๊นƒํ„ธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค):

http://161london.com (ํด๋ผ์ด์–ธํŠธ ์ž‘์—…)
http://thenidocollection.com (ํด๋ผ์ด์–ธํŠธ ์ž‘์—…)
http://headstartapp.com (ํ˜„์žฌ ์‹œ์ž‘)

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” Feathers๋ฅผ ์‹ค์ œ Headstart ์•ฑ(๋ชจ๋“  React ๋ฐ React Native atm - '๋ธŒ๋ผ์šฐ์ € ์•ฑ'์„ ์‹ซ์–ดํ•˜๋Š” ๊ธฐ์—…์„ ์œ„ํ•ด Electron์ด ๋ž˜ํ•‘ํ•œ ์ผ๋ถ€)์„ ๊ตฌ๋™ํ•˜๋Š” ๋งŽ์€ ์ž‘์€ ์„œ๋น„์Šค๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ์ŠคํŠธ๋ ˆ์น˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ์ข…์˜ ORM์ด ์žˆ๋Š” ํ‚ค์Šคํ†ค์— ๋Œ€ํ•ด ์ง„์ •์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๊นƒํ„ธ์„ ํ‚ค์Šคํ†ค๊ณผ ํ•จ๊ป˜ ์‹คํ–‰๋˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์‹œ์›ํ•˜์ง€ ์•Š์„๊นŒ์š”?

๊ทธ๋Ÿฐ ์‹์œผ๋กœ keystone์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ชฝ๊ตฌ์Šค๋กœ ๋ชจ๋“  ๊ฒƒ์„ ์ƒ์„ฑํ•˜๋Š” 'ํ„ด ํ‚ค' ์†”๋ฃจ์…˜์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์กฐ๊ธˆ ๋” ํ™”๋ คํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํŠน์ • Feathers ์„œ๋น„์Šค์— ๋์ ์„ ์ œ๊ณตํ•˜๋Š” ํŠน์ • ๋ชฉ๋ก์— ๋Œ€ํ•ด Feathers ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฐ€๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๊ทธ๊ฒƒ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ›จ์”ฌ ๋” ๋‚˜์€ ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. (Obs๋Š” Keystone์—์„œ ์ต์Šคํ”„๋ ˆ์Šค ๊ฒฝ๋กœ๋กœ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž๋™ ์ƒ์„ฑ ๊ด€๋ฆฌ์ž๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :))

์ง€๊ธˆ ์ž‘์€ Dockerstack ๊ฟˆ์„ ๊พธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๋””์Šค,
๋ชฝ๊ณ DB,
์š”์ง€,
๊นƒํ„ธ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค1,
๊นƒํ„ธ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค,
PS๊ทธ๋ ˆ์Šค,
์—˜๋ผ์Šคํ‹ฑ์„œ์น˜
๋“ฑ....
....

์–ด์จŒ๋“  ์ด๊ฒƒ์ด ์ผ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค.

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

+1์€ ๊นƒํ„ธ์ด ์žˆ๋Š” ํ‚ค์Šคํ†ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ํŒจํ„ด์˜ ์˜ˆ๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ž๋™ ์ƒ์„ฑ๋œ ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

GraphQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ์ข‹์€ ์†”๋ฃจ์…˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GraphQL ์ž๋™ ์ƒ์„ฑ CMS .

๋‚˜๋Š” ์œ ์šฉํ•˜๊ฑฐ๋‚˜ ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์ž ์‹œ ๋™์•ˆ ์ž‘์—…ํ•ด ์˜จ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. NodeMDA๋Š” UML ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ ์ƒ์„ฑ ์—”์ง„์ž…๋‹ˆ๋‹ค. "Entity" ๋ฐ "Service"์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ฐœ๋…์„ ๋ชจ๋ธ๋งํ•˜๊ณ  ์ „์ฒด ์Šคํƒ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์„œ๋ฒ„ ์ธก์—์„œ Feathers๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ React + Material-UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํ•œ ์•ฑ์„ ์ƒ์„ฑํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ๋งํ•˜๋Š” ๊ฐ ์—”ํ„ฐํ‹ฐ์—๋Š” ์ „์ฒด CRUD ํŽธ์ง‘๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” MIT ๋ผ์ด์„ ์Šค๊ฐ€ ์žˆ์ง€๋งŒ ํ˜„์žฌ ์ž์ฒด ๋ชจ๋ธ๋ง ๋„๊ตฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ชจ๋ธ๋ง ์•ฑ์— StarUML์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ฐ€๊ฒฉ์ด ์ €๋ ดํ•˜๊ณ  ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๊ฐ€ XMI์™€ ๊ฐ™์€ xml ๋ฌธ์„œ๊ฐ€ ์•„๋‹Œ JSON์— ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. StarUML์€ ์ƒ์šฉ ์ œํ’ˆ์ด์ง€๋งŒ ๋ฌด๋ฃŒ ๋ฌด์ œํ•œ ํ‰๊ฐ€ ๊ธฐ๊ฐ„(๋‚ด๊ทธ์›จ์–ด)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด๋–ค ์‹์œผ๋กœ๋“  StarUML๊ณผ ์ œํœดํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ๊ทธ๋“ค์˜ ๋ชจ๋ธ๋ง ๋„๊ตฌ๊ฐ€ ๋‚˜์˜ ์ฆ‰๊ฐ์ ์ธ ํ•„์š”๋ฅผ ์ถฉ์กฑ์‹œ์ผฐ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ NodeMDA๋Š” ํ”Œ๋Ÿฌ๊ทธํ˜• ํŒ๋…๊ธฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋น„์šฉ์„ ์ง€๋ถˆํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋น ๋ฅด๊ณ  ๋”๋Ÿฌ์šด UML ํด๋ž˜์Šค ํŽธ์ง‘๊ธฐ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์žฅ๊ฑฐ๋ฆฌ ๋กœ๋“œ๋งต์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Java MDA ํ”„๋กœ์ ํŠธ(AndroMDA)์— ๊ธฐ์—ฌํ•œ ์ ์ด ์žˆ๊ณ  Node ์„ธ๊ณ„์—์„œ๋„ ๋น„์Šทํ•œ ๊ฒƒ์„ ๊ฐ–๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— NodeMDA๋ฅผ ํ•ดํ‚นํ•ด์™”์Šต๋‹ˆ๋‹ค. ์—”์ง„ ์ž์ฒด๋Š” ๊ฝค ์ž˜ ๋Œ์•„๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ƒ์„ฑํ•˜๋Š” ์ƒˆ๋กœ์šด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” "๋…๋‹จ์ ์ด์ง€๋งŒ ์—ด๋ฆฐ ๋งˆ์Œ"์ด๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ฐฑ ์—”๋“œ์—์„œ Feathers๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ฆ‰์‹œ ์œ ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ž‘์—…์„ ์œ„ํ•œ ์ข‹์€ ์ถœ๋ฐœ์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ ํ•ด๋ด:

https://www.npmjs.com/package/nodemda

๊ทธ๋ฆฌ๊ณ  ๊นƒํ„ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://www.npmjs.com/package/nodemda-feathers-react

feathers-react-default-model

์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/ForestAdmin/lumber

admin-on-rest๋กœ ๋ญ”๊ฐ€๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด. ๋‚˜๋Š” ํŽ˜๋” API์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด evolutility-ui-react ํฌํฌ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ๋ฐฉ๊ธˆ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ๊ฐ„๋‹จํ•œ ๋ชจ๋ธ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋ณธ CRUD๊ฐ€ ์žˆ๊ณ  ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์— ๋Œ€ํ•ด ๋ถ€๋ถ„์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ์•ฝ๊ฐ„์˜ ๋ฆฌํŒฉํ† ๋ง์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋งŽ์€ ํ•„๋“œ ์œ ํ˜•์— ๋Œ€ํ•œ ์ง€์›/ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ๋™์•ˆ ๋” ๋งŽ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด

์˜ค๋Š˜์˜ ํ”„๋ก ํŠธ ์—”๋“œ ํ’๋ฏธ๋ฅผ ์ง€์›

๋‚˜๋Š” Svelte ๊ฐ€ ์ด๊ฒƒ์„ ๊ฝค ์ž˜ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค( github ). ๊ทธ๊ฒƒ์œผ๋กœ ๋งŒ๋“  ๋ชจ๋“  ๊ฒƒ์€ ๋ณดํŽธ์ ์ด๋ฉฐ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์—†๋Š” ๋ฐ”๋‹๋ผ JavaScript๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋ฏธ๋ž˜์— ๋Œ€ํ•œ ์ฆ๊ฑฐ์ด๋ฉฐ "์˜ค๋Š˜์˜" ๊ธฐ์ˆ ๊ณผ ํ•ญ์ƒ ์ƒํ˜ธ ๊ตํ™˜ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

@ddela-cr admin-on-rest ์— ๋Œ€ํ•œ ๋งž์ถคํ˜• ํŽ˜๋” ๋ ˆ์ŠคํŠธ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ™•์ธํ•ด์ฃผ์„ธ์š”, ๊ธฐ์—ฌ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค...

https://github.com/josx/aor-feathers-client

https://github.com/josx/aor-feathers-client์šฉ ์ƒˆ ๋ฒ„์ „์„ ์ถœ์‹œํ–ˆ์œผ๋ฉฐ https://github.com/Cambalab/test-feathers-admin ์— ์ž‘์—… ์ฆ๋ช…๋„ ์žˆ์Šต๋‹ˆ๋‹ค .

๊ฝค ์˜ค๋žซ๋™์•ˆ ์ด ๋™์ผํ•œ ์ฃผ์ œ๋กœ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ng-admin ( admin-on-rest ์˜ ํ˜•์€ ํ‰๋ฒ”ํ•œ AngularJS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ng-admin & ng-admin.jwt-auth ๋ฅผ Feathers์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๊ตฌ์„ฑ์„ ์ถ”์ถœํ•˜์—ฌ ์‹ ์ค‘ํ•˜๊ฒŒ ์ œ์ž‘๋œ ์ €์žฅ์†Œ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค: https://github.com/beevelop/feathers-admin-starter

@beevelop ์ž˜ํ–ˆ์–ด!

๋ฉฐ์น  ์ „์— ng-admin๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค(ํ•˜์ง€๋งŒ ๊ท€ํ•˜์˜ ๋ฒ„์ „์—๋Š” ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค). ์—ฌ๊ธฐ (๊นƒํ„ธ ์•ฑ, ngadmin ๋ฐ admin-on-rest)์ด ์žˆ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ng-admin ๋ฐ admin-on-rest + feathers๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์˜ˆ์ œ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–˜๋“ค ์•„,

๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "feather admin", "laravel admin", "rails admin" ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ์ณค์ฃ ? ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ Lumber(https://github.com/ForestAdmin/lumber)๋ฅผ ์ถœ์‹œํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์—ฐ๊ฒฐํ•˜๋Š” ๋Œ€์‹  ๊ด€๋ฆฌ์ž๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ๊ด€๋ฆฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•จ). .

์ด ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๋‚ด ํ”„๋กœ์ ํŠธ์˜ @SeyZ ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ œ์–ดํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌด๋ฃŒ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•„๋‹ˆ๋ฉด ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ํ›Œ๋ฅญํ•œ ์ผ์„ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ปค๋ฎค๋‹ˆํ‹ฐ์—๋Š” ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž์œ  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ•ต์‹ฌ์œผ๋กœ ํฌํ•จํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ƒฅ ๋‚ด 2 ์„ผํŠธ.

@josx Lumber๋Š” ์™„์ „ํžˆ ์˜คํ”ˆ ์†Œ์Šค์ด๊ณ  Forest๋Š” ์ž๋™์œผ๋กœ ๋ฉ‹์ง„ UI๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค(ํฌ๋ง:D). ๋ฌผ๋ก  ๋ชจ๋“  ๊ฒƒ์ด ์™„์ „ํžˆ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค!

admin-on-rest ์˜ ์—…๋ฐ์ดํŠธ๋œ ๋ฒ„์ „์„ ์‚ดํŽด๋ณด์„ธ์š”. ๊ทธ๊ฒƒ์€ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ์—ฌ๊ธฐ์— ๊ฝค ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ ์ง€๊ธˆ์€ ์ด๊ฒƒ์„ ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ ํŒ€์€ ๊ณต์‹์ ์ธ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉฐ ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ณ„ํš๋„ ์—†์Šต๋‹ˆ๋‹ค.

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

๋ชจ๋“  ์ž…๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์—ฌ๋Ÿฌ๋ถ„์€ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํ›Œ๋ฅญํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! โค๏ธ

์–ด๋–ค ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋“  ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GUI ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ์— ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ• ๊นŒ์š”? ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ์ตœ์†Œํ•œ ์ตœ๊ณ  ํ’ˆ์งˆ์˜ ์†”๋ฃจ์…˜์„ ์ถ”์ฒœํ•  ์ˆ˜๋Š” ์žˆ์Šต๋‹ˆ๋‹ค.

@kulakowka ์ƒํƒœ๊ณ„ ํŽ˜์ด์ง€์˜ ์Šคํƒ€ํ„ฐ ์Šคํƒ ์„น์…˜ ๋‹ค์Œ์— ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. https://docs.feathersjs.com/v/auk/ecosystem/readme.html

Loopback ๋ฐ Angular๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋™๋“ฑํ•œ ์†”๋ฃจ์…˜๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Colmena-cms (์ด์ „์—๋Š” Loopback Angular Admin์œผ๋กœ ์•Œ๋ ค์ง)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Feathers๋ฅผ admin-on-rest ์™€ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์ง‘์ค‘ํ•  ํ•„์š” ์—†์ด ๋‘˜ ์‚ฌ์ด์˜ ๋‹ค๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์ง‘์ค‘ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํŽ˜๋”์™€ admin-on-rest์— ์˜์กดํ•˜๋Š” ์ƒˆ๋กœ์šด ์†”๋ฃจ์…˜์˜ ๊ฒฝ์šฐ ์ด ๋‘ ์ข…์†์„ฑ์„ ์‰ฝ๊ฒŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด Colmena๋ณด๋‹ค ์ ์€ ๋…ธ๋ ฅ์„ ๋“ค์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ณผ๊ฑฐ์— colemena-cms์— ๊ธฐ์—ฌํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๋‹จ์ง€ ๋ฃจํ”„๋ฐฑ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํœด์‹์„ ์ทจํ•˜๋Š” ๊ด€๋ฆฌ์ž์™€ ๊ฐ™์€ ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์™„๋ฒฝํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. https://github.com/josx/aor-feathers-client

๋ˆ„๊ตฌ๋“ ์ง€ ๊นƒํ„ธ์„ ๋”ฐ๋ผ ForestAdmin์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ•ฉ๋‹ˆ๊นŒ?

@loiclouvet ์‹œ๋„ํ•œ ์ง€ ์˜ค๋ž˜ ๋˜์—ˆ์ง€๋งŒ ๊ณผ๊ฑฐ์— Forest๊ฐ€ ๊นƒํ„ธ์„ ๋”ฐ๋ผ ์ž‘์—…ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ณ  ์—ฌ๊ธฐ์— ์ „์ฒด ์ž‘์—… ์˜ˆ์ œ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. https://github.com/forestadmin/forest-examples

๋ฉด์ฑ… ์กฐํ•ญ: ์ €๋Š” Forest์˜ ์„ค๋ฆฝ์ž์ž…๋‹ˆ๋‹ค.

@SeyZ ๋ช‡ ๋ฒˆ์˜ ์‹œ๋„ ๋์— (๋ชฝ๊ตฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ) ๊นƒํ„ธ๋กœ ์ˆฒ์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์‹œ๋„ํ•ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋ฐฉ๊ธˆ Forest Admin ์„ Feathers์— ํ†ตํ•ฉํ•˜๋Š” ์ž‘์—… ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/ForestAdmin/forest-examples/tree/master/examples/feathers/sql-database

์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋งˆ์„ธ์š” ;)

@SeyZ ๋ชฝ๊ตฌ์Šค๋กœ Forest admin์„ ์„ค์ •ํ–ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ์•Œ๊ธฐ๋กœ๋Š” ํŽ˜๋” ํ›„ํฌ๋ฅผ ์šฐํšŒํ•˜๊ณ  mongodb์— ์ง์ ‘ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋งž๋‚˜์š”?

@nadbm ์ „์ ์œผ๋กœ ์˜ณ์œผ๋‹ˆ Forest ๊ด€๋ฆฌ์ž๊ฐ€ Feathers์™€ ์ž˜ ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” admin-on-rest๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋Š” ๋‹ซํžŒ ํ›„ ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฒ„๊ทธ์— ๋Œ€ํ•ด์„œ๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ๋Š” ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰