diff --git a/services/meetingService.js b/services/meetingService.js
index b529db0609c03d773e2c5ce05e6c88c4d762d73f..5cfe533357f6a88ae0225420bfbc4add7c24717e 100644
--- a/services/meetingService.js
+++ b/services/meetingService.js
@@ -407,22 +407,6 @@ class MeetingService {
         };
     }
 
-    
-
-  
-    async closeMeeting(meetingId) {
-        const meeting = await Meeting.findByPk(meetingId);
-        if (!meeting) {
-            throw new Error('모임을 찾을 수 없습니다.');
-        }
-        if (meeting.type === 'CLOSE') {
-            throw new Error('이미 마감된 모임입니다.');
-        }
-        meeting.type = 'CLOSE';
-        await meeting.save();
-        return meeting;
-    }
-    
     async getMeetingDetail(meetingId, userId) {
         const meeting = await Meeting.findByPk(meetingId, {
             include: [
@@ -530,6 +514,67 @@ class MeetingService {
         // 저장
         chatRoom.save();
     }
+    
+    async leaveMeeting(meetingId, userId) {
+        const meeting = await Meeting.findByPk(meetingId);
+        if (!meeting) {
+            throw new Error('모임을 찾을 수 없습니다.');
+        }
+    
+        await sequelize.transaction(async (transaction) => {
+            // 참가자 확인
+            const participant = await MeetingParticipant.findOne({
+                where: {
+                    meeting_id: meetingId,
+                    user_id: userId
+                },
+                transaction
+            });
+    
+            if (!participant) {
+                throw new Error('참가하지 않은 모임입니다.');
+            }
+    
+            // 생성자는 탈퇴할 수 없음
+            if (meeting.created_by === userId) {
+                throw new Error('모임 생성자는 탈퇴할 수 없습니다.');
+            }
+    
+            // 참가자 제거
+            await MeetingParticipant.destroy({
+                where: {
+                    meeting_id: meetingId,
+                    user_id: userId
+                },
+                transaction
+            });
+    
+            // 관련 스케줄 삭제
+            await Schedule.destroy({
+                where: {
+                    user_id: userId,
+                    title: `번개 모임: ${meeting.title}`,
+                    time_idx: {
+                        [Op.between]: [meeting.time_idx_start, meeting.time_idx_end]
+                    }
+                },
+                transaction
+            });
+    
+            // 채팅방에서 제거
+            const chatRoom = await ChatRooms.findOne({
+                chatRoomId: meeting.chatRoomId
+            });
+            if (chatRoom) {
+                const user = await User.findByPk(userId);
+                chatRoom.participants = chatRoom.participants.filter(p => p !== user.name);
+                await chatRoom.save();
+            }
+    
+            // 현재 인원 수 감소
+            await meeting.decrement('cur_num', { by: 1, transaction });
+        });
+    }
 }
 
 module.exports = new MeetingService();
\ No newline at end of file