실시간 문자 알림 설정_쿨에스엠에스

김수현·2025년 10월 15일

Suhyeon's 개발일지

목록 보기
28/34
post-thumbnail

🔔 문자 알림 기능 구현

우리 시스템에서는 메일뿐만 아니라 문자 알림도 실시간으로 발송될 수 있도록 구현해야 했다.

문자 전송 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);
                        }
                    }

위와 같이 구현하면 실제 문자 알림이 정상적으로 발송되는 것을 확인할 수 있었다.

0개의 댓글