Extra Form
PHP PHP 7.0
CMS Rhymix

안녕하세요.

 

그동안 Xe 홈페이지를 운영하면서... 라이믹스로 업그레이드를 매번 생각하다. 

이번에 업데이트를 마쳤습니다. 

 

버전은 1.9.9.6 입니다. 

여기서 한가지 문제점이 생겨버렸는데요.

제가 운영하는 사이트가 동일 DB에 데이터베이스만 달리하여 라이믹스, 웹게임? 두가지가 있습니다. 

 

라이믹스 (이하 rm), 웹게임 (이하 Game) 두가지에서 포인트(rm), 게임 스코어(Game)이 연동 되게 만들어두었습니다. 

 

1. 포인트(Rm) -> 게임 스코어(Game)으로 동기화 [Rm.DB 테이블 xe_point] → [Game.DB 테이블 Game_Score]

- 위와 같이 데이터를 동기화 시키면 정상적으로 잘 됩니다. (UPDATE 이용)

 

 2. 게임 스코어(Game) -> 포인트(Rm)으로 동기화 [Game.DB 테이블 Game_Score] → [Rm.DB 테이블 xe_point]

- 위와 같이 동기화를 시키면 Rm.DB 테이블 xe_point가 적용되지 않습니다. (UPDATE 이용)

- 매번 같은 증상이 발생하는것이 아닌 10번중 1번꼴로 해당 증상이 발생합니다. 

- 서로 세션은 공유하지 않습니다. 

 

저희가 처음에는 php 문제인가 하여 여러가지 로그를 남기며 테스트를 해보았지만 

sql의 UPDATE는 정상적으로 들어간 뒤 추후에 다시 Rm쪽에서 이전 데이터로 휘귀 시키는듯 합니다. 

 

이게 저희쪽 호스팅 문제인건지, Rm 자체적으로 point 변수를 변경시키지 않았을때 검사하는 로직이 있는건지 잘모르겠네요. 

 

 

  • profile

    SQL로 DB를 직접 조작하지 말고 point 모듈의 getPoint, setPoint 함수를 사용하세요.

     

    포인트 불러오는 부분의 성능 개선을 위해 지난 4년간 캐시 방식 등 상당히 많은 변화가 있었기 때문에 (특히 point.controller.php는 처음부터 끝까지 모두 새로 작성한 것이나 다름없습니다) 코어에서 공식 지원하는 함수를 사용하지 않고 DB를 직접 조작하면 변경사항이 적용되지 않을 수도 있습니다.

  • profile ?

    안녕하세요.
    답변 정말 감사드립니다. 다행히 rm쪽 개선 사항과 관련된 문제였군요.

    서로 다른 데이터베이스인데 php에서 어떻게 세션을 얻는지 알 수 있을까요?

    혹시 어떤 파일을.. include 한다면 getpoint($member_srl) 같은 함수를 사용할 수 있을까요?? 

     

    member_srl만 있고 해당 함수를 로드할 수 있다면 따로 세션이 없어도 사용 가능할걸로 보이는데.. 맞을까 모르겠네요.

     

    너무 귀찮게 해드려 죄송합니다. 

  • ? profile

    세션은 필요없습니다. 단, 실행하는 계정이 같아야 캐시파일 퍼미션 등의 문제가 생기지 않습니다.

    // 라이믹스 로딩은 한 번만 하면 됨
    include '/라이믹스/설치경로/common/autoload.php';
    Context::init();


    // 포인트 가져오기
    $point = getModel('point')->getPoint($member_srl);

    // 포인트 업데이트하기
    getController('point')->setPoint($member_srl, $point);

  • profile ?

    감사합니다.
    확인 하였습니다.

    그런데 실행하는 계정이 같아야한다는게 어떤 뜻인가요?

    getPoint, setPoint 모두 정상적으로 작동합니다.
    하지만 문제점은 setPoint 작동 후 홈페이지 포인트 확인시 정상적으로 적용 되어있으나... 

    다시 한번 getPoint로 불러올시 setPoint값이 아닌 이전값을 불러오는 문제점이 있네요...
    ㅠㅠ 정말 쉽지만은 않네요...

  • ? profile
    캐쉬 때문에 그런것 같은데
    $point = getModel('point')->getPoint($member_srl, true);
    로 해보시죠.
  • ? profile
    게임 부분과 라이믹스가 동일한 FTP 계정 내에 설치되어 있어야 모든 것이 정상적으로 작동한다는 뜻입니다. setPoint 직후 getPoint가 정확하게 나오지 않는다면 문제가 있나 봅니다.
  • profile profile
    정상적인 사이트라면 캐시는 자동으로 갱신됩니다. 그 뒤에 true를 넣어줘야 한다는 것 자체가 뭔가 문제가 있다는 증거입니다. files/member_extra_info/point/... 폴더 내의 캐시파일을 업데이트할 권한이 없다거나...
  • profile ?
    와.. 와우!!!
  • profile ?
    계속 신경 써주셔서 감사합니다.

    사이트내 캐시 사용 안함으로 설정 했었습니다..

    일단 true 써주니 잘되고 사용함으로 해서도 사용 해보겠습니다.
  • ? profile
    설정과 관계없이 포인트 정보는 항상 캐시 처리됩니다. 어느 부분에서 오류가 있었는지 모르겠지만 아무튼 true로 설정해서 땜빵이 되었다니 다행이네요.
  • profile ?
    기진곤님 오토씽님 너무 감사합니다. ^^