지누랑! (gnurang)
카카오톡 기반의 경상국립대학교의 캐릭터 "지누"를 활용한 챗봇입니다!
공지사항 및 모든 캠퍼스의 식당과 기숙사의 학식 정보를 전달합니다.
지누랑! 채팅하러 가기
지누랑! 소스코드 보러 가기
✨ 이 프로젝트는?
지누랑!은 카카오 AI 설계 플랫폼인

프로젝트를 진행하며... 🤔
좋았던 점 😉
대학교에 올라와서의 첫 개인 프로젝트 진행이었습니다. 나름 대학에서 여러 프로젝트를 진행해보고자 했지만 바쁘기도 하고 기회가 없어 아쉬웠었는데 구석방 소프트웨어 전시회 덕분에 프로젝트를 제대로 진행해볼 수 있었습니다.
프로젝트 마감 기간을 잘못 본 탓에 5일만에 바쁘게 진행된 초단기 프로젝트여서 엄청 힘들었지만서도 이렇게 빡빡한 마감시간덕에 5일이라는 시간 전부를 온전히 프로젝트에 집중해 볼 수 있었습니다.
아쉬웠던 점 😔
역시 촉박한 마감시간덕에 퀄리티가 낮았다는점이랄까요..? 다른 출품작에 비해 더 많은 기능이나 화려한 디자인 같은 요소를 추가할 시간이 없다 보니 기본에만 충실하게 지누랑! 이 탄생하였습니다.
마감시간을 맞추려 하다보니 코드가 너무 알아보기 어렵게 작성된 것 같아 너무 아쉽습니다... 😔
특히 HTML 파싱작업에 있어 다른 사람들이 알아보기 너무 힘들것 같다는 생각이 들었습니다.
좀 더 깔끔한 코드를 짜도록 생각하며 코드를 작성해야 할 것 같습니다.
어려웠던 점 🤯
챗봇 개발에 있어 여러 개념이나 용어(인텐트, 엔티티 등)들이 초반에 어렵게 다가왔었습니다. 특히 스킬을 사용해서 JSON을 주고 받는것을 어떻게 만들어야 할지 정말 난감했었습니다. 보통 이런 RESTful API 서버는 자바스크립트 기반으로 이루어진 것들이 많다 보니 이걸 파이썬으로도 구현할 수 있을지 미지수였습니다. Azure App Service와 Flask 프레임워크 덕분에 쉽게 RESTful API를 제공하는 지누랑! 서버를 만들게 되었습니다.
가장 어려웠던 부분은 학교 공지사항을 크롤링 해올 때였는데요. 학교 공지사항 목록이 나열된 페이지를 크롤링 해 공지사항 제목을 제공하는 것은 식단을 제공하는 것과 같이 구현하면 되었지만. 공지사항 글마다 미리보기를 제공하려다 보니 각각의 글을 들어가 내용중 일부를 가져와야 했습니다. 지누랑!은 기관, 장학, 학사 3개의 카테고리를 제공하는데 카테고리마다 글을 5개씩 제공한다 하더라도 총 18번의 웹 접속이 필요했습니다.
카카오 i 오픈빌더가 제공하는 스킬 기능은 5초 이내에 응답이 없으면 오류로 판단하는데, 공지사항에 미리보기까지 제공하다 보니 크롤링에 5초가 넘어가는 상황이 발생했습니다.
코드를 어떻게든 최적화해보고자 여러 방법을 찾아보던 중 파이썬이 단일 프로세스로 모든 것을 처리하다 보니 늦어지는게 아닌가 싶어 크롤링을 멀티 프로세싱으로 처리하도록 다시 코드를 구현했었습니다. 멀티 프로세싱은 눈에 띄는 퍼포먼스 향상을 가져왔지만 실제 서버에 배포했을 때는 예상치 못한 문제가 생겼습니다. 멀티 프로세싱으로 처리하기 위해 카테고리별로 프로세스를 만들어 결과를 합치도록 만들었는데, 바로 여기서 작업을 수행할 프로세스를 만드는 데 3-4초 가량이 소비되어 이후의 작업이 아무리 빨라도 결국 5초 이내에는 결과를 전달하지 못하여 오류가 발생했습니다.
이전 코드에서는 카테고리를 줄이거나 글 개수를 줄이면 응답을 받을 수 있었지만 멀티 프로세싱은 어떻게 해도 프로세스를 생성하는 과정에서 많은 시간이 소요되어 오류가 계속 발생했습니다.
도저히 답이 안보여 이 기능을 포기할까 생각하며 유튜브나 보고 있었을 때, 망 사용료 관련 영상을 보다 우연히 캐시 서버에 관한 내용을 알게 되었습니다. 저는 캐시서버야 말로 진정한 답이라 생각했고, Flask에 캐시를 적용시켜 보았습니다.
그 결과는 아주 대성공이었습니다! 캐시가 존재하는 동안은 1초 이내에 답변이 돌아왔습니다. 아주 만족스러운 퍼포먼스를 보여줬지만 치명적인 단점이 하나 있었습니다. 바로, 캐시를 지우고 새로 저장할 때 다시 5초 이상이 걸린다는 점이었습니다. 이것을 해결하려면 캐시가 지워지기 전마다 계속 캐시를 저장시켜주어야 하는데, 어떻게 해야할지 잘 모르겠어서 서버의 uptime을 기록해주는 사이트에서 지누랑! 캐시를 저장하는 주소로 연결시켜 1시간마다 캐시를 업데이트 하도록 만들었습니다.
덕분에 지금은 아주 쾌적하게 작동중입니다.
🗓 개발일지 (개발 가이드)
[개발일지] 개인프로젝트 - 지누랑! (1일차) - 카카오톡 학식 챗봇 개발하기 (tistory.com)
작성중입니다..
지누랑 배너

ℹ️ 주석
- 코드 제출 후 몇몇 버그 픽스나 구현되지 못한 기능 구현에 시간을 추가로 썼습니다. [본문으로]
- RESTful API란? 클라이언트를 정형화된 플랫폼이 아닌. 즉, 모바일, PC, 애플리케이션 등 플랫폼에 제약을 두지 않는 것을 목표로 하는 웹 기반 API이다. HTTP 요청을 하면 JSON, XML 형식의 데이터가 전송된다. [본문으로]
- Azure App Service는 웹 애플리케이션, RESTful API 및 모바일 백 엔드를 호스트하는 HTTP 기반 서비스입니다. .NET, .NET Core, Java, Ruby, Node.js, PHP, Python등 원하는 언어로 개발할 수 있습니다. Windows 및 Linux 기반 환경에서 애플리케이션을 쉽게 작성하고 확장할 수 있습니다. [본문으로]