XE 시절부터 있던 문제? 인데 

라이믹스 그리고 라이믹스 최신버전에서도 확인해 보니 같은 그룹이 계속 db에 기록되어 한 회원이 같은 그룹번호를 N개씩 가지게 됩니다.

 

이게 보통은 문제가 되지 않는데요.

회원그룹을 가져와서 보여줄때 회원그룹의 배열에서 중복된 것은 제외하는 코드를 사용한 자료는 문제가 안됩니다.

그런데 이런 것을 모르고 그냥 배열의 것을 모두 보여주거나 하는 자료는 같은 회원의 똑같은 항목이 N개씩 출력이 되는 경우가 발견될 수 있습니다.

 

전체 회원의 어떤 목록을 출력하는데 회원그룹 기준으로 정렬하여 보여주는 경우 위와 같은 문제를 가진 자료들이 발생할 수 있습니다. 단순 보여주는 경우는 문제가 좀 덜할 수 있지만 그룹별로 메일을 보낸다던지 쪽지를 보낸다던지 하는 자료에서 같은 회원에게 같은 메일,쪽지를 굉장히 많은 반복 발생하는 경우도 경험했습니다.

 

이게 특별한 문제를 방지하기 위해 어떤 이벤트가 발생할때 마다 회원그룹을 db에 새로 등록하는 건지 좀 물음표가 생깁니다.

 

하위그룹을 삭제하고 새그룹 부여하는 것에 관한 문제가 아닙니다. 저희 사이트는 기존그룹 삭제 후 신규그룹 부여는 잘 됩니다.

  • profile

    의도된거라기보단 그냥 예전부터 아무런 의심없이 그룹을 추가하는 기능을 써서 그럴거예요. (제로보드시절에 그렇게 설계되고 아무도 그거에 대해서 신경을 안썼기도 하고요)

    서드파티에서 자동그룹에 대한 기능들을 마구잡이로 여기저기에서 만들기도 하고..

    실제로 그룹을 추가하는 항목에서는 기존 그룹을 채크하지도 않고 있으니 중복적으로 여러개 들어갈 수 있게 되어잇네요 ㅠ

  • profile profile
    제가 궁금한건 그룹이 이미 추가가 되었는데 왜 또 추가가 되는지에 대한 의문입니다.
    레벨변화가 있을때 마다 그룹이 추가되는 코드가 있어서 그런건지 궁금하기도 하구요.

    만약 어떠한 단계에서 그룹을 무조건 추가하는 코드가 있고 그것 때문에 반복해서 추가를 하는 상황이라면 똑같은 그룹번호가 있을때는 추가하지 않는 개선이 있어야 하는 것인지 아니면 다른 특별한 문제가 있어서 무언가 방지하기 위해 계속 같은 그룹번호를 추가하는지 궁금했습니다.

    답변해 주신 것으로 보아서는 어떠한 특정한 시점에서 무조건 현재 그룹을 추가하는 코드가 이런 현상을 만드는 것 같다는 추측을 하게 됩니다.
  • profile profile

    https://github.com/rhymix/rhymix/blob/master/modules/member/member.controller.php#L2184

    위에서 말씀드린 것 처럼 예전부터 아무런 의심 없이 그룹 추가하는 기능을 마구잡이로 이 함수를 호출하여 사용하고 있으며, 제로보드시절부터 지금까지 이 함수에 대한 부분을 고치지 않았습니다.

    가져올때는 해당 디비에서 데이터를 가져온뒤 array으로 담아 버리니 같은 값의 내용이 중복으로 가져오는 것이고요.

     

    https://github.com/rhymix/rhymix/blob/master/modules/member/schemas/member_group_member.xml

     

    실제 해당 부분에 group_srl 이랑 member_srl 이 프리마키로 묶여잇지도 않으니 중복으로 여러개 등록 가능한 상태이고, 해당 함수에서 검사도 안하고요...

     

    그냥 지금까지 방치되엇다고 판단됩니다.

     

  • profile profile

    제가 저희 사이트 회원들 그룹번호 중복으로 소유한 것과 날짜 등으로 유추해 볼때 레벨변동이 있을때 마다 그룹을 추가하는 로직이 있나 하는 의심을 해 봅니다. 레벨변동이 실제 그룹이 변동될 상황이 아닌 레벨변동 시점에서도 그룹을 추가해서 더 이런 문제를 심화하는 듯 하구요. (코어에 포함된 포인트,레벨 관련입니다.)

    물론 근본적인 문제 해결은 기존 그룹번호가 있다면 중복해서 추가하지 않는 것을 마련한다면 어떠한 반복시도에도 문제가 발생하지 않겠지만요.

     

    개인적으로는 이로인한 문제를 여러자료에서 경험하고 있어서 일단 이슈로 등록했습니다.

  • profile

    패치 관련 설명 추가하였습니다.

     

    https://github.com/rhymix/rhymix/issues/1760

  • profile profile
    네. 중복 추가하지만 않아도 db에서 직접 불러와서 생기는 문제를 원천적으로 막을 수 있어서 큰 도움이 됩니다. 물론 이미 중복된 데이터의 정리 시간이 조금 필요하지만 이것도 어차피 시간 문제이고 신규 사이트들에게는 큰 도움이 될 것 입니다.
  • profile profile

    패치 관련 문의좀 드릴게요.

    1.9 사이트 2.0 전환이 지연되고 있어서 1.9 사이트에 우선 패치만 먼저 적용하려고 하는데요.

    기존 함수에는

    function addMemberToGroup($member_srl, $group_srl, $site_srl=0){
    }

    $site_srl 부분이 남아있습니다.

    이 상태에서 지금 패치를 그대로 적용해도 부작용은 없을지해서 문의드려봅니다.


    쿼리파일 업로드해줬고.
    코드 추가된 부분만 추가해주는 방법으로 패치했습니다. 기존 코드에서 제거된 것은 없습니다.

     

        function addMemberToGroup($member_srl, $group_srl, $site_srl=0)
        {
            // Return if member already belongs to group
            $args = new stdClass();
            $args->member_srl = $member_srl;
            $args->group_srl = $group_srl;
            if($site_srl) $args->site_srl = $site_srl;

            $output = executeQueryArray('member.getMemberGroupMember', $args);
            if ($output->data && count($output->data) == 1)
            {
                return;
            }
            if ($output->data && count($output->data) > 1)
            {
                executeQuery('member.deleteMemberGroupMember', $args);
            }
            
            // Add member to group
            $output = executeQuery('member.addMemberToGroup',$args);
            ModuleHandler::triggerCall('member.addMemberToGroup', 'after', $args);

            $this->_clearMemberCache($member_srl, $site_srl);

            return $output;
        }

  • profile profile

    네, 상관없습니다. site_srl은 라이믹스 1.9에서도 한동안 사용하지 않았으니 무시하셔도 됩니다만

    실제 쿼리 파일에서 요구할 경우 기본값 0 그대로 쓰셔도 무방합니다.

     

    getMemberGroupMember 쿼리 파일 가져가는 것도 잊지 마시고요. ^^

  • profile profile
    네. 감사합니다. 신규 파일은 내려받아서 업로드 했습니다~~