diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt
index aac2ee7..d9dd2ec 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt
@@ -15,7 +15,7 @@ data class AudioContentPlaylist(
     val memberId: Long,
     var title: String,
     var desc: String? = null,
-    var contentIdList: List<Long>,
+    var contentIdAndOrderList: List<PlaylistContentIdAndOrder>,
 
     // ISO 8601 형식의 String
     private val _createdAt: String = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt
index 550e366..4bc76ce 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt
@@ -18,7 +18,7 @@ class AudioContentPlaylistService(
     private val redisRepository: AudioContentPlaylistRedisRepository
 ) {
     fun createPlaylist(request: CreatePlaylistRequest, member: Member) {
-        if (request.contentIdList.size >= 30) {
+        if (request.contentIdAndOrderList.size >= 30) {
             throw SodaException("플레이 리스트에는 최대 30개의 콘텐츠를 저장할 수 있습니다.")
         }
 
@@ -29,7 +29,7 @@ class AudioContentPlaylistService(
 
         // 콘텐츠 유효성 검사 (소장으로 구매한 콘텐츠 인가?)
         checkOrderedContent(
-            contentIdList = request.contentIdList,
+            contentIdList = request.contentIdAndOrderList.map { it.contentId },
             memberId = member.id!!
         )
 
@@ -38,7 +38,7 @@ class AudioContentPlaylistService(
             memberId = member.id!!,
             title = request.title,
             desc = request.desc,
-            contentIdList = request.contentIdList
+            contentIdAndOrderList = request.contentIdAndOrderList
         )
 
         redisRepository.save(playlist)
@@ -55,7 +55,7 @@ class AudioContentPlaylistService(
     }
 
     fun updatePlaylist(playlistId: Long, request: UpdatePlaylistRequest, member: Member) {
-        if (request.contentIdList.size >= 30) {
+        if (request.contentIdAndOrderList.size >= 30) {
             throw SodaException("플레이 리스트에는 최대 30개의 콘텐츠를 저장할 수 있습니다.")
         }
 
@@ -67,14 +67,14 @@ class AudioContentPlaylistService(
         }
 
         checkOrderedContent(
-            contentIdList = request.contentIdList,
+            contentIdList = request.contentIdAndOrderList.map { it.contentId },
             memberId = member.id!!
         )
 
         val updatePlaylist = playlist.copy(
             title = request.title ?: playlist.title,
             desc = request.desc ?: playlist.desc,
-            contentIdList = request.contentIdList
+            contentIdAndOrderList = request.contentIdAndOrderList
         )
 
         redisRepository.save(updatePlaylist)
@@ -86,9 +86,9 @@ class AudioContentPlaylistService(
         return GetPlaylistsResponse(
             totalCount = playlists.size,
             items = playlists.map {
-                val contentCount = it.contentIdList.size
+                val contentCount = it.contentIdAndOrderList.size
                 val coverImageUrl = if (contentCount > 0) {
-                    audioContentRepository.getCoverImageById(id = it.contentIdList[0])
+                    audioContentRepository.getCoverImageById(id = it.contentIdAndOrderList[0].contentId)
                         ?: ""
                 } else {
                     ""
@@ -129,16 +129,24 @@ class AudioContentPlaylistService(
             .withZoneSameInstant(ZoneId.of("Asia/Seoul"))
             .format(dateTimeFormatter)
 
-        val contentList = audioContentRepository.fetchContentForPlaylist(contentIdList = playlist.contentIdList)
+        val contentList = audioContentRepository.fetchContentForPlaylist(
+            contentIdList = playlist.contentIdAndOrderList.map { it.contentId }
+        )
+
+        val orderMap = playlist.contentIdAndOrderList.sortedBy { it.order }
+            .mapIndexed { index, item -> item.contentId to index }
+            .toMap()
+
+        val sortedContentList = contentList.sortedBy { orderMap[it.id] }
 
         return GetPlaylistDetailResponse(
             playlistId = playlist.id,
             title = playlist.title,
             desc = playlist.desc ?: "",
             createdDate = createdDate,
-            contentCount = contentList.size,
-            playlistCoverImageList = contentList.take(4).map { it.coverUrl },
-            contentList = contentList
+            contentCount = sortedContentList.size,
+            playlistCoverImageList = sortedContentList.take(4).map { it.coverUrl },
+            contentList = sortedContentList
         )
     }
 
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/CreatePlaylistRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/CreatePlaylistRequest.kt
index 914cb90..1cdc09e 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/CreatePlaylistRequest.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/CreatePlaylistRequest.kt
@@ -3,5 +3,5 @@ package kr.co.vividnext.sodalive.content.playlist
 data class CreatePlaylistRequest(
     val title: String,
     val desc: String? = null,
-    val contentIdList: List<Long> = emptyList()
+    val contentIdAndOrderList: List<PlaylistContentIdAndOrder> = emptyList()
 )
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/PlaylistContentIdAndOrder.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/PlaylistContentIdAndOrder.kt
new file mode 100644
index 0000000..2e0d558
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/PlaylistContentIdAndOrder.kt
@@ -0,0 +1,6 @@
+package kr.co.vividnext.sodalive.content.playlist
+
+data class PlaylistContentIdAndOrder(
+    val contentId: Long,
+    val order: Int
+)
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/UpdatePlaylistRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/UpdatePlaylistRequest.kt
index 2fd2300..2c739c1 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/UpdatePlaylistRequest.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/UpdatePlaylistRequest.kt
@@ -3,5 +3,5 @@ package kr.co.vividnext.sodalive.content.playlist
 data class UpdatePlaylistRequest(
     val title: String? = null,
     val desc: String? = null,
-    val contentIdList: List<Long> = emptyList()
+    val contentIdAndOrderList: List<PlaylistContentIdAndOrder> = emptyList()
 )