1. spring boot rest api 를 이용한 문자 연동 프로젝트
- 문자연동
2. 필요한 기능
1. sms, lms, mms 문자 보내기
2. 대량의 문자 보낼 수 있도록 만들기
- 대량문자는 한번에 1000건 만 가능
- EXCEL 파일로 보낼 수도 있음(최대 10만 건 가능)
3. 이미지 파일 문자 보낼 수 있도록 만들기
4. 이미지 파일 10장 이하로 보낼수 있도록 만들기
5. spring cron 사용
DB
- msg_api
![업로드중..]()
- msg_file
![업로드중..]()
- msg_receive
![업로드중..]()
스케쥴러
- 상태값이 대기인 데이터 5초 간격으로 select 데이터가 있으면 문자 보낸 후 response_msg 보고 상태값 성공/실패 변경
- 수신자가 1000이상 일 때 1000으로 나눠서 문자 api 보낸 후 mr_flag 값 보낸 문자에서 변경
이슈 내용
- 외래키와 파티셔닝을 같이 하면 에러가 난다.
- SQL Error [1506][HY000]: (conn=3675) Foreign key clause is not yet supported in conjunction with partitioning
- 해결방법 : 없음 둘 중 하나를 포기해야한다.
- querydsl 셋팅 오류
- 버전에 맞춰서 셋팅하기
- 셋팅했는데 안되면 out, build 파일 삭제 후 gradle-> clean 후 바로 프로젝트 실행한다.
로직 구상
appServer : 사용 서버, restApiServer : 문자 서버
1. 로직
1. appServer - db 에 insert하기(msgApi, msgReceive, msgFile)
2. restApiServer - cron 사용해서 5초마다 msgApi select 하기 ( 조건 sendDate 이전, maFlag = 0 )
3. restApiServer - msgApi select 후에 msgApi 안에 msgReceive 1000 개 씩 나눈 후 okhttp 를 이용하여 kt communis 문자 데이터 보내기
4. restApiServer - msgApi 의 maFlag = -1/1, msgReceive 의 mrFlag = -1/1 결과 값 update 하기
- 문제점
- 물리적인 file 을 restApiServer 에 저장해야하는데 appServer에 디비 insert만 하는거라 restApiServer 에 물리적인 파일을 저장하기가 번거러움.
2. 로직
1. appServer - okHttp 를 이용하여 restApiServer에 msgApi, msgReceive, msgFile 데이터를 보낸다.
2. restApiServer - appServer 가 보낸 데이터를 받고 디비에 인설트 한다. 파일 데이터가 존재하면 물리적인 경로와 msgFile 디비에 저장한다.
3. restApiServer - cron 을 사용하여 5초 마다 msgApi select 하기 ( 조건 sendDate 이전, maFlag = 0 )
4. restApiServer - msgApi select 후에 msgApi 안에 msgReceive 1000 개 씩 나눈 후 okhttp 를 이용하여 kt communis 문자 데이터 보내기 (1000개로 나누는 이유는 수신자 1000명만 문자한번 보낼 때 데이터를 넣을 수 있음)
5. restApiServer - msgApi 의 maFlag = -1/1, msgReceive 의 mrFlag = -1/1 결과 값 update 하기
- 문제점
- 1 로직에 비해 코드가 길어지는 면이 있다.
- appServer 에도 okHttp 기능을 사용해야한다. -rest 통신을 두번 하는 꼴.. (속도가 저하 될수도 있다.)
- appServer 에 okHttp 를 사용해서 문자 결과를 받아야하는데 사실상 바로 받기는 불가능.
- 이유
- restApiServer cron 을 이용하여 문자가 보내지는 로직이라 appServer okHttp 사용하여 insert는 결과는 알수있지만 문자 결과를 바로 알 수 있는 방법은 없다.
- 해결방안
- msgApi pk 를 select 하여 보내졌는지 여부를 확인 할 수가 있다. (확인 안해도 되는 곳은 상관없음 - ex) cs 로그인 인증 문자)
3. 결론
file 처리를 생각하면 2번 로직처리가 맞는 것 같다.