스프링 부트 프로젝트에서 SMS 인증 기능을 구현하기 위한 설정 및 코드 예시입니다.
1. SMS 설정 프로퍼티
sms.url=
sms.username=
sms.password=
실제 값은 Chuanglan 공식 사이트에서 확인 가능합니다.
2. 요청 데이터 모델
public class SmsRequest {
private String user;
private String pass;
private String content;
private String variables;
private String schedule;
private String reportFlag;
private String ext;
private String uid;
private String messageId;
private String failedCount;
private String successCount;
private String recipient;
// 기본 생성자
public SmsRequest() {}
// 필수 파라미터 생성자
public SmsRequest(String user, String pass, String content, String variables) {
this.user = user;
this.pass = pass;
this.content = content;
this.variables = variables;
}
// 게터/세터 생략
}
3. 응답 데이터 모델
public class SmsReply {
private String timestamp;
private String messageId;
private String error;
private String failed;
private String succeeded;
private String statusCode;
public String getTimestamp() { return timestamp; }
public void setTimestamp(String timestamp) { this.timestamp = timestamp; }
// 기타 게터/세터 생략
@Override
public String toString() {
return String.format("SmsReply[time=%s, id=%s, error=%s]",
timestamp, messageId, error);
}
}
4. SMS 발송 유틸리티
public class SmsSender {
public static String postRequest(String endpoint, String jsonData) {
try {
URL url = new URL(endpoint);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(15000);
conn.setReadTimeout(3000);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
try (OutputStream os = conn.getOutputStream()) {
os.write(jsonData.getBytes(StandardCharsets.UTF_8));
}
if (conn.getResponseCode() == 200) {
return new String(conn.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
5. 인증 코드 발송 구현
@Service
public class AuthService {
@Value("${sms.url}") private String apiUrl;
@Value("${sms.username}") private String apiUser;
@Value("${sms.password}") private String apiPass;
public void sendCode(String code, String phone) {
String message = "【테스트】인증번호: " + code;
SmsRequest request = new SmsRequest(apiUser, apiPass, message, null, "true", phone);
String jsonPayload = JSON.toJSONString(request);
String response = SmsSender.postRequest(apiUrl, jsonPayload);
SmsReply reply = JSON.parseObject(response, SmsReply.class);
if (!"0".equals(reply.getStatusCode())) {
log.error("SMS 전송 실패: {}", reply);
}
}
}
주의사항
- 【】안의 서명은 Chuanglan에서 승인된 것만 사용 가능
- API 응답 코드 '0'이 성공을 의미
- 공식 라이브 데모를 참고할 것
- 에러 처리 시 API 문서 확인 필수