오랜만에 서비스 개발 후기를 작성 해 봅니다.

이번 포스팅에는 코드가 없을지도?ㅎㅎ


제 주변에는 다양한 지인들이 있습니다 ㅎㅎ 그 중에서 학생들을 가르치고 상담을 해주는 친구도 있습니다.

그 친구가 학생들을 상담 해주면서 피부로 느끼고 고민했던 서비스를 하고자 같이 뭉쳤습니다.


그 친구가 현장에서 느꼈던 것중 가장 큰 것은 정보의 부익부 빈익빈(?) 이라고 합니다.


일 예로 어떤 한 학생은  "선생님이 수시 원서 넣을 학교 알아 오라고 하는데...어딜 가야 할지 모르겠어요 ㅠㅠ " 라고 하는 반면,

어떤 학 생은 "제가 대치동에 있는 OO학원에서 컨설팅을 받아 봤는데요 OO대학교에 넣으래요" 라고 상반된 답을 했다고 합니다.

대치동에 있는  OO학원등은 컨설팅 비가 수십만원 하기도 하고, 컨설팅을 받을 수 있는 학생 또한 한정 적이라고 하네요.


그래서 다년간 위와 같은 문제로 고민하던 이 친구가 수시로 넣을 수 있는 대학을 추천 해주는 알고리즘을 개발 하기에 이릅니다! ㅎㅎ

그렇게 해서 나온 서비스가 "닥터수시" 입니다.


우리는 현장의 소리를 들어 봤습니다.

현장의 소리를 정리 해 보니 다음 4가지가 보이더군요.


- 2018학년도는 대학 총 정원의 약 73%를 수시로 뽑는다고 하지만 일반학생 & 학부모가 느끼기에 수시에 대한 정보는 부족한 현실.

- 학교 선생님들은 수시와 관련해서 모든 학생들을 봐줄 수 없기 때문에 결국 학생 & 학부모가 직접 준비하는 경우가 대부분.

- 학원가에서 이루어지고 있는 수 십만원 짜리 수시 컨설팅이 있긴 하지만 비용 때문에 많은 학생 & 학부모들이 부담감을 느낌.

- 이들을 위해 내신 정보 입력과 함께 지원하고 싶은 지역 및 학과계열을 입력하면 지원(합격) 가능한 대학을 알려주는 서비스가 등장함.


그래서 우리는 다음과 같은 대 명제를 정의 하고 서비스를 기획 & 개발을 하였습니다.

대학입시 만큼은 비용 때문에 출발선이 다르면 안됩니다.


자 이제 우리가 만든 서비스를 소개 합니다!.

수시 컨설팅에서 비용이 비싼 이유를 보니, 1명의 선생님이 학생 1명의 대학을 추천 하기위해 일일이 학생기록부를 확인하고 검토해야 하고, 이를 검토하는 선생님은 전국의 모든 대학을 줄줄의 꾀고 있어야 하므로 인건비가 상당하게 들어가게 됩니다.

우리는 이 문제를 해결 하기 위해 전국의 대학을 데이터베이스화 시키는 작업을 했습니다.(정말 노가다 작업이었어요..ㅠㅠ)
데이터 베이스 화를 시키기 위해서는 모든 대학의 정보를 확인하고, 정규화시키는 작업이 필요 했습니다.
1차 정규화를 시키고 쭉 작성하다 보니 예외 사항이 생겨 다시 정규화..정규화..정규화...

그리고 학생부 기록과 2017학년도 2016학년도 등 과거에 합격한 학생의 성적등을 바탕으로 경향을 분석학고 모든 정보를 수치화 하였습니다.
이 부분도 다년간의 노화우가 없었으면 힘들었을 것입니다. 제 시대의 학생부와는 많이 다르더군요 ㅠㅠ
그리고 학적부를 보니...요즘 애들 참 살기 힘들겠다...싶고 이런 친구들을 더욱더 자신에게 맡는 대학을 보내줘야 한다는 사명감이 생기더군요!!

작성하기 어려운 자가진단은 가라!


두번째는 심플 입니다.
안그래도 복잡한 세상, 쉽게 쉽게 가자고요~ㅎㅎ 
여러 대학의 합격 경향을 분석해본 결과 가장 크게 좌우되는 몇가지가 있었습니다. 그 정보 만으로도 충분히 학생에게 맞는 대학을 찾을 수 있었습니다.
그래서 우린 4단계의 정보 입력만으로 대학과 과를 찾아 낼 수 있는 알고리즘을 구현 했습니다 ㅎㅎ



