-
Notifications
You must be signed in to change notification settings - Fork 1
๐ตMusicKit
- ํด๋ผ์ด์ธํธ ํ๋ ์์ํฌ
- AppleMusic API
๋ก ๊ตฌ์ฑ ๋์ด์์
- AppleMusic ์ฝํ ์ธ ๋ฅผ ์์ฒญํ ์ ์๊ณ
- ๋๊ท๋ชจ ์์ ๋ฆฌ์คํธ๋ฅผ ๋ถ๋ฌ์ฌ ์์, ๊ฐฏ์ ์ ํ ํน์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ๊ด๋ฆฌ
- ๊ฒ์ ๋ฐ, ์ธ๊ธฐ ์ฐจํธ ๋ฑ์ ํ์ํ ์ ์์
๊ตฌ๋ ์์ธ์ง๋ฅผ ์ธ์ฆํ ์ ์๊ณ ์ฌ์์ ์ ์ดํ๋ API ์ ๊ณต
Apple๊ธฐ๊ธฐ๋ค (Swift) / Web(JavaScript) / Android(ํน์ SDK๋ก ํ์ ) ์์ MusicKit์ ์ฌ์ฉ ๊ฐ๋ฅ
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์ Apple๊ธฐ๊ธฐ๋ค์ ๊ฒฝ์ฐ๋ง ์ดํด๋ ๋ฌด๋ฐฉํ ๊ฒ ๊ฐ์.
์ ํ ๊ธฐ๊ธฐ๋ค์์์ MusicKit ์ฌ์ฉ์ ๊ดํ ๋ด์ฉ์ โMeet MusicKit for Swiftโ ์ฐธ๊ณ
Apple๊ธฐ๊ธฐ์์ MusicKit์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ย Certificates, Identifiers & Profiles์์ ํ ํฐ์ ํ์ฑํ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
ํด๋น ๋ถ๋ถ์ ์ฒดํฌํ์ฌ Token ๊ด๋ฆฌ ๊ฐ๋ฅ
ํ์ฌ๋ ๊ฐ๋ฐ์ ๊ณ์ ๋ฐ ํ์ด ์์ด์ ์ฌ์ฉ ๋ถ๊ฐํ๋ฏ
์๋๋ ์ธ์ฆ ํค๋์ ์ ํจ & ์๋ช ๋ ํ ํฐ์ ์ ๊ณตํด์ผ Apple Music API๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง Apple ๊ธฐ๊ธฐ ์์์ ์ฌ์ฉ๋๋ค๋ฉด ์ด ๊ธฐ๋ฅ์ ์๋ต ๊ฐ๋ฅํจ. (๊ณ ๋ก ์ฐ๋ฆฌ๊ฐ Web์ด๋ ์๋๋ก์ด๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ธ์ฆ ํ ํฐ์ ๋ํ ๋ถ๋ถ์ ๋ฌด์๊ฐ๋ฅ)
์ ํ๋ฎค์ง์ ์ปจํ ์ธ ๋ค์ Resource๋ก ๋ชจ๋ธ๋ง ๋์ด์์ (์ํฐ์คํธ, ์ ๋ชฉ, ์จ๋ฒ์ด๋ฆ ๋ฑ๋ฑโฆ)
๊ฐ๊ฐ์ ํด๋น๋๋ Type๋ค์ด ์กด์ฌํ๋ค๊ณ ํจ. Resource๋ค์ ์๋ณ์(Identifier)๋ฅผ ํตํด fetchํด์ค๊ฑฐ๋, ๊ฒ์ ๊ฐ๋ฅํจ
https://api.music.apple.com/v1/catalog/us/playlists/pl.2b0e6e332fdf4
์์ ๊ฐ์ด RESTful API ์์ฒญ์ ํตํด ๊ฐ์ ธ์ฌ ์ ์์.
v1
: API ๋ฒ์ ์ ๋ํ๋ฉฐ ์ดํ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฉฐ, ๋ณ๊ฒฝ๋๋๋ผ๋ ๊ธฐ์กด์ ํธ์ถ๊ณผ์ ์ญํธํ์ฑ์ ์ ์งํ๋ค๊ณ ํจ.
catalog/us
: ์นดํ๋ก๊ทธ ๋ด์ ์์ฒญ? โ ๋ญ๋ง์ธ์ง ๋ชจ๋ฅด๊ฒ ์ . us๋ ๊ตญ๊ฐ ์ฝ๋๋ก์ ์ฐ๋ฆฌ๋๋ผ๋ kr
. ๊ตญ๊ฐ๋ง๋ค ์๋น์ค ๋๋ ๊ณก์ ์ข
๋ฅ๊ฐ ๋ค๋ฅด๊ธฐ๋ ํ๊ณ ์๊ธ์ ์ฑ
๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ดํ ์ด์ํ ๊ฑฐ ์ ๊ฑด๋๋ฆฌ๋๊ฒ ์ข์ ๊ฒ ๊ฐ์. (๊ฒฐ๊ณผ์ ์ผ๋ก ์์
์ ์ฌ์ํ๊ณ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ๊ตฌ๋
์ ์ธ์ฆ์ด ํ์ํ๊ณ , ์ฐ๋ฆฌ์ ๋์์ ํ๊ตญ ๊ณ์ ์ ์ธ ๊ฒ์ด๋ฏ๋ก)
playlists: ํ๋ ์ด๋ฆฌ์คํธ๋ผ๋ ๋ป ๊ทธ ์ดํ๋ ์๋ณ์ ๋ณํ
์ดํ ?l=en-US
๋ฅผ ์ถ๊ฐํ์ฌ ์ธ์ด ํ๊ทธ๋ฅผ ์ง์ ํ ์๋ ์์. ์ธ์ด ๋ฟ๋ง ์๋๋ผ ํ์งํ๋ ์ ์ฉ์ด ๋๋ ๊ฒ ๊ฐ์. ์๋ฅผ๋ค์ด ์คํ์ธ์ด๋ ์ฌ์ฉ๊ตญ๊ฐ๊ฐ ๋ง์๋ฐ, ์ด์ค ๋ฉ์์ฝ์์ ์คํ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด๋ผ๋ฉด, ?l=es-MX
๋ฅผ ์ ์ฉํด์ผํจ
ํ๊ตญ์ด๋ ko
๋ฐ์๋ api ์์ฒญ ์ฃผ์๋ ์๋๊ณ , ์ ๊ฐ์ธ ํ๋ ์ด๋ฆฌ์คํธ์ ์ค์ url ์ฃผ์์ธ๋ฐ, ๋ท ๋ถ๋ถ์ ๋ณด๋ฉด
๊ณ ์ ์๋ณ์, ์ธ์ด์ค์ ๋ฑ์ ํ์ธํ ์ ์์
https://music.apple.com/kr/library/playlist/p.AWXoollUL2oZ1oA?l=ko
https://api.music.apple.com/v1/catalog/ko/playlist/p.1YeW315FqgQlaQE
id๋ ํด๋น ์ปจํ ์ธ ์ ๊ณ ์ ์๋ณ์ (์ง๊ธ์ ๊ฒฝ์ฐ์ ํน์ ํ๋ ์ด๋ฆฌ์คํธ์ ๊ณ ์ ์๋ณ์๊ฐ)
href๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ API์ ์์น
์ฝํ
์ธ ์ ๋ํ ๋ฉํ ๋ฐ์ดํฐ(์ฌ์๋ชฉ๋ก์ ์ด๋ฆ, ํ๋ ์ดํฐ์ ์ด๋ฆ, ์ฌ์๋ชฉ๋ก์ ์ค๋ช
)๋ attributes
์์ ์ฐพ์ ์ ์์.
ํด๋น ํ๋ ์ด๋ฆฌ์คํธ์ ํ๋ ์ดํฐ(์์ฑ์) ๋ฐ ์๋ก๋ ํธ๋๋ค์ ์ ๋ณด๋ relationships
์ ํฌํจ
์์๊ฐ ํ๋ ์ด๋ฆฌ์คํธ๋ก ๋์ ์์ด์, ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ์ค์ API ์์ฒญ์ ๋ณด๋ด๋ณด๊ณ attributes, relationships๋ฑ ๋ด๋ถ ์์ฑ๋ค์ ๊ฐ์ ๋ด์ ํ๋จํด์ผํ ๊ฒ ๊ฐ์.
ํ๋ ์ด๋ฆฌ์คํธ์ ์์์์ attributes ๋ด๋ถ๋ฅผ ๋ ๋ค์ฌ๋ค ๋ณด๋ฉด, ํ๋ ์ด๋ฆฌ์คํธ์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ์์.
name, curatorName, description์ ๊ฐ๊ฐ ํ๋ ์ด ๋ฆฌ์คํธ ์ด๋ฆ, ์์ฑ์, ์ค๋ช ๋ฑ์ ๋์น ๋๊ณ (์ฌ์ง ์ฐธ์กฐ)
playParams๋ ์ฌ์์ ์ ์ดํ๋ ์ญํ ์ ํ๋ค๊ณ ํจ. (์์ผ๋ฉด ์ฌ์ ๋ถ๊ฐ๋ฅํ ์ปจํ ์ธ )
artwork ( ํ๋ ์ด๋ฆฌ์คํธ ์ปค๋ฒ ์ฌ์ง, ์จ๋ฒ ์ปค๋ฒ ๋ฑ๋ฑ)์ ๋ฆฌ์์ค์ ์ํธ์ํฌ ์์ฑ์ ์ฐพ์ ๊ฐ์ ธ์ฌ ์ ์๋ค๊ณ ํจ.
์์ฒญ url์ ํ๋์ ๋ถ๋ถ์ ์ซ์๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ํธ์ํฌ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค๊ณ ํจ. ๋๋ถ๋ถ ์ ๋ฐฉํ์ด๋ฏ๋ก ๊ทธ๋ฅ ๊ฐ์ ๊ฐ ์ ๋ ฅํ๋ฉด ๋ ๊ฒ ๊ฐ์. (๊ทผ๋ฐ ์ผ๋ถ ์จ๋ฒ ์ปค๋ฒ๋ค์ ์ ๋ฐฉํ์ด ์๋ ๊ฒ๋ค์ด ์๊ธฐ๋ ํจ)
์์ฒญ์ ํตํด ํ๋ ์ด๋ฆฌ์คํธ์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ๋ 100๊ฐ ์ดํ๋ฉด ๊ทธ๋ฅ ๋จ์ผ ์์ฒญ์ผ๋ก ๊ฐ์ ธ์์ง์ง๋ง, ๊ทธ ์ด์์ ์์ฒญ์ด ๋ ๊ฒฝ์ฐ์๋ ์์ 100๊ฐ๋ง ๋จผ์ ๊ฐ์ ธ์์ง๊ณ ๋ค์๋ ํ์ด์ง์ ๊ฐ๋ ์ผ๋ก ๋์ด๊ฐ๊ฒ ๋๋ค๊ณ ํจ.
100๊ฐ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ์๋ relationships ๋ถ๋ถ์ next๋ผ๋ ์์ฑ์ด ์๊ธฐ๊ณ , ๊ทธ๋ค์ ์์ฒญ์ ๋ณด๋ด์ผํ ๋งํฌ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์. ํด๋น ๋งํฌ๋ offset=100์ด๋ฏ๋ก ํด๋น ์ฌ์๋ชฉ๋ก์์ 100๋ฒ ์ดํ์ ๋ชฉ๋ก๋ค์ ๊ฐ์ ธ์ฌ ์ ์๋ ๋งํฌ๊ฐ ์ ๊ณต๋จ. ์ด๋ฅผ ํตํด ์์ฒญํด์ ์ดํ์ ๊ฒ๋ค์ ๊ฐ์ ธ์ฌ ์ ์์. ๋์ด์ ์์ผ๋ฉด next ์๋ธ.
100๊ฐ๋ ์กฐ์ ๊ฐ๋ฅํด๋ณด์
์๊น ๋ดค๋ api์์ฒญ ์ฃผ์์ catalog/๊ตญ๊ฐ/search๋ฅผ ํ๋ฉด ๊ฒ์์ด๋ฅผ ์ฌ์ฉํ ์ ์์.
/v1/catalog/us/search?term=pop&types=albums,songs&limit=10
term=[๊ฒ์์ด]
types=[๊ด์ฌ์๋ ํ์ โ ๊ฐ์์ธ์ง, ์จ๋ฒ์ธ์ง, ๋ ธ๋์ ๋ชฉ์ธ์ง] ๋ณต์์ ํ ๊ฐ๋ฅ
limit=ํ์๋๋ ์ต๋ ํฌ๊ธฐ
- ๐ ๊ธฐํ์ ๊ณผ์ ๊ณผ ์๋
- ๐ swift6 ๋์ ๊ธฐ โ @unchecked Sendable์ ์ฌ์ฉํด์ผ๋ง ํ๋ ์ด์
- ๐ WaveForm(ํํ) ์ ์๊ธฐ
- ๐ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ์ด์
- ๐ ํ๋ฉด ์ ํ(Game NavigationController)
- ๐ DIContainer๋ฅผ ์ฌ์ฉํ ๊ณ๊ธฐ
- ๐ AudioHelper ์ ์๊ธฐ
- ๐ ์์ ํ๋ ์ด์ด์ compact ๋ฒ์ ์ ์๊ธฐ
- ๐ Combine์ ์ด์ฉํ ๋ฐ์ดํฐ ์ ๋ฌ
- ๐ ํ์ด์ด๋ฒ ์ด์ค๋ฅผ ์ฐ๋ฉฐ ์์๋ ์ผ
- ๐ ์บ์ฑ ๋ชจ๋ ๊ตฌํ๊ณผ ๋ฌธ์ ์
- ๐ ๋ก๊ทธ ์์คํ ์ ์๊ธฐ
- โ Data ๋ผ๋ฆฌ์ ๋น๊ต
- โ ํ๋ ์์ํฌ Reference ์์กํ๋ ๋ฌธ์
- โ actor ์์์ timer๊ฐ ์คํ๋์ง ์๋ ๋ฌธ์
- โ NSLayoutConstraint ์ต์ ๋ ๋ฌธ์
- โ ํ ์ด๋ธ ๋ทฐ๊ฐ ๋ณด๊ณ ์๋ ๋ฐฐ์ด๊ณผ bindํ๊ณ ์๋ ๋ฐฐ์ด ๊ฐ์ race condition ๋ฌธ์
- โ ํ ์คํธ๋ผ๋ฆฌ์ ๋ ๋ฆฝ์ฑ
- โ ๋คํธ์ํฌ ํ ์คํ ์ Error ํธ๋ค๋ง
- โ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋์ ์์ฒญ์, ๋ฐ์ดํฐ๊ฐ ๋ฐ์์ด ์๋๋ ์ด์ ํด๊ฒฐ
- โ ์์กด์ฑ framework ์ถ๊ฐ์ ๋ถ๋ฌ์ค์ง ๋ชปํ๋ ๋ฌธ์
- โ Timer๋ฅผ 6์ด ์ค์ ํด๋ ๋ ์คํ๋๋ ๋ฌธ์
- โ Music Kit Data Request ์๋ฌ
- โ DI Container ์์ ์์ฑํ ์ธ์คํด์ค๊ฐ ๋์์ ์กด์ฌ ํ๋ ์ด์