Two Scoops of Django - 2. 최적화된 장고 환경 꾸미기

castlemin·2022년 6월 13일
0

Two Scoops of Django

목록 보기
3/4
post-thumbnail

2. 최적화된 장고 환경 꾸미기

장고 개발을 위한 최적의 환경 세팅을 다룹니다.

2.1 같은 데이터베이스를 이용하라

일반적으로 많은 개발자들이 범하는 실수가 자신의 로컬 개발 환경과 실제 운영환경에서 이용하는 데이터베이스 엔진이 서로 다르다는 것입니다.
일례로 로컬 환경에서는 장고의 기본 데이터베이스 엔진이 sqlite를 쓰고 실제 운영환경에서는 MySQL이나 PostgreSQL을 사용하는 경우가 있겠습니다.
우리가 만약 서로 다른 데이터베이스가 똑같이 작동할 것이라는 생각으로 위와 같이 개발을 진행한다면 어떤 문제가 발생할까요?

2.1.1 운영 데이터를 완전히 똑같이 로컬에서 구동할 수는 없다.

로컬 환경과 실제 운영 환경이 서로 다른 경우, 로컬 환경에서 구동할 운영 환경 데이터베이스의 완벽한 복사본을 가져올 수는 없습니다.
물론 운영 데이터베이스에서 SQL 덤프를 해 와 로컬 데이터베이스 환경에 이전할 수는 있지만, 그렇게 데이터베이스 export와 import를 진행했다고 두 데이터베이스가 완벽히 같은 복사본의 데이터를 가지고 있다고 볼 수는 없습니다.

2.1.2 다른 종류의 데이터베이스 사이에는 다른 성격의 필드 타입과 제약 조건이 존재한다.

데이터베이스의 종류가 다르면 각 필드 데이터 타입에 따라 각자 다르게 작동하게 됩니다. 물론 장고 ORM이 이러한 차이를 극복하기 위해 존재하지만 그럼에도 불구하고 차이가 분명히 존재합니다.
앞서 예시를 들었던 SQLite와 PostgreSQL의 경우, SQLite는 상대적으로 엄격한 타이핑이 아닌 동적이고 느슨한 타이핑을 지원합니다.
때문에 이러한 SQLite의 특성 덕에 로컬 환경에서는 아무런 문제 없이 작동하던 코드나 쿼리들이 실제 운영환경으로 가면 PostgreSQL에 의해 전혀 본적 없는 제약 조건 에러(constraint error)를 뱉어 낼 것입니다.

PostgreSQL은 장고에 가장 추천되는 데이터베이스라고 합니다.
장고는 PostgreSQL 사용을 지원하기 위한 모듈인 django.contrib.postgres를 지니고 있습니다.

2.1.3 픽스처는 마법을 부리지 않는다.

픽스처는 단순히 하드 코딩된 간단한 데이터 세트를 생성하는 데는 좋은 도구입니다.
그러나 한 데이터베이스 엔진에서 다른 데이터베이스 엔진으로 큰 크기의 데이터 세트를 이전하는 데는 그다지 신뢰할 만한 도구가 아닙니다.
픽스처라는 도구가 만들어진 목적이 이가 아니기 때문입니다.
때문에 운영 환경의 데이터를 이전하기 위해 기본 데이터를 생성하는 도구로서 픽스처를 사용함을 지양해야합니다.

픽스처(fixture)는 테스트를 위해 필요한 데이터나 환경등의 자원들을 의미합니다.




2.2 pip과 virtualenv 이용하기

