고갱
[사업 이야기] NCP 연동, 그리고 PG사 계약 본문
좀 바쁜 나날이었다.
NCP에서 알림톡을 사용하고자 하는데, 알림톡 템플릿 검수가 생각보다 까다로운 상황이었다.

검수 상태가 현재는 뭐 시간이 오래 지났기 때문에 정상이지만, 저때까지만 해도 "반려"였다.

대강 저런 이유로 안된다는 것인데, 아무래도 알림톡 내용이 처음 보는 사람들한테는 난해한 내용이긴 했다.
(서비스 사용하는 사람은 한 눈에 알아보겠지만)
뭐 그래서 다시 자료 첨부해서 요청하니까 당일에 바로 승인되고 아주 잘 사용중이다.

그리고 이건 PG사 신청인데, 상당히 심사가 힘들었다.
NHN KCP, 카카오페이는 본 서비스가 부적합 판정이라고 하면서 거절했고,
네이버에서는 사업을 하고 실제로 운영되고 있는 상황에서 신청을 해야한다고 하면서 거절했다. (즉, 신규 사업자는 힘들다.)
그리고 다날은 결제가 아니라 핸드폰 인증 서비스를 신청한건데, 이건 그냥 내가 직접 구현했다. (이게 더 저렴하더라)
아무튼 그래서 KG이니시스를 이용해서 결제 플러그인을 넣었다.
하지만 이게 끝은 아니였다..

KG 이니시스에서도 결제 카드사마다 심사를 거쳐야 했는데
(심사받지 않으면 테스트 결제밖에 안된다.)
이 카드사 심사도 규정상 몇 개의 카드는 아예 도입이 안된다.
다행히 다른 카드들은 도입해서 지금은 아주 잘 사용 중이다.
(근데 베타 테스트 기간에는 간편결제가 제일 많았다..)

그리고 위 사진은 카드사 심사가 끝난 상황이지만, 그 전에 카드사 심사를 위해서 또 갈아엎으라고 하는 것들이 존재했다...
원래는 카카오톡으로만 로그인 할 수 있도록 했는데 일반 아이디와 패스워드도 지원하도록 해야했고, 여러가지 환불 규정과 서비스 제공 기간 등을 꼼꼼히 작성해야 했다.
그리고 테스트 결제창을 넣어서 어떻게 결제 로직이 발생하는지를 보여줘야 실결제가 가능한 카드사 계약이 진행되게 된다. (이것도 승인이 나야..)
그래도 이젠 다 끝난 과정이다...
🤔 그래서 어떤 사업인가?
그래서 어떤 사업이길래 거절당하는게 이렇게 많을까?
이게 사실 메인이다.
![]() |
![]() |
(임의로 조선대학교를 넣은 상황이므로 학교가 조선대학교라고 생각하지 말자.)
고등학생, 대학생들을 대상으로 이성 친구를 매칭해주는 플랫폼이다.
소개팅 어플이라고도 볼 수도 있겠지만, 이건 "학교" 사람끼리의 매칭이고 "연애" 가 주 목적이 아니라 친구 만들기가 초점이다.
그리고 소개팅 어플이랑 다르게 대화해보려면 돈 내! 이런 것도 아니고 그냥 각자의 연락처를 바로 넘겨주는 형식이다.

그래서 상대방을 뽑게되면 이렇게 상대방의 정보가 나타나게 된다.
(연락처는 상대방이 가입할 때 적은 "공개용 연락처" 가 공개된다. 이곳에 인스타나 카톡, 전화번호 아무거나 넣든 자유)
이후에 또 연락을 하던 안하던 그것도 자유다.
🤔 그렇다면 무료, 유료의 차이점?
무료는 상대방을 뽑거나 내 쪽지가 뽑히더라도 카카오톡 알림톡이 오지 않는다는 점이다.
![]() |
![]() |
이런 식으로 유료로 구매한 사람들에게는 내 쪽지가 뽑히거나 내가 누군가를 뽑은 경우에 알림톡을 받을 수 있지만,
무료로 응모한 경우에는 별도로 알림이 오지 않는다.
(그렇다고 해서 서비스 품질에 이상이 있거나 그러진 않는다.)
무료로 응모하는 경우에는 하루 1장,
유료로 응모하는 경우에는 하루에 최대 10장까지 응모가 가능하게 해두었다.
(다만 베타 테스트를 해보니 너무 중구난방으로 사용되서 서비스 운영 시에는 하루 최대 3장~5장으로 제한할 생각이다.)
❓ 이게 끝인가?
하나가 더 있다.
메인 기능은 아니긴 하지만, 그래도 나름 괜찮은 기능을 넣어봤다.
![]() |
![]() |
재미있는 기능이긴 하다만, 어디까지나 보조 컨셉이라서 사용량이 많지는 않을거라 생각한다.
😊 그래서 PG사 연동은 어떻게 했는데?
사실 PG사 연동이 다소 복잡했다.
왜냐하면 내가 서비스하는 건 Web에서 구동되는 상황인데, PG사 연동을 하려면 Javascript를 사용해야 하기 때문이다.
Flutter Web에서 Javascript를 사용하려면 패키지를 써서 JS를 Interop 해야하기 때문에 다소 복잡해진다.

