흑우마스터의 마법의 공간

라이믹스 내 고객 포인트 조회 방법 (전 개발자야... 왜그랬냐..) 본문

프로그래밍

라이믹스 내 고객 포인트 조회 방법 (전 개발자야... 왜그랬냐..)

흑우마스터 2023. 10. 6. 10:13

라이믹스(XE의 다음 버전 같은 CMS) 라는 서비스가 있다.

회사 내에서 내가 입사 하기 전 빨리 상품을 만들고 싶어서 이 것을 쓴 것 같은데 너무 덕지덕지 난개발을 해놓기도 해놓고 커스텀을 많이 해놔서 찾아볼 수가 없는 구조였다.

 

무엇보다 관계형 디비에 관계를 다 끊어놓아져 있다는게 최대 단점인데 이게 라이믹스가 그런건지 개발자가 이렇게 해놓은건지 너무 짜증났던 상황이었는데 (사실 제일 심각한 건 디비랑 서버를 같이 묶어서 카페 24 단독 서버에 하나의 인스턴스로 박아놨다는 것이다) 외부에 별도로 서비스를 만드는 상황에 포인트를 아무리 데이터베이스에 뒤져봐도 이렇다할 데이터가 없었다.

 

point_logs 라는 쪽에 뭔가 있긴 했는데 이게 현재 사용자가 가지고 있는 포인트를 전부 보여주는 게 아니라 이벤트가 발생했을 때만 나오는 것이고 실제 포인트를 수동이나 별도로 주었다면 웹페이지에서 나오는 값과 로그는 다를 수 있는 것. member 테이블에도 값은 없었다..

 

보아하니 라이믹스는 포인트 모듈을 쓰던 해서 getPoint, setPoint로 주고 있었고 포인트를 초기화 하거나 값을 입력할 때 해당 메서드를 호출하면 어이 없게도 log에 제대로 쌓지도 않을 뿐더러 (전 개발자가 이리 해놓은 듯) 시스템 자체가 저 함수를 호출하면 로컬 파일에 캐시형태로 이것을 보관한다는 것이다;;

 

files/member_extra_info/point/사용자고유번호뒷부분세자리/사용자고유번호앞부분세자리/사용자고유번호.cache.txt

 

물론 이 구조대로라면 log에 제대로 안 쌓은 개발자 잘못이지만 라이믹스 자체가 캐시 방식이 너무 바뀌기도 했고 디비를 직접 조작해도 캐시를 플러싱이 되지 않아 포인트가 요상하게 나올 수 있는 구조여서 결국 파일을 직접 읽어야 했다.

 

하지만 난 닷넷을 오래한 개발자이고 프론트엔드 개발자도 아닌지라 PHP가 너무나도 취약했다. 하지만 어쩌겠나 해야지;; 별도의 위젯이나 이런게 필요한 게 아니라 외부 백오피스에서 사용자 데이터를 조회해야 될 때 사용자에 현재 포인트가 필요했던 상황일 뿐이라서 API을 개발하는 방식으로 풀어보기로 결정

 

$headers = getallheaders();
$headers = array_change_key_case($headers, CASE_LOWER);

$memberNumber = $headers['사용자고유번호'];

$firstThreeDigits = substr($memberNumber, 0, 3);
$lastThreeDigits = substr($memberNumber, -3);

$url = "files/member_extra_info/point/$lastThreeDigits/$firstThreeDigits/$memberNumber.cache.txt";

$pointsInfo = @file_get_contents($url);

if ($pointsInfo === FALSE) {
    header('HTTP/1.0 500 Internal Server Error');
    echo 'Error retrieving points information.';
} else {
    header('HTTP/1.0 200 OK');
    echo $pointsInfo;
}

 

이런식으로 해결했다. 헤더에 대한 처리가 더 있긴한데 그건 보안상 제외하고 (^^;;)

htaccess에 rewrite를 하지 않고 그냥 php 파일에 직접 붙어서 REST API 형태로 구현했고 같고 경로를 거진 비슷하게 잡아서 같은 권한 내에 있는 것으로 처리해주었더니 정상작동 확인

 

나도 군대에서 XE로 위병소 프로그램도 해주고 하긴 했지만.. 이거 2020년대에 이걸 스타트업 메인 서비스로 쓴 개발자나.. 그걸 승인해준 회사나.. 여길 들어와서 하고 있는 나도 참 .. ^^;

 

빨랑 신규 서비스를 만드는 걸로 해야겠다