Django - MiniProject - 이론

김기훈·2025년 11월 21일

부트캠프 프로젝트

목록 보기
11/39
post-thumbnail

참고 문서


PBL(Project Based Learning)

  • PBL이란 제시된 미션에 따라 프로젝트를 수행하며 이뤄지는 학습 방법을 의미

각 구성 요소와 역할

Django REST Framework

  • Django를 기반으로 한 강력하고 유연한 REST API 구축 도구
    • 아래의 기능을 갖추고 있어 API를 개발하는 데 많은 기능을 제공하여 효율성 증가
      • 직렬화(Serialization) | 인증(Authentication) | 권한 부여(Permission)
      • 필터링 및 페이지네이션
      • 백엔드 API의 CRUD 작업 | JSON 응답 처리
        • 등 웹 애플리케이션의 API 부분을 담당

PostgreSQL

  • PostgreSQL은 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)
    • Django와 호환성이 좋아 권장
    • ACID(원자성, 일관성, 고립성, 지속성) 특성을 완전히 지원하며 확장성과 안정성이 높은 DB
  • Django의 ORM 을 통해 저장되는 데이터를 영구적으로 저장 및 관리
    • 대량의 데이터나 복잡한 쿼리를 효율적으로 처리할 수 있는 DB 기능을 제공

uWSGI

  • Python, Ruby, Perl 등의 여러 웹 애플리케이션을
    • 배포하기 위해 많이 사용되는 서버 게이트웨이 인터페이스
  • Django와 같은 Python 웹 프레임워크를 실행하기 위한 웹 서버로서 동작
    • 주로 Nginx 와 같은 리버스 프록시와 함께 사용
  • 역할
    • HTTP 요청을 Django 애플리케이션에 전달하여 웹 애플리케이션을 처리하는 중간 계층 역할
    • 동시성 처리와 성능 최적화를 위해 설정을 조정할 수 있다.

프로젝트 개발 환경 설정 개요

DRF 프로젝트 설정

  • Django와 Django REST Framework를 설치하여 프로젝트를 생성
  • 필요한 API 엔드포인트와 데이터 직렬화, 인증 및 권한 기능을 설정

PostgreSQL 데이터베이스 설정

  • settings.py에서 PostgreSQL 연결 설정 | DATABASES 항목에 PostgreSQL 접속 정보를 입력
  • PostgreSQL에서 데이터베이스와 사용자를 생성하고 권한을 부여하여 Django와 연동

uWSGI 설정 및 Nginx 연동

  • uWSGI를 사용해 Django 애플리케이션을 실행할 설정 파일을 작성
    • 이를 통해 uWSGI는 애플리케이션과 클라이언트의 요청을 효율적으로 처리 가능
  • Nginx와 uWSGI를 연동하여 클라이언트 요청을 Nginx가 수신
    • Nginx에서 uWSGI로 요청을 전달하도록 설정

장점

  • 확장성(DRF, PostgreSQL)

    • 고성능의 데이터 처리와 확장성을 지원하여 많은 사용자 요청과 데이터를 처리 가능
  • 보안성

    • PostgreSQL의 강력한 보안 기능, Django의 인증/권한 시스템을 결합해 안전한 데이터 관리를 제공
  • 성능

    • uWSGI와 Nginx의 연동을 통해 빠르고 안정적인 요청 처리가 가능
      • 동시 처리와 로드 밸런싱을 통해 서버 과부하를 방지 가능

Git Flow 참고자료

Atlassian Git Flow
실무 Git Flow
Git Flow Repo


Git Flow

  • Git을 사용한 브랜치 관리 전략으로, 소프트웨어 개발 프로젝트에서 협업을 효율적으로 하기 위해 사용
    • 대규모 팀 개발에서 안정성과 유연성을 확보하는 데 중점을 둠
  • 기능 개발, 버그 수정, 배포를 명확하게 구분하여 여러 명이 동시에 작업할 수 있도록 지원하는 브랜칭 모델

주요 브랜치

  • 1. master(main)

    • 배포를 위한 브랜치로, 항상 안정적인 코드가 위치 .
      • 이 브랜치의 커밋은 항상 릴리즈 버전이어야 함
  • 2. develop

    • 개발자들이 기능을 통합하고 테스트하는 브랜치로, 최신 개발 중인 코드가 이곳에 위치
    • 기능 개발이 완료되면 이 브랜치로 병합 / 모든 기능(feature)이 여기에서 테스트됩니다.
  • 3. feature

    • 새로운 기능 개발을 위한 브랜치
      • 각각의 새로운 기능을 개발할 때마다 develop에서 분기
      • 기능 개발이 완료되면 다시 develop 브랜치로 병합
  • 4. release

    • 배포 준비를 위한 브랜치로, 버그 수정 및 배포 준비를 위해 사용
      • develop에서 릴리즈 준비가 완료되면 분기하여 release 브랜치를 생성
      • 릴리즈를 준비한 후 masterdevelop에 병합
  • 5. hotfix

    • 배포된 버전에서 긴급한 수정이 필요할 때 master에서 분기
      • 수정 후, masterdevelop에 병합

장단점

장점

  • 명확한 브랜치 구조로 팀 간 협업이 용이함.
  • 병렬적인 개발이 가능하여 기능 추가와 버그 수정이 독립적으로 이루어질 수 있음.
  • 긴급한 수정(Hotfix)이 필요한 경우에도 빠르게 대응 가능.

단점

  • 브랜치가 많아져서 복잡해질 수 있음.
  • 소규모 프로젝트에서는 과도한 관리일 수 있음.