이게 JS를 Interop하는 코드인데, 다소 복잡했다.
문서를 확인해도 다 Javascript랑 관련된 코드만 있을 뿐, Flutter를 위한 문서는 하나도 없었다.
그나마 하나 있긴 했는데 그거 마저도 Flutter Native랑 관련된 라이브러리 정도가 끝이여서 다 직접 구현해야했다.
근데 재밌는 건 또 이렇게 힘들게 구현해도 PC버전과 모바일 버전에서 돌려받는 return 값이 다르다는 점이다.
(두 가지 버전을 모두 대응해야 했다.)
PC 버전에서는 결제가 완료되면 결과를 돌려받지만, 모바일 버전에서는 결제가 완료되면 redirect 되는 방식으로 구현되어 있기 때문에 두 가지 모두 대응해주느라 꽤 고생했다.

결과를 돌려받던, redirect가 되던 어쨋든 영수증 ID는 전달받기 때문에 결과 페이지에서는 Go언어로 작성된 서버로 즉시 전송되고 서버에서 이를 검증하게 된다.
그리고 금액 위변조가 있을 수 있기 때문에 넘겨받은 요청 수량을 토대로 응모가 이루어지게 하는 것이 아니라,
실제 결제된 금액을 300원으로 나눈 값을 최종 개수로 결정하게끔 해두었다.

당연하게도 실제 응모되는 경우 해당 영수증 ID는 별도의 데이터베이스 테이블에 기록해주고, 사용된 영수증 ID 인지 검사해주는 로직도 잘 짜져있다.
(후술하겠지만, 단점이 거의 웬만한 데이터베이스 로직이 REST 방식으로 작성되있어서 오버헤드가 크다. 추후에 SQL 연결 방식으로 변경하던가 해야한다.)
😊 그러면 NCP 연동은?
이건 크게 어렵지 않다.
다만 번거로운 점이 많을 뿐이였다.

이렇게 REST 방식으로 하는게 끝이라 크게 설명할 점이 없다.
근데 하나 난감했던게 로컬에서 테스트 할 때에는 잘 발송되던게 서버에 올리고 테스트를 할 때에는 시간이 잘못 표기되는 현상이 있었다.
알고보니 로컬에서는 타임존이 Asia/Seoul 로 자동으로 설정되있었는데, 서버는 세계협정시로 타임존이 설정되있어서 나타난 현상이였다.. 진짜 이거 해결하려고 1시간은 쓴 것 같았다.
그래서 저기에 time.Now() 뒤에 In(loc) 을 통해서 타임존을 수동으로 지정해주는 코드가 있는 것이다.
👉 결론?
알림톡이든, PG사 연동이든 사업자 등록이 필요한 것들이라 경험해볼 기회가 없었는데 이번에 정말 많이 배운 것 같다.
이번 사업은 경험이라고 생각하는 만큼 수없이 부딪혀보고 내 실력을 키워나가는 기회, 발판으로 삼고 발전해나가야겠다.
'사업 이야기' 카테고리의 다른 글
| [사업 이야기] 관리자용 프로그램 개발 (0) | 2025.09.15 |
|---|---|
| [사업 이야기] UI/UX 리뉴얼, 그리고 버그 수정 (1) | 2025.09.06 |
| [사업 이야기] 창업, 그리고 시작 (2) | 2025.08.09 |





