# 🎧 Music Monday ↔ Spotify 자동 동기화 Ruby Bot 만들기

*(Spotify 플레이리스트 자동화·Ruby 스크립트·Music Monday 연동)*

---

# # 📍 서론 – “댓글에 적힌 곡을 일일이 추가하는 불편함, 이제는 끝!”

프론트엔드·백엔드 개발자라면 **API 활용**을 통해 여러 서비스를 연결하는 재미를 많이 느껴보셨을 겁니다.

그 중에서도 **Music Monday**는 매주 월요일 커뮤니티 멤버들이 댓글에 자신이 좋아하는 곡을 공유하는 **음악 추천 이벤트**입니다.

하지만 이렇게 공유된 곡을 **Spotify 플레이리스트에 직접 추가**하려면 댓글을 하나씩 복사하고, 검색하고, ‘내 플레이리스트에 추가’ 버튼을 눌러야 합니다.

작은 팀이나 개인 프로젝트에서는 이 작업이 **시간 낭비**이자 **오류 발생 가능성**이 높아집니다.

> **문제**: Music Monday에 달린 댓글을 자동으로 읽어 Spotify 플레이리스트에 동기화하고 싶다.

이 글에서는 **Ruby** 로 만든 가벼운 오픈소스 **Sync Bot**을 이용해, 위 문제를 **초보자도 30분 안에 구현**할 수 있도록 단계별로 안내합니다.

> **SEO 키워드**

> 1. Spotify 플레이리스트 자동화

> 2. Ruby 스크립트

> 3. Music Monday 연동

---

# # 🛠️ 1. 준비 단계 – 필수 도구와 계정 설정

| 항목 | 이유 | 설정 방법 |

|------|------|----------|

| **Ruby (≥ 2.7)** | 스크립트 실행 환경 | `rbenv` 혹은 `rvm` 으로 설치 → `ruby -v` 확인 |

| **Bundler** | 의존성 관리 | `gem install bundler` |

| **Spotify Developer Account** | API 키(클라이언트 ID/시크릿) 발급 | <https://developer.spotify.com/dashboard> → “Create App” → **Client ID**와 **Client Secret** 복사 |

| **Music Monday API (비공식)** | 댓글 데이터를 받아오기 위한 엔드포인트 | `https://api.musicmonday.com/v1/comments?topic=spotify` (예시) |

| **dotenv** | 환경 변수(.env) 파일 관리 | `.env` 파일에 키값 저장, `.gitignore`에 추가 |

> **Tip**: Ruby 초보자는 `irb` 로 한 줄씩 코드를 실행해 보면서 동작을 확인하면 디버깅이 쉬워집니다.

---

# # 📂 2. 프로젝트 구조와 핵심 파일

```

music-monday-spotify-bot/

│
├─ Gemfile          # 사용 gem 정의

├─ .env             # API 키·플레이리스트 ID 저장

├─ bot.rb           # 메인 실행 파일

└─ lib/

   └─ spotify_client.rb   # Spotify API 래퍼

```

## # 2‑1. Gemfile

```
ruby

source 'https://rubygems.org'

gem 'httparty'      # HTTP 요청

gem 'rspotify'      # Spotify API 래퍼

gem 'dotenv'        # .env 로 환경 변수 로드

```

```
bash

bundle install

```

## # 2‑2. Spotify 클라이언트 구현 (`lib/spotify_client.rb`)

```
ruby

require 'rspotify'

require 'dotenv/load'

# Spotify 인증 (클라이언트 ID/시크릿)

RSpotify.authenticate(ENV['SPOTIFY_CLIENT_ID'],

                      ENV['SPOTIFY_CLIENT_SECRET'])

class SpotifyClient

  def initialize(playlist_id)

    user      = RSpotify::User.find('me')

    @playlist = user.playlists.find { |p| p.id == playlist_id }

  end

  # 트랙 검색 → 없으면 추가

  def add_track(track_name, artist_name)

    results = RSpotify::Track.search('#{track_name} #{artist_name}')

    track   = results.first

    return unless track

    if @playlist.tracks.map(&:id).include?(track.id)

      puts 'ℹ️ '#{track_name}' 은(는) 이미 존재합니다.'

    else

      @playlist.add_tracks!([track])

      puts '✅ '#{track_name}' - #{artist_name} 를 추가했습니다.'

    end

  end

end

```

