diff --git a/apps/landing/src/app/Bench.tsx b/apps/landing/src/app/Bench.tsx
index d5014d12..5514a7ee 100644
--- a/apps/landing/src/app/Bench.tsx
+++ b/apps/landing/src/app/Bench.tsx
@@ -1,5 +1,6 @@
-import { Box, Flex, Text, VStack } from '@devup-ui/react'
+import { Flex, Text, VStack } from '@devup-ui/react'
+import { BenchBox } from './BenchBox'
import { DevupUICard } from './DevupUICard'
import { OtherCard } from './OtherCard'
@@ -86,10 +87,7 @@ export function Bench() {
-
+
))}
-
+
)
diff --git a/apps/landing/src/app/BenchBox.tsx b/apps/landing/src/app/BenchBox.tsx
new file mode 100644
index 00000000..1d0fe242
--- /dev/null
+++ b/apps/landing/src/app/BenchBox.tsx
@@ -0,0 +1,70 @@
+'use client'
+
+import { Box } from '@devup-ui/react'
+import { useRef } from 'react'
+import { useCallback, useState } from 'react'
+import { ReactNode } from 'react'
+
+interface BenchBoxProps {
+ children: ReactNode
+}
+export function BenchBox({ children }: BenchBoxProps) {
+ const scrollRef = useRef(null)
+ const [isDragging, setIsDragging] = useState(false)
+ const [startX, setStartX] = useState(0)
+ const [scrollLeft, setScrollLeft] = useState(0)
+
+ const handleMouseDown = useCallback((e: React.MouseEvent) => {
+ if (!scrollRef.current) return
+
+ setIsDragging(true)
+ setStartX(e.pageX - scrollRef.current.offsetLeft)
+ setScrollLeft(scrollRef.current.scrollLeft)
+ scrollRef.current.style.cursor = 'grabbing'
+ scrollRef.current.style.userSelect = 'none'
+ }, [])
+
+ const handleMouseMove = useCallback(
+ (e: React.MouseEvent) => {
+ if (!isDragging || !scrollRef.current) return
+
+ e.preventDefault()
+ const x = e.pageX - scrollRef.current.offsetLeft
+ const walk = (x - startX) * 2 // 스크롤 속도 조절
+ scrollRef.current.scrollLeft = scrollLeft - walk
+ },
+ [isDragging, startX, scrollLeft],
+ )
+
+ const handleMouseUp = useCallback(() => {
+ if (!scrollRef.current) return
+
+ setIsDragging(false)
+ scrollRef.current.style.cursor = 'grab'
+ scrollRef.current.style.userSelect = 'auto'
+ }, [])
+
+ const handleMouseLeave = useCallback(() => {
+ if (!scrollRef.current) return
+
+ setIsDragging(false)
+ scrollRef.current.style.cursor = 'grab'
+ scrollRef.current.style.userSelect = 'auto'
+ }, [])
+
+ return (
+
+ {children}
+
+ )
+}
diff --git a/apps/landing/src/app/OtherCard.tsx b/apps/landing/src/app/OtherCard.tsx
index 6b3cacf1..d7f7d7e6 100644
--- a/apps/landing/src/app/OtherCard.tsx
+++ b/apps/landing/src/app/OtherCard.tsx
@@ -25,6 +25,7 @@ export function OtherCard({
gap={['20px', null, '40px']}
h={[null, null, null, null, '318px']}
justifyContent="space-between"
+ maxW={[null, null, null, null, '300px']}
minW={[null, null, '240px', null, 'none']}
p={[6, null, '30px']}
>