MC 서버 내 신청 내역 — 승인 안내 메시지 미표시 수정 — /mc-server/?my=ID(내 신청 내역) 페이지에서 관리자가 안내 토글을 ON하고 메시지/URL을 설정해도 안내 콘텐츠가 전혀 표시되지 않던 문제 수정. 근본 원인: v1.3.0 리팩토링에서 안내 표시를 ?my=ID → ?form=ID로 이전하면서 ?my=ID 경로의 렌더링 코드가 누락됨. 승인 상태 카드 하단에 📢 안내 카드(메시지 본문 + 🔗 안내 페이지 바로가기 버튼) 추가. 승인 + 토글 ON + 메시지/URL 존재 시에만 조건부 표시
MC 서버 신청 폼 이스케이프 문자 노출 수정 — 폼 설명에 \"익숙한 그 맛...\" 처럼 역슬래시+쌍따옴표가 그대로 표시되던 문제 수정. 근본 원인: AJAX 저장 핸들러에서 $_POST 데이터에 stripslashes() 미적용 → WordPress magic quotes가 삽입한 역슬래시가 DB에 저장 → esc_html() 출력 시 그대로 노출. wp_kses_post(stripslashes()) 체인으로 수정, 기존 DB 데이터도 HTML로 정제하여 마이그레이션 완료
MC 서버 신청 폼 URL 자동 링크 변환 — 폼 설명 및 내 신청 보기 페이지에서 URL이 클릭 불가능한 일반 텍스트로 표시되던 문제 해결. gbmcm_autolink_urls() 헬퍼 함수로 URL 자동 감지 → 클릭 가능 링크 변환. URL 전체 표시(생략 없음), 새 탭 열기 + 보안 속성 자동 적용, 모바일 word-break: break-all
MC 관리 신청서 빌더 비주얼 에디터 기본 선택 수정 — 신청서 편집 시 안내 문구 에디터가 항상 「코드」 탭으로 열려 raw HTML이 노출되던 문제 수정. 근본 원인 2가지: ① wp_editor의 default_editor 옵션이 사용자 쿠키(wp-settings-{user_id}[editor])에 의해 무시됨 → wp_default_editor 필터로 쿠키 우회 강제 적용. ② 비주얼 탭이 CSS상 활성화(tmce-active)되어도 TinyMCE 인스턴스(iframe)가 실제로 초기화되지 않는 타이밍 이슈 → JS에서 switchEditors.go(editorId, 'tmce') 300ms 지연 호출로 강제 초기화. 페이지 로드 시 WYSIWYG 툴바 + 렌더링된 콘텐츠가 자동 표시
MC 서버 신청 폼 컨테이너 너비 최대 확장 — /mc-server/?form= 프론트엔드 폼이 좌우에 불필요한 간격이 있어 최대 너비로 확장되지 않던 문제 수정. 근본 원인: 플러그인 .gbmcm-front-container의 자체 패딩(padding: 0 16px, 모바일 0 10px)이 테마 #content.container-wrapper의 패딩(20px)과 중첩되어 좌우 총 36px 간격 발생. .gbmcm-front-container 패딩을 0으로 제거하여 부모 컨테이너 내 가용 너비 전체 사용. 플러그인 v1.1.0→v1.1.1 (캐시 버스팅)
MC 서버 신청 폼 유튜브 자동 임베드 + URL 자동 링크 — /mc-server/?form= 프론트엔드 신청서에서 관리자 에디터(TinyMCE)로 입력한 유튜브 URL이 일반 텍스트로만 표시되고 임베드 플레이어가 나오지 않던 문제 수정. 수정: 커뮤니티 보드 gbb_auto_embed() 로직을 MC 관리 플러그인용 gbmcm_auto_embed() 경량 엔진으로 구현. YouTube 태그 링크 → iframe 임베드, 평문 YouTube URL → iframe 임베드, 일반 URL → 클릭 가능 링크(target="_blank"), 외부 링크 target="_blank" 자동 부여, 중복 임베드 방지. .gbmcm-embed-youtube 반응형 16:9 CSS 추가. 유튜브 플레이리스트 URL은 개별 영상이 아니므로 클릭 링크로 유지. wp_kses_post() → gbmcm_auto_embed(wp_kses_post()) 체인 적용. 플러그인 v1.1.1→v1.1.2 (캐시 버스팅)
MC 관리 신청서 목록 — 📊(응답 보기)/📥(CSV) 버튼 항상 노출 — 기존에는 submission_count(pending+approved만 카운트) 조건으로 버튼을 표시하여, 전부 취소되거나 아직 신청이 없는 경우 상세보기/CSV 버튼이 숨겨짐. 관리자가 취소된 신청 내역을 확인할 수 없는 심각한 접근성 문제. 수정: 조건문 제거 → 📊📥 버튼을 신청 건수와 관계없이 항상 표시
MC 폼 빌더 — 저장 시 field_id 변경으로 submission 데이터 JOIN 깨짐 수정 — 폼 빌더에서 신청서를 저장할 때마다 기존 필드를 DELETE 후 INSERT하여 form_fields.id(AUTO_INCREMENT)가 바뀌고, 기존 submission_data.field_id 참조가 깨져 "📝 작성한 내용" 섹션이 미표시되던 근본 버그 수정. 수정: DELETE+INSERT → UPSERT 패턴 전환 — ① 기존 필드 UPDATE(ID 보존), ② 새 필드만 INSERT, ③ 삭제된 필드 중 submission_data 참조 있는 필드는 보존(데이터 무결성). PHP 폼 빌더 렌더에 data-field-id 속성 추가, JS addFieldCard()와 collectFields()에 id 수집 추가. 플러그인 v1.1.6→v1.1.7 (JS 캐시 버스팅)
MC 서버 신청 폼 — OG/SNS 임베디드 카드 HTML 태그 노출 수정 — 디스코드, 카카오톡, 트위터, 페이스북 등 SNS에서 /mc-server/?form=3 페이지를 공유할 때 임베디드 카드의 설명(description)에 , , 등 HTML 태그가 원문 그대로 노출되던 문제 수정. 근본 원인: gbmcm_build_seo_data() 함수에서 $form->description(TinyMCE 리치 텍스트 HTML)을 og:description, twitter:description, meta description 값에 HTML 태그 제거 없이 그대로 사용. 수정: wp_strip_all_tags(html_entity_decode()) + 연속 공백 정리(preg_replace('/\s+/', ' ')) + 160자 제한(mb_substr(, 0, 157).'…') 적용. description 비어있을 시 기본 문구 fallback 유지. 플러그인 v1.1.4→v1.1.5 (캐시 버스팅)
MC 서버 신청 — 취소/거절 시 신청 인원 카운트 제외 — 유저가 본인 취소(user_self_cancel)하거나 관리자가 신청을 취소/거절해도 신청 인원 카운트(👥 N/M명)에 여전히 포함되던 문제 수정. 근본 원인: 5곳의 SELECT COUNT(*) 쿼리가 WHERE form_id = %d로만 필터하여 cancelled, rejected 상태의 신청까지 전부 카운트. 영향: ① 최대 신청 수(max_submissions) 체크 시 취소된 건까지 포함되어 실제 유효 신청보다 더 빨리 마감 판정 ② 프론트엔드/관리자 양쪽에서 정원 표시 부정확 ③ 중복 신청 체크 시 이미 취소한 유저가 재신청 불가. 수정 5곳: ① 최대 신청 수 체크(제출 시) — AND status IN ('pending','approved') 조건 추가 ② 중복 신청 체크(제출 시) — 동일 조건 추가(cancelled 유저 재신청 허용) ③ 관리자 신청서 목록 총 신청수(submission_count) — 유효 신청만 카운트 ④ 프론트 폼 페이지 👥 N/M명 — 유효 신청만 카운트 ⑤ 프론트 목록 페이지 👥 N명 신청 — 유효 신청만 카운트. 관리자 목록의 ✅ 승인, ⏳ 대기, 🚫 취소 개별 카운트는 이미 상태별 필터를 사용하므로 변경 불필요. 플러그인 v1.1.3→v1.1.4 (캐시 버스팅)
🧀 치지직 라운지 수집기 이미지/임베드 수정 v1.1.0 — 치지직 라운지(/board/chzzk-lounge/) 게시글에서 OG 카드 썸네일과 본문 이미지가 깨져서 표시되지 않던 문제 수정. 근본 원인: 네이버 SmartEditor가 OG 카드 썸네일 URL을 프록시(dthumb-phinf.pstatic.net)로 감쌀 때 %22(인코딩된 따옴표)를 삽입하고 Referer 체크도 적용하여 제3자 사이트에서 이미지 로딩 시 403 에러 반환. 또한 YouTube 임베드는 SE HTML의 iframe 태그에 직접 포함되지 않고 data-module-v2 속성 내 JSON으로만 제공. 수정 4건: ① 네이버 프록시 URL에서 원본 이미지 URL 추출(fixNaverProxyUrl() — YouTube/Chzzk/네이버 10개 CDN 호스트 직접 접근), ② YouTube oembed를 data-module-v2 JSON 파싱으로 iframe 추출(extractModuleData()), ③ YouTube 동영상 링크에서 직접 고화질 썸네일 URL 생성(upgradeYoutubeThumbnail()), ④ HTML entity(=, &) URL 디코딩. 기존 게시글 36건 DB 마이그레이션 완료, 신규 수집 자동 적용. 수집 스크립트 v1.0.0→v1.1.0
🚨 MC 서버 제어 — 예약 명령어 스케줄러 5중 근본 수정 — 예약 명령어(⏰ 스케줄러)가 자동 실행되지 않거나, 실행되더라도 status=error로 기록되고, 관리자 페이지에서 서버가 🔴 오프라인으로 표시되던 5가지 근본 원인을 동시 해결. ① SSH 키 경로 오류: DB에 미존재 경로(/var/www/.ssh/id_ed25519) 저장 → /home/dev/.ssh/id_ed25519로 수정. ② 에러 오탐지(False Positive): gbmc_execute_rcon()이 SSH Warning("Permission denied", "Permanently added")을 치명적 에러로 판정. SSH 경고 메시지 regex 필터링 추가로 깨끗한 RCON 응답만 반환하도록 수정. Permission denied (publickey) 진짜 SSH 인증 실패만 에러 판정. ③ 타임존 이중 적용 버그: strtotime(current_time('mysql'))이 PHP TZ=UTC 환경에서 KST 문자열을 UTC로 해석 → 9~18시간 오프셋으로 예약 시간 완전 오차. time() (UTC 유닉스 타임스탬프) + wp_date() (KST 포맷)로 교체하여 일관된 시간 계산 보장. ④ WP Cron 미작동: DISABLE_WP_CRON=true 환경에서 wp-cron.php CLI 실행 시 spawn_cron() HTTP 기반 이벤트 트리거 실패 → 독립 크론 러너(cron-run-schedules.php) 신설, 시스템 크론 매분 직접 호출. ⑤ PHP-FPM SSH 키 권한 문제: 웹 서버(PHP-FPM)는 www-data 사용자로 실행되어 dev 소유의 SSH 키(600 권한)를 읽지 못함 → 관리자 페이지에서 서버 🔴 오프라인 표시. gbmc_execute_rcon()에 실행 사용자 자동 감지 로직 추가: www-data면 id_ed25519_www, dev면 id_ed25519 자동 선택. 수정 후 관리자 페이지 🟢 온라인 + TPS 20.0 정상 표시
SteelSeries Arctis Nova Pro Wireless 딜 기사 원문 대비 7건 오류 수정 (Post #107259) — IGN 원문(Eric Song)과 대조하여 발견된 오류 일괄 수정. ① IGN CDN 제품 이미지 2장(PS5/PC 화이트 에디션, Xbox/PS5/PC 블랙 에디션) 삽입. ② 원문 기자명(Eric Song) 출처에 추가. ③ 하이퍼링크 5건(best gaming headsets 가이드, Nova Elite 제품, best wireless gaming headset 가이드, WC Freeze 젤 이어패드, Arctis Nova Pro 리뷰 by Kevin Lee) 삽입. ④ AI 환각 섹션 "한국 게이머를 위한 궁극의 오디오 솔루션인가?" 삭제. ⑤ AI 환각 댓글 유도 문구 삭제. ⑥ Eric Song 에디터 추천(개인 사용 경험 + WC Freeze 이어패드 업그레이드 팁) 섹션 추가. ⑦ DB source_domain NULL → www.ign.com 보정
엑스박스 AI 코파일럿 기사 이미지 깨짐 + 원문 대비 5건 오류 수정 (Post #107262) — The Verge 원문(Emma Roth)과 대조하여 발견된 오류 일괄 수정. ① 깨진 이미지(로컬 파일 참조) → Verge CDN URL(platform.theverge.com)로 교체하여 Xbox Series X 화이트 에디션 사진 정상 표시. ② 원문 기자명(Emma Roth) 출처에 추가. ③ 하이퍼링크 9건(GamesRadar 보도, 게이밍 코파일럿 소개, Windows 11 베타, Xbox Ally 핸드헬드, Xbox 공식 페이지, Project Helix, PC 게임 플레이, Phil Spencer 퇴임, Asha Sharma CEO 선임) 삽입. ④ AI 환각 섹션 2건("한국 게이머들이 주목할 AI 비서의 잠재력과 도전 과제", "경쟁 구도 — 소니 플레이스테이션/닌텐도 스위치 비교") 삭제. ⑤ 발췌문(excerpt) 정확한 요약으로 교체
마리오 + 래비드 스파크 오브 호프 기사 원문 대비 10건 오류 수정 (Post #107290) — Game Rant 원문(Aleksandra Kubas)과 대조하여 발견된 오류 일괄 수정. ① 원문 기자명(Aleksandra Kubas) 출처에 추가. ② takkk.jpg 콜라주 스크린샷 삽입. ③ 하이퍼링크 6건(닌텐도 eShop 스토어, OpenCritic 점수, 전략 RPG 랭킹, 스위치 2 출시 예정작, Rayman DLC 기사, 판매량 반등 기사) 삽입. ④ AI 환각 텍스트 3건("한국 게이머들은 자국 eShop에서 할인 여부를 확인해야", "카툰 폭력으로 E10+ 등급", "스컬 앤 본즈 연이은 출시 연기") 삭제. ⑤ AI 환각이 포함된 발췌문(excerpt) 정확한 요약으로 교체. ⑥ DB body_text 630자→3,793자 재추출, body_images/body_videos NULL → 정상 데이터 보정
Genesis Relic 기사 원문 대비 11건 오류 수정 (Post #107293) — IndieDB 원문(LiquidMeow)과 대조하여 발견된 오류 일괄 수정. ① 원문 기자명(LiquidMeow) 출처에 추가. ② 공식 YouTube 출시 트레일러 삽입. ③ Wishlist Actions 현황 차트 + Steam Deck Playable 등급 배지 이미지 2장 삽입. ④ "완벽 호환" 오역 → "Playable" 등급으로 정정(원문: 키보드 필요 가능성, 작은 텍스트 안내). ⑤ 2인 개발팀(2년 개발) 정보 추가. ⑥ 15% 출시 할인 $3.39 가격 정보 추가. ⑦ 에디터 기능(플레이어 커스텀 콘텐츠) 추가. ⑧ AI 환각 텍스트 3건(마인크래프트, 쿠키 클리커, 유니버설 페이퍼클립스 비교) 삭제. ⑨ AI 환각 섹션(한국 게이머 시장 분석) 삭제. ⑩ Steam 스토어 + IndieDB 게임 페이지 링크 삽입. ⑪ DB body_text/images/videos/source_domain/author 전부 NULL → 정상 데이터 보정
아크 레이더스 기사 원문 대비 6건 오류 수정 (Post #106979) — GamesIndustry.biz 원문과 대조하여 발견된 오류 일괄 수정. ① 원문 기자명(Alex Forbes-Calvin) 출처에 추가. ② Patrick Söderlund 초상사진 + Arc Raiders 게임 스크린샷 3장(총 4장) 삽입. ③ Marathon 비교 오역 수정(원문: "마라톤이 아크 레이더스보다 하드코어" → 기존 번역이 반대로 되어 있었음). ④ 원문 하이퍼링크 6건(게임 페이지, Nexon 매출 보고서, BF6 인원 감축/판매량, Marathon, YouTube Pachter 인터뷰) 삽입. ⑤ DB 원본 author /u/Iggy_Slayer(Reddit 유저명) → Alex Forbes-Calvin(원문 기자) 보정. ⑥ DB 원본 body_images NULL → 4개 이미지 보정
🚨 MC 서버 제어 패널 — 서버 간 SSH 포트 공유 치명적 버그 수정 — 마인크래프트 서버 설정을 수정하면 다른 서버의 SSH 포트까지 함께 변경되는 치명적인 버그 수정. 근본 원인: 서버 수정 시 SSH 포트와 RCON 포트가 현재 입력된 값으로 항상 덮어쓰기되어, 이전에 열었던 다른 서버의 입력값이 잔존한 채 저장됨. 수정 모달이 기존 서버 데이터를 불러오지 않아 빈 폼이 기본값(22)으로 표시되면서 실제 포트(예: 9022)가 22로 덮어쓰기되는 문제 포함
🚨 전체 사이트 긴급 복구 (약 14분 장애) — gameboy.kr, sudapeople.tv 등 전체 사이트가 접속 불가한 장애 발생 및 복구 완료. 근본 원인: 레거시 사이트의 DB 테이블이 손상(crashed)되어, 이를 조회하는 PHP 요청이 무한 대기 → 웹 서버 처리 워커 전체 포화(50/50) → 모든 사이트 동시 다운. DB 테이블 복구(REPAIR TABLE) 후 전체 서비스 정상화
🚨 카지노/커뮤니티 골드 잔액 불일치 긴급 수정 — 상단 NavBar 골드 배지(214,999G), 카지노 잔액(124,547G), CX 스탯바(0G)가 각각 다른 값을 표시하던 심각한 불일치 버그 수정. 근본 원인: 골드 리브랜딩(v3.13.0)에서 출석 플러그인의 메타 키만 gb_total_points→gb_total_gold로 마이그레이션 완료됐으나, 카지노·커뮤니티 보드 플러그인은 구 메타 키 참조가 미수정 상태. CX 스탯바는 정의되지 않은 함수를 호출하여 항상 0 반환. 수정 8건: ① casino.php getBalance() 메타 키 통일 ② point-system.php fallback 메타 키 통일 ③ point-system.php gbb_get_points() 메타 키 통일 ④ beg-system.php 포인트 부자 쿼리 메타 키 통일 ⑤ beg-system.php 에러 메시지 P→G ⑥ casino.php 더블다운 에러 P→G ⑦ cx-system.js 카지노 잔액 P→G ⑧ top-nav.php CX 스탯바 미존재 함수→실존 함수 교체
beg-system.php 골드 리브랜딩 잔여 P→G 수정 3건 — 구걸 수락 시 차감 메시지, 포인트 부족 에러 2곳에서 P→G + 포인트→골드 표기 변경
The 7th Guest 리메이크 기사 누락 콘텐츠 복원 — Nintendo Life 원문에 있던 공식 YouTube 트레일러, 본문 스크린샷 4장이 미수집되어 누락되었던 기사에 원본 미디어 삽입. 출처 기자명(Ollie Reynolds) 추가, Push Square VR 리뷰 링크 및 25주년 리마스터 게임 페이지 링크 삽입. 원문에 없는 AI 환각 텍스트(헤르츠/반도 게임 언급) 삭제
배틀필드 6 무료 체험 기사 전면 재수정 — VG247 원문에 없는 AI 날조 섹션 3개(한국 게이머 전술 분석, 배틀필드 시리즈 역사, 콜 오브 듀티 비교)를 전량 삭제하고 원문 기반으로 재구성. 공식 YouTube 트레일러(Season 2 Free Trial Week), Hagental Base 맵 스크린샷, 출처 기자명(Sherif Saed) 추가. Battlefield Redsec 하이퍼링크 삽입