오늘 제가 만들어 사용하는 애드온에 우연히 코어에서 동작하는 것과 완벽한 일치가 안되는 것 하나가 발견되어 해당 부분을 보완하면서 코드를 추가해서 문제가 될만한 소지를 없애는 작업을 했습니다.

 

애드온의 기능은 댓글이 추천을 받으면 그 댓글 작성자에게 사이트에서 포인트로 교환이 가능한 스티커를 일정 매수를 지급하는 애드온 입니다.

 

그런데 애드온으로 만들다 보니 추천 작업 후 스티커가 지급 되게 되어있습니다. XE 애드온의 구조가 그렇습니다.

 

그래서 코어에서 댓글 추천하는 금지하는 사례를 나름 꼼꼼히 카피하여 적용하였다고 생각하고 스티커 지급 직전에

 

리턴코드 1

리턴코드 2

리턴코드 3

리턴코드 4

 

이렇게 추천 작업 후 추천할 수 없는 응답이 나올 수 있는 것에 스티커 지급도 되지 않도록 조치를 하였죠.

 

 

 

나름 꼼꼼히 했다고 생각했는데 의외 케이스가 오늘 발견이 되었습니다. 물론 코어는 꼼꼼히 막는다고 막아서 이런 결과가 나오는 것일 텐데요. 간단히 설명드리면 로그인 상태가 유지되면서 뭔가 변화가 생길때 의외의 추가적인 조치가 필요한 것 입니다.

 

 

결국 저는 완벽히 코어와 일치시키려면 코어의 모든 것을 똑같이 적용하기 보다는 

추천 직전 댓글의 추천수 = 추천 직후 댓글 추천 수 

위와 같은 등식이 성립된다면 스티커를 지급하지 않는 것으로 오늘 코드를 추가했습니다.

 

결과만 본다면 어떤 사유로 코어에서 막았던 추천수가 증가하지 않았다는건 스티커도 지급하지 않아야 한다는 것 입니다.

 

 

 

그럼 여기서 제가 제목에 적은 코드 라인수가 적으면 무조건 좋은게 아닐거라는 생각을 하게 된게 바로 아래 내용입니다.

 

처음 이 코드를 넣으면서 위에 리턴코드1,2,3,4 를 없애도 되겠군! 이라는 단순한 생각을 했습니다.

그런데 더 생각을 해보니..

 

추천 직전 댓글의 추천수 = 추천 직후 댓글 추천 수 

 

를 비교하는 작업이 위 리턴코드 1,2,3,4 에 비해 더 자원을 사용하게 될 것입니다. 왜냐면 리턴코드 1,2,3,4 는 별다른 추가작업 없이 바로 확인 가능한 값을 사용하는 코드입니다.

 

하지만 마지막에 추가한 코드는 나름 추천 직후에 또 한번 추천수를 db에서 한번 가져오는 아주 약간의 자원 사용이 더 있는 코드 입니다.

 

마지막 코드가 사용될 확율은 극히 적습니다. 아마 거의 사용되지 않을 겁니다. 굉장히 특이한 케이스의 다중 아이디로 시도할때 취약점이라 사실 그냥 둬도 될 만한 정도 입니다. 

 

따라서 아주 간단히 처리할 수 있는 리턴코드 1,2,3,4 를 유지해 줘서 마지막 최후 방어선인 코드가 동작할 기회를 주지 않는게 더 좋다는 생각을 하게 되었습니다. 

 

개발자 분들이야 당연히 이런 것을 고려해서 코드를 유지하고 코드의 순서도 부하의 순서에 맞춰 배치하시리라 생각되지만 야매가 이런 것 까지 신경을 쓰지 않으면 똑같은 동작을 하는 자료라도 어느 것은 매번 무겁고 어느 것은 가벼운 그런 차이가 나는 자료가 될 수 도 있다는 생각을 하게 되었네요.

 

오늘도 지루하고 재미없는 글 작성하고 갑니다.

 

웹지기

