alpha-kwhn / 2021-1-OSSP2-ttogttagis-3

동국대학교 입학도우미 챗봇 '아코봇' & 아코봇 관리 웹 페이지

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2021-1-OSSP2-ttogttagis-3

동국대 입학처 챗봇- 아코봇 & 관리자 페이지 프로젝트



팀 구성

  • 2019112059 이가영 (팀장)

  • 2017112071 김응관

  • 2018110504 박지원

  • 2013111989 이학진

  • 2017112095 최준호


I. 아코봇

목표

챗봇은 사용자와의 대화를 통해 입시정보 데이터를 제공한다. 챗봇이 이해하지 못하는 질문은 미해결 질문 게시판 링크를 제공하여 관리자가 직접 사용자에게 답변을 할 수 있도록 한다.


 개발 환경 : Springboot

 데이터베이스 : Springboot


1. 적용 방법 - 아코봇 설치, Dialogflow

 a. 현재 프로젝트의 GITHUB 레파지토리의 경로, Chatbot/Akobot2.zip 파일을 다운 받습니다.

 b. 아코봇을 적용하기 위해 https://dialogflow.cloud.google.com/ 에 접속하여 아코봇 서비스를 적용하고자 하는 구글 계정으로 로그인을 합니다.

 c. 아래의 그림과 지시사항을 따라 해당 Akobot2.zip 파일을 IMPORT 합니다.

    (1) Dialogflow 메인 화면에서 톱니바퀴를 눌러 환경 설정 화면에 진입합니다.

    (2) Export and Import 를 클릭합니다.

    (3) IMPORT FROM ZIP 파일을 클릭해 앞서 다운받은 Akobot2.zip 파일을 불러옵니다.

텍스트 정보제공


2. 적용 방법 - 아코봇 DB 구축 - Cloud firestore 적용하기

 a. 현재 프로젝트의 GITHUB 레파지토리의 경로, Database/dataBackup.json 파일을 다운 받습니다.

 b. 다음의 명령어로 firestore-import-export 프로그램을 설치합니다.

npm -install -g node-firestore-import-export

 c. import 방법

서비스 하고자 하는 구글 계정으로 https://firebase.google.com/?hl=ko에 접속하여

다음의 그림을 참고하여 serviceAccountKey.json을 본인의 로컬 컴퓨터에 설치합니다.

(1) 톱니바퀴 모양을 클릭 하여 프로젝트 설정으로 이동합니다

(2) 서비스 계정을 클릭합니다

(3) 새 비공개 키 설정을 클릭하여 serviceAccountKey.json 파일을 생성합니다.

그리고 다음의 명령어를, cmd 나 터미널 등에 입력합니다.

firestore-import --accountCredentials path/to/credentials/file.json --backupFile /backups/myDatabase.json

--accountCredentials : 해당 데이터베이스에 접근하는 credential 키입니다.

path/to/credentials/file.json : 로컬 컴퓨터에 있는 해당 credential 키의 경로를 뜻합니다.

--backupFile : 새로운 데이터베이스로 백업된 데이터베이스의 내용을 불러오기 위한 옵션입니다.

/backups/myDatabase.json : 로컬 컴퓨터에 저장된 백업된 데이터베이스의 경로 입니다.

 d. 참고

https://www.npmjs.com/package/node-firestore-import-export 방문합니다

3. 질문 흐름도 구상

텍스트 정보제공

4. 챗봇 완성 모습

  • 텍스트 정보 제공

텍스트 정보제공

  • 이미지 링크 제공

이미지 링크 제공

  • 미해결 질문 게시판 링크 제공

미해결 질문 게시판 링크


II. 관리자 페이지

목표

IT 산업에 종사하거나 코딩을 배우지 않은 대학교 입학처 관계자도 챗봇을 운영하면서 생기는 미해결 질문, 질문 답변 및 알림, 데이터베이스 수정 등의 업무를 할 수 있게 하는 웹 어플리케이션 개발


관리자 페이지 전체 구성도


 개발 언어 : JAVA & JAVA

 개발 환경 : Springboot & Springboot

 화면 처리 탬플릿 : Springboot

 데이터베이스 : Springboot & Springboot

 통합 개발 환경 : Springboot

 배포 가능한 운영체제 : Springboot & Springboot & Springboot


1. 오픈 소스 활용

빠르고 손쉬우며 안정성 있는 개발 오픈소스 사용

  Springboot & Springboot & Springboot & Springboot

보안성과 편리함을 챙기는 로그인 기능 구현을 위한 오픈소스 사용

  Springboot & Springboot


2. 해당 프로젝트 설치 방법

A. 통합개발환경, IntelliJ 에서 해당 프로젝트 설치하기

  1. 인텔리제이 IDE를 설치한다.

