이 모듈을 만들고 싶은 생각을 한 건 제법 오래 되었습니다. 수년 이라고 해야겠네요.
그런데 갑자기 만들기 시작한 이유는 대략 이렇습니다.
내가 유용할 것 같다고 생각한 것이 다른 제작자나 사용자들에게는 그렇지 않을 수 있습니다. 이 모듈에 대한 아이디어를 제안한 적이 있지만 누구도 제작하려는 분은 없었고 그냥 그렇게 제 머리 속 아이디어로 계속 남아 있었습니다.
혹시 이 모듈을 다운 받거나 혹은 구매하거나 하고자 관심을 가지신 분이라면 이 글은 성격에 맞지 않으니 그냥 뒤로가기를 하셔도 좋습니다.
그동안 저는 여기 라이믹스 꿀팁에서도 계속 글도 남기고 제가 라이믹스 사이트 운영자로서 개발자로 진화해야 한다는 생각을 가지고 있습니다. 바로 내가 가지고 싶은 것을 하나라도 더 스스로 만들어 가질 수 있기 때문인데요. 그냥 이루어지지는 않죠. 내가 모르는게 무언지 알아야 그것을 알아내서 만들 수 있을 것입니다.
그동안 애드온과 위젯 등을 만들어 왔습니다.
그러면서 php를 역으로 배우게 되고 db를 다루는 것도 조금은 배웠습니다. 그런데 재미있는 것은 저는 코딩을 공부한 적이 없기에 라이믹스와 XE로 제가 뭔가 만들고 시도하는 것이 실제 php와 mysql 등을 배우고 있다는 것 조차 인식하지 못하고 해 나가가고 있었습니다.
물론 지금도 db를 다루는 것은 온전히 라이믹스의 xml의 기초적인 방법으로 접근할 뿐 실제 mysql 문법은 배우지도 않았습니다.
이런 와중에 모듈제작에 대한 막연한 생각만 가지고 있다가 이제 로또모듈을 한번 실패하더라도 제작해 보고 싶은 생각이 들었습니다.
복잡하게 타모듈과 연동을 위해 트리거 사용을 할 필요가 없다.
외부 api의 curl 로 데이터를 가지고 오는 것은 조금 해보았다.
뭐 실패하더라도 그냥 화면에 뽑힌 로또게임만 출력해 주는 정도까지라도 진행해보자.
위와 같은 마음으로 시작하게 되었습니다.
결론부터 말씀 드리면 대략 왠만한 기능을 구현해서 완성을 했습니다.
회원의 경우 매 회차에 5게임을 뽑을 수 있고 뽑힌 번호들은 회원이 가져야 하기에 db에 저장을 하도록 했습니다.
필요한 db 테이블의 구상
1.회원들의 게임을 저장할 테이블
2.회차별 당첨정보를 저장할 테이블
간단한 테이블 2개면 될 것 같아 이렇게 계획을 하고 모듈을 설치할때 스키마에 등록하면 되는 것은 간단하게 알 수 있어 그렇게 모듈을 만들었습니다.
로또번호 6개를 뽑는 코드야 구글링하면 php 코드로 쉽게 찾을 수 있으니 6개의 번호를 5게임 반복해서 뽑고 이걸 저장하는데 까지 어렵지 않게 코드를 짤 수 있었습니다.
지금 위에 스크린샷 2개를 보여준 화면을 띄워줘야 합니다. 스킨에 작성한 코드들이 화면에 보여야 하는 것이죠.
처음에는 mid가 없는 모듈로 생각하고 만들다가 추후에 mid를 추가하게 되는 우여곡절도 있었습니다.
다른 모듈을 코드를 뜯어보고 모듈의 설정과 module_info를 분리해서 저장하고 레이아웃,스킨의 정보는 module_info로 저장하게 해야 한다는 판단을 하고 모듈설정에 있던 위 디자인 설정을 module_info 쪽으로 저장되게 번경하는데 성공했습니다.
대략 이렇게 하고나니 회원이 나의 로또 모듈 페이지를 mid로 접속해서 로또 게임에 참여를 할 수있게 완성이 되었습니다.
현재 이 모듈은 mylotto 라는 mid를 고정으로 가지게 만들었습니다.
https://rxtip.kr/mylotto
이렇게 까지 완성을 하고 나니 부가기능들을 추가하고 싶고 또 그러려면 모듈설정 부분을 따로 저장을 해야 해서 모듈 설정을 분리해서 저장하는 방법으로 모듈 설정까지 추가를 했습니다.
사실 처음에 mid 없이 시도를 했기 때문에 모듈 설정은 이미 한번 작업을 했었습니다. 거기에 레이아웃,스킨 정보가 저장이 되었던 것인데 이제 모듈의 기능을 담는 것으로 새롭게 작업을 한 것이죠.
처음에는 포인트 기능만 연동을 하면 좋겠다라는 생각으로 작업을 했는데 이후 당첨사실을 알림센터로 알림을 발생하게 하는 기능도 추가하고 여러가지 옵션으로 기능들을 많이 추가하게 되었습니다.
알림센터 커스텀 알림 등록하는 과정에서 모듈설정에서 이 알림센터 커스텀 알림용 설정이 모듈 기능 설정시 누락되어 버리는 것을 발견하고 이 부분에 대한 학습도 하게 되었습니다.
포인트 연동을 하면 게임 참여시 포인트가 차감되고 당첨이 되면 포인트를 지급하게 할 수 있어서 포인트를 활용한 게임으로 활용할 수 있는 조금더 쓰임새가 있는 모듈이 되었습니다.
회차별로 추첨이 실시되면 당첨정보를 관리자가 db에 입력하도록 구현을 했는데 회원들의 게임들이 당첨된 것이 있는지 확인하려면 사이트가 추첨번호를 가지고 있어야 하니까요.
그런데 로또 사이트 등에서 당첨번호를 복사해서 붙여넣기해서 db에 넣을수 있지만 모듈이 완성되고 할일이 많이 줄자 로또 api를 통해 추첨정보를 바로 가지고 와서 이 화면에서 바로 사이트 db에 등록할 수 있도록 기능을 추가했습니다. 제가 사용하려고 만든 것이다 보니 제가 좀 편해지려니 만들게 되더군요.
회원들의 로또 게임 리스트가 저장된 것을 출력해 주는 부분입니다.
게임이 만들어질때 추첨된 번호를 저장하고 그리고 당첨결과 자리에는 값이 없는 상태로 생성이 되어 토요일 저녁 로또 추첨이 되고 나면 이전에 보여드렸던 화면에서 관리자가 추첨결과를 db에 입력을 한 다음 이 화면에서 당첨확인을 누르면 리스트에 있는 게임들의 당첨 여부를 확정하여 db에 당첨정보를 update 해주게 됩니다.
복잡한 연산은 아니라서 크게 부하가 걸리지는 않지만 너무 많은 양을 한꺼번에 하는 것이 부담스러울 경우를 대비해서 1회에 진행할 게임수를 설정에서 설정할 수 있도록 하였습니다.
대기중인 모든 게임의 당첨을 확인하고 당첨결과를 db에 넣고 당첨이 되었다면 해당 회원에게 알림센터 알림을 보내는 작업까지 진행되게 코드를 작성했습니다.
이 모듈을 제작하면서 가장 큰 소득은 모듈에 대해서 막연하게 가지고 있던 낯선 어려움을 약간은 해소하고 아직도 깊이 배워야 할 것이 많이 있지만 단순한 골격과 각 파일들의 연관관계에 대해서 학습한 것이라고 생각이 드네요.
개인적으로는 늘 똑같은 이야기 반복하지만 사이트 운영자로서 뭔가 좀더 가지고 싶고 구현하고 싶다면 다른 사람에게 단순히 물어서 받은 답변을 이해하지 못하고 그대로 붙여넣어 완성하고 만족하는게 아닌 스스로 뭔가를 만들고 코드를 짜보고 해보는 것을 권해드립니다. 저도 그러려고 노력중입니다.
저도 개발자분들께 많은 질문을 하고 답변도 많이 받아서 도움도 받고 뭔가를 구현하고 하지만 대부분 완성된 코드를 주시는게 아니라 방향을 제시해 주시거나 하시는 것을 많이 보았고 그렇게 받은 도움들이 저에게는 더 큰 학습이 되는 것을 느끼고 있습니다.
개발자가 아닌 코알못이 만들어서 아마도 허접한 코드가 가득할 것이고 오류도 생길 수 있고 그리고 디자인도 출력이 된다는 것에 의미가 있을 정도의 결과물이라 보잘것 없는 모듈이지만 저의 첫 모듈인 만큼 많은 애정을 가지게 될 모듈이 완성된 것 같습니다.
---------------------------
토요일 추첨시간 이후 시간이 없을 경우도 있을 것 같아 cron으로 당첨확인 및 포인트 지급 등을 할수 있도록 함수를 추가했습니다.
crontab으로 파일이 실행되면
로또 api에서 당첨번호를 가져오고 해당 정보를 db에 입력
저장된 당첨번호로 회원들의 게임들 당첨 확인 및 당첨에 따른 후속 처리 진행