당시에는 종량제 서버를 사용했는데. 그 인스턴스에 올라가 있는 MySQL 서버를 외부에서 접근할 수 있을 거라는 생각을 못하고 같은 인스턴스에 실행해야 할 파일을 한개 생성해서 올려두었다. 그리고 그 파일을 REST 방식으로 호출해서 돌릴 생각이었는데. 아무래도 우회로 처리하다 보니 호출 과정을 모니터링 할 수 있는 GUI가 도움이 될 거라고 생각하고 이걸 짰다.
모든 Internal Tool을 파이썬이랑 PyQT로 만들었기 때문에 아무 생각 없이 이렇게 짰는데. 실행 동시에 REST 호출을 하고 결과를 Text Browser에 출력하는 식이었다. 또한 Client 사이드의 보안을 고도화할 수 있는 방안이 무엇일까 고민하다가. IP 주소를 Key처럼 사용해보았다. 하지만 IP 주소는 바뀔 수가 있어서 나중에는 저렇게 주석처리 해놨다.

import socket
import requests
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class createData(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(100, 50, 1200, 600)
self.setWindowTitle("Run Web Resource")
# self.authenticateBox()
self.layout = QVBoxLayout(self)
self.setLayout(self.layout)
self.createConsole()
def createConsole(self):
self.textBrowser1 = QTextBrowser()
self.textBrowser1.setGeometry(QRect(10, 90, 331, 111))
self.gb1 = QGroupBox("Console")
self.button1 = QPushButton("Administer Tasks")
vbox = QVBoxLayout()
vbox.addWidget(self.gb1)
lbx = QBoxLayout(QBoxLayout.TopToBottom, parent=self)
self.gb1.setLayout(lbx)
lbx.addWidget(self.textBrowser1)
lbx.addWidget(self.button1)
self.setLayout(self.layout)
self.layout.addLayout(vbox)
vbox.addLayout(self.layout)
self.button1.clicked.connect(self.administerTasks)
def administerTasks(self):
self.textBrowser1.append("Administering tasks... \n")
result = requests.post(url="https://www.dongkye.tech/py-gui/administerSubscriptions.php")
if result.json()['result'] > 0:
self.textBrowser1.append("Failed counts: " + result.json()['result'])
else:
self.textBrowser1.append("Successful")
def authenticateBox(self):
data = {"ipAddress": socket.gethostbyname(socket.gethostname())}
result = requests.post(url="https://www.dongkye.tech/py-gui/authenticate.php", data=data)
if result.json()[0]['result'] == "success":
pass
else:
self.AuthenticationFailed()
# dlg = QMessageBox(self)
# dlg.setWindowTitle("인증중")
# dlg.resize(QSize(500,100))
# dlg.setText("로그인중입니다...")
# dlg.setIcon(QMessageBox.Information)
# dlg.setStandardButtons(QMessageBox.No)
# cancelButton = dlg.button(QMessageBox.No)
# cancelButton.setText('취소')
# dlg.exec()
def AuthenticationFailed(self):
dlg = QMessageBox(self)
dlg.setWindowTitle("인증실패")
dlg.resize(QSize(500, 100))
dlg.setText("인증을 실패했습니다.")
dlg.addButton(QPushButton('확인'), QMessageBox.YesRole)
dlg.setIcon(QMessageBox.Information)
dlg.exec()
sys.exit()
if __name__ == "__main__":
app = QApplication(sys.argv)
GUI = createData()
GUI.show()
app.exec_()