pip과 virtualenv는 최적화된 로컬 환경 세팅을 위해 필수적인 도구이며, 장고 프로젝트에서 사실상의 표준입니다.
pip는 Python Package Index와 그 미러 사이트에서 파이썬 패키지를 가져오는 도구이며, 파이썬 패키지를 설치하고 관리하는 데 이용합니다.
virtualenv는 파이썬 패키지 의존성을 유지할 수 있게 독립된 파이썬 환경을 제공하는 도구입니다.
만약 virtualenv 없이 장고 3.0v 기반 프로젝트와 4.0v 기반 프로젝트를 같은 로컬 환경에서 동시에 진행한다고 하면, 우리는 프로젝트 버전에 맞게 장고를 계속해서 새로 설치해가며 진행하게 될 것입니다. 실제 프로젝트에는 장고와 같은 의존성 패키지가 최소 수십개는 존재한다는 점을 고려한다면 이러한 개발방식은 더욱 막막하게 느껴질 것입니다.
virtualenv는 독립적인 가상환경을 제공하기 때문에 각 환경마다 독립적으로 패키지를 관리할 수 있게합니다.

virtualenvwrapper를 사용하면 더욱 손쉽게 virtualenv를 사용할 수 있습니다.




2.3 pip를 이용하여 장고와 의존 패키지 설치하기

pip과 requirements를 이용하여 장고와 장고 프로젝트의 의존 패키지들을 설치하고 관리할 수 있다.
requirements 파일은 설치하려는 파이썬 패키지들과 그 버전이 담겨져 있는 파일이다.
우리는 pip을 이용하여 requirements에 담겨진 패키지들을 가상 환경 안에 설치할 수 있다.




2.4 버전 컨트롤 시스템 이용하기

프로젝트를 진행할 때 코드의 변경 내용을 기록하거나 프로젝트를 버전 단위로 관리하기 위해서는 깃(Git)이나 머큐리얼(Mercurial) 등의 버전 컨트롤 시스템을 필수적으로 이용해야합니다.
이러한 버전 컨트롤 시스템들은 브랜치를 생성하고 관리하거나 코드를 병합하는 데 매우 편리한 기능을 제공합니다.




2.5 선택 사항 : 동일한 환경 구성

로컬 환경에서는 잘 작동하던 프로젝트가 실제 운영 환경에서는 제대로 작동하지 않을 수도 있습니다.
만약 로컬 개발 환경을 프로젝트의 스테이징, 테스트, 운영환경과 가능한 최대한 똑같이 구성된다면 어떨까요?
그렇다면 최소한 다음과 같은 환경 문제들은 충분히 극복할 수 있을 것입니다.

  • 서로 다른 운영체제 : 로컬 환경에서의 개발은 맥이나 윈도우에서 이루어지고 운영 환경으로는 우분투 리눅스가 사용된다면, 각 환경에서의 프로젝트 구동 간에는 큰 차이가 존재할 것입니다.
  • 서로 다른 파이썬 셋업 : 개발자들마다, 혹은 프로젝트 환경마다 서로 다른 파이썬 버전을 사용하여 문제들이 발생할 수 있습니다.
  • 개발자와 개발자 간 차이 : 개발자들 각각의 셋업 간 차이에서 오는 문제로 인해 디버깅에 많은 시간이 소비되기도 합니다.

동일한 개발 환경 구성을 위해 가장 흔히 이용되는 방법에는 도커(Docker), 베이그런트(Vagrant), 버추얼박스(VirtualBox) 등이 있습니다.
이러한 도구들을 이용해 구축된 환경(컴퓨터)를 VM(Virtual Machine)이라고 합니다.




요약

이번 챕터에서 우리는 최적의 개발 환경 구축을 위해 동일한 데이터베이스 엔진을 로컬 환경과 실제 운영 환경에서 사용하는 것과 pip, virtualenv, 버전 컨트롤 시스템(VCS), 가상머신(VM) 등에 대해 알아보았습니다.
이러한 도구들은 장고 개발 뿐만이 아닌 파이썬 소프트웨어 개발 전반에 걸쳐 일반적으로 사용되므로 꼭 익혀둘 필요가 있습니다.



본 포스트는 "Two Scoops of Django" 를 기반으로 작성되었습니다.
공부하며 새롭게 배운 내용 위주로 작성하여 책의 부분적인 내용만을 포함합니다.

profile
우보천리

0개의 댓글