로그인

검색

포인트 모듈 저만 그런가요?
웅돌프 블로그

포인트 모듈 저만 그런가요?

테스트로 게시글 읽을때 포인트 5차감 되게 하였습니다.

포인트가 부족한 사람은 당연히 아래와 같은 메시지가 출력됩니다.

 

로그인하지 않았거나 포인트가 부족하여 글을 읽을 수 없습니다.
(필요한 포인트 : 5, 현재 포인트 : 0)

 

하지만, 새로고침을 하거나 게시글을 다시 클릭하면 본문이 보여지네요.

XE타운에 질문글도 남겼지만, 저한테만 그런 증상이 있다고 하는데요.

 

운영하는 다른 사이트에 테스트를 해봐도 동일한 증상이거든요.

정말 저한테만 그런 증상이 있는걸까요?

Profile
웅돌프
Level. 2 470 / 810 준회원
서명을 아직 작성하지 않았습니다.
8
0
권한이 없습니다.
댓글 8개
  • 꿀팁관리소장
    2022.05.14

    뭐 여러 사이트에서 테스트해서 같은 증상이라면 버그일 가능성이 높겠죠. 다만 그런 조건으로 운영하는 곳이 많지 않기에 대조군을 찾기 어려울 수도요. 저도 게시물 조회시 포인트 차감은 사용하지 않고 있거든요.

  • 꿀팁관리소장
    2022.05.14

    제가 여기에서 테스트해 봤는데 동일한 문제가 있고 검색해보면 XE시절부터 있었던 문제 같습니다.

     

    게시글 열람시 어디에 열람한 회원 정보를 보관하는지 모르겠는데 포인트가 부족한 경우도 읽은회원으로 취급해 버려서 발생하는 문제로 판단이 됩니다. 버그인거죠.

  • 꿀팁관리소장
    2022.05.14

    db를 뒤져보니 document_readed_log 테이블에 포인트(차감/증가) 모듈에 설정된 경우 포인트 중복 지급/차감을 하지 않고 읽은 사람을 구분하기 위해 여기에 해당문서번호와 열람회원 회원번호를 기록하고 있습니다.

     

    제가 분석을 해보니 포인트 부족으로 리턴된 회원도 여기에 기록이 되어버립니다.

    이러면 이후 문서를 다시 조회하게 될때 여기에 기록이 되어 있어서 포인트가 있어서 열람이 허용되었던 회원으로 취급이 되어 열람이 되어버리는 상황으로 보이네요.

     

    포인트 부족으로 메시지를 보여주고 본문을 보여주지 않을때 위 테이블에 해당 회원은 기록이 되지 않도록 코어에서 고쳐져야 할 부분 같네요.

     

    코드를 더 봐야겠지만 저부분의 정보 말고 다른 세션을 이용하는 추가적인 열람제한이 있을 수 있고 해당 부분에 버그가 있을 수도 있습니다. 포인트가 부족해도 무조건 위 열람한 회원으로 db에 저장하도록 의도했는지는 나머지 추가의 함수가 있는지 확인해 봐야 합니다.

  • 꿀팁관리소장
    2022.05.14

    현재 포인트 차감 설정 그리고 포인트 부족회원의 경우 문제점

     

    1.document_readed_log 테이블에 포인트가 부족했던 회원도 저장을 하면서

     

    2.

    https://github.com/rhymix/rhymix/blob/master/modules/point/point.controller.php#L507-L510

     

    if ($logged_member_srl)
    {
    $args = new stdClass;
    $args->member_srl = $logged_member_srl;
    $args->document_srl = $obj->document_srl;
    $output = executeQuery('document.getDocumentReadedLogInfo', $args);
    if ($output->data->count)
    {
    return;
    }
    }

     

     

     

    해당 테이블에서 기록이 있는 회원은 리턴을 시킵니다.

    - 이 부분 목적은 한번 포인트 차감,증가 작업이 이루어진 회원의 경우 이후 다시 열람시 중복으로 포인트 처리를 하지 않으려는 목적으로 보입니다.

     

    3.그런데 포인트가 부족했던 회원도 테이블에 회원번호를 저장해 버리면서 2번의 코드에서 역시 리턴되어 버려서 열람제한 포인트 차감작업을 하지 않고 리턴되어 버립니다.

    - 포인트 차감을 중복으로 하지 않는 것은 맞으나 열람제한이 되지 않는 것은 문제입니다.

     

    게시글을 처음 접속했을때는 리턴되지 않고 코드가 진행되기 때문에 알림창과 포인트차감 코드까지 다 진행이 됩니다.

     

    이때 아래 코드에서

    https://github.com/rhymix/rhymix/blob/master/modules/point/point.controller.php#L556

     

    $_SESSION['banned_document'][$obj->document_srl] = true;

    이런 세션을 만들어 주는데 이걸 어디서 활용을 하려고 했는지 모르겠으나 아마도 다시 같은 게시글을 열람시도할 시 위 세션값으로 열람을 제한하려는 용도로 사용하려고 했을 것 같습니다.

     

    위 세션을 조건으로 열람을 제한하는 코드가 존재하지 않거나 혹은 버그가 있을 가능성이 있습니다.

     

    그런데 위 세션으로 컨트롤 하는 것도 사실 한계가 있습니다. 세션이라는 것은 로그아웃 후 다시 로그인 하거나 하면 사라지고 마니 로그아웃 후 로그인 하여 포인트가 부족했던 게시글을 다시 접속하면 접속이 될 겁니다. (물론 세션을 사용해서 열람제한하는 것이 존재하거나 버그가 없어도 이런 추가적인 문제가 있어 보인다는 것입니다.)

     

    제가 봤을때는 열람시 차감시 포인트가 부족한 경우 처리의 부분이 다시 설계가 필요해 보입니다. (아니면 포인트가 부족한 회원의 경우 위 언급된 테이블에 저장을 하지 않는 것이 방법일 수도 있어보입니다. 물론 포인트가 부족한 회원이 반복해서 해당 게시글을 접속하면 포인트를 확인하는 코드가 반복해서 작동하겠지만 뭐 그정도는....)

     

    게시글 접근시 접근한 회원 저장은

    https://github.com/rhymix/rhymix/blob/master/modules/point/point.controller.php#L566-L573

    여기서 하고 있습니다.

     

     

    혹시 포인트가 부족한 회원은 위 테이블에 저장하지 않도록 하여 이 문제를 회피해 보고 싶으시다면

     

    https://github.com/rhymix/rhymix/blob/master/modules/point/point.controller.php#L566

    if ($logged_member_srl)

    if (($logged_member_srl && $config->disable_read_document != 'Y') || ($logged_member_srl && $cur_point + $reader_point >= 0 && $config->disable_read_document == 'Y'))

    로 수정해서 테스트 해보세요. 물론 읽지 않은 새로운 게시글로 테스트를 하셔야 할 겁니다.

     

    *그런데 이렇게 포인트가 부족한 회원을 저장하지 않도록 해도 문제가 지속되겠네요.

    위 열람을 제한하는 코드가 updateReadedCount 트리거 after 에서 작동하는 것이라 포인트가 부족한 회원이 열람이 제한이 되었던 문서를 다시 접속하면 조회수가 이미 증가했기때문에 ReadedCount 가 증가하지 않기에 열람을 제한하는 코드가 작동하지 않고 그냥 열람이 될 것 같습니다. (보통은 조회수 증가가 세션에 의해서 반복접속해도 증가하지 않게 설정을 하고 운용하죠.)

    - $_SESSION['banned_document'][$obj->document_srl] = true; 이 부분을 이용해 열람을 제하는 부분이 있어야 할 것같습니다.

  • 작성자 웅돌프
    2022.05.15
    @꿀팁관리소장 님에게 보내는 답글

    소장님에 시원한 답변 감사합니다.

    XE타운에 질문 글을 남겼을땐 저희 사이트에 문제이고,

    순정으로 라이믹스를 설치 했을땐 문제가 없다는 답변을 받았었거든요.

     

    그런데 운영하는 사이트 중 순정과 거의 비슷(?)할 정도로 모듈이나 애드온이 설치가 안된

    사이트에서 테스트를 했었으나 문제의 증상이 있었습니다.

     

    소장님도 테스트를 했을때 같은 증상이라고 하시니 저희 사이트에 문제는 아니여서 너무 좋습니다.

    라이믹스 깃헙에 이슈 남기긴 했는데 아무런 답변이 없네요.

     

    라이믹스팀이 해당 버그를 수정을 해줬으면 하는 바램입니다.

  • 꿀팁관리소장
    2022.05.16
    @웅돌프 님에게 보내는 답글

    올려주신 이슈에 제 의견이 전달될 수 있도록 이 글의 주소를 링크해 드렸습니다.

    그 후 검토를 해주셔서 bug 라벨을 달아주셨으니 기다리시면 아마 중요도 우선순위에 따라서 해결이 될 것입니다.

     

    이슈를 남겼는데 아무런 답변이 없네요. 라고 해주셨는데

    제보라는 것을 전부 리뷰해 보는 것은 불가능합니다. 따라서 먼저 해당 문제가 코어의 버그의 가능성을 염두하고 모듈이라면 모듈의 관련된 함수 부분을 먼저 살펴보시고 나름 문제가 될 만한 부분을 찾아서 그것으로 개발자분들과 대화를 시작하시면 코어의 버그라면 바로 개발팀에서 확인과 결과를 내어주실 수 있습니다.

     

    제가 이곳에서 늘 이야기하고 있는 라이믹스에 관해서 조금 학습을 하고 하자는 이유가 이런 곳에서도 필요하기 때문입니다.

    어려운 일이 아닙니다. 논리적인 문구로 나열된 문구들이니 프로그래밍을 아주 깊숙히 알지 못해도 개발팀에게 문의를 해볼 정도는 가능할 것입니다.

     

    물론 사이트 운영자가 참여하지 않더라도 다른 서드파티 개발자분들이나 코어 개발팀이 모든 이슈에 관련된 코드를 다 리뷰해 주고 이슈에 관해서 결론을 내어주시길 바라시겠지만 현실적으로는 어렵고도 불가능한 일입니다.

     

    여기에 오시고 계시니 저와 같이 비개발자가 라이믹스의 사이트를 운영하면서 운영자 스스로 해결할 수 있을 정도의 능력을 가질수 있는 활동을 조금씩 해보시면 어떨까 제안해드립니다.

  • 작성자 웅돌프
    2022.05.16
    @꿀팁관리소장 님에게 보내는 답글

    깃헙에 제가 남긴 이슈에 댓글 달아주신거 확인 했습니다.

     

    깃헙, XE타운 두군데 문제점에 대해 글을 남겼는데

    아무도 관심이 없어서 약간(?) 속상 했었습니다.

     

    혹시나 하는 마음에 꿀팁에 글을 남겼는데

    소장님께서 분석해주시고 이슈가 되게끔 도와주셨네요.

     

    꿀팁이 만들어진 처음부터 자주 방문하여 스케치북 게시판 스킨에 문제점부터

    여러가지 도움 받아서 수정을 많이 했습니다.

     

    그런데 아직까지는 제가 소스를 보고 어떻게 프로세스가 동작하는지까진

    파악 할 실력이 안되네요 ㅠ

  • 꿀팁관리소장
    2022.05.16
    @웅돌프 님에게 보내는 답글

    네. 저도 마찬가지로 아무것도 파악이 안되었습니다. 조금씩 실력이 늘어났을 뿐이죠.

    시도를 해보세요. 지금 처럼 문제가 있다면 해당 문제의 연관된 함수를 열어서 보세요. 그리고 아는 곳 까지 이해를 하시고 모르는 부분은 질문도 해보시고..

     

    제가 위에 달아드린 댓글을 보시고 이해해보도록 한번 시간을 가져보세요. 물론 제가 언급해드렸던 함수를 열어서 보셔야겠죠???

    이해를 하려고 노력해봐도 다 모르셔도 됩니다. 새롭게 알게된 부분이 단 1줄이라도 있을 겁니다. 그게 성과입니다.

     

    저도 그렇게 했고 지금도 그렇게 하고 있어요.

댓글 쓰기
권한이 없습니다.