/korea-music-chart-api-kotlin

Korean Music Chart API (Melon, Genie, Vibe, Bugs)

Primary LanguageKotlin

Korea Music Chart API License: MIT Hits

๐ŸŽต Korea Music Chart API๋Š” ๋‹ค์–‘ํ•œ ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์˜ ํ•œ๊ตญ ์‹ค์‹œ๊ฐ„ ์ฐจํŠธ TOP 100 ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” REST API์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์— Java๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ Kotlin์œผ๋กœ ์ƒˆ๋กญ๊ฒŒ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“š Features

  • ์‹ค์‹œ๊ฐ„ ์ฐจํŠธ ์กฐํšŒ: ๋ฉœ๋ก , ์ง€๋‹ˆ๋ฎค์ง, ๋ฒ…์Šค, ๋ฐ”์ด๋ธŒ ๋‹ค์–‘ํ•œ ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์˜ ์‹ค์‹œ๊ฐ„ ์ฐจํŠธ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณตํ†ต ์‘๋‹ต ํฌ๋งท: ๋ชจ๋“  API๋Š” ํ”Œ๋žซํผ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ผ๊ด€๋œ ์‘๋‹ต ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“– API Documentation (Swagger)

  • Swagger-UI ์ œ๊ณต: API ๋ช…์„ธ๋Š” Swagger-UI๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ ‘๊ทผ ๋ฐฉ๋ฒ•: ์„œ๋ฒ„ ์‹คํ–‰ ํ›„ /swagger-ui/index.html๋กœ ์ ‘์†ํ•˜๋ฉด ์ „์ฒด API ๋ช…์„ธ๋ฅผ ํ™•์ธํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฃผ์š” ๊ธฐ๋Šฅ:
    • ๊ฐ API์˜ ์š”์ฒญ ๋ฐ ์‘๋‹ต ๊ตฌ์กฐ ํ™•์ธ
    • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ž…๋ ฅ ํ›„ ์‹ค์‹œ๊ฐ„ ํ…Œ์ŠคํŠธ
    • JSON ์‘๋‹ต ์ƒ˜ํ”Œ ์ œ๊ณต

๐Ÿš€ API Endpoint

1. ์‹ค์‹œ๊ฐ„ ์ฐจํŠธ ์กฐํšŒ

  • URL: /api/chart/{provider}/realtime
  • Method: GET
  • Provider: melon, genie, bugs, vibe
  • Description: ํŠน์ • ์ œ๊ณต์ž์˜ ์‹ค์‹œ๊ฐ„ ์ฐจํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Request Parameters

Parameter Type Required Description Example
provider String Yes ์ฐจํŠธ ์ œ๊ณต์ž melon

Response Example

{
  "code": 200,
  "status": "OK",
  "data": [
    {
      "artist_name": "ํƒœ๋ฏผ(TAEMIN)",
      "album_name": "Never Gonna Dance Again : Act 1 - The 3rd Album",
      "song_name": "Criminal",
      "album_image_url": "https://cdnimg.melon.co.kr/cm2/album/images/104/86/847/10486847_20200907155042_500.jpg",
      "song_unique_id": "32908826",
      "current_rank": 1,
      "previous_rank": 2
    }
  ]
}

Response Information

ํ‚ค ์ด๋ฆ„ ํ•œ๊ธ€๋ช… ์„ค๋ช… ์˜ˆ์‹œ ๊ฐ’
artist_name ์•„ํ‹ฐ์ŠคํŠธ ์ด๋ฆ„ ๊ณก์„ ๋ถ€๋ฅธ ์•„ํ‹ฐ์ŠคํŠธ์˜ ์ด๋ฆ„ ํƒœ๋ฏผ(TAEMIN)
album_name ์•จ๋ฒ”๋ช… ๊ณก์ด ์ˆ˜๋ก๋œ ์•จ๋ฒ”์˜ ์ด๋ฆ„ Never Gonna Dance Again : Act 1 - The 3rd Album
song_name ๊ณก๋ช… ๊ณก์˜ ์ œ๋ชฉ Criminal
album_image_url ์•จ๋ฒ” ์ด๋ฏธ์ง€ URL ์•จ๋ฒ” ์ด๋ฏธ์ง€์˜ URL https://cdnimg.melon.co.kr/cm2/album/images/104/86/847/10486847_20200907155042_500.jpg
song_unique_id ๊ณก ๊ณ ์œ  ๋ฒˆํ˜ธ ๊ณก์˜ ๊ณ ์œ  ์‹๋ณ„์ž 32908826
current_rank ํ˜„์žฌ ์ˆœ์œ„ ์ฐจํŠธ ๋‚ด ๊ณก์˜ ํ˜„์žฌ ์ˆœ์œ„ 1
previous_rank ์ด์ „ ์ˆœ์œ„ ์ด์ „ ์ฐจํŠธ์—์„œ์˜ ๊ณก์˜ ์ˆœ์œ„ 2

Error Code

Code Message Description
400 Bad Request ์ž˜๋ชป๋œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ
404 Unsupported chart provider ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ œ๊ณต์ž

๐Ÿ› ๏ธ Environment

  • Java: JDK 17 ์ด์ƒ ์„ค์น˜
  • Kotlin: 1.9.25
  • Spring Boot: 3.4.1

๐Ÿง‘โ€๐Ÿ’ป Tech Stack

  • ์–ธ์–ด: Kotlin
  • ํ”„๋ ˆ์ž„์›Œํฌ: Spring Boot
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ:
    • Jackson: JSON ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
    • Springdoc OpenAPI: Swagger ๋ฌธ์„œ ์ž๋™ ์ƒ์„ฑ
    • RestTemplate: ์™ธ๋ถ€ API ํ˜ธ์ถœ

๐Ÿ“œ ๋ผ์ด์„ผ์Šค ๋ฐ ๋ฒ•์  ๊ณ ์ง€

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด๋กœ, MIT ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ, ์ˆ˜์ •, ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ด์šฉ์— ๋Œ€ํ•œ ๋ฒ•์  ๊ณ ์ง€

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

์ด ํ”„๋กœ์ ํŠธ๋Š” ํ”Œ๋žซํผ์˜ ๊ณต์‹ API๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์ด์— ๋Œ€ํ•œ ์ง€์›์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.