export default function AdminLayout({ children }) {
// isOpen 상태의 기본값을 false로 변경하여 사이드바가 닫힌 상태로 시작하도록 수정
const [isOpen, setIsOpen] = useState(false);
const [isAdmin, setIsAdmin] = useState(false);
const router = useRouter();
<h1 className={`text-xl font-bold ${isOpen ? "block" : "hidden"}`}>
관리자 패널
</h1>
isOpen이 true일 때 block 클래스가 적용되고, false일 때 hidden 클래스가 적용된다.
block: 요소를 블록 레벨 요소로 표시한다.
요소가 화면에 보이며, 기본적으로 부모 컨테이너의 전체 너비를 차지한다.
예를 들어, div와 같은 블록 요소처럼 동작한다.
hidden: 요소를 화면에서 완전히 숨긴다.
요소가 DOM에는 존재하지만, 화면에 렌더링되지 않는다.
숨겨진 상태에서는 요소가 차지하는 공간도 없어지며, 다른 요소들이 그 자리를 차지한다.
isOpen === true: //이라면
block 클래스가 적용되어 h1 요소가 화면에 표시된다.
"관리자 패널" 텍스트가 보인다.
isOpen === false: //이라면
hidden 클래스가 적용되어 h1 요소가 화면에서 완전히 숨겨진다.
"관리자 패널" 텍스트가 보이지 않는다.
admin/statistics 페이지를 announcement 로 수정함
그리고 announcement 페이지는 공지사항으로 따로 메뉴를 생성해주었음
/admin 으로 접속하면, annoucement대신 statistics의 내용이 보이도록 폴더명 수정해줌
React의 url은 폴더명-page.js 구조에서 폴더명을 페이지명으로 씀
const navItems = [
{ name: "대시보드", href: "/admin", icon: "dashboard" },
{ name: "매장 관리", href: "/admin/shops", icon: "store" },
{ name: "예약 관리", href: "/admin/reservations", icon: "calendar" },
{ name: "이벤트 관리", href: "/admin/events", icon: "event" },
{ name: "리뷰 관리", href: "/admin/reviews", icon: "star" },
{ name: "공지사항", href: "/admin/announcement", icon: "📊" },
];
목표: 메인 페이지 내 고객 후기 하단에 해당 매장 정보를 연동하여, 유저가 후기를 보고 곧바로 매장으로 연결될 수 있는 구조 설계.
-매장명, 위치(지번/도로명 주소), 전화번호, [예약하기] 버튼 추가.
-후기와 매장 정보를 카드 형태로 통합 구성하고, 클릭 시 매장 상세페이지로 이동.
-지도 미리보기(썸네일) 연동 고려: Kakao Map API 또는 Naver Map Static Image 활용 검토.
-마메드네: 후기 클릭 시 매장 이동 유도는 없으나, 매장 페이지에 리뷰 통합.
-오늘의집: 포토 후기 하단에 상품 정보 및 바로 구매 링크 삽입 → 이 UX 패턴을 응용 가능.
Swiper.js는 슬라이드 우선순위 설정 가능 (객체별 initialSlide 속성으로 초기 위치 지정 가능)
Slick은 커스터마이징에 유연하지만 모바일 반응형 설정이 다소 복잡
슬라이드 내 각 카드에 매장 정보 포함 시 슬라이드 높이 변화 대응 방식도 함께 학습함 (autoHeight: true)
슬라이드 로딩 시 lazy loading 적용 여부도 검토 중 (초기 로딩 속도 개선 목적)
Swiper.js (추천)
패키지명: swiper + swiper/react
매우 강력한 커스터마이징, 모바일 반응형, lazy load, initialSlide 등 잘 지원됨
Next.js에서도 잘 작동하며 SSR 문제도 거의 없음
React Slick (slick-carousel 기반)
패키지명: react-slick, slick-carousel
사용이 쉽지만 Swiper보다는 약간 제한적
✨ 특히 Swiper.js는 커스터마이징 범위가 넓고, initialSlide, lazy, loop 등 기능이 잘 지원되어 뷰티허브처럼 이미지 중심 서비스에 적합할것 같다.