# ๐ง ์์
์ ์ฝ๊ฒ ๋ด๋ค, Sqoop!
> YouTube ์์ ์ ์์
์ ๊ฐ์ ธ์ ๋ด ํ๋ ์ด๋ฆฌ์คํธ์ ๊ฐํธํ๊ฒ ์ ์ฅํ๋ ์๋น์ค
|์ฑ & ํ ์ด๋ฆ|Sqoop ์ค์ฟฑ & Medio ๋ฏธ๋์ค|
|:--:|:--|
|๋ก๊ณ |
|
|๊ธฐ๊ฐ|2024. 09. 02 ~ ์งํ์ค|
|์ํ|์ฑ์คํ ์ด ๋ฐฐํฌ ์๋ฃ ๋ฐ ์
๋ฐ์ดํธ ์งํ ์ค(v1.1.5)|
|์ฐธ์ฌ ์ธ์|7๋ช
(iOS ๊ฐ๋ฐ 4๋ช
+ ๋์์ธ 3๋ช
)|
|๊ธฐ์ ์คํ|SwiftUI, MusicKit, ShazamKit, Swift Regex, Localization, SPM, Supabase|
|์ฑ์คํ ์ด|[Sqoop ์ค์ฟฑ - ์ ํ๋ธ ํ๋ฆฌ ๋ณํ](https://apps.apple.com/kr/app/sqoop-%EC%8A%A4%EC%BF%B1/id6736636919)|
|ํ ์ธ์คํ๊ทธ๋จ|[medio_o.av](https://www.instagram.com/medio_o.av?igsh=MWtoNGZtY2IyNHRsbw==)|
### ๐ฑ ์ฑ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
|๋งํฌ ๋ถ์ฌ๋ฃ๊ธฐ|์ถ์ถ ๋ก๋ฉ ์ค|๊ณก ๋ณ๊ฒฝ ๋ฐ ๋ฏธ๋ฆฌ๋ฃ๊ธฐ|์ฌ๊ฒ์|์ถ์ฒ ํ๋ฆฌ|
|:--:|:--:|:--:|:--:|:--:|
|
|
|
|
|
|
# Sqoop ๊ธฐ๋ฅ ํ๋ฆ ๋์

์์ธํ ๋ด์ฉ์ [Wiki ํ์ด์ง](https://github.com/DeveloperAcademy-POSTECH/2024-MacC-M14-Medio/wiki)์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
# 1-1. Youtube ์์ URL ๋ถ์ฌ๋ฃ๊ธฐ
- `SQServieStroge` - URL์ Unique Key๊ฐ์ผ๋ก, ์บ์ฑ๋ URL์ธ์ง ํ์ธ. (์บ์ฑ๋์๋ค๋ฉด, MusicKey ๋ฐฐ์ด ๋ฐํ)
# 1-2. Sqoop ์ถ์ฒ Playlist ์ ํ
- `SQServieStroge` - ํ
์ด๋ธ ๋ด ์ต์ 10๊ฐ์ ํ๋ ์ด๋ฆฌ์คํธ ๋ฐํ.
- `YTPlaylistExtractor` - YouTube API๋ฅผ ํตํ ์ฑ๋ ์ ๋ณด ๋ฐ ๋๊ธ ๋ฆฌ์คํธ ๋ฐํ.
# 2-1. Youtube ์์ ๋ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๊ณก ์ ๋ณด ์ถ์ถ
**์์ ํ๋ ์ด๋ฆฌ์คํธ**
- `YTPlaylistExtractor` - ์บ์ฑ๋์ง ์์๋ค๋ฉด, YouTube API์ Description์ ์ ๊ทํํ์๊ณผ ๋งค์นญํด MusicList ์ถ์ถ(titelOrArtists)
- `YTPlaylistExtractor` - Description์ ์กด์ฌํ์ง ์๋๋ค๋ฉด, YouTube API์ CommentList๋ฅผ ์ ๊ทํํ์๊ณผ ๋งค์นญํด MusicList ์ถ์ถ(titleOrArtists)
- `YTPlaylistExtractor` - YouTube API์ ์ ์ฒด ์์ ๊ธธ์ด๋ฅผ ์ด์ฉํ ์์
์ถ์ ์๊ฐ(estimateDuration) ๊ณ์ฐ
**๊ณต์ ํ๋ ์ด๋ฆฌ์คํธ**
- `YTPlaylistExtractor` - ์บ์ฑ๋์ง ์์๋ค๋ฉด, YouTube API์ Playlist ์ ๋ณด์ ๊ฐ ์ ๋ชฉ ๋ฐ ์ฑ๋๋ช
์ ์ด์ฉํ MusicList ์ถ์ถ
# 2-2. ์ด๋ฏธ ์ ๋ณด๊ฐ DB์ ์์ ์
- `SQServiceStorage`๋ฅผ ์ด์ฉํ์ฌ Youtube ์์ URL์ ๊ธฐ๋ฐํ Youtube Playlist ID๋ฅผ ์ธ๋ถ ์๋ฒ DB์ ๊ฒ์ํ์ฌ ์ด๋ฏธ Playlist ์ ๋ณด๋ฅผ ํ์ธ
- `SQServiceStorage` ์ ์ด๋ฏธ ์ ์ฅ๋์ด ์๋ค๋ฉด Playlist๋ฅผ ๋ฐํ - SQServiceStorage API ๊ด๋ จ ๋งํฌ ๋ฃ๊ธฐ
# 3-1. ๊ณก ๋ฉํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ณก ์์ฑ ๋ฐ ํธ์ง
**๊ณก ๊ณ ์ ์์ด๋ ๊ธฐ๋ฐ**
- `MKMusicCrafter` - 2๊ฐ์ง ํ์
์ ๋ฉํ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ์ ํ ๋ฎค์ง ๊ณก์ผ๋ก ๋ณํ
- ๋ฉํ๋ฐ์ดํฐ ํ์
: 1. ์์
๊ณ ์ ID ๊ธฐ๋ฐ | 2. ์์
์ ๋ชฉ, ์ํฐ์คํธ ์ ๋ณด ๊ธฐ๋ฐ
- `MKMusicCrafter` ๋ด๋ถ API๋ฅผ ํตํ์ฌ ์ฌ์ฉ์์๊ฒ ํ๋ ์ด๋ฆฌ์คํธ ์์ , ๊ฒ์, ์ญ์ ๋ฅผ ์ ๊ณต
# 3-2. ์ ์ ๊ฐ ์ถ์ถํ ์ ๋ณด๊ฐ ๋ฏธํกํ๋ค๊ณ ํ๋จ ์
- `MKMusicCrafter`์์ ๊ฒ์ ํ ์ถ์ถํ ๊ณก ์ ๋ณด๊ฐ ๋ฏธํกํ๊ฑฐ๋ ์ถ์ถํ ๊ณก์ด ์์ ๊ฒฝ์ฐ, ์ฌ๊ฒ์ ๋ฒํผ์ ํตํด Shazam ๊ฒ์์ ์งํ.
# 4. Shazam ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ๊ณก ์ ๋ณด ์ถ์ถ
`ShazamExtractor`๋ฅผ ํตํด
1. Shazam ๊ฒ์์ ์งํํ ๋์ ์์ URL์์ Audio ํ์ผ ์ถ์ถ
2. Audio ํ์ผ์ 2๋ถ๋ง๋ค 12์ด์ฉ Shazam ๊ฒ์์ด ๊ฐ๋ฅํ ํํ์ ๊ฐ์ฒด(SHSignature)๋ก ๋ณํ
- ex) 0:00~0:12, 2:00~2:12, 4:00~4:12, 6:00~6:12,โฆ
3. SHSignature๋ค๋ก Shazam ๊ฒ์ ์งํ
4. ์ถ์ถํ ๊ณก ์ ๋ณด๋ค์ `MKMusicCrafter`์ Apple Music Song ID ์ ์ก
# 5. ๊ณก ์ ๋ณด ๊ธฐ๋ฐ ๊ณก ์์ฑ ๋ฐ ํธ์ง
1. `ShazamExtractor`๋ก๋ถํฐ ๋ฐ์ Apple Music Song ID๋ค๋ก `MKMusicCrafter`์์ ๊ณก ๊ฒ์
2. ๊ฒ์๋ ๊ฒฐ๊ณผ(Song ๊ฐ์ฒด)๋ค์ `MKMusicCrafter`์์ ํธ์ง ํ Apple Music์ผ๋ก ์ ์ก
### ๐ฆ ๋ชจ๋ ์ค๋ช
- [MKMusicCrafter](https://github.com/DeveloperAcademy-POSTECH/2024-MacC-M14-Medio/wiki/MKMusicCrafter) - MusicKit์ ์ด์ฉํด ์์
๊ฒ์, ์ฌ์ ๋ฑ ์์
๊ด๋ จ ๊ธฐ๋ฅ์ ์ฑ์์ ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ํจํค์ง์
๋๋ค.
- [ShazamExtractor](https://github.com/DeveloperAcademy-POSTECH/2024-MacC-M14-Medio/wiki/ShazamExtractor) - ShazamKit์ ์ด์ฉํด ์ฌ์ฉ์๊ฐ YTPlaylistExtractor๋ก ์์ ์ถ์ถ์ ์คํจ ์ ์ฌ๊ฒ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํจํค์ง์
๋๋ค.
- [SQStorageService](https://github.com/DeveloperAcademy-POSTECH/2024-MacC-M14-Medio/wiki/SQStorageService) - ์ฌ์ฉ์๊ฐ ์ค์ฟฑํ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ์ธ๋ถ ์๋ฒ์ ๋ณด๊ดํ์ฌ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํจํค์ง์
๋๋ค.
- [YTPlaylistExtractor](https://github.com/DeveloperAcademy-POSTECH/2024-MacC-M14-Medio/wiki/YTPlaylistExtractor) - YouTube ํ๋ ์ด๋ฆฌ์คํธ์ ์ ๋ณด(์์, ์์
๋ฉํ๋ฐ์ดํฐ ๋ฑ)๋ฅผ ์ถ์ถํ๋ ํจํค์ง์
๋๋ค.