diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberController.kt
index 43675a7..436e23f 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberController.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberController.kt
@@ -4,6 +4,8 @@ import kr.co.vividnext.sodalive.common.ApiResponse
 import org.springframework.data.domain.Pageable
 import org.springframework.security.access.prepost.PreAuthorize
 import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.PutMapping
+import org.springframework.web.bind.annotation.RequestBody
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RequestParam
 import org.springframework.web.bind.annotation.RestController
@@ -12,6 +14,12 @@ import org.springframework.web.bind.annotation.RestController
 @RequestMapping("/admin/member")
 @PreAuthorize("hasRole('ADMIN')")
 class AdminMemberController(private val service: AdminMemberService) {
+    @PutMapping
+    fun updateMember(@RequestBody request: UpdateMemberRequest) = ApiResponse.ok(
+        service.updateMember(request = request),
+        "수정되었습니다."
+    )
+
     @GetMapping("/list")
     fun getMemberList(pageable: Pageable) = ApiResponse.ok(service.getMemberList(pageable))
 
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberService.kt
index 0550575..8b81fbc 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberService.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberService.kt
@@ -5,7 +5,9 @@ import kr.co.vividnext.sodalive.member.Member
 import kr.co.vividnext.sodalive.member.MemberRole
 import org.springframework.beans.factory.annotation.Value
 import org.springframework.data.domain.Pageable
+import org.springframework.data.repository.findByIdOrNull
 import org.springframework.stereotype.Service
+import org.springframework.transaction.annotation.Transactional
 import java.time.ZoneId
 import java.time.format.DateTimeFormatter
 
@@ -16,6 +18,16 @@ class AdminMemberService(
     @Value("\${cloud.aws.cloud-front.host}")
     private val cloudFrontHost: String
 ) {
+    @Transactional
+    fun updateMember(request: UpdateMemberRequest) {
+        val member = repository.findByIdOrNull(request.id)
+            ?: throw SodaException("해당 유저가 없습니다.")
+
+        if (member.role != request.userType) {
+            member.role = request.userType
+        }
+    }
+
     fun getMemberList(pageable: Pageable): GetAdminMemberListResponse {
         val totalCount = repository.getMemberTotalCount()
         val memberList = processMemberListToGetAdminMemberListResponseItemList(
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/UpdateMemberRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/UpdateMemberRequest.kt
new file mode 100644
index 0000000..687ca6a
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/UpdateMemberRequest.kt
@@ -0,0 +1,8 @@
+package kr.co.vividnext.sodalive.admin.member
+
+import kr.co.vividnext.sodalive.member.MemberRole
+
+data class UpdateMemberRequest(
+    val id: Long,
+    val userType: MemberRole
+)