SlideShare a Scribd company logo
1 of 52
Download to read offline
Github + Heroku +
Circle CI 를 이용한
Django APP
배포 자동화
HI-ARC @kodingwarrior
Continuous
Integration
(줄여서 CI)
에 대해 알아보자.
Continuous Integration(CI, 지속적 통합)
● 개발 프로세스 중 가장 고통스러운 통합과정을 자동화하는 방법
● 원격의 빌드서버를 이용해서 작업을 단위별로 나누어 자주 통합하여,
로컬에서 빌드하는 과정에서 발생하는 부담을 최소화
○ 프로젝트의 복잡성이 증가하고 여러 사람이 협업하는 과정이 필요하다면
통합비용이 기하급수적으로 증가.
Integration 이 왜 필요한가? (1)
● 유동적으로 변경되는 소스코드
○ Dependency 문제
○ 잠재적인 에러를 방지하기 위해 정적 type checker
○ 코드의 구린내(bad smell)를 제거하기 위한 리팩토링
○ 팀 내 코딩표준 준수 여부 검사
○ ...
Integration 이 왜 필요한가? (2)
● 테스트 케이스가 얼마나 통과하는지 검사
○ 기존의 프로그램이 잘 돌아가는 것을 보장하기 위한 테스트 케이스 작성은 default
○ 좀 더 높은 소프트웨어 품질을 위해 QA 부서와 협업하여 추가적인 테스트케이스 작성
CI 를 수행하는 절차
1. 버전 관리 저장소를 연결한다(예를 들면, git을 이용하는 원격저장소)
* Ex. Github, Bitbucket, Gitlab
2. 버전 관리 저장소를 CI 서비스에 등록한다.
* Ex. Jenkins, Circle CI, Travis CI
3. CI 서버에서 자동으로 빌드하면서 그 결과를 피드백 받는다.
뭔소린지 모를테니
일단 따라해봅시다.
Preparation
● Github 계정 생성 및 Git 개발환경 설정
● Heroku 계정 생성 및 Heroku 개발환경 설정
● Circle CI 개발환경 설정
Github
● 일단 가입을 해둡시다. (https://github.com/join)
Git 설치
● 일단 설치를 해둡시다. (http://git-scm.com)
Git 설치
● 일단 설치를 해둡시다. (http://git-scm.com)
Git 설치
● 일단 설치를 해둡시다. (http://git-scm.com)
이 가이드는 git-bash 를 사용하는 것을
기본전제로 만들어져 있습니다.
Heroku
● 일단 가입을 해둡시다. (https://signup.heroku.com)
Heroku 앱 생성 #1
● 공개된 웹 상에서 서비스를 구동시키기 위해 앱 생성 버튼을 클릭합니다.
Heroku 앱 생성 #2
● 웹브라우저로 들어갈 때 어떤 도메인으로 들어갈 것인지 적어줍니다.
http://<app-name>.herokuapp.com
Heroku 앱 생성 #3
● 설정이 적절히 끝나고 나면 create app 버튼 클릭
(옵션) Django 프로젝트 생성
● 일단 프로젝트를 만들어줍시다.
(옵션) git 관련 설정
● 프로젝트가 이미 만들어져 있지만,
github 에 올라가있지 않다면 github 에 올려두도록 합시다.
Django 의존성 명시하기
● 의존관계가 빠짐없도록 requirements.txt 파일에
사용되는 라이브러리를 명시하도록 합시다.
Ex. 정확히 몇버전이어야 하는지, 몇버전 이상이어야 하는지
● (권장되는 방법은 아니지만)
애매하다면 현재 깔려있는 라이브러리에 대한 정보를
pip freeze 명령으로 requirements.txt 파일에 집어넣어줍니다.
Heroku 에서 구동할 수 있도록 설정하기 #1
● Procfile 은 Heroku 서버의 프로세스가
웹서버를 구동시키기 위해 어떤 명령을 실행해야하는지 나타냅니다.
● gunicorn <project_name>.wsgi
Heroku 에서 구동할 수 있도록 설정하기 #2
● Heroku 서버는 Postgres 라는 데이터베이스를 디폴트로 사용합니다.
따라서, Heroku 에서 데이터베이스를 이용하려면
Postgres 에 맞게 설정해주어야 합니다.
● 저장소를 통째로 heroku 에 올리는 과정을 거치다보니,
파일시스템 기반의 DB(SQLite)는 바로 차단먹입니다. (ㅋㅋㅋ;)
Heroku 에서 구동할 수 있도록 설정하기 #2
Postgres 에 맞게
적당히 맞춰야함
Heroku 에서 구동할 수 있도록 설정하기 #3
● Heroku 는 로컬개발환경과 다른 가상환경으로서의 서버를 제공하다보니,
정적 리소스와 관련해서도 별도의 설정이 필요합니다.
정적 리소스 관리를 위해 아래와 같이 설정해줍니다. (settings.py)
Before After
Heroku 에서 구동할 수 있도록 설정하기 #4
● Heroku 서비스를 이용하려면
http://<app_name>.herokuapp.com 의 주소로 접근해야 하는데,
이와 같은 주소에 대한 접근을 허용한다는 의미로
settings.py 의 ALLOWED_HOSTS 변수를 수정해줘야 합니다.
Circle CI
● 일단 가입을 해둡시다. (https://circleci.com/signup)
Circle CI 로 돌아가서...
● 배포하고자 하는 레포지토리를 선택하고 Set Up Project 버튼을 누른다
배포과정에서 필요한 환경변수 설정 #1
● 메인화면에서 환경변수를 설정하고자 하는
프로젝트 옆의 톱니바퀴 버튼을 클릭
배포과정에서 필요한 환경변수 설정 #2
● 아래와 같이 Environment Var. -> Add Variable 클릭
배포과정에서 필요한 환경변수 설정 #3
배포과정에서 필요한 환경변수 설정 #3
배포과정에서 필요한 환경변수 설정 #3
Circle CI 설정 파일 수정 후 commit & push
Circle CI 로 돌아가서...
●
Circle CI 로 돌아가서...
● 각 커밋 단위로 빌드가 돌고 있는 것을 볼 수 있다.
Circle CI 로 돌아가서...
● 각 커밋 단위로 빌드가 돌고 있는 것을 볼 수 있다.
● 크게는 어떤 과정을 거치고 있는지, 작게는 어떤 과정을 거치고
있는지...
Heroku Page 로 들어가서 한번 확인해보자.
● 모든 단계가 정상적으로 끝나면, 성공적으로 배포가 된 것을 확인할 수
있다.
이제 어떻게 빌드가
되었는지를 볼거에요
Circle CI 빌드과정 분석 #1
● 각 커밋마다 빌드 과정을 상세하게 나타내는 페이지가 있으니
FIXED 혹은 FAILED 가 표시된 부분을 클릭해보도록 합시다.
Circle CI 빌드과정 분석 #2
● 빌드 작업이 어떤 단계를 가지고 진행이 되고 있는 것을
Step-by-step 으로 실시간으로 확인할 수 있습니다.
Circle CI 빌드과정 분석 #2
● 빌드 작업이 어떤 단계를 가지고 진행이 되고 있는 것을
Step-by-step 으로 실시간으로 확인할 수 있습니다.
Circle CI 빌드과정 분석 #3
● 이를 유심히 잘 살펴보면,
config.yml 파일에서 명시한 것과 상당히 유사합니다.
Circle CI 빌드과정 분석 #4
● Circle CI 를 이용해서 통합하는 과정은
일련의 워크플로우를 가지는 것을 관찰할 수 있습니다.
이제 전체적인
큰 그림을 볼 거에요
1. 개발환경에서 작업
완료
1. 개발환경에서 작업
완료
2. 로컬의 소스코드를
원격저장소에 Push
1. 개발환경에서 작업
완료
2. 로컬의 소스코드를
원격저장소에 Push
3. 원격저장소에 push
될때마다 빌드서버에서
잘 돌아가는지 검증
Heroku Server1. 개발환경에서 작업
완료
2. 로컬의 소스코드를
원격저장소에 Push
3. 원격저장소에 push
될때마다 빌드서버에서
잘 돌아가는지 검증
4. 잘 돌아가는지
검증되고 나면
프로덕션을 가정한
어떤 환경에서 배포
빌드서버에다가
코드 던져놓고
성공/실패 여부를
확인하는 것까지는
괜찮다. So what?
Slack Bot 과의 연동
Slack Bot 과의 연동
Heroku Server
1. 개발환경에서 작업
완료
2. 로컬의 소스코드를
원격저장소에 Push
3. 원격저장소에 push
될때마다 빌드서버에서
잘 돌아가는지 검증
4-2. 잘 돌아가는지
검증되고 나면
프로덕션을 가정한
어떤 환경에서 배포
4-1. 빌드 성공 여부를
알림메시지로 전송
5. 빌드 실패했을 경우
Retry
이제 좀 더 큰 그림이 느껴지나요?

More Related Content

What's hot

협업하는 디자이너 - #1 git설치하기
협업하는 디자이너 - #1 git설치하기협업하는 디자이너 - #1 git설치하기
협업하는 디자이너 - #1 git설치하기Jinkyou Son
 
초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHubYurim Jin
 
20130709 gradle
20130709 gradle20130709 gradle
20130709 gradleSukjin Yun
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Hyunjun Roh
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차B - 가지치기와 꼬리표 달기
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차B - 가지치기와 꼬리표 달기Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차B - 가지치기와 꼬리표 달기
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차B - 가지치기와 꼬리표 달기Youngbin Han
 
깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기Ohgyun Ahn
 
그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수Yeon Soo Kim
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기DongHwan Yu
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)승용 윤
 
NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기Hyunsuk Ahn
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PyCon 2015 - 업무에서 빠르게 활용하는 PyQtPyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt덕규 임
 
알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1Hansol Kang
 
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법MinGeun Park
 
GitHub Pull Request 간단 사용 설명서
GitHub Pull Request 간단 사용 설명서GitHub Pull Request 간단 사용 설명서
GitHub Pull Request 간단 사용 설명서jungseob shin
 
KotlinJS Overview - TwiceRound #001
KotlinJS Overview - TwiceRound #001KotlinJS Overview - TwiceRound #001
KotlinJS Overview - TwiceRound #001Lee WonJae
 
Jenkins with Unity3d & Android
Jenkins with Unity3d & Android Jenkins with Unity3d & Android
Jenkins with Unity3d & Android 종국 임
 
이클립스 플랫폼
이클립스 플랫폼이클립스 플랫폼
이클립스 플랫폼Kenu, GwangNam Heo
 

What's hot (20)

협업하는 디자이너 - #1 git설치하기
협업하는 디자이너 - #1 git설치하기협업하는 디자이너 - #1 git설치하기
협업하는 디자이너 - #1 git설치하기
 
초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub
 
20130709 gradle
20130709 gradle20130709 gradle
20130709 gradle
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)
 
Git command
Git commandGit command
Git command
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차B - 가지치기와 꼬리표 달기
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차B - 가지치기와 꼬리표 달기Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차B - 가지치기와 꼬리표 달기
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차B - 가지치기와 꼬리표 달기
 
깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기
 
그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기
 
Gitflow ppt
Gitflow pptGitflow ppt
Gitflow ppt
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)
 
NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PyCon 2015 - 업무에서 빠르게 활용하는 PyQtPyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt
 
알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1
 
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
 
GitHub Pull Request 간단 사용 설명서
GitHub Pull Request 간단 사용 설명서GitHub Pull Request 간단 사용 설명서
GitHub Pull Request 간단 사용 설명서
 
KotlinJS Overview - TwiceRound #001
KotlinJS Overview - TwiceRound #001KotlinJS Overview - TwiceRound #001
KotlinJS Overview - TwiceRound #001
 
Jenkins with Unity3d & Android
Jenkins with Unity3d & Android Jenkins with Unity3d & Android
Jenkins with Unity3d & Android
 
이클립스 플랫폼
이클립스 플랫폼이클립스 플랫폼
이클립스 플랫폼
 

Similar to Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화

1. github action을 활용한 CI
1. github action을 활용한 CI1. github action을 활용한 CI
1. github action을 활용한 CIDEVELOPER.NET
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
Golang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainGolang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainNAVER Engineering
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practicesHyunil Shin
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기Mijeong Park
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
How to use Github? (For Cien)
How to use Github? (For Cien)How to use Github? (For Cien)
How to use Github? (For Cien)민수 김
 
git + Pull Request + Code Review and Project Management with Agile
git + Pull Request + Code Review and Project Management with Agilegit + Pull Request + Code Review and Project Management with Agile
git + Pull Request + Code Review and Project Management with AgileWooseong Kim
 
소스트리(SourceTree)로 배우는 Git 사용법
소스트리(SourceTree)로 배우는 Git 사용법소스트리(SourceTree)로 배우는 Git 사용법
소스트리(SourceTree)로 배우는 Git 사용법주형 고
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Changyeop Kim
 
Bon voyage Docker_Kubernetes
Bon voyage Docker_KubernetesBon voyage Docker_Kubernetes
Bon voyage Docker_Kubernetesssuseraada82
 
2020년 10월 10일 개발자 이야기
2020년 10월 10일 개발자 이야기2020년 10월 10일 개발자 이야기
2020년 10월 10일 개발자 이야기Jay Park
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기Minyoung Jeong
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자KyeongWon Koo
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
 
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습 [숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습 Soongsil University
 

Similar to Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화 (20)

1. github action을 활용한 CI
1. github action을 활용한 CI1. github action을 활용한 CI
1. github action을 활용한 CI
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
Golang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainGolang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchain
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practices
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
How to use Github? (For Cien)
How to use Github? (For Cien)How to use Github? (For Cien)
How to use Github? (For Cien)
 
git + Pull Request + Code Review and Project Management with Agile
git + Pull Request + Code Review and Project Management with Agilegit + Pull Request + Code Review and Project Management with Agile
git + Pull Request + Code Review and Project Management with Agile
 
소스트리(SourceTree)로 배우는 Git 사용법
소스트리(SourceTree)로 배우는 Git 사용법소스트리(SourceTree)로 배우는 Git 사용법
소스트리(SourceTree)로 배우는 Git 사용법
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
 
Bon voyage Docker_Kubernetes
Bon voyage Docker_KubernetesBon voyage Docker_Kubernetes
Bon voyage Docker_Kubernetes
 
2020년 10월 10일 개발자 이야기
2020년 10월 10일 개발자 이야기2020년 10월 10일 개발자 이야기
2020년 10월 10일 개발자 이야기
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
 
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습 [숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
 

More from Jae-yeol Lee

[PyCon KR 2023 Lightning talk day1] 개밥먹기 주도 개발
[PyCon KR 2023 Lightning talk day1] 개밥먹기 주도 개발[PyCon KR 2023 Lightning talk day1] 개밥먹기 주도 개발
[PyCon KR 2023 Lightning talk day1] 개밥먹기 주도 개발Jae-yeol Lee
 
Browser Engineering - Ch1 Summary
Browser Engineering - Ch1 SummaryBrowser Engineering - Ch1 Summary
Browser Engineering - Ch1 SummaryJae-yeol Lee
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Jae-yeol Lee
 
HI-ARC Number Theory
HI-ARC Number TheoryHI-ARC Number Theory
HI-ARC Number TheoryJae-yeol Lee
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceJae-yeol Lee
 
HI-ARC PS 102 Bitmask
HI-ARC PS 102 BitmaskHI-ARC PS 102 Bitmask
HI-ARC PS 102 BitmaskJae-yeol Lee
 
HI-ARC ACM ICPC TF #5 (ADVANCED DFS)
HI-ARC ACM ICPC TF #5 (ADVANCED DFS)HI-ARC ACM ICPC TF #5 (ADVANCED DFS)
HI-ARC ACM ICPC TF #5 (ADVANCED DFS)Jae-yeol Lee
 
HI-ARC ACM-ICPC 준비반 - KMP algorithm
HI-ARC ACM-ICPC 준비반 - KMP algorithmHI-ARC ACM-ICPC 준비반 - KMP algorithm
HI-ARC ACM-ICPC 준비반 - KMP algorithmJae-yeol Lee
 
HI-ARC 정기모임 #7 BFS
HI-ARC 정기모임 #7 BFSHI-ARC 정기모임 #7 BFS
HI-ARC 정기모임 #7 BFSJae-yeol Lee
 
HI-ARC 정기모임 #6 dfs
HI-ARC 정기모임 #6 dfsHI-ARC 정기모임 #6 dfs
HI-ARC 정기모임 #6 dfsJae-yeol Lee
 
[APL OJT] REST API TEST
[APL OJT] REST API TEST[APL OJT] REST API TEST
[APL OJT] REST API TESTJae-yeol Lee
 
Embedded project presentation
Embedded project presentationEmbedded project presentation
Embedded project presentationJae-yeol Lee
 

More from Jae-yeol Lee (14)

[PyCon KR 2023 Lightning talk day1] 개밥먹기 주도 개발
[PyCon KR 2023 Lightning talk day1] 개밥먹기 주도 개발[PyCon KR 2023 Lightning talk day1] 개밥먹기 주도 개발
[PyCon KR 2023 Lightning talk day1] 개밥먹기 주도 개발
 
Browser Engineering - Ch1 Summary
Browser Engineering - Ch1 SummaryBrowser Engineering - Ch1 Summary
Browser Engineering - Ch1 Summary
 
Whats new rails 7
Whats new   rails 7Whats new   rails 7
Whats new rails 7
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]
 
HI-ARC Number Theory
HI-ARC Number TheoryHI-ARC Number Theory
HI-ARC Number Theory
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute Force
 
HI-ARC PS 102 Bitmask
HI-ARC PS 102 BitmaskHI-ARC PS 102 Bitmask
HI-ARC PS 102 Bitmask
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
HI-ARC ACM ICPC TF #5 (ADVANCED DFS)
HI-ARC ACM ICPC TF #5 (ADVANCED DFS)HI-ARC ACM ICPC TF #5 (ADVANCED DFS)
HI-ARC ACM ICPC TF #5 (ADVANCED DFS)
 
HI-ARC ACM-ICPC 준비반 - KMP algorithm
HI-ARC ACM-ICPC 준비반 - KMP algorithmHI-ARC ACM-ICPC 준비반 - KMP algorithm
HI-ARC ACM-ICPC 준비반 - KMP algorithm
 
HI-ARC 정기모임 #7 BFS
HI-ARC 정기모임 #7 BFSHI-ARC 정기모임 #7 BFS
HI-ARC 정기모임 #7 BFS
 
HI-ARC 정기모임 #6 dfs
HI-ARC 정기모임 #6 dfsHI-ARC 정기모임 #6 dfs
HI-ARC 정기모임 #6 dfs
 
[APL OJT] REST API TEST
[APL OJT] REST API TEST[APL OJT] REST API TEST
[APL OJT] REST API TEST
 
Embedded project presentation
Embedded project presentationEmbedded project presentation
Embedded project presentation
 

Recently uploaded

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 

Recently uploaded (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 

Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화

  • 1. Github + Heroku + Circle CI 를 이용한 Django APP 배포 자동화 HI-ARC @kodingwarrior
  • 3. Continuous Integration(CI, 지속적 통합) ● 개발 프로세스 중 가장 고통스러운 통합과정을 자동화하는 방법 ● 원격의 빌드서버를 이용해서 작업을 단위별로 나누어 자주 통합하여, 로컬에서 빌드하는 과정에서 발생하는 부담을 최소화 ○ 프로젝트의 복잡성이 증가하고 여러 사람이 협업하는 과정이 필요하다면 통합비용이 기하급수적으로 증가.
  • 4. Integration 이 왜 필요한가? (1) ● 유동적으로 변경되는 소스코드 ○ Dependency 문제 ○ 잠재적인 에러를 방지하기 위해 정적 type checker ○ 코드의 구린내(bad smell)를 제거하기 위한 리팩토링 ○ 팀 내 코딩표준 준수 여부 검사 ○ ...
  • 5. Integration 이 왜 필요한가? (2) ● 테스트 케이스가 얼마나 통과하는지 검사 ○ 기존의 프로그램이 잘 돌아가는 것을 보장하기 위한 테스트 케이스 작성은 default ○ 좀 더 높은 소프트웨어 품질을 위해 QA 부서와 협업하여 추가적인 테스트케이스 작성
  • 6. CI 를 수행하는 절차 1. 버전 관리 저장소를 연결한다(예를 들면, git을 이용하는 원격저장소) * Ex. Github, Bitbucket, Gitlab 2. 버전 관리 저장소를 CI 서비스에 등록한다. * Ex. Jenkins, Circle CI, Travis CI 3. CI 서버에서 자동으로 빌드하면서 그 결과를 피드백 받는다.
  • 8. Preparation ● Github 계정 생성 및 Git 개발환경 설정 ● Heroku 계정 생성 및 Heroku 개발환경 설정 ● Circle CI 개발환경 설정
  • 9. Github ● 일단 가입을 해둡시다. (https://github.com/join)
  • 10. Git 설치 ● 일단 설치를 해둡시다. (http://git-scm.com)
  • 11. Git 설치 ● 일단 설치를 해둡시다. (http://git-scm.com)
  • 12. Git 설치 ● 일단 설치를 해둡시다. (http://git-scm.com) 이 가이드는 git-bash 를 사용하는 것을 기본전제로 만들어져 있습니다.
  • 13. Heroku ● 일단 가입을 해둡시다. (https://signup.heroku.com)
  • 14. Heroku 앱 생성 #1 ● 공개된 웹 상에서 서비스를 구동시키기 위해 앱 생성 버튼을 클릭합니다.
  • 15. Heroku 앱 생성 #2 ● 웹브라우저로 들어갈 때 어떤 도메인으로 들어갈 것인지 적어줍니다. http://<app-name>.herokuapp.com
  • 16. Heroku 앱 생성 #3 ● 설정이 적절히 끝나고 나면 create app 버튼 클릭
  • 17. (옵션) Django 프로젝트 생성 ● 일단 프로젝트를 만들어줍시다.
  • 18. (옵션) git 관련 설정 ● 프로젝트가 이미 만들어져 있지만, github 에 올라가있지 않다면 github 에 올려두도록 합시다.
  • 19. Django 의존성 명시하기 ● 의존관계가 빠짐없도록 requirements.txt 파일에 사용되는 라이브러리를 명시하도록 합시다. Ex. 정확히 몇버전이어야 하는지, 몇버전 이상이어야 하는지 ● (권장되는 방법은 아니지만) 애매하다면 현재 깔려있는 라이브러리에 대한 정보를 pip freeze 명령으로 requirements.txt 파일에 집어넣어줍니다.
  • 20. Heroku 에서 구동할 수 있도록 설정하기 #1 ● Procfile 은 Heroku 서버의 프로세스가 웹서버를 구동시키기 위해 어떤 명령을 실행해야하는지 나타냅니다. ● gunicorn <project_name>.wsgi
  • 21. Heroku 에서 구동할 수 있도록 설정하기 #2 ● Heroku 서버는 Postgres 라는 데이터베이스를 디폴트로 사용합니다. 따라서, Heroku 에서 데이터베이스를 이용하려면 Postgres 에 맞게 설정해주어야 합니다. ● 저장소를 통째로 heroku 에 올리는 과정을 거치다보니, 파일시스템 기반의 DB(SQLite)는 바로 차단먹입니다. (ㅋㅋㅋ;)
  • 22. Heroku 에서 구동할 수 있도록 설정하기 #2 Postgres 에 맞게 적당히 맞춰야함
  • 23. Heroku 에서 구동할 수 있도록 설정하기 #3 ● Heroku 는 로컬개발환경과 다른 가상환경으로서의 서버를 제공하다보니, 정적 리소스와 관련해서도 별도의 설정이 필요합니다. 정적 리소스 관리를 위해 아래와 같이 설정해줍니다. (settings.py) Before After
  • 24. Heroku 에서 구동할 수 있도록 설정하기 #4 ● Heroku 서비스를 이용하려면 http://<app_name>.herokuapp.com 의 주소로 접근해야 하는데, 이와 같은 주소에 대한 접근을 허용한다는 의미로 settings.py 의 ALLOWED_HOSTS 변수를 수정해줘야 합니다.
  • 25. Circle CI ● 일단 가입을 해둡시다. (https://circleci.com/signup)
  • 26. Circle CI 로 돌아가서... ● 배포하고자 하는 레포지토리를 선택하고 Set Up Project 버튼을 누른다
  • 27. 배포과정에서 필요한 환경변수 설정 #1 ● 메인화면에서 환경변수를 설정하고자 하는 프로젝트 옆의 톱니바퀴 버튼을 클릭
  • 28. 배포과정에서 필요한 환경변수 설정 #2 ● 아래와 같이 Environment Var. -> Add Variable 클릭
  • 32. Circle CI 설정 파일 수정 후 commit & push
  • 33. Circle CI 로 돌아가서... ●
  • 34. Circle CI 로 돌아가서... ● 각 커밋 단위로 빌드가 돌고 있는 것을 볼 수 있다.
  • 35. Circle CI 로 돌아가서... ● 각 커밋 단위로 빌드가 돌고 있는 것을 볼 수 있다. ● 크게는 어떤 과정을 거치고 있는지, 작게는 어떤 과정을 거치고 있는지...
  • 36. Heroku Page 로 들어가서 한번 확인해보자. ● 모든 단계가 정상적으로 끝나면, 성공적으로 배포가 된 것을 확인할 수 있다.
  • 38. Circle CI 빌드과정 분석 #1 ● 각 커밋마다 빌드 과정을 상세하게 나타내는 페이지가 있으니 FIXED 혹은 FAILED 가 표시된 부분을 클릭해보도록 합시다.
  • 39. Circle CI 빌드과정 분석 #2 ● 빌드 작업이 어떤 단계를 가지고 진행이 되고 있는 것을 Step-by-step 으로 실시간으로 확인할 수 있습니다.
  • 40. Circle CI 빌드과정 분석 #2 ● 빌드 작업이 어떤 단계를 가지고 진행이 되고 있는 것을 Step-by-step 으로 실시간으로 확인할 수 있습니다.
  • 41. Circle CI 빌드과정 분석 #3 ● 이를 유심히 잘 살펴보면, config.yml 파일에서 명시한 것과 상당히 유사합니다.
  • 42. Circle CI 빌드과정 분석 #4 ● Circle CI 를 이용해서 통합하는 과정은 일련의 워크플로우를 가지는 것을 관찰할 수 있습니다.
  • 45. 1. 개발환경에서 작업 완료 2. 로컬의 소스코드를 원격저장소에 Push
  • 46. 1. 개발환경에서 작업 완료 2. 로컬의 소스코드를 원격저장소에 Push 3. 원격저장소에 push 될때마다 빌드서버에서 잘 돌아가는지 검증
  • 47. Heroku Server1. 개발환경에서 작업 완료 2. 로컬의 소스코드를 원격저장소에 Push 3. 원격저장소에 push 될때마다 빌드서버에서 잘 돌아가는지 검증 4. 잘 돌아가는지 검증되고 나면 프로덕션을 가정한 어떤 환경에서 배포
  • 51. Heroku Server 1. 개발환경에서 작업 완료 2. 로컬의 소스코드를 원격저장소에 Push 3. 원격저장소에 push 될때마다 빌드서버에서 잘 돌아가는지 검증 4-2. 잘 돌아가는지 검증되고 나면 프로덕션을 가정한 어떤 환경에서 배포 4-1. 빌드 성공 여부를 알림메시지로 전송 5. 빌드 실패했을 경우 Retry
  • 52. 이제 좀 더 큰 그림이 느껴지나요?