단순히 패치노트가 게시되었을 때 디스코드 메시지를 전달하면 되므로, 5분마다 홈페이지의 데이터를 비교하는 방식으로 설계했습니다. 작고 단순한 앱이지만 객체지향적인 설계를 통해 유지보수가 용이하도록 만들어 보고픈 목표가 있었습니다.
Controller
객체가 생성될 때 JDA
를 생성하며, Controller
의 run
메소드에는 5분마다 반복할 비즈니스 로직이 들어있습니다.
run
을 5분마다 실행하기 위해 ScheduledExecutorService
을 사용했습니다. 스레드가 더 필요한 게 아니므로 스레드풀은 1로 설정해줍니다.
package bnbnac.discordBot;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Main {
private ScheduledExecutorService executor;
private Controller controller;
public Main() {
executor = Executors.newScheduledThreadPool(1);
controller = new Controller();
}
public void start() {
executor.scheduleAtFixedRate(this::run, 0, 5, TimeUnit.MINUTES);
}
public void run() {
this.controller.run();
}
public static void main(String[] args) {
Main app = new Main();
app.start();
}
}