현재 한국 시간을 가져오는 getCurrentKoreaTime()
메서드를 만들고
// apiService.js
const TimeService = require('./timeService.js');
function apiDate() {
// API 조회를 위한 시간 설정
const koreaTime = TimeService.getCurrentKoreaTime();
// 시간이 1시 이전인지 확인 (NEXON OPEN API 갱신이 1시에 됨)
// getHours() 할 때 한국 시간으로 가져오려고 하는지 +9시간을 한 결과가 나와서 10시로 설정
if (koreaTime.getHours() < 10) {
// 1시 이전이면 2일 전의 날짜로 설정
koreaTime.setDate(koreaTime.getDate() - 2);
} else {
// 1시 이후면 어제의 날짜로 설정
koreaTime.setDate(koreaTime.getDate() - 1);
}
const formattedDate = koreaTime.toISOString().split('T')[0];
return formattedDate;
}
const formattedDate = apiDate();
apiService에서 getCurrentKoreaTime()
메서드를 사용해서 apiDate()
를 만들었다.
원래는 if 절 안의 조건문을 koreaTime.getHours() < 1
로 작성했는데 제대로 동작하지 않아서 확인해보니 koreaTime이 오전 12시인데 koreaTime.getHours() 값이 9가 나왔다.
getHours 함수가 시간을 가져올 때 기존 시간을 UTC로 인식하고 한국 시간으로 가져오려고 하는 것 같아서 조건문을 koreaTime.getHours() < 10
로 수정하니 제대로 동작했다.
그리고 여기서 만든 formattedDate는 apiService의 api 조회 로직에서 사용했고,
guildPageService의 createOrUpdateGuildPage 메서드에서도 apiDate()
를 사용해서 시간 설정을 해준 뒤 DB의 last_updated 와 비교하니 정상적으로 동작했다!
// guildPageService.js
const APIService = require('./apiService.js');
async function createOrUpdateGuildPage(guildName, worldName) {
const apiDate = new Date(APIService.apiDate());
const guildExists = await GuildService.getGuild(guildName, worldName);
if (!guildExists) {
const guildMembers = await GuildService.createGuild(guildName, worldName);
for (const guildMember of guildMembers) {
await CharacterService.createCharacter(guildName, worldName, guildMember);
}
} else if (guildExists.last_updated < apiDate) {
const preGuildMembers = await CharacterService.getCharactersByGuild(guildName, worldName);
const preGuildMemberNames = preGuildMembers.map(member => member.name);
// ...
}
}