profile
10년을 다루다 보니 이제 간단한 것도 만들고 커뮤니티 운영에 관한 다양한 노하우가 있습니다. 어려운 점이나 가지신 생각을 함께 소통해 보아요.
https://rxtip.kr/ 라이믹스 꿀팁
  • ?

    15f9931afa712cdc8.png

     

    별것도 아닌것에 연산하지 않는게 좋을지도 모릅니다.

  • ? profile
    저는 초보,고수 그룹 어디에도 낄 수 없는 그냥 까막눈 입니다 ㅋ

    연산이야기 하셔서 엇그제 생긴 의문이 생각나네요. 제가 광고를 문서번호 짝,홀수에 따라 배분해서 다르게 노출하려고 검색해 보니 나머지를 구하는 연산을 사용하는게 검색에 대부분 이더라구요.

    연산없이 그냥 짝,홀을 확인해 주지 않는걸까? php가 설마 그럴까? 라는 생각을 하고 있답니다 ㅋㅋㅋ
  • profile ?
    웹지기님이 했던말중에 가장 인정못하는게 "까막눈" 인것 같습니다.

    홀수 짝수는 단순한 연산만으로 구분가능해서 그런것일수도 있겠네요. 크게 고민해본적없는걸 고민하셨으니.. 이것도 발전이라면 발전이겠네요.

    전 당연한건 너무 당연하게 생각해서 이런점이 단점인가 싶기도 ㅋㅋ


    개발자라고 딱히 크게 뭔가 있거나 하지 않고, 본인이 필요하다 싶은걸 만드는게 개발자가 아닌가 싶네요.
  • ? profile

    네. 제가 개발자로 접근하지 않는 이유는 제가 필요한 것들을 공부하지 않고 남이 만들어 놓은 것의 코드를 보고 역으로 그 언어를 이해하는 빠른 방법만 찾고 있어서 입니다.
    왜냐면 저는 지금 개발자가 되기 보다는 운영자의 역할이 제 포지션에는 적합하거든요. 그런데 운영자이면서 발주 없이 스스로 뭔가 조금씩 고칠 수 있는 것을 고치려는 욕구도 있다보니 거꾸로 완성된 자료를 보고 그 자료에서 제가 추측한 결론으로 해당 언어나 코드를 이해하는 과정을 반복하고 있네요.

    뭐 앞으로 그럴 일은 없겠지만 제가 뭔가 개발을 하려고 한다면 그때는 아마 php,javascript 등은 학습을 하게 될 것 같습니다. 아직 한번도 그런 것을 1페이지도 본적이 없어요 ㅡㅡ; 그냥 검색으로 이런 기능은 php에서는 javascript 에서는 어떻게 사용하는지 알려주는 예제를 보는 정도 입니다.

  • ? profile
    원츄 ..)b
  • ?

    음.. 아마 리턴코드1,2,3,4를 돌려보내는 코드는 코어 안에 있는걸 복사해서 사용하신 것 같은데..
    그럴 경우 심각한 의존성이 발생하게 되죠...
    코어 안의 코드는 언제든 변경될 수 있지만 님의 코드는 거기에 맞춰 변화하는데 시간이 걸립니다.
    리턴코드1,2,3,4를 돌려보내는 코드는 완전히 삭제하고 코어 결과에 맞춰 동작시키는 수정안이 가장 바람직합니다. 약간 느려지겠지만 그 약간이 대단한게 아니라면 말이죠...
    해당 코드는 [댓글이 추천을 받을때만] [1회] 실행되는 코드인데.. 솔직히 말씀드려서 항상 실행되는 코드, 루프안에 있는 코드가 아니라면 이런 수준의 최적화로 빨라지는건 거의 없습니다. 추천을 클릭했을때에 한해서 0.1ms 정도 더 빨라진다는 결과보단 장기적으로 버그 발생할 가능성이 적은 코드가 더 나은 선택일겁니다

  • ? profile

    리턴 1,2,3,4 는 향후 바뀔 여지가 없는 꼼수 추천을 막는 것이라 코어의 변경과는 관계가 없습니다. 코어결과에 절대적으로 부합하는건 제가 마지막에 추가한 코드입니다. 리턴 1,2,3,4 가 뚫리던 혹은 그외 제가 생각지 못한 다른 것이 있던 상관은 없습니다. 저는 스티커 발급을 중지 한 것이고 추천을 허용 차단하는건 코어에서 하는 거니까요.

    리턴 1,2,3,4 로 리턴하게 되면 최종적으로 추천이 실제 이루어지지 않은 경우까지 확인과정을 하지 않게 되니 남겨 두게 된 것입니다.

    애드온의 특성 때문에 발생되는 것 들이 있는 것이고 제가 하고 싶었던 이야기 중 하나를 간략히 이야기 한다면 완벽한 확인 과정 마지막 까지 가기 전에 위에 검증 코드를 굳이 없앨 필요가 없다는 것이고 최악의 경우는 마지막 추가한 검증 단계에서 실제 코어의 결과에 부합한다는 것 입니다.

     

    라이믹스의 경우는 애드온에서도 트리거 사용이 가능하다는군요.

  • ?
    포인트를 바로 지급하는 것과 포인트 교환이 가능한 스티커를 부여하는 것에 뚜렷한 회원 반응이 있는지 궁금합니다. ^^
  • ? profile

    포인트로 지급 대신 스티커로 지급하면 해당 스티커로 스티커환전소에서 게임으로 포인트로 환전이 가능합니다.

    원래는 스티커모듈은 스티커를 노가다로 클릭해서 획득하여 환전소에서 포인트로 환전하는 개념이었는데 제가 사이트에 이로운 활동에 스티커를 지급하는 것을 몇가지 구현한 것입니다.

    환전소 기능도 초기에는 없고 나중에 추가된 기능인데 사실 환전소 기능 구현 안되었으면 스티커도 별 도움이 안될 뻔했죠.


    포인트 지급은 어느 정도 한계점에 도달해서 스티커 모듈을 이용합니다.

    가입인사 댓글 작성시, 묻고답하기 댓글 추천 받을 시 스티커를 받게 됩니다.

    포인트로 받는 것 보다 재미요소가 추가되고(게임장 칩 개념이 됩니다.) 보너스를 받는 개념이라 반응이 더 좋을 수 밖에 없습니다.

    이벤트 스티커모듈은 유료판매 모듈인데 지금은 판매중이 아닐 것 같네요..

  • profile ?
    아 저희도 뱅크-라는 환전소를 가지고 있어서 획득한 포인트를 실제로 운영하는 쇼핑몰의 포인트로 등가교환 해드리고 있거든요. 재밌는 아이디어군요. 감사합니다. ^^
  • ? profile

    저희는 환전 개념이긴 하지만 게임을 통해 환전을 하기 때문에 조금 차별화된 보너스 입니다. 포인트를 더 얻는 것 과는 조금은 다른 알파가 있습니다.

     

     

    Screenshot_20190525-160824.png

     

    스티커가 있어야 스티커로 배팅 후 포인트를 더 얻는 환전게임을 할 수 있으니 지급 받았을때 만족도가 조금 더 상승하죠.