## # 2‑3. 메인 로직 (`bot.rb`)

```
ruby

require 'httparty'

require 'json'

require_relative './lib/spotify_client'

# 1️⃣ Music Monday 댓글을 받아오는 함수

def fetch_comments

  url = 'https://api.musicmonday.com/v1/comments?topic=spotify'

  resp = HTTParty.get(url)

  JSON.parse(resp.body)['data']   # [{ 'track':'Bad Guy','artist':'Billie Eilish' }, ...]

end

# 2️⃣ Spotify에 동기화

def sync_to_spotify

  playlist_id = ENV['SPOTIFY_PLAYLIST_ID']

  client      = SpotifyClient.new(playlist_id)

  fetch_comments.each do |c|

    client.add_track(c['track'], c['artist'])

  end

end

# 실행

sync_to_spotify

```

> **핵심 포인트**

> - `RSpotify` 로 인증 → 현재 로그인한 사용자의 **플레이리스트**에 접근

> - 댓글에서 추출한 `track`·`artist` 를 조합해 **검색 → 추가** 흐름 구현

> - 이미 존재하는 트랙은 중복 추가를 방지하도록 로직을 넣었습니다.

---

# # 🚀 3. 실제 운영 팁 – 자동화·에러·보안

## # 3‑1. 크론 잡으로 매주 자동 실행

```
bash

# 매주 월요일 새벽 6시 (한국시간 15시) 실행

0 6 * * 1 /usr/local/bin/ruby /path/to/bot.rb >> /var/log/music_monday_bot.log 2>&1

```

## # 3‑2. 에러 로그와 알림

```
ruby

begin

  sync_to_spotify

rescue => e

  File.open('error.log', 'a') { |f| f.puts('[#{Time.now}] #{e.message}') }

  # Slack webhook 으로 실시간 알림도 가능

end

```

## # 3‑3. 환경 변수 보안

- `.env` 파일에 `SPOTIFY_CLIENT_ID`, `SPOTIFY_CLIENT_SECRET`, `SPOTIFY_PLAYLIST_ID` 를 저장

- `.gitignore` 에 `.env` 를 반드시 추가해 **레포에 노출되지 않게**

## # 3‑4. 검색 정확도 향상

```
ruby

results = RSpotify::Track.search('#{track_name} #{artist_name}',

                                 limit: 1,

                                 market: 'KR')

```

`market` 옵션을 지정하면 **한국 내 인기 버전**을 우선 반환해 검색 정확도가 높아집니다.

---

# # 📊 4. 기대 효과와 활용 아이디어

| 기대 효과 | 구체적 활용 |

|-----------|-------------|

| **시간 절감** | 수십 개의 댓글을 일일이 복사·붙여넣기 하지 않아도 자동으로 플레이리스트에 반영 |

| **커뮤니티 활성화** | Music Monday 참여자들이 자신의 곡이 바로 Spotify에 올라가는 모습을 보며 참여 의욕 상승 |

| **데이터 분석** | 댓글 데이터를 기반으로 **주간 인기 트랙 차트** 자동 생성 가능 |

| **멀티플랫폼 연동** | 동일 로직을 Apple Music, YouTube Music API 로 교체해 **다중 스트리밍 서비스** 관리 가능 |

---

# # 🏁 결론 – “코드 한 줄로 음악 공유를 자동화하라!”

Music Monday에서 매주 공유되는 곡을 **수동으로 관리**하느라 시간을 낭비하고 있나요?

위에서 소개한 **Ruby 자동화 스크립트**를 사용하면, 댓글 하나만 달아도 자동으로 **Spotify 플레이리스트 만들기**가 완료됩니다.

1️⃣ 프로젝트를 복제(`git clone`) →

2️⃣ `bundle install` → `.env` 설정 → `ruby bot.rb` 실행만 하면 끝!

> **행동 유도**

> - 지금 바로 **GitHub**(https://github.com/mikeydorje/music-monday-spotify-open-source-sync-bot) 에서 코드를 포크하고, 자신만의 플레이리스트를 만들어 보세요.

> - 구현 중 궁금한 점은 **Issue** 로 남기거나, **Dev to** 댓글에 질문해 주세요. 커뮤니티와 함께 성장하는 **Music Monday 연동** 프로젝트가 될 것입니다!

음악은 공유하고, 자동화는 스스로에게 맡기세요. 🎶🚀
