
우리 시스템에서는 메일뿐만 아니라 문자 알림도 실시간으로 발송될 수 있도록 구현해야 했다.
문자 전송 API로는 쿨에스엠에스(CoolSMS) 를 선택했다.
테스트용 무료 기간이 있고, 공식 문서가 잘 정리되어 있어서 빠르게 적용할 수 있을 것 같았다.
먼저 회원가입을 진행하면 API Key와 API Secret Key를 발급받을 수 있다.
이후 API Key 관리 탭에서 허용 IP를 등록할 수 있다. 나는 여기서 우리 서버 IP를 추가해두었다.

결제 관련 부분은 별도로 진행하면 된다.
기본 설정이 완료되면, 이제 코드에서 실제 문자 전송 기능을 구현할 수 있다.
Node.js SDK를 활용하면 비교적 간단하게 구현할 수 있다.
const {SolapiMessageService} = require('solapi');
const messageService = new SolapiMessageService(
'API Key',
'API secret key',
);
const sendSMSAlert = async (phoneNumber, device, install, insertData, gasData, temperatureData) => {
if (!phoneNumber) {
console.log('SMS 번호가 설정되지 않았습니다.');
return;
}
try {
const result = await messageService.send({
to: phoneNumber,
from: '발송 번호',
text: `[산불 경고] ${insertData}\n` +
`${device.IMEI}\n` +
`${install.customerAddress}\n` +
`위도 : ${install.lat.toFixed(4)}, 경도 : ${install.lng.toFixed(4)}\n` +
`가스 : ${gasData}\n` +
`온도 : ${temperatureData}\n`
});
console.log('SMS 발송 완료:', result);
} catch (error) {
console.error('SMS 발송 실패:', error);
}
};
여러 사용자에게 동시에 발송해야 하므로,
사용자 정보에 저장된 최대 10개의 번호를 배열로 관리하도록 했다.
const phoneNumberList = [user.receivePhone, user.receivePhone2, user.receivePhone3, user.receivePhone4, user.receivePhone5, user.receivePhone6, user.receivePhone7, user.receivePhone8, user.receivePhone9, user.receivePhone10]
.filter(phoneNumber => !!phoneNumber); // null/undefined/빈 문자열 제거
for (const phoneNumber of phoneNumberList) {
try {
await sendSMSAlert(phoneNumber, device, install, insertData.Sensing_Time, insertData.F_Gas, insertData.F_Temp);
} catch (err) {
console.error(`SMS 전송 실패 (phoneNumber: ${phoneNumber}):`, err);
}
}
위와 같이 구현하면 실제 문자 알림이 정상적으로 발송되는 것을 확인할 수 있었다.