기존에 apiService.js 파일과 guildApiService.js 파일이 따로 있었는데

apiService.js에는 getApiResponse라는 api 조회 요청을 보내는 모듈을 만들어 뒀고,

guidlApiService.js에는 getApiResponse를 사용해서

getOguildId : 길드명, 월드명으로 oguild_id 조회

getGuildBasicData : oguild_id로 길드 정보 조회

getCharacterOcid : 캐릭터명으로 ocid 조회

getCharacterBasicData : ocid로 캐릭터 정보 조회

를 하는 모듈을 만들어 놨었다.

개발을 하면서 보니 불필요하게 코드가 다른 파일에 나누어져 있는 것 같아서 apiService라는 하나의 파일 안에 병합해서 작성해주었다.

// apiService.js

const configPath = path.join(__dirname, '../config/config.json');
const configData = fs.readFileSync(configPath, 'utf-8');
const config = JSON.parse(configData);
const API_KEY = config.apiKey;

const API_BASE_URL = "<https://open.api.nexon.com/maplestory/v1>";
const UNION_RANKING_ENDPOINT = "/ranking/union";

const currentDate = new Date();
currentDate.setDate(currentDate.getDate() - 1);
const formattedDate = currentDate.toISOString().split('T')[0];

async function getApiResponse(url) {
    try {
        const response = await axios.get(url, { headers: { "x-nxopen-api-key": API_KEY } });
	@@ -17,6 +23,33 @@ async function getApiResponse(url) {
    }
}

// 길드명, 월드명으로 oguild_id 조회
async function getOguildId(guild, worldName) {
    const guildIdUrl = `${API_BASE_URL}/guild/id?guild_name=${encodeURIComponent(guild)}&world_name=${encodeURIComponent(worldName)}`;
    return await getApiResponse(guildIdUrl);
}

// oguild_id로 길드 정보 조회
async function getGuildBasicData(oguildId) {
    const guildDataUrl = `${API_BASE_URL}/guild/basic?oguild_id=${oguildId}&date=${formattedDate}`;
    return await getApiResponse(guildDataUrl);
}

// 캐릭터명으로 ocid 조회
async function getCharacterOcid(characterName) {
    const characterOcidUrl = `${API_BASE_URL}/id?character_name=${encodeURIComponent(characterName)}`;
    return await getApiResponse(characterOcidUrl);
}

// ocid로 캐릭터 정보 조회
async function getCharacterBasicData(ocid) {
    const characterDataUrl = `${API_BASE_URL}/character/basic?ocid=${encodeURIComponent(ocid)}&date=${formattedDate}`;
    return await getApiResponse(characterDataUrl);
}

module.exports = {
    getOguildId,
    getGuildBasicData,
    getCharacterOcid,
    getCharacterBasicData,
};

어떤게 정답이라고 지금 내 수준에서 말하기는 어렵지만 비슷한 기능을 하는 모듈들을 한 파일에 묶어 놓으니 더 보기 편한 것 같다.