2022.02.20

Django 프로젝트 개발환경 설정하기

개요: 본 페이지는 pipenv 를 활용해 각종 패키지 및 개발환경을 효율적으로 맞추는 방식과 CI/CD에 대한 github action을 활요하는 방식에 대해서 소개하고 있습니다.


목차

  • pipenv란?
  • 패키지 및 환경 구성하기
  • github action 구성


pipenv란?

가상환경, 일전에 프로젝트를 하다보면 각 팀원마다 파이썬 버전, 패키지 버전이 달라서 오류나 충돌이 일어나는 경우가 많다. 가상환경은 이러한 문제를 해결하고 개발환경을 맞추기 위해 구성되는데, 이번에 소개되는 pipenv는 파이썬 언어에서 주로 쓰이며 기존 패키지 관리를 하는 pip 기능도 가지고 있다.


패키지 및 환경 pipenv 구성


pipenv 구성에 앞서 일단 pip upgrade를 진행하고 pipenv를 설치하자. 기존에 pip이 없거나 zsh가 설치되어있지 않다 등의 경우 맥 os에는 bash, zsh 등 쉘에 따라 그 환경에 맞는 설정을 해줘야하는데 구글에 검색해서 한번 알아보는 것도 추천한다.


# 터미널을 열고
pip install --upgrade pip

# pip이 설정되었다면 pipenv를 설치한다.
pip install pipenv

pipenv 가 성공적으로 설치 되었다면, 이제 해당하는 가상환경을 구성하면 된다. 그전에 우선 pipenv에서 어떤 파이썬 버전을 이용할 지 미리 상의하자.

예시에서는 파이썬 3.10으로 정해서 하도록 하겠다.

# 3.10 파이썬으로 구성하기
pipenv --python 3.10

# 가상환경 실행
pipenv shell

# 삭제 
pipenv --rm

# 나가려면
exit

이외 패키지 설치에 관해서 다음과 같이 정리할 수 있다.

pipenv --venv # 가상환경 설치 위치
pipenv --py # 파이썬 설치 위치

pipenv install 패키지이름 # 패키지 설치 시 
pipenv install 패키지~=1.2 # 패키지>=1.2 이런식으로도 가능

pipenv install -r path/to/requirements.txt # 기존 requirements.txt 설치시

pipenv graph # 패키지 그래프
pipenv install --dev # 클론한 프로젝트 환경 설치 시

# 패키지 의존성 설치 dev는 개발단계에서 쓰이는 모듈의 경우 쓰임
pipenv install --dev 패키지이름 

pipenv lock # 설치한 패키지들을 Pipfile.lock에 적용

cat Pipfile # 확인
cat Pipfile.lock

위 명령어에서도 알 수 있듯이 패키지 버전을 정의해서 설치 할 수 있고, Pipfile, Pipfile.lock에 해당하는 패키지 내역들이 작성되기 때문에 어떤 버전을 가지고 있는지 쉽게 확인할 수 있다.


Pipenv를 사용하는 이유를 간단히 소개하면

  • 개발환경 맞추기
  • 쉬운 패키지 관리
  • 버전 및 dev(개발용 패키지) 분리 가능

dev? 개발용 패키지는 뭐지? 라는 생각을 할 수도 있는데, 우리가 프로젝트를 하다보면 배포 라는 이야기를 들을 때가 많다. 실제 서비스 단계의 프로그램을 공개한다는 것인데, 실제 개발단계에서만 쓰이는 패키지들은 배포하기전에 삭제해야하는 등의 문제가 있는데, 이를 분리 함으로서 관리를 편하게 하는 것이다.


사실 처음 이걸 공부할 때, 분리의 중요성을 제대로 몰랐는데 실제로 해보면 편리하다. 아래에 CI/CD를 하면서 이 중요성을 다시 느낄 것이다.


CI/CD 와 github action 구성하기

CI/CD란 지속적 통합, 지속적 제공이라는 의미로 개발 과정에서 통합과 배포 단계를 자동화해서 빠르고 효율적으로 하는 방식을 의미한다. 즉, 프로젝트를 진행 할 때, 코딩, 테스트, 배포까지의 과정 중 자동화할 수 있는 부분에 대해 이를 적용함으로써 빠르게 진행하는 것이다.


우리가 많이 쓰는 github에서 제공하는 github action이 이를 도와주는 자동화 빌드와 관련이 있다.

github에서 레포지토리 생성 후 해당 레포 목록에서 Actions라는 항목이 있는데 이를 클릭하면 다음과 같이 여러 환경에 대한 탬플릿을 지원하고 있다. github action은 Ruby라는 언어로 빌드 환경을 제공해주는 서비스 이다.

github action에서 제공하는 템플릿을 사용하는 방법도 있지만, .github라는 폴더를 만들고 해당 폴더에서 workflows 폴더 생성 후 안에 YAML 파일을 작성하는 것이다.


image

이 그림처럼 안에 test.yml 으로 작성하고, git add, commit, push를 지정해 해당하는 레포에 적용하면, 아래와 같이 기존 actions 항목에 빌드 내역이 보이게 된다.

사진과 같이 x는 빌드가 제대로 안되어서 이대로 배포하면 문제가 생기는 걸 알 수 있다.

image


해당 에러에 관해서 이런식으로 어떤 문제가 잇는지 알려준다. 에러는 Ruby와 관련이 있는데 with에 해당하는 부분에 인덴테이션이 잘못되어서 그런 것이다.

image

Ruby.. 도 배워야 하나..?


라는 생각을 잠시 할 수 있는데, 간단히 구조를 알아두고 해당하는 항목에 대해서는 검색이나 github에서 제공하는 탬플릿을 사용하는 것이 좋겠다.

name 은 빌드 이름을, on은 github에서 어떤 작업을 할때 빌드를 시킬 것인지 정하는 것이다. on에 merge, push, 또는 어떤 브랜치 이름으로 설정해서 해당 작업을 할때 마다 actions을 실행 시킬 수 있다.

jobs은 빌드 환경과 빌드 시 실행 시킬 태스트나 구동에 대해 작성한다.

jobs에 build, runs-on: 부분은 우분투 최신판에서 빌드하게 하는데 상황에 따라서 리눅스나 다른 실행 환경을 지정할 수 있다.

steps는 본격적으로 빌드 단계를 지정하는 단계이다. 기초적으로 파이썬을 actions에 설치하고, 그 아래 가상환경을 구성하는 것으로 진행하였다. 해당하는 name은 마음대로 지정해도 되지만, uses나 with에 해당하는 부분은 github action 문서를 참고하자.

name: test

on : push

jobs:
  bulid:
    runs-on: ubuntu-latest

    steps:
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
            python-version: '3.10'

      - name: Install dependencies
        run: |
          pip install --upgrade pip && pip install pipenv
          pipenv install --dev --ignore-pipfile
          pipenv install psycopg2
          pipenv --venv

만약 django를 이용해 테스트를 작업하는 경우, 아래 항목을 통해 테스트를 실행 시킬 수도 있다. run 부분에 해당하는 커맨드를 직접 작성하는 것으로 원하는 작업을 구동해 볼 수 있다.

- name: Test Run
      run: |
        pipenv run python3 manage.py test 

현재 github action은 공개 레포에 대해서는 무료로 이용할 수 있고, 비공개 레포는 한달에 2000분 까지 무료로 이용할 수 있으니 참고하자. github action으로 배포하는 것 까지 확장될 수 있으니 나중에 기회가 되면 한번 공부해보는 것도…

Leave a comment