X
배포(Deployment)
배포
개발이 완성된 프로그램을 서버에 이전시키는 일
배포는 왜 어려울까
- 개발이 완성된 프로그램이 설치되어 있어야한다(installed)
- 프로그램이 구동될 수 있도록 구성되어 있어야한다(configuration)
- 내 개발 프로그램을 서버에 배포 했을 때 제대로 돌아가야 한다.(running)
- 프로그램이 제대로 작동하는지 테스트한다(testing)
애플리케이션 라이프 싸이클에 따른 환경들
Local
- 개발자가 가지고 있는 로컬 환경
- 기능 개발이 이루어진다.
Dev
- 각 기능들을 통합해서 테스트하는 환경
Staging
- 프로덕션에 넘기기전 프로덕션과 동일한 환경으로 구성하여 테스트
Production
- 실제 서비스를 하는 환경
과정의 예시
- A개발자가 기능 개발 혹은 버그 수정을 마친 후 Dev 환경에 알린다
- Dev환경에서 A개발자의 기능을 추가시킨 후 테스트한다.
- 테스트를 실패했을 시 다시 1번 과정으로
- 통합된 코드를 Staging 환경에 넘긴다.
- Staging 환경은 실제와 거의 동일하게 구성된 환경으로 실제 프로덕션 환경에서도 제대로 기능이 동작하는지 테스트한다.
- 테스트를 실패했을시 다시 1번 과정으로
- 테스트를 통과하게 되었을 때 Production 환경으로 넘긴다.
기존의 프로세스
- 병합의 날이 존재
- 각 개발자들이 개발한 코드를 하나씩 병합한다.
- 빌드 및 테스트
- 독립적으로 작성된 코드는 다른 개발자가 동시에 적용하는 변경 사항과 충돌할 가능성이 크다.
- 통합 지옥
- 통합하는 과정은 부드럽고 매끄럽지 않기 때문에 통합하는 과정에서 수정을 하게 되는데 이 과정이 몇 시간 또는 며칠이 걸리게 될 수 도 있다.
- 통합 완료가 됨(개발 완료)
- 테스트 환경에서 다시 빌드 및 테스트
- 프로덕션 환경에 적용
- ssh 접속
- 저장소에서 새로운 코드를 업데이트
- 빌드 및 테스트
- 프로그램 재 실행
CI/CD
CI(Continuous Integration):지속적 통합
지속적 통합(CI)
이란 통합 지옥
을 해결하기 위한 방안으로 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 통합 서버에서 빌드되고 테스트되어 결과를 전달해주는 것.
개개인의 개발자는 자신이 작업한 것을 커밋했을 때 CI를 통해서 해당 기능이 전체 프로그램에 영향을 주는지 확인을 할 수 있다.
(이미지 출처 : https://deploybot.com/blog/the-expert-guide-to-continuous-integration)
CD(Continuous Delivery):지속적 배달
CI를 걸쳐 성공적으로 통합이 되었을 때, 테스트 환경과 스테이징 환경까지 배포하는 것을 자동화시키는 것.
CD(Continuous Deployment):지속적 배포
지속적 배달이 CD가 테스트 환경과 스테이징 환경까지 범위라면 Continuous Deployment는 프로덕션환경에 릴리즈하는 과정까지 자동화시키는 것.
CI/CD는 애플리케이션 개발 단계를 자동화여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법.
Reference
최근 글