+ );
+}
+
+export { ModifyPage };
\ No newline at end of file
diff --git a/apps/cs/src/shared/config/api.ts b/apps/cs/src/shared/config/api.ts
index 4430285d8..6ea755a71 100644
--- a/apps/cs/src/shared/config/api.ts
+++ b/apps/cs/src/shared/config/api.ts
@@ -21,6 +21,7 @@ export const ENDPOINT = {
CONTENTS: "/cms-service/api/v1/contents",
USER_OGNZ: "/cms-service/api/v1/user-ognz",
IMAGES: "/cms-service/api/v1/images",
+ GROUP: "/cms-service/api/v1/groups",
},
BOARD_SERVICE: {
BBS: "/board-service/api/v1/bbs",
diff --git a/packages/.gitignore b/packages/.gitignore
new file mode 100644
index 000000000..45784b06e
--- /dev/null
+++ b/packages/.gitignore
@@ -0,0 +1 @@
+.qodo
diff --git a/packages/common/components/src/ui/index.ts b/packages/common/components/src/ui/index.ts
index c3aad6220..d80d9bc9f 100644
--- a/packages/common/components/src/ui/index.ts
+++ b/packages/common/components/src/ui/index.ts
@@ -22,3 +22,4 @@ export * from "./slider";
export * from "./switch";
export * from "./table";
export * from "./tabs";
+export * from "./pagination";
\ No newline at end of file
diff --git a/packages/common/components/src/ui/pagination/index.tsx b/packages/common/components/src/ui/pagination/index.tsx
new file mode 100644
index 000000000..5557727f5
--- /dev/null
+++ b/packages/common/components/src/ui/pagination/index.tsx
@@ -0,0 +1,90 @@
+// apps/cs/src/common/components/ui/pagination.tsx
+import { Button } from "../button";
+
+interface PaginationProps {
+ currentPage: number;
+ totalPages: number;
+ onPageChange: (page: number) => void;
+}
+
+function Pagination({ currentPage, totalPages, onPageChange }: PaginationProps) {
+ // 표시할 페이지 번호 범위 계산
+ const getPageRange = () => {
+ const range: number[] = [];
+ const maxButtons = 5; // 한 번에 보여줄 최대 페이지 버튼 수
+ const halfMaxButtons = Math.floor(maxButtons / 2);
+
+ let startPage = Math.max(currentPage - halfMaxButtons, 1);
+ let endPage = Math.min(startPage + maxButtons - 1, totalPages);
+
+ if (endPage - startPage + 1 < maxButtons) {
+ startPage = Math.max(endPage - maxButtons + 1, 1);
+ }
+
+ for (let i = startPage; i <= endPage; i++) {
+ range.push(i);
+ }
+
+ return range;
+ };
+
+ if (totalPages <= 1) return null;
+
+ return (
+
+ {/* 첫 페이지 버튼 */}
+
+
+ {/* 이전 페이지 버튼 */}
+
+
+ {/* 페이지 번호 버튼들 */}
+ {getPageRange().map((pageNum) => (
+
+ ))}
+
+ {/* 다음 페이지 버튼 */}
+
+
+ {/* 마지막 페이지 버튼 */}
+
+
+ );
+}
+
+export { Pagination };
\ No newline at end of file