현재 이 글을 포스팅하는 날짜는 1월 3일이다. 이미 학기가 마무리 되었고, 이 프로젝트 또한 마무리 된 시점이다. 핑계인 걸 알지만 너무 바빴다. 사실 velog를 프로젝트를 진행하면서 틈틈히 썼어야 했는데 그러지 못했다. 한번 미뤄지고 두번 미뤄지다 보니 그냥 방학때 써야지 하는 마음이 컸던것 같다. 이제는 절대 미루지 않으려고 한다. 프로젝트를 진행하면서 쓰는 것과 다 마무리 하고 쓰는 것은 차이가 크다고 생각한다. 이번엔 일단 어쩔수 없으니 최대한 기억을 되살려 보면서 회고의 느낌으로 써보도록 하겠다.
처음에는 크롬 확장프로그램을 목표로 하였다. 하지만 막상 하려고 보니 react와 java script를 사용해야 하는 문제가 생겼다. 딥러닝과 장고 또한 처음 사용해보는데, 또 새로운 것을 받아들이기에는 무리가 있다고 생각하여 확장 프로그램 부분을 빼고, 웹에서 쇼핑몰의 url을 직접 입력하는 방식으로 방향을 바꿨다. 메인 화면은 아래와 같다.

이 검색창 부분에 네이버 쇼핑의 상품 페이지의 url을 입력하면 서버에서 리뷰를 크롤링하고, 딥러닝 모델을 통해 처리하여 새로운 분석 결과 화면을 출력하는 식의 동작을 구현하려 하였다.

웹 페이지가 동작하는 방식은 아래와 같다.
(1) 상품 페이지 URL이 입력으로 들어옴 -> 해당 리뷰 페이지 크롤링 -> 상품 리뷰, 정보 등 추출
(2) 상품정보와 리뷰를 이용하여 키워드 추출
• KR-WordRank 알고리즘을 통해 모든 리뷰에서 키워드 추출
• 모든 리뷰를 형태소 분석기로 토큰화
• word2Vec과 TF-IDF모델 생성 후 학습
• word2Vec에 없는 단어 제외, 불용어 제외, TF-IDF로 중요하지 않은 단어 제외
->자주 사용되면서 의미가 있는 키워드 추출 성공
(3) 키워드별 만족도 계산
• GRU모델을 통해 리뷰 데이터에 대한 감성 분석 (감성 분석 1회 실행 시 소요시간 약 0.3초)
• 코사인 유사도가 0.9이상인 단어에 대해서도 해당 키워드에 대한 만족도에 반영
• 키워드 만족도 = 해당 키워드에 대한 모든 리뷰 점수의 합 / 해당 키워드 빈도수
(4) 키워드별 만족도를 기반으로 실제 리뷰 추출
• 해당 키워드가 포함된 리뷰들을 리뷰 점수에 기반하여 긍정 리뷰, 부정 리뷰 판별
• 해당 키워드 만족도와 같은 감성을 가진 리뷰를 추출(‘배송’ 키워드 감성: 긍정, 추출한 실제 리뷰 감성: 긍정 이어야 추출성공)
(5) AI score 계산 = (해당 키워드 만족도*키워드 리뷰 수/모든 키워드 리뷰 수…모든 키워드에 대해 계산하여 더해줌) /100
(6) DB에 결과(키워드, 만족도, AI Score 등)를 저장하여 사용자에게 웹페이지 전달

장고에 대해서는 한번도 공부해 본적이 없지만, 스프링과 대충 유사한 구조이지 않을까 생각하며 무작정 시작해보았다. 먼저 스프링의 mvc패턴과 같이 장고는 어떤 구조로 되어 있는지부터 알아보았다.
장고는 MTV 패턴이라는 것을 따르고 있었다. MTV는 Model,Template,View를 의미한다.
먼저 Model은 MVC패턴의 Model과 유사하다. 유저가 사용할 데이터를 정의하고 관리하는데 DB에 저장되는 데이터를 의미한다.
Template은 MVC패턴의 View에 대응된다. 사용자에게 보여지는 화면에 해당한다.
View는 MVC패턴의 Controller에 대응한다. 요청에 따라 적절한 로직을 수행하여 결과를 템플릿으로 렌더링하여 응답한다.
이러한 MTV패턴이 스프링에서 다루었던 MVC패턴과 유사하기 때문에 익숙하면서도, Template과 View는 MVC패턴에 익숙하다 보니 처음엔 조금 헷갈렸다. 하지만 큰 문제가 있지는 않았고, 이해하기는 편했던 것 같다. 장고의 구조는 다음과 같다.

-config 디렉토리에서는 이름에서도 느낄 수 있듯이 장고 프로젝트 관련 설정을 할 수 있는 곳이다. settings.py 파일을 통해 다양한 설정들을 할 수 있다. 이번 프로젝트에서 사용한 설정들은 다음 포스팅에서 자세히 다루도록 하겠다.
-RIverVIEW 디렉토리에서는 db관련 설정, url설정, 이벤트 처리를 할 다양한 메소드 들과 MTV 패턴에서의 View(MVC패턴의 Controller) 를 포함한다.
-static 디렉토리는 template 에 필요한 css파일, 이미지, 폰트 파일 등을 저장해 두었다.
-template 디렉토리는 사용자에게 보여질 화면, 이번 프로젝트에서는 html 파일을 모아두었다.
-db.sqlite3이라는 파일이 보이는데, 나는 SQLite3이 참 편했던 것 같다. SQLite3은 파이썬을 설치하면 표준 라이브러리에서 제공하는 내장 모듈이라고 한다. 쉽게 말해 데이터베이스이다. 장고에서는 기본적으로 SQLite를 사용하도록 구성되어 있다고 한다. 그래서 쉽게 데이터베이스를 다룰 수 있었다. db설정에 대한 부분도 다음 포스팅에서 자세히 다루겠다.
-manage.py는 프로젝트의 매니저라고 할 수 있다. 장고 프로젝트 관리를 위한 명령어를 지원한다. 앱 생성, 데이터베이스 관련 명령, 개발 서버 실행 등을 수행한다. 실제로 서버를 돌릴 때 이 파일을 통해 서버를 연다.
장고의 기본적인 구조는 위와 같이 정리하였다.
나는 스프링만 파고 싶었는데 장고도 하다보니 재밌었던 것 같다. 거의 웹 프레임워크가 동작하는 방식이 비슷했기 때문에 처음 접해보지만 큰 어려움은 없었다. 다음 포스팅에서는 프로젝트 설정과 db구축에 관한 포스팅을 할 예정이다.
아 그리고 이번 프로젝트부터는 mac OS를 사용한다. 맥북이 너무 가지고 싶어서 무리한 소비를 해버렸다. 하지만 내 인생에서 가장 가치있는 소비라고 자신할만큼 만족중이다. 기분탓인진 모르겠지만 확실히 개발자에게 윈도우보단 맥이 더 편하다는 느낌이 들었다.