DJango로 이주하기 – 기존 DB를 활용하여 웹서비스 구축하기

역시나 간만에 포스팅 입니다~! 오늘은 가벼운 실무 주제로 2개의 포스팅을 진행하려고 합니다. 바로 DJango로 이주하는 이야기를 해볼까 하는데요~ 크게 다음 2가지의 주제로 이야기를 해보려고 합니다.

  • 기존의 서비스가 존재하나, 기존의 웹 서비스를 버리고 새로운 웹 서비스를 구축하고자 하는 경우
  • 기존의 서비스가 존재하며, 기존의 웹 서비스를 유지하며 새로운 서비스를 구축하고자 하는 경우

위 2가지 상황에 대해 각각 이야기를 진행해 보고자 합니다. 그 중, 첫 번째로 ‘기존의 서비스가 존재하나, 기존의 웹 서비스를 버리고 새로운 웹 서비스를 구축하고자 하는 경우’ 에 대해서 알아볼까 합니다.

시나리오 정의

사실, 이러한 경우는 여러가지 이유가 있을 수 있습니다. 기존의 웹 서비스가 유지 보수하기 힘든 경우일 수도 있고, 비용 절감의 문제로 기존의 웹 서비스를 저 비용의 운영 환경으로 전환하기 위한 경우 일 수도 있습니다. 경우야 어떻든, 기존의 데이터는 유지하면서 새로운 웹 서비스를 작성해야 한다는 점에서 공통점을 지니는 상황 들이죠. 오늘 주제에 대한 간략한 시나리오를 구상해 봅시다.

  1. 기존에 서비스 중이던 웹 서비스가 존재 합니다.
  2. 이 서비스는 .net 기반으로 Windows 2000 서버에서 구동 중 이였습니다.
  3. 비용 절감을 위해 .net 기반의 웹 서비스를 다른 웹 서비스로 이전 하고자 합니다.
  4. 이 때, 마침, 정말 절묘하게도, 마치 짠 듯이 DJango 로 웹 서비스를 구축하려고 마음 먹었다고 가정 합니다.

….굉장히 작위적인거 같지만, 일단 무시하도록 하고… 저런 상황이라고 가정해 봅시다. 물론 PHP 로 전환하거나 Java 베이스의 웹 프레임 워크가 될 수도 있지만, 여기선 억지로라도 DJango 로 이주한다고 합시다.

환경 둘러보기

굉장히 작위적이지만, 일단 환경을 다시 돌아보도록 하겠습니다. .net 기반의 웹 서비스지만, 데이터베이스는 MySQL을 사용했다고 가정 합시다. 그래서 요구 사항과 현재 상황 등을 정리해 보면 다음과 같습니다.

  1. 운영 중인 서비스는 Windows 2000 환경이며, Django 는 Linux 베이스 컴퓨터로 이주할 계획입니다.
  2. 데이터베이스는 MySQL 을 사용 중이며, 내부에 있는 모든 데이터는 건드리지 않고 그대로 사용하고자 합니다.

생각보다 가볍네요. 자, 이런 상황에서 본격적으로 작업을 시작해 볼까요?

DJango 의 inspectdb 기능 활용하기

사실, 작위적인 설정이 나온 이유는 바로 Django의 inspectdb 라는 유틸리티 기능을 소개해 드리기 위해서 입니다. ‘기존에 사용하던 데이터베이스를 DJango에서 그대로 사용할 수 는 없을까?’ 란 질문에 대한 해답이며, 매우 매력적인 기능 입니다. 사용 방법 역시 매우 간단한데,

  1. settings.py 에서 inspectdb 기능을 사용하기 위한 데이타베이스를 설정해 둡니다.
  2. 기존과는 다르게, ‘inspectdb’ 명령을 사용합니다.
  3. 끝.
  4. 바로 File 로 저장하고자 한다면, 리다이렉션을 사용하여 ‘inspectdb > models.py’ 의 형태로 뽑아 냅니다.
  5. 끝.

이게 끝 입니다. 이제 여러분은, Model을 다 가져 왔으니 여러분들의 서비스만 만들어서 배포 하시면 됩니다. 한번 간단하게 실험을 통해 알아볼까요?

테스트 하기

이곳을 통해서 간단한 샘플 데이타베이스 자료를 받고, 샘플 데이타베이스를 만들어 봅시다. 테스트를 위해서 SQLite3 의 데이타베이스를 활용하여 적용하도록 하구요.

DB 만들기
먼저 SQLite로 된 DB를 빠르게 만들기 위해서 간이 프로젝트를 하나 생성 합시다.
Dummy Dummy~
더미더미 스럽게 더미들을 만들어 주고….
마이그레이션 하기
migrate 명령을 통해 마이그레이션을 해 줍니다.(이때는 몰랐습니다… INSTALLED_APP 에 앱을 설치 안한줄을…)
생성된 DB파일
그러면 db.sqlite3 파일이 생성 됩니다. 이 파일은 settings.py 에 설정된 기본 파일이구요.
inspectdb 용 프로젝트
그리고 inspectdb 명령을 위한 DJango 프로젝트를 하나 더 만듭니다.
db 파일 복사 및 설정
그리고 앞에 만들었던 db.sqlite3 파일을 이곳에 복사해 둡니다. 그리고 settings.py 에 DATABASES 설정을 확인하고…
inspectdb!
inspectdb 명령을!!
inspectdb 결과
그러면 자동으로 Database를 조회하고 관계를 파악, DJango Model 데이터를 뽑아내 줍니다.
redirection을 통한 파일 생성하기
파일로 저장하기 위해서는 리다이렉션을 통해 파일로 저장하게 합시다. PyCharm에서는 inspectdb 명령을 실행하기 전, Shift + Enter 를 누르면 파라메터를 추가로 작성할 수 있습니다.
만들어진 모델 파일
그러면 이렇게 모델이 생성되게 됩니다! 기본적으로 모든 테이블은 Meta 클래스내에 managed 옵션이 False 로 붙게 됩니다. 이는 DJango가 관리하지 않는 테이블임을 명시하는 메타 옵션으로, managed 가 False인 모델들은 DJango 마이그레이션 시에 모두 제외 됩니다.
사용한다면 이렇게!
실제로 Model을 사용할 계획이라면, managed = False 를 지워주시면 됩니다. 그리고 순서대로 makemigrations -> migrate 순서로 마이그레이션을 진행하면 되나, 이미 테이블이 생성되어져 있으므로 migrate –fake 옵션으로 마이그레이션을 해야 합니다.

적용하기 및 서비스하기

간단한 테스트를 통하여 inspectdb 기능에 대해 알아 봤습니다. DJango 가 가진 가장 매력적인 부분은 제가 볼 때는 ‘빠르게 적용 가능한’ 웹 서비스란 점이 아닐까 싶습니다. 도중에 데이터도 날아가고, 캡쳐도 정상적으로 되지 않아서 포스팅을 길게 하는 건 포기하고 여기까지만 작성하는 것으로….. 하겠습니다 ㅠㅠㅠ

* 제가 캡쳐를 다 하고 보니, 몇 가지 설정을 빼 먹어서 제대로 된 데이터베이스가 생성되지 못 한걸 발견했습니다. 해당 부분은 내용을 보충하여 추후에 업데이트 하도록 하겠습니다 ㅠㅠ

DJango로 이주하기 – 기존 DB를 활용하여 웹서비스 구축하기”에 대한 답글 6개

  1. 이걸 이용하면 DB 설계와 구축을 먼저하고 그 위에 장고를 올리는 것도 가능하겠네요. 좋은 글 감사합니다.

댓글 남기기