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 서버에서 자동으로 빌드하면서 그 결과를 피드백 받는다.
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)는 바로 차단먹입니다. (ㅋㅋㅋ;)
23. Heroku 에서 구동할 수 있도록 설정하기 #3
● Heroku 는 로컬개발환경과 다른 가상환경으로서의 서버를 제공하다보니,
정적 리소스와 관련해서도 별도의 설정이 필요합니다.
정적 리소스 관리를 위해 아래와 같이 설정해줍니다. (settings.py)
Before After
24. Heroku 에서 구동할 수 있도록 설정하기 #4
● Heroku 서비스를 이용하려면
http://<app_name>.herokuapp.com 의 주소로 접근해야 하는데,
이와 같은 주소에 대한 접근을 허용한다는 의미로
settings.py 의 ALLOWED_HOSTS 변수를 수정해줘야 합니다.
51. Heroku Server
1. 개발환경에서 작업
완료
2. 로컬의 소스코드를
원격저장소에 Push
3. 원격저장소에 push
될때마다 빌드서버에서
잘 돌아가는지 검증
4-2. 잘 돌아가는지
검증되고 나면
프로덕션을 가정한
어떤 환경에서 배포
4-1. 빌드 성공 여부를
알림메시지로 전송
5. 빌드 실패했을 경우
Retry