ํŽ‘ํฌ๊ณ ๋ž˜ 1.0


ํŽ‘ํฌ๊ณ ๋ž˜ 1.0

๊ณ„ํš ํ’๊ณ ๋ž˜ ์ฒซ ๋ฒˆ์งธ ์•ˆ์ • ๋ฒ„์ „์„ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์˜ ์ผํ™˜์œผ๋กœ Django ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python์œผ๋กœ ์ž‘์„ฑ๋œ ๋ฌด๋ฃŒ ์„œ๋ฒ„๊ฐ€ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์œผ๋ฉฐ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ์Œ์•…๊ณผ ํŒŸ์บ์ŠคํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Subsonic API ๋˜๋Š” ๊ธฐ๋ณธ Funkwhale API๋ฅผ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ณผ Funkwhale์˜ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์—์„œ์‚ฌ์šฉ ActivityPub ์—ฐํ•ฉ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ.


์˜ค๋””์˜ค์™€์˜ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ฑ„๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑ๋œ UUID๋ฅผ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ์•„ํ‹ฐ์ŠคํŠธ์˜ ๋ชจ์Œ์ด๊ณ , ์ฑ„๋„์€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ๊ฐ€ ๋ถ€์—ฌ๋œ ๋‹จ์ผ ์•„ํ‹ฐ์ŠคํŠธ์˜ ์Œ๋ฐ˜์ž…๋‹ˆ๋‹ค. ์ฑ„๋„์€ ํŒŸ์บ์ŠคํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๋… ์ž‘์—…์€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์ž‘์—…๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. PeerTube: ํ•ด๋‹น ์‚ฌ์šฉ์ž์™€ ๋ณ„๋„๋กœ ์ƒ์„ฑ๋œ ์ฑ„๋„์„ ๋ชจ๋‘ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ActivityPub ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌํ˜„์—์„œ ๊ตฌ๋…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งˆ ์Šคํ†ค ะธ ํ”Œ๋ ˆ๋กœ๋งˆ.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์ฑ„๋„์„ ๋งŒ๋“  ํ›„ ์Œ์•…์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ํŒŒ์ผ ์ €์žฅ์€ Amazon S3 ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋‚ด์žฅ ์ง€์›์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ๋˜๋Š” ์›๊ฒฉ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋…น์Œ์ด๋‚˜ ํ’ˆ์งˆ ์ €ํ•˜ ์—†์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ˜•์‹์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด ์˜ค๋””์˜ค ์—…๋กœ๋“œ๋„ ์ง€์›ํ•˜๋Š” PeerTube์—์„œ๋Š” ๊ฐ€๋Šฅ). Funkwhale์€ ํŒŒ์ผ์— ํฌํ•จ๋œ ์Œ์•… ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ปค๋ฒ„ ์•„ํŠธ๋ฅผ ์ฝ๊ณ , ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. MusicBrainz Picard ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์— ์˜ฌ๋ฐ”๋ฅธ ํƒœ๊ทธ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”. ๋‹ค์šด๋กœ๋“œ ํ›„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํŽธ์ง‘ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ œ๊ณต๋˜๋ฉฐ, ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ • ํ˜•์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.


์ด๋ฏธ ๋‹ค์šด๋กœ๋“œํ•œ ์Œ์•…๋ถ€ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์ฑ„๋„๊นŒ์ง€ ์žฌ์ƒ ๋ชฉ๋ก, ๋ผ๋””์˜ค ๋ฐฉ์†ก๊ตญ์„ ๋งŒ๋“ค๊ณ  ํŠธ๋ž™์„ ์ฆ๊ฒจ์ฐพ๊ธฐ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›๊ฒฉ ์‚ฌ์šฉ์ž๋Š” ์„œ๋ฒ„์˜ ๊ฒ€์ƒ‰ ํ‘œ์‹œ์ค„์— ๋งํฌ๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์ฑ„๋„์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์„ค์ •์—์„œ ํ—ˆ์šฉ๋œ ๊ฒฝ์šฐ ์ต๋ช… ์‚ฌ์šฉ์ž๋Š” ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์Œ์•…์„ ๋“ค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ๋กœ์ปฌ ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•˜์—ฌ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์„œ๋ฒ„์˜ ๋ชจ๋“  ์Œ์•…์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Subsonic API๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ - ํ˜„์žฌ ๋…์  ๋ผ์ด์„ผ์Šค๊ฐ€ ์ ์šฉ๋˜๋Š” ๋˜ ๋‹ค๋ฅธ ์Œ์•… ์„œ๋ฒ„(๋ฌด๋ฃŒ ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ด์ „ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ๋ถ„๊ธฐ ํฌํ•จ) - ๋˜๋Š” ๊ธฐ๋ณธ Funkwhale API(์˜ˆ: ์•ˆ๋“œ๋กœ์ด๋“œ์šฉ ์ˆ˜๋‹ฌ.

๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ํŠธ๋ž™์˜ ํŠธ๋žœ์Šค์ฝ”๋”ฉ๋œ ๋ฒ„์ „์„ ์š”์ฒญํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: FLAC์—์„œ ๋น„ํŠธ ์ „์†ก๋ฅ ์ด ๋‚ฎ๊ณ  ์ธํ„ฐ๋„ท ํŠธ๋ž˜ํ”ฝ์ด ๋œ ํ•„์š”ํ•œ MP3๋กœ).

์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ฏธ ์–ธ๊ธ‰๋œ ํŒŸ์บ์ŠคํŠธ ๋“ฑ์˜ RSS ํ”ผ๋“œ๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ:

  • ์ตœ์†Œ ํ•„์ˆ˜ Python ๋ฒ„์ „์ด 3.6์œผ๋กœ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ API์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ
  • OAuth๋ฅผ ์„ ํ˜ธํ•˜๋Š” JSON ํ† ํฐ(JWT) ์ง€์› ์ค‘๋‹จ
  • ํ‘œ์ง€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์„ ์œ„ํ•œ ํ–ฅ์ƒ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜;
  • ์„œ๋ฒ„ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์Œ์•…์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๋ฒ„ํŠผ์ด ์›น ์ธํ„ฐํŽ˜์ด์Šค์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํŠธ๋ž™ ๋ฐ ์•จ๋ฒ” ๋‹ค์šด๋กœ๋“œ ํšŸ์ˆ˜ ํ‘œ์‹œ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€;
  • ์ด์ œ ํŠธ๋ž™๊ณผ ์•จ๋ฒ”์˜ "์žฌ์ƒ" ๋ฒ„ํŠผ์ด ํŠธ๋ž™์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ๋Œ€๊ธฐ์—ด์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • Last.fm API v2๋ฅผ ์‚ฌ์šฉํ•œ ์Šคํฌ๋กค๋ง ์ง€์›.

์ถœ์ฒ˜ : linux.org.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€