참고 문서
PBL(Project Based Learning)
- PBL이란 제시된 미션에 따라 프로젝트를 수행하며 이뤄지는 학습 방법을 의미
각 구성 요소와 역할
Django REST Framework
- Django를 기반으로 한 강력하고 유연한 REST API 구축 도구
- 아래의 기능을 갖추고 있어 API를 개발하는 데 많은 기능을 제공하여 효율성 증가
직렬화(Serialization) | 인증(Authentication) | 권한 부여(Permission)
필터링 및 페이지네이션
백엔드 API의 CRUD 작업 | JSON 응답 처리
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 브랜치를 생성
- 릴리즈를 준비한 후
master와 develop에 병합
5. hotfix
- 배포된 버전에서 긴급한 수정이 필요할 때
master에서 분기
- 수정 후,
master와 develop에 병합
장단점
장점
- 명확한 브랜치 구조로 팀 간 협업이 용이함.
- 병렬적인 개발이 가능하여 기능 추가와 버그 수정이 독립적으로 이루어질 수 있음.
- 긴급한 수정(Hotfix)이 필요한 경우에도 빠르게 대응 가능.
단점
- 브랜치가 많아져서 복잡해질 수 있음.
- 소규모 프로젝트에서는 과도한 관리일 수 있음.
사용 흐름
- 새로운 기능을 개발할 때는 feature 브랜치를 생성하여 작업한 후
develop으로 병합.
- 버그 수정이 완료되면
release 브랜치를 생성하여 배포 준비.
- 배포 중 문제가 발생하면
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 <버전번호>
- 완료: 릴리즈 완료 후
master와 develop에 병합 - git flow release finish <버전번호>
Hotfix 브랜치
- 생성: 긴급한 버그 수정이 필요할 때 사용 -
git flow hotfix start <버그이름>
- 완료: 수정 완료 후
master와 develop에 병합 - 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 전체 흐름
- 팀 리더가 new project 생성하고 초기 세팅을 진행
- 팀 리더가 github repository 에 올리기
- 나머지 팀원들은 repository에 올라 온 project를 클론받아 로컬에 가져옴
- 전 팀원
git flow init (초기화) 해줌
- 초기화 시
Branch name for production releases?질문에
- → 기본 값은
master 이지만 main 으로 설정하시는 것을 추천
- 모든 팀원 로컬 환경에서
git branch 명령어로 존재하는 브랜치를 확인해보면
- 처음에는
main 브랜치 뿐만 있었지만 초기화 이후 develop 브랜치가 로컬에 생겨있음을 확인가능
- 각자 맡은 기능 개발을 위해
git flow feature start 기능이름 명령어로
- feature 브랜치를 생성 →
git branch 명령어로 확인해보면 feature/기능이름 브랜치가 생성됨
- 생성된 feature 브랜치에서 기능 개발 작업
- 작업 완료 후 feature 브랜치를 원격 저장소에 push 해서 PR 올림
- PR 타이틀, 설명 등 작성 후 리뷰어 팀원들 등록
- PR 승인 되면 Squash and Merge 버튼을 통해 압축 된 하나의 커밋으로 develop에 머지
- 그리고 로컬 환경에서
develop 브랜치로 checkout 하고,
- 기능 개발시에 사용했던 기존의 feature 브랜치는 삭제
- 개발된 기능이 업데이트 된 원격 저장소의
develop 브랜치를 pull
git pull origin develop 명령어 사용하기
- (( 7~13번 무한 반복 )) ⭐️
- 각 팀원들이 기능 개발을 모두 완료했다면 배포할 준비를 해야함
- 팀장이 배포 관련 설정을 모두 완료하고
develop 브랜치에 머지
main 브랜치와 develop 브랜치를 compare & PR 한 후 merge
main 브랜치를 EC2 에서 클론받아 배포를 진행