사용 흐름

    1. 새로운 기능을 개발할 때는 feature 브랜치를 생성하여 작업한 후 develop으로 병합.
    1. 버그 수정이 완료되면 release 브랜치를 생성하여 배포 준비.
    1. 배포 중 문제가 발생하면 hotfix 브랜치를 사용하여 긴급 수정을 진행.

Git Flow 도구 사용법

  • Git Flow 도구는 대부분의 Git 환경에서 쉽게 설치할 수 있습니다.
  • MacOS (Homebrew 이용)

    • brew install git-flow-avh
  • Ubuntu

    • sudo apt-get install git-flow
  • Windows (Git for Windows 사용 시)

    • Windows 환경에서는 Git Bash와 함께 Git Flow 도구를 설치할 수 있음
    • Git for Windows 설치 후 사용 가능

Git Flow 초기화

  • Git Flow 도구 설치 후 프로젝트에서 Git Flow를 사용하려면, 먼저 초기화 과정을 진행해야 함
  • Git Flow 초기화 명령어 : git flow init

    • 명령어를 입력하면 다음과 같은 몇 가지 질문을 받음
    • 기본값을 사용하려면 그냥 Enter를 눌러 진행 가능
      • Branch name for production releases?
        • → 기본값은 master 이지만 main 으로 설정 추천
      • Branch name for "next release" development?develop (기본값)
      • 기능 브랜치, 릴리즈 브랜치, 핫픽스 브랜치의 접두사 설정
        • → 기본적으로 feature/, release/, hotfix/가 사용

Git Flow 주요 명령어

  • Git Flow 도구는 각 브랜치와 관련된 명령어를 제공하며, 브랜치를 생성하고 병합하는 과정을 자동화
    • 브랜치 생성은 finish 명령어를 사용하지만
    • 이번 프로젝트에서는 PR기능을 활용한 Merge를 진행하기 때문에 finish 명령어는 사용X
    • 이번 프로젝트에서는 Release 브랜치는 사용하지 않고 배포를 진행 → 버져닝이 필요없기 때문..

Feature 브랜치

  • 생성: 새로운 기능을 개발할 때 사용 - git flow feature start <기능이름>
  • 완료: 기능 개발을 마치고 develop 브랜치로 병합 - git flow feature finish <기능이름>

Release 브랜치

  • 생성: 배포 준비를 할 때 사용 - git flow release start <버전번호>
  • 완료: 릴리즈 완료 후 masterdevelop에 병합 - git flow release finish <버전번호>

Hotfix 브랜치

  • 생성: 긴급한 버그 수정이 필요할 때 사용 - git flow hotfix start <버그이름>
  • 완료: 수정 완료 후 masterdevelop에 병합 - git flow hotfix finish <버그이름>

Git Flow 명령어 예시

기능 브랜치 생성 및 PR 요청

  • git flow feature start 검색기능
    • git add .
    • git commit -m "검색 기능 개발 완료"
    • git push origin feature/검색기능
  • Github 레포지토리에서 develop 브랜치와 compare 후 PR
    • 생성팀원들의 PR 승인 후 develop 브랜치에 Merge
      • 로컬에서 작업 완료된 브랜치를 삭제
        • git branch -D feature/검색기능

핫픽스 브랜치 생성 및 완료

  • git flow hotfix start 긴급버그수정
    • git flow hotfix finish 긴급버그수정

Git Flow 전체 흐름

    1. 팀 리더가 new project 생성하고 초기 세팅을 진행
    1. 팀 리더가 github repository 에 올리기
    1. 나머지 팀원들은 repository에 올라 온 project를 클론받아 로컬에 가져옴
    1. 전 팀원 git flow init (초기화) 해줌
    • 초기화 시 Branch name for production releases?질문에
      • → 기본 값은 master 이지만 main 으로 설정하시는 것을 추천
    1. 모든 팀원 로컬 환경에서 git branch 명령어로 존재하는 브랜치를 확인해보면
    • 처음에는 main 브랜치 뿐만 있었지만 초기화 이후 develop 브랜치가 로컬에 생겨있음을 확인가능
    1. 각자 맡은 기능 개발을 위해 git flow feature start 기능이름 명령어로
    • feature 브랜치를 생성 → git branch 명령어로 확인해보면 feature/기능이름 브랜치가 생성됨
    1. 생성된 feature 브랜치에서 기능 개발 작업
    1. 작업 완료 후 feature 브랜치를 원격 저장소에 push 해서 PR 올림
    1. PR 타이틀, 설명 등 작성 후 리뷰어 팀원들 등록
    1. PR 승인 되면 Squash and Merge 버튼을 통해 압축 된 하나의 커밋으로 develop에 머지
    1. 그리고 로컬 환경에서 develop 브랜치로 checkout 하고,
    • 기능 개발시에 사용했던 기존의 feature 브랜치는 삭제
    1. 개발된 기능이 업데이트 된 원격 저장소의 develop 브랜치를 pull
    • git pull origin develop 명령어 사용하기
    1. (( 7~13번 무한 반복 )) ⭐️
    1. 각 팀원들이 기능 개발을 모두 완료했다면 배포할 준비를 해야함
    • 팀장이 배포 관련 설정을 모두 완료하고 develop 브랜치에 머지
    1. main 브랜치와 develop 브랜치를 compare & PR 한 후 merge
    1. main 브랜치를 EC2 에서 클론받아 배포를 진행

profile
안녕하세요.

0개의 댓글