처음에는 테스트도 안해보고 내 코드에 바로 적용했다가 자꾸 오류가 생겨서 예제 다운로드 받고 여러 번 테스트 해본 결과로 나온 코드를 기반으로 포스트를 작성해보려고 한다. 웃기지만 발신번호를 잘못 입력해서 애를 먹은..
알리고에 정보 등록하기
나는 알리고 API를 학교에서 지원해줬기 때문에 발신 번호 등록과 인증 과정은 잘 모른다..
아래 블로그를 참고하면 좋을 것 같다.
https://jungeunpyun.tistory.com/71
알리고를 통한 문자 보내기
서버에서 문자를 보내거나 카카오톡 알림을 보내기 위해선 이동 통신사와 연계되어 있는 '알리고'와 같은 공식 딜러사를 통해야 합니다. 이러한 딜러사는 알리고 외에도 다양하게 있지만 이번
jungeunpyun.tistory.com
예제 다운로드
https://smartsms.aligo.in/admin/api/example.html
알리고
알리고 - 국내 최저가 문자발송 알리고 문자, 단문8.4원 장문25원 그림60원 알리고 대량문자/단체문자/문자사이트/문자발송
smartsms.aligo.in:443
npm 설치
예제와는 조금 다르게 axios 를 사용했다.
npm i bodyParser
npm i axios
npm i qs
npm i dotenv // 환경변수 설정을 위한
내 코드
app.use(bodyParser.urlencoded({ extended: false }))
application/x-www-form-urlencoded 형식으로 보낸 body를 파싱해준다.
const body = {
key: process.env.ALIGO_API_KEY,
user_id: process.env.ALIGO_USER_ID,
/*** 필수값입니다 ***/
sender: process.env.SENDER, // (최대 16bytes)
receiver: process.env.RECEIVER, // 컴마()분기 입력으로 최대 1천명
msg: "테스트 문자", // (1~2,000Byte)
/*** 필수값입니다 ***/
msg_type: "SMS",
testmode_yn: "Y",
// title: 문자제목(LMS, MMS만 허용) // (1~44Byte)
// destination: %고객명% 치환용 입력
// rdate: 예약일(현재일이상) // YYYYMMDD
// rtime: 예약시간-현재시간기준 10분이후 // HHMM
// image: 첨부이미지 // JPEG, PNG, GIF
}
// req.body 요청값 예시입니다.
필수 값과 내가 원하는 값을 설정해준다. testmode_yn를 Y로 설정하면 테스트 모드로 전환되기 때문에 실제 문자가 전송되지 않는다는 것을 알아두자. 자세한 req.body 요청값은 공식 문서를 참고하자.
https://smartsms.aligo.in/smsapi.html
알리고
알리고 - 국내 최저가 문자발송 알리고 문자, 단문8.4원 장문25원 그림60원 알리고 대량문자/단체문자/문자사이트/문자발송
smartsms.aligo.in:443
try {
const response = await axios.post(
"https://apis.aligo.in/send/",
qs.stringify(body),
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
}
)
console.log("응답:", response.data)
res.json(response.data)
} catch (error) {
console.error("에러:", error.response?.data || error.message)
res.status(500).send(error.response?.data || error.message)
}
- 요청을 간편하고 직관적으로 보내기 위해 axios를 사용
- 공식 URL로 post 요청을 보냄
- body 값은 qs를 이용해 form-urlencoded 형식으로 인코딩
- 헤더에서 content-type 설정 (필수)
전체 코드
import express from "express"
import bodyParser from "body-parser"
import axios from "axios"
import qs from "qs"
import dotenv from "dotenv"
dotenv.config()
console.log(process.env.ALIGO_API_KEY)
console.log(process.env.SENDER)
const app = express()
app.use(bodyParser.urlencoded({ extended: false }))
// 해당 예제는 npm에서도 확인하실 수 있습니다
// npm i aligoapi
// https://www.npmjs.com/package/aligoapi
// 인증용 데이터는 모든 API 호출시 필수값입니다.
// test 모드를 사용하시려면 'Y'값으로 설정하세요
// form데이터를 포함한 request를 모두 보내시고 JSON data는 body pares를 사용하시기 바랍니다.
app.post("/send", async (req, res) => {
// 메시지 발송하기
const body = {
key: process.env.ALIGO_API_KEY,
user_id: process.env.ALIGO_USER_ID,
/*** 필수값입니다 ***/
sender: process.env.SENDER, // (최대 16bytes)
receiver: process.env.RECEIVER, // 컴마()분기 입력으로 최대 1천명
msg: "테스트 문자", // (1~2,000Byte)
/*** 필수값입니다 ***/
msg_type: "SMS",
testmode_yn: "Y",
// title: 문자제목(LMS, MMS만 허용) // (1~44Byte)
// destination: %고객명% 치환용 입력
// rdate: 예약일(현재일이상) // YYYYMMDD
// rtime: 예약시간-현재시간기준 10분이후 // HHMM
// image: 첨부이미지 // JPEG, PNG, GIF
}
// req.body 요청값 예시입니다.
try {
const response = await axios.post(
"https://apis.aligo.in/send/",
qs.stringify(body),
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
}
)
console.log("응답:", response.data)
res.json(response.data)
} catch (error) {
console.error("에러:", error.response?.data || error.message)
res.status(500).send(error.response?.data || error.message)
}
})
app.listen(3000, () => {
console.log("서버 실행 중: http://localhost:3000")
})
테스트 결과

테스트 모드라서 실제 문자가 전송되지는 않았지만 response가 잘 반환된 것을 볼 수 있다.

감사합니다 O_O
'Development > Back-end' 카테고리의 다른 글
| [Express] 좋아요 기능 구현하기 (0) | 2025.06.06 |
|---|---|
| [Express] 알리고 API를 사용한 로그인/회원가입 구현하기 (0) | 2025.06.02 |
| [Express] 게시글 관리 미들웨어 (express-validator) (0) | 2025.05.07 |
| [Express] 유저 인증 미들웨어 (0) | 2025.05.07 |
| [Back-end] JWT(JSON Web Token) (0) | 2025.03.14 |