위에서 말한 친구의 인터뷰 내용을 한번 들어보실래요?ㅎㅎ





자가 진단화면을 보시면 정말 간단하게 되어 있습니다.
이해를 돕기위해 화면 켑처를 첨부 합니다

닥터수시 수시전형 선택




자신이 응시하고자 하는 수시 전형에 대한 선택하는 화면입니다.

종합전형만 할지, 교과전형만 할지 아니면 둘다 해볼지에 대한 선택을 할 수 있습니다.








선호지역 및 선호계열 선택




두번째 화면에서는 선호하는 지역과 선호하는 계열을 선택 할 수 있습니다.

자신의 가고자 하는 위치와 전공을 알아야 좀더 맞는 정보를 찾을 수 있으니까요~^^









학생부 정보 입력




그리고 다음은 학생부에 나와있는 정보를 하나씩 입력하면 됩니다.

지금 제가 입력한 데이터는 말도 안되는 데이터 인데 확인을 위해 순차적으로 1,2,3,4로 넣었어요 ㅎㅎ







학생부 성적입력





4번째 화면입니다.

여기도 학생부에 나와있는 내용만 입력 하시면 됩니다.







자가진단서 최종확인







다 입력을 하고 나면 이렇게 최종 확인을하고 틀린정보가 없는지 확인을 하게 됩니다.

만약 틀린 정보가 없을 경우 제출하기 버튼을 클릭!!









수시컨설팅 작성

처방전을 작성하고 있습니다~ㅎㅎ

우리의 알고리을 이용해 열심히 학생이 갈 수 있는 학교를 찾고 있습니다 








수시 컨설팅 결과



이와 같이 학생이 입력한 정보를 바탕으로 학교를 추천해 주었습니다.

좋은 학교가 많이 나왔네요 ㅎㅎ 성적이 워낙 좋다보니 ㅋㅋ



자 이제까지 저희가 개발한 "닥터수시"에 대해서 소개 해 드렸습니다.


11초가 아까운 수험기간, 학원가 고비용 수시 컨설팅이 부담되는 이들에게 닥터수시가 좋은 대안이 될 수 있습니다!


수험생 여러분!! 이제 거의 다 왔습니다! 조금만 힘내세요!








하... 이 문제로 PG사와도 열심히 연락하고 구글링을 아무리 해봐도 답이 안나왔는데... 꼼수로 그냥 해결했다.

정석대로 해결할라니 안되네...


스프링에서 PG사 연동을 할 경우 문자열 때문에 결재화면의 관리자 페이지와 디비에 저장 할때 문제가 발생한다.

이유는 내서버(Spring)은 UTF-8로 되어 있는데 이놈에 PG사들은 죄다 EUC-KR로 되어 있다.

그런데 PC결재등은 정보만 보내고 결과를 받아서 상관이 없는데. 스마트폰웹에서 결재를 진행하기 위해서는 자기네 URL로 넘겨서 다시 거기서 내 유알엘로 넘겨준다;;

그렇기 때문에 거기서 EUC-KR로 전송을 하기때문에 문제가 발생한다.


PG사측에 문의했더니 form을 전송할 때 CharSet="UTF-8"이라고 넘기면 그렇게 변환해서 넘겨준다는데..

안넘어와 ㅋㅋㅋ 폼을 확인해보니 걍 EUC-KR로 넘어오더만 ㅡ.ㅡ;


아무튼 그래서 답이 없어서 꼼수로 걍 해결함.


다음은 문제 해결을 위한 삽질의 순서


1. PC결재에는 내 컨트롤러 상에서 움직이므로 별 문제 없음.

2. 스마트폰 결재 시에 문제가 발생함

   문제원인: Spring 은 UTF-8로 되어 있고, PG사의 결제 서버는 EUC-KR로 되어 있고, PG사 서버를 타고 내 서버로 들어올때 EUC-KR로 들어오기 때문에 발생하는문제.

   문제점 해결 순서: 

      1) 이 문제에 대해 PG사에 문의 했더니 자기들은 UTF-8로 변환해서 준단다...하지만 받아보면 EUC-KR;

      2) 그래서 필터도 걸어보고 new String도 해보고 온갓것을 해봐도 안된다..

          2-1) 삽질1  삽질2

   문제 해결:

      1) 그냥 PG사로 보낼때 한글로 된 필드를 추가로 만들어서 그 필드를 encodeURI을 해서 보내버림 

      2) 받을때 필드를 변경해서 다시 넘김.



