diff --git a/controllers/meetingController.js b/controllers/meetingController.js
index d85e78864e0106b054239c6cc3946d19daaa656b..4363b41365ea22d274b6cc14526bd1669fc7da09 100644
--- a/controllers/meetingController.js
+++ b/controllers/meetingController.js
@@ -21,9 +21,9 @@ class MeetingController {
     async createMeeting(req, res) {
         try {
             const userId = req.user.id;
-            const meetingData = { 
-                ...req.body, 
-                created_by: userId 
+            const meetingData = {
+                ...req.body,
+                created_by: userId
             };
             const createMeetingDTO = new CreateMeetingRequestDTO(meetingData);
             createMeetingDTO.validate();
@@ -43,8 +43,23 @@ class MeetingController {
     async getMeetings(req, res) {
         try {
             const userId = req.user.id; // 인증 미들웨어를 통해 설정된 사용자 ID
-            const meetings = await MeetingService.getMeetings(userId);
-            res.status(200).json(meetings);
+            const page = parseInt(req.query.page) || 0;
+            const size = parseInt(req.query.size) || 20;
+
+            const meetings = await MeetingService.getMeetings(userId, {
+                limit: size,
+                offset: page * size
+            });
+
+            res.status(200).json({
+                success: true,
+                data: {
+                    content: meetings.content,
+                    page: page,
+                    size: size,
+                    hasNext: meetings.hasNext
+                }
+            });
         } catch (err) {
             console.error('모임 목록 조회 오류:', err);
             res.status(500).json({ error: err.message || '모임 목록 조회 실패' });
@@ -77,7 +92,7 @@ class MeetingController {
             const userId = req.user.id; // 인증 미들웨어를 통해 설정된 사용자 ID
 
             await MeetingService.joinMeeting(meetingId, userId);
-            
+
             res.status(200).json({ message: '모임 및 채팅방 참가 완료' });
         } catch (err) {
             console.error('모임 참가 오류:', err);
diff --git a/services/meetingService.js b/services/meetingService.js
index befefae14b8df57a9d8e27d3576c75c49287768a..bbc157f4fda44525a28f15d1c13a1ae9211b977e 100644
--- a/services/meetingService.js
+++ b/services/meetingService.js
@@ -281,7 +281,9 @@ class MeetingService {
     }
 
     
-    async getMeetings(userId) {
+    async getMeetings(userId, pagination) {
+        const { limit = 20, offset = 0 } = pagination;
+
         const meetings = await Meeting.findAll({
             attributes: [
                 'id',
@@ -307,26 +309,36 @@ class MeetingService {
                     as: 'creator',
                     attributes: ['name'],
                 }
-            ]
+            ],
+            order: [['createdAt', 'DESC']],
+            offset
         });
     
-        return Promise.all(meetings.map(async (meeting) => {
-            const isParticipant = await MeetingParticipant.findOne({
-                where: {
-                    meeting_id: meeting.id,
-                    user_id: userId
-                }
-            });
+        const hasNext = meetings.length > limit;
+        const content = await Promise.all(
+            meetings.slice(0, limit).map(async (meeting) => {
+                const isParticipant = await MeetingParticipant.findOne({
+                    where: {
+                        meeting_id: meeting.id,
+                        user_id: userId
+                    }
+                });
     
-            const hasConflict = await ScheduleService.checkScheduleOverlapByTime(
-                userId,
-                meeting.time_idx_start,
-                meeting.time_idx_end
-            );
+                const hasConflict = await ScheduleService.checkScheduleOverlapByTime(
+                    userId,
+                    meeting.time_idx_start,
+                    meeting.time_idx_end
+                );
+    
+                const creatorName = meeting.creator ? meeting.creator.name : 'Unknown';
+                return new MeetingResponseDTO(meeting, !!isParticipant, hasConflict, creatorName);
+            })
+        );
     
-            const creatorName = meeting.creator ? meeting.creator.name : 'Unknown';
-            return new MeetingResponseDTO(meeting, !!isParticipant, hasConflict, creatorName);
-        }));
+        return {
+            content,
+            hasNext
+        };
     }