https://www.jetbrains.com/idea/download

  1. IntelliJ 설치후 IntelliJ 의 설정을 다음과 같이 설정한다.

    • (1) IntelliJ 상단 Setting> Build,Execution,Deployment > Gradle 에 접근하여,

    • (2) Build and run using , Run tests using 의 드롭박스의 값을 IntelliJ IDEA 로 바꿔주십시오. (기본 설정이 Gradle인데 느리다고 합니다.)

  1. IntelliJ 상단 메뉴에서
  • (1) File> Project Structure>Project에서
  • (2) Project SDK의 선택지 중 Java 11을 설정해주셔야 합니다. 별도의 다운이 필요 없는 Amazon Correto 11.0.10를 설정하거나 또는 자바11를 설치합니다.

  1. 깃허브에 있는 프로젝트를 로컬 레파지토리로 복사하기 위해,

    (1) 인텔리제이 상단 File 탭을 누른다.

    (2) Project from Version Contrl...를 누른다

​ (3) 저희 오픈소스 프로젝트 URL을 입력하고, CLONE 버튼을 누릅니다.


B. 로컬 PC에 해당 프로젝트 설치하기

  1. GIT BASH를 이용하여, git clone 명령어를 이용하여 로컬 PC에 해당 프로젝트를 복사합니다.
git clone https://github.com/CSID-DGU/2021-1-OSSP2-ttogttagis-3.git

C. 리눅스 기반 가상 머신에 해당 프로젝트 설치하기

  1. 자바와 GIT 을 설치합니다
sudo yum install java-11-openjdk-devel
sudo yum install git
  1. 해당 서버의 시간대를 한국으로 설정합니다.
sudo rm /etc/localtime
sudo ln –s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
  1. 프로젝트를 다운 받고, 배포 파일을 만들기 위한 디렉토리를 생성합니다.
mkdir ~/app && mkdir ~/app/akobot
  1. 해당 디렉토리로 이동하고, 깃허브의 프로젝트 레파지토리를 복사합니다.
cd ~/app/akobot 
git clone https://github.com/CSID-DGU/2021-1-OSSP2-ttogttagis-3.git

⚠️ (필수) 공통 프로젝트에 필수 적이지만, 보안상의 이유로 .gitignore에 등록된 부분이 있습니다.


🌟 프로젝트 경로의 `src` > `main` > `resources` 디렉토리에 추가할 파일 3가지 - LINUX기반 가상 머신에선, VIM 에디터등을 이용해 해당 경로에서 작성할 것
  1. application.properties
# 자동재시작 사용여부
spring.devtools.restart.enabled=true

#application-oauth.properties 로딩
spring.profiles.include=oauth

#로컬 작업에서 db 작업을 위해 h2
spring.h2.console.enabled=true

#카페 24 SMS 호스팅 키 였으나 더이상 사용하지 않음
#sms.key = 

# mail 발신 관련
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username= WRITE_YOUR_EMAIL_HERE
spring.mail.password= WRITE_YOUR_PASSWORD_HERE
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.auth=true

  • mail 발신을 담당할 관리자의 gmail 이메일과 패스워드를 WRITE_YOUR_EMAIL_HEREWRITE_YOUR_PASSWORD_HERE입력하십시오
  1. application-oauth.properties
spring.security.oauth2.client.registration.google.client-id= WRITE_YOUR_CLIENT_ID
spring.security.oauth2.client.registration.google.client-secret= WRITE_YOUR_CLIENT_SECRET
spring.security.oauth2.client.registration.google.scope=profile,email

Spring Security와 구글 로그인 API를 활용하여 로그인 처리를 담당하는 properties파일입니다.

  • 구글 클라우드 플랫폼 cloud.google.com/gcp 에 접속합니다.
  • 새 프로젝트를 생성 후, API 개요를 클릭합니다. 또는 기존의 프로젝트를 선택합니다.

  • 상단 사용자 인증 정보 만들기 선택 후 OAuth 클라이언트 ID 생성합니다.

  • 리디렉션을 승인할 URI을 작성 후, 클라이언트 ID, 비밀번호를 확인하고

    해당 properties 파일의 WRITE_YOUR_CLIENT_ID 와 WRITE_YOUR_CLIENT_SECRET에 대치합니다.

  1. serviceAccountKey.json
{
  "type": "service_account",
  "project_id": "akobotweb",
  "private_key_id": "COPY YOUR KEY"
  "private_key": "-----BEGIN PRIVATE KEY-----
  
  
  
  \n-----END PRIVATE KEY-----\n",
  "client_email": "COPY YOUR KEY",
  "client_id": "COPY YOUR KEY",
  "auth_uri": "COPY YOUR KEY",
  "token_uri": "COPY YOUR KEY",
  "auth_provider_x509_cert_url": "COPY YOUR KEY",
  "client_x509_cert_url": "COPY YOUR KEY"
}