대략적인 코드


pay.html


밑에 GoodsName, BuyerName은 PG사에서 결재 창을 띄울 때 사용한다 

<form name="payForm" method="post" action="/payResult" accept-charset="EUC-KR">
<input type="hidden" name="GoodsName" th:value="${order.goodsName}">
<input type="hidden" name="GoodsName_E" th:value="${order.goodsName}">
<input type="hidden" name="BuyerName" th:value="${order.buyerName}">
<input type="hidden" name="BuyerName_E" th:value="${order.buyerName}">
<input type="hidden" name="ReturnURL" th:value="${returnUrl}"> <!-- Return URL -->
</form>
function nicepayStart() {
document.getElementById("vExp").value = getTomorrow();

//폰 여부 확인
var ua = String(navigator.userAgent).toLowerCase();
if (/android|iphone|ipad/.test(ua)) {
document.charset = 'euc-kr';
document.payForm.action = "https://web.nicepay.co.kr/smart/paySmart.jsp";
document.payForm.acceptCharset = "euc-kr";
document.payForm.BuyerName_E.value = encodeURI(document.payForm.BuyerName_E.value);
document.payForm.GoodsName_E.value = encodeURI(document.payForm.GoodsName_E.value);
document.payForm.submit();
} else {
goPay(document.payForm);
}

}


payResult controller


여기서 다시 변환 해 주는 이유는 PG사 관리자 페이지에서도 저 글들이 보여야 하므로 변환을 한다.

이렇게 변환을 안할 경우 ???????로 보임

NicePayWebConnector connector = new NicePayWebConnector();
/**
* Request Data 셋팅
*/
connector.setRequestData(request);
if (DeviceUtil.isMobile(request)) {
connector.addRequestData("BuyerName", URLDecoder.decode(request.getParameter("BuyerName_E"), "UTF-8"));
connector.addRequestData("GoodsName", URLDecoder.decode(request.getParameter("GoodsName_E"), "UTF-8"));
}



이런식으로 교체하면됨.




Cretant B양의 맛평가

전체 평점: 87점

맛: ★★★★

분위기: ★★★

가격:★★★★

재방문의사:★★★★

 

 

 

비고:

-밑반찬부터 맛 좋음(특히 동치미는 2번 시켜먹음, 동치미로 배채워서 나중에 백숙 조금 먹음)

-누룽지가 아주 많이 나옴, 한대접 나옴, 남친이랑 각각 한그릇씩 포장해서 다음날 저녁으로 먹었음

-청계사면 의왕시라 강북에 사는 나에겐 조금 멀었음

-등산갔다가 먹으면 딱 좋을듯

-최근 먹었던 일산 장수마을 /홍제동 산천마을 중 단연 1위 

 

Apple | iPhone 6s Plus | Normal program | Spot | 1/30sec | F/2.2 | 0.00 EV | 4.2mm | ISO-40 | Off Compulsory | 2016:04:13 19:31:09

 깍두기도 맛있었음

 

Apple | iPhone 6s Plus | Normal program | Spot | 1/30sec | F/2.2 | -0.00 EV | 4.2mm | ISO-32 | Off Compulsory | 2016:04:13 19:31:15

 두그릇 먹었다는 그 동치미 특히 배추가 맛남

 

Apple | iPhone 6s Plus | Normal program | Pattern | 1/15sec | F/2.2 | -0.00 EV | 4.2mm | ISO-32 | Off Compulsory | 2016:04:13 19:34:33

드디어 백숙 등장

보들보들 백숙 맛

 

 

Apple | iPhone 6s Plus | Normal program | Pattern | 1/15sec | F/2.2 | -0.00 EV | 4.2mm | ISO-25 | Off Compulsory | 2016:04:13 19:34:38

쫀득하니 맛난 누룽지

 

 

 

Apple | iPhone 6s Plus | Normal program | Spot | 1/30sec | F/2.2 | -0.00 EV | 4.2mm | ISO-25 | Off Compulsory | 2016:04:13 19:30:21

가격

 

 

 

 

Apple | iPhone 6s Plus | Normal program | Spot | 1/15sec | F/2.2 | 0.00 EV | 4.2mm | ISO-25 | Off Compulsory | 2016:04:13 19:30:30

인테리어

 

Apple | iPhone 6s Plus | Normal program | Spot | 1/15sec | F/2.2 | -0.00 EV | 4.2mm | ISO-25 | Off Compulsory | 2016:04:13 19:30:55

인테리어 2