[DMS]설계

포동동·2023년 4월 11일
0

🤔 무엇을 하고 있는가

현재 회사에서는 DMS 즉, Django로 웹을 구축하여 서버내의 데이터들을 관리하는 시스템을 개발하고 있다. 오늘은 그를 위한 간단한 컨셉과 설계에 대해 설명하고, 그간 겪은 문제점과 해결책에 대해 정리해보려 한다.


🚩 목적

우리 회사는 다양한 데이터셋을 활용해 AI 모델을 만들고 있다. text뿐만 아니라, image, audio 등 다양한 형태의 데이터들을 public한 사이트에서 가져올 수도 있고, 웹상에서 크롤링을 통해 긁어올 수도 있다. 따라서 다양한 소스들에서 모아온 데이터를 효율적으로 관리하고 다른팀들이 활용할 수 있도록 제공하는 것이 중요하다.

따라서, DMS(Data Management System)의 필요성이 대두되었고, Django로 웹사이트를 구축해 비개발직군 팀원들도 쉽게 데이터를 파악할 수 있게 만들기로 결정하였다.


✅ 아키텍처

정확한 아키텍처는 공개할 수 없지만 간단하게는 Data Source ➡ Raw Data ➡ Data Set의 순서대로 데이터를 수집하고 관리할 예정이다. 예상 실행 순서는 아래와 같다.

  • Data Source에서 데이터들을 선택해 Request를 날린다.
  • 다운로드 할 것인지, API로 호출할 것인지, 크롤링 할 것인지 선택한다.
  • Raw Data를 수집한다.
  • 텍스트 데이터의 경우, 번역팀에 검수 Request를 날린다.
  • 간단한 정제 후, Data Set으로 만든다.

🤏 프레임워크

Django를 선택했다. 우선, admin 페이지가 있어, 페이지 관리가 쉽다는 점과 설계팀의 기술 스택으로는 Python이 최선이기 때문에 Flask보다는 잘 갖춰져있는 full-stack 프레임워크인 Django를 선택했다.


특히, admin 페이지를 많이 활용할 예정이기 때문에 우리는 wagtail이라는 패키지를 사용하기로 했다. wagtail은 CMS(Contents Management System)이며, 주로 블로그나 쇼핑몰 관리를 위한 admin 페이지가 호평받아 최근 Django CMS는 압도하고 있는 패키지이다.

실제로, admin 페이지의 UI도 직관적이고 비개발직군에게 친숙한 디자인이라 괜찮아보였다(그냥 예쁘다).

하지만, 그보다도, 전통적인 django-cms 같은 패키지들은 admin 페이지가 투박하고, 레퍼런스는 많지만 커뮤니티가 활성화 되어있지 않아 주니어들이 개발하기에는 조금 부적절하다는 생각에 wagtail을 선택했다.


그러나, 실제로 코드를 까보고 공식문서를 탐독해보면 볼수록 느낀 것은, 확실히 CMS이다. 빅데이터가 들어간 DB와 연동해서 쓰기에는 조금 버거워보였고 가벼운 이미지나 텍스트들을 배포할 때 간편해보였다. 따라서 툴만 wagtail을 쓰고 그 안의 데이터를 처리하는 기능은 새로 짜기로 결정하였다.


🙋‍♂️ 간단한 요구사항

  1. 파일을 업로드 할 수 있어야 한다.
  2. 지정한 조건에 따라 크롤링 할 수 있어야 한다.
  3. 조건에 따라 DB에서 조회할 수 있어야 한다.
  4. 조회한 데이터를 원하는 형식으로 다운로드 받을 수 있어야 한다.

이 외에도 정말 많은 요구사항이 있었지만, 우선적으로 위의 3가지 요구사항을 구현하기로 했다.

그리고, 1번과 2번에 따라 수집된 Raw Data는 우선적으로 스토리지에 저장되고, 후에 spark를 통해 데이터 처리를 한 후 postgres나 mongo DB에 저장하기로 했다.


💻 코드

wagtail 공식문서를 보고 간단하게 설치할 수 있다. 개발은 ubuntu에서 진행했다.

mkdir wagtail
cd wagtail

virtualenv venv
source venv/bin/activate
pip install wagtail
wagtail start [프로젝트명] # 예시로 mysite라고 하겠다. 
cd mysite
pip install -r requirements.txt

python manage.py migrate # 기본 DB는 SQLite지만, 우리는 Postgres를 쓰기로 했다. 
python manage.py createsuperser
python manage.py runserver # http://127.0.0.1:8000/admin로 접속한다. 

기본적인 셋팅은 끝났고, 다음 포스팅에서 이어가도록 하겠다.

profile
완료주의

0개의 댓글