diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/GetMemberProfileResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/GetMemberProfileResponse.kt
new file mode 100644
index 0000000..dc4bbe8
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/GetMemberProfileResponse.kt
@@ -0,0 +1,9 @@
+package kr.co.vividnext.sodalive.member
+
+import com.querydsl.core.annotations.QueryProjection
+
+data class GetMemberProfileResponse @QueryProjection constructor(
+    val memberId: Long,
+    val profileImageUrl: String,
+    val isBlocked: Boolean
+)
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt
index 91da556..e3312d7 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt
@@ -10,6 +10,7 @@ import org.springframework.data.domain.Pageable
 import org.springframework.security.core.annotation.AuthenticationPrincipal
 import org.springframework.security.core.userdetails.User
 import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.PathVariable
 import org.springframework.web.bind.annotation.PostMapping
 import org.springframework.web.bind.annotation.PutMapping
 import org.springframework.web.bind.annotation.RequestBody
@@ -240,4 +241,13 @@ class MemberController(private val service: MemberService) {
     fun forgotPassword(
         @RequestBody request: ForgotPasswordRequest
     ) = ApiResponse.ok(service.forgotPassword(request))
+
+    @GetMapping("/profile/{id}")
+    fun getMemberProfile(
+        @PathVariable id: Long,
+        @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
+    ) = run {
+        if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
+        ApiResponse.ok(service.getMemberProfile(memberId = id, myMemberId = member.id!!))
+    }
 }
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt
index 177b2d2..239f5ef 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt
@@ -8,10 +8,12 @@ import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom
 import kr.co.vividnext.sodalive.member.QMember.member
 import kr.co.vividnext.sodalive.member.auth.QAuth.auth
 import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
+import kr.co.vividnext.sodalive.member.block.QBlockMember.blockMember
 import kr.co.vividnext.sodalive.member.following.QCreatorFollowing.creatorFollowing
 import kr.co.vividnext.sodalive.member.nickname.QNicknameChangeLog.nicknameChangeLog
 import kr.co.vividnext.sodalive.member.notification.QMemberNotification.memberNotification
 import kr.co.vividnext.sodalive.message.QMessage.message
+import org.springframework.beans.factory.annotation.Value
 import org.springframework.data.jpa.repository.JpaRepository
 import org.springframework.stereotype.Repository
 
@@ -54,12 +56,17 @@ interface MemberQueryRepository {
 
     fun getChangeNoticeRecipientPushTokens(creatorId: Long): Map<String, List<List<String>>>
     fun getPushTokenFromReservationList(roomId: Long): Map<String, List<List<String>>>
+
+    fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse
 }
 
 @Repository
 class MemberQueryRepositoryImpl(
     private val queryFactory: JPAQueryFactory,
-    private val blockMemberRepository: BlockMemberRepository
+    private val blockMemberRepository: BlockMemberRepository,
+
+    @Value("\${cloud.aws.cloud-front.host}")
+    private val cloudFrontHost: String
 ) : MemberQueryRepository {
     override fun findByPushToken(pushToken: String): List<Member> {
         return queryFactory
@@ -415,4 +422,23 @@ class MemberQueryRepositoryImpl(
 
         return mapOf("aos" to aosPushTokens, "ios" to iosPushTokens)
     }
+
+    override fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse {
+        return queryFactory
+            .select(
+                QGetMemberProfileResponse(
+                    member.id,
+                    member.profileImage.prepend("/").prepend(cloudFrontHost),
+                    blockMember.id.isNotNull
+                )
+            )
+            .from(member)
+            .leftJoin(blockMember)
+            .on(
+                member.id.eq(blockMember.blockedMember.id)
+                    .and(blockMember.isActive.isTrue)
+                    .and(blockMember.member.id.eq(memberId))
+            )
+            .fetchFirst()
+    }
 }
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt
index e658ba2..e1a96fc 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt
@@ -622,6 +622,10 @@ class MemberService(
         )
     }
 
+    fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse {
+        return repository.getMemberProfile(memberId, myMemberId)
+    }
+
     private fun getOrCreateLock(memberId: Long): ReentrantReadWriteLock {
         return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() }
     }