소셜로그인 회원가입시 SELECT 쿼리 과부하 현상
AWS 관리해주는 업체에서 아래와 같은 레포팅을 받았습니다
최근들어 RDS CPU 알람이 많이 발생합니다
추측이 되는 부분에 대하여 말씀드리겠습니다

SELECT COUNT (*) AS `cnt` FROM `g5_member` where `mb_nick` = ? AND `mb_id` != ''
select count(*) as cnt from g5_member where mb_nick = '46' and mb_id <> ''
select count(*) as cnt from g5_member where mb_nick = '209' and mb_id <> ''
select count(*) as cnt from g5_member where mb_nick = '113' and mb_id <> ''
select count(*) as cnt from g5_member where mb_nick = '114' and mb_id <> ''
숫자만 바꾸어서 1초에 몇개의 쿼리가 지속적으로 발생하고 있습니다
이것을 유추해보면 아래의 함수가 작동하는 것으로 판단되며,
소셜로그인(네이버, 다음)에서 계속 쿼리를 요청하고 있습니다
plugin / social / includes / functions.php 1007~1018줄 내용
function exist_mb_nick_recursive($mb_nick){
static $count = 0;
$mb_nick_add = ($count > 0) ? $mb_nick.(string)$count : $mb_nick;
if( ! exist_mb_nick($mb_nick_add, '') ){
return $mb_nick_add;
}
$count++;
return exist_mb_nick_recursive($mb_nick);
}
lib / register.lib.php 76~84줄 내용
function exist_mb_nick($reg_mb_nick, $reg_mb_id)
{
global $g5;
$row = sql_fetch(" select count(*) as cnt from {$g5['member_table']} where mb_nick = '$reg_mb_nick' and mb_id <> '$reg_mb_id' ");
if ($row['cnt'])
return "이미 존재하는 닉네임입니다.";
else
return "";
}

소스를 확인해보니 소셜로그인에서 닉네임이 넘어오지 않는 경우 회원 테이블에서 닉네임을 0 부터 순차적으로 조회를 반복하는 과정이 발생한 것이 었습니다
소셜 회원수가 적은 경우는 별 영향이 없겠으나, 위 사이트는 소셜회원만 수천명이 활동중인 중규모 이상의 서비스 사이트라서 cont 가 0 부터 2000번 이상까지 조회를 반복하는 것이 원인이었습니다
SIR 버그레포트를 제출했으면 차후 버전에서는 수정하겠다고 합니다.
그누보드 5.4.5.1 ( 2021-02-05 배포) 버전까지는 이것에 대한 수정이 필요합니다

plugin / social / includes / functions.php
function exist_mb_nick_recursive($mb_nick){
static $count = 0;
$mb_nick_add = ($count > 0) ? $mb_nick.(string)$count : $mb_nick;
를 아래와 같이 변경합니다
function exist_mb_nick_recursive($mb_nick){
global $mb_id;
static $count = 0;
//$mb_nick_add = ($count > 0) ? $mb_nick.(string)$count : $mb_nick;
$mb_nick_add = ($count > 0) ? str_replace('_','',$mb_id).substr(md5(microtime()), 0, 3).(string)$count : $mb_nick;
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 10개
그누 5.3버전에서도 function exist_mb_nick_recursive($mb_nick){ 해당 내용을 수정하면 도움이 되나요?
소셜로그인이 활발하지 않은 경우는 이것이 문제되지 않은것 뿐이지요
감사합니다!
어떻게해도 닉이름 중복처리가 깔끔하진 않네요.
그것역시 중복체크에 헛점이 있습니다
sir 에서 개선하겠다고 하셨으니 좋은 대안이 마련될것으로 기대합니다