챗봇과 챗봇 데이터베이스인 firebase 앱에 접근하는 키의 정보를 담고 있습니다.

  • https://console.firebase.google.com/ 로 이동하여 Firebase 프로젝트를 새로 생성하거나 만듭니다.

    (1) 톱니바퀴 모양을 클릭 하여 프로젝트 설정으로 이동합니다

    (2) 서비스 계정을 클릭합니다

    (3) 새 비공개 키 설정을 클릭하여 serviceAccountKey.json 파일을 생성하고 프로젝트의 해당 파일로 복사합니다.
    (⚠️ 앞서 아코봇 DB 구축을 하기 위해 만들었다면, 새로 안만들어도 됩니다. 최신의 해당 파일만 있으면 됩니다.)

3. 배포 환경 구축

- 직접 개인 PC에서 배포하는 경우

(1) 인텔리제이에서 bootJar을 실행시켜 배포 파일을 생성하고, Akobot-0.0.1-SNAPSHOT.jar이 생성됨을 확인한다.

(2) 그 다음 cmd를 열고 해당 배포 파일의 디렉토리로 이동한 후,

java –jar Akobot-0.0.1-SNAPSHOT.jar 명령어 또는 nohup java -jar Akobot-0.0.1-SNAPSHOT.jar 2>&1 & 명령어를 통해 해당 프로젝트를 내장 톰켓 서버를 통해 배포하게 된다.

- LINUX 기반의 가상 머신에서 배포하는 경우

해당 프로젝트는 아마존 웹 서비스 AWS의 클라우드 서버에 가상 머신이 구동될 수 있도록 하였습니다.

해당 서버 환경은 다음과 같습니다.

CentOS7 기반 리눅스 2 AMI2 인스턴스

범용 목적 및 프리 티어인 t2.micro

앞서 리눅스 기반 환경에서 프로젝트 설치하기 를 참고합니다.

  1. 자바와 GIT 을 설치합니다
sudo yum install java-11-openjdk-devel
sudo yum install git
  1. 해당 서버의 시간대를 한국으로 설정합니다.
sudo rm /etc/localtime
sudo ln –s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
  1. 프로젝트를 다운 받고, 배포 파일을 만들기 위한 디렉토리를 생성합니다.
mkdir ~/app && mkdir ~/app/akobot
  1. 해당 디렉토리로 이동하고, 깃허브의 프로젝트 레파지토리를 복사합니다.
cd ~/app/akobot 
git clone https://github.com/CSID-DGU/2021-1-OSSP2-ttogttagis-3.git
  1. .gitignore 때문에 제외된 properties 파일을 vim 에디터를 이용하여 해당 경로에 맞게 작성한다.
vim ~/src/main/resources/application.properties
vim ~/src/main/resources/application-oauth.properties
vim ~/src/main/resources/serviceAccountKey.json

6-1. deploy.sh 파일 작성하여 자동화 배포 설정을 한다.

그 이후 ./deploy.sh를 터미널에 입력하여 실행시킨다.

#!/bin/bash
REPOSITORY=/home/ec2-user/app/akobot
PROJECT_NAME=2021-1-OSSP2-ttogttagis-3

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git Pull"

git pull

echo "> STARTING BUILD PROJECT"

./gradlew build

echo "> step1 move dir"

cd $REPOSITORY

echo "> COPYING BUILD FILES"

cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/

echo "> Indentifying current PID, which is working on"

CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "CURRENT PID : $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
  echo "> there's no working pid in current status, so don't terminate"
else
  echo "> kill -15 $CURRENT_PID"
  kill -15 $CURRENT_PID
  sleep 5
fi
echo "> DEPLOY NEW APPLICATION "
JAR_NAME=$(ls -tr $REPOSITORY/ | grep *.jar | tail -n 1)
echo "> JAR NAME : $JAR_NAME"
nohup java -jar $REPOSITROY/$JAR_NAME 2>&1 &

6-2. 또는 ./gradlew build 명령어로 AkobotWeb-0.0.1-SNAPSHOT.jar를 빌드하고 직접 java 명령어 nohup명령어로 실행시켜 호스팅한다.


### 4. 관리자 페이지 완성 모습
  • 관리자 암호키가 있는 관리자만이 구글 연동 로그인을 할 수 있음

텍스트 정보제공

  • 로그인 이후 관리자 페이지 메인 화면

텍스트 정보제공

  • 미해결 질문 게시글 목록 전체 조회

텍스트 정보제공

  • 미해결 질문 게시글 상세 조회

텍스트 정보제공

  • 미해결 질문 답변 및 알람(메일) 전송

텍스트 정보제공

  • 아코봇 정보 갱신

텍스트 정보제공

About

동국대학교 입학도우미 챗봇 '아코봇' & 아코봇 관리 웹 페이지


Languages

Language:Java 49.8%Language:JavaScript 25.3%Language:SCSS 24.8%