[Django] Migration에 대해서

정지은·2022년 11월 30일
0

장고(+파이썬)

목록 보기
3/5

스프링과 장고 프로젝트를 하나씩 체험해보다 보니, 공통점과 차이점이 몇 눈에 들어왔다. 가장 인상깊었던 차이는 DB의 연결방식이었다. 일단 시켜서 하긴 했는데, Migration이란 정확히 뭘까?


0. Spring에서의 DB와 Django에서의 DB

스프링으로 MVC패턴의 웹사이트를 만들었을 때, DB를 연결하기 위해서는 몇 단계의 절차가 필요했다.

우선 사용할 데이터 테이블을 설정하고, VO 객체 파일을 생성한다. 그리고 oracle(또는 다른 DB)을 실행해 해당하는 테이블을 create한 뒤, service에서 쿼리를 작성하거나 mapper를 통해 접근한다. 이 과정에서 pom에 DB dependency를 추가하고, DB에 접근할 수 있는 properties파일을 만들어 두는 것은 기본이다.


스프링 프로젝트를 함께 한 sqldeveloper.

상당히 복잡하다. DB를 연결하고 제대로 출력하는 것만으로 많은 시간을 썼던 기억이 있다.

하지만 Django는 다르다. (vscode 환경을 기준) models.py에 원하는 데이터 객체를 만들어 둔 뒤, 장고가 설치된 가상 환경에 들어가 다음과 같은 명령어를 입력하면 끝이다.

 	>(venv)python manager.py makemigrations
    >(venv)python manager.py migrate
    

대체 migration이 무엇이기에 저 긴 과정을 두 줄로 해결해버리는 것일까?

1. Migration

사전적인 의미는 '이주하다'라고 한다. IT용어로서는 데이터나 소프트웨어 등을 한 시스템에서 다른 시스템으로 이동하는 행위를 뜻한다고도 적혀 있다.

그렇다면 이 명령어는 장고의 데이터 객체를 sqlite3로 이동시키는 행위일까? 라고 추측해볼 수 있다. 조금 더 검색해 보니, 장고가 기본적으로 제공하는 ORM 서비스를 통해 진행된다고 한다.

ORM(Object-Relational Mapping)
객체-관계 매핑. OOP의 객체 클래스와 RDB의 테이블을 자동으로 연결하는 서비스이다. 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 객체 클래스와 테이블 간의 불일치를 해결한다.

장고의 ORM서비스 덕분에 가능한 일이었다. 이렇게 보면 장점밖에 없는 편리한 기능 같지만, 장단점은 분명히 존재한다고 한다.

  1. 장점
    • 직관적이다.
    • 재사용과 유지보수가 편리하다.
    • DBMS의 종속성이 하락한다.
  2. 단점

직접 겪어 보니 조금 더 뼈아프다. ORM은 분명 편리하지만, DB에 대한 공부를 놓을 정도는 아니므로 SQL공부도 더 열심히 해야겠다.

2. 사용하기 위한 조건

하늘에서 편의성이 뚝 떨어지지는 않으므로, migration을 제대로 사용하기 위해서는 미리 설정해두어야 할 사항이 있다.

setting.py의 스크롤을 내리다보면 다음과 같은 항목이 있다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

눈치껏 해석해 보면, 기본 데이터베이스 엔진을 sqlite3로 하고 테이블이 저장될 파일 이름을 db.sqlite3로 하며 그 저장 위치는 BASE_DIR인 듯 하다.

장고 프레임워크는 기본적으로 sqlite3, mysql, oracle, postgresql을 지원한다고 하니 취향에 맞게 바꾸어 쓸 수 있을 것이다. 아무튼 사용할 DB 엔진을 정했다면 그것에 맞게 저 부분을 수정해주어야 한다. default항목은 DB엔진마다 필요로 하는 옵션이 다르니 반드시 찾아봐야 한다.

profile
Steady!

0개의 댓글