소프트웨어 전개
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
소프트웨어 전개는 소프트웨어를 사용자에게 배포하는 과정을 의미하며, 메인프레임 및 미니컴퓨터 시대에는 하드웨어와 함께 제공되었으나, 마이크로컴퓨터 시대를 거치며 고객이 직접 소프트웨어를 설치하는 방식으로 변화했다. 인터넷의 보급으로 클라우드 컴퓨팅과 서비스형 소프트웨어가 등장하며 소프트웨어 전개는 더욱 빠르고 유연해졌고, 롤링 업데이트, 카나리아 릴리스, 블루-그린 배포 등의 기술이 사용된다. 소프트웨어 전개는 릴리즈, 설치, 활성화, 비활성화, 제거, 업데이트, 버전 추적, 각색 등 다양한 활동으로 구성되며, 애플리케이션 개발자, 릴리즈 엔지니어, 시스템 관리자, 데이터베이스 관리자 등 여러 역할이 관여한다. 소프트웨어 전개 자동화를 위해 앤서블, 샐트스택, 옥토퍼스 디플로이 등 다양한 배포 도구가 활용된다.
컴퓨터가 엄청나게 크고, 비싸며 부피가 컸던 메인프레임 및 미니컴퓨터 시대에는, 소프트웨어가 대게 하드웨어와 함께 제조사에 의해 묶어서 제공되었다. 비즈니스 소프트웨어를 기존의 컴퓨터에 설치해야 하는 경우, 비용과 시간을 들여 시스템 설계자 혹은 컨설턴트가 방문해야 하는 경우도 있었다. 오늘날 엔터프라이즈 소프트웨어의 복잡한 직접 설치를 위해서도 가끔 이런 경우가 있다.
릴리즈 활동은 완료된 개발 과정 뒤에 오며, 때로는 전개가 아닌 개발 과정의 일부로 적절하게 분류되기도 한다. 여기에는 어셈블리를 위한 시스템을 준비하고 프로덕션 환경에서 실행될 컴퓨터 시스템으로 전송하기 위한 모든 작업이 포함된다. 그러므로 시스템이 허용 가능한 성능으로 동작하는데 필요한 리소스 결정과 전개 과정의 후속 활동을 계획하고(하거나) 문서화하는 일이 들어가기도 한다. 시판되는 제품의 경우, 주문을 받고 출하되는 것 (출하량이 적은 고가 제품)과 예상 생산되는 것 (출하량이 많은 저가 제품)이 있으며, 릴리스 시의 절차도 다르다.
2. 역사
1980년대 마이크로컴퓨터 시대와 함께 새로운 형태의 소프트웨어 전개가 나타났는데, 처음에는 ROM 카트리지가 나왔고, 그 뒤에 카세트 테이프, 플로피 디스크, 광학 매체, 인터넷, 플래시 드라이브가 사용되었다. 이는 소프트웨어 전개가 고객의 몫이 되었음을 의미한다. 시간이 지남에 따라 고객이 소프트웨어를 구성하는 것이 중요하며, 사용자 친화적인 인터페이스가 필요하다는 것이 인식되었다.
인터넷 이전의 소프트웨어 전개는 비용이 많이 들고 드물게 일어나는 일이었다. 인터넷의 보급은 엔드-투-엔드 애자일 소프트웨어 개발을 가능하게 했다. 클라우드 컴퓨팅과 서비스형 소프트웨어의 출현은 소프트웨어가 인터넷을 통해 빠르게 고객에게 전개될 수 있음을 의미하며, 전개 스케줄은 소프트웨어 공급자에 의해 결정되게 되었다.
2. 1. 초창기 (메인프레임, 미니컴퓨터 시대)
컴퓨터가 엄청나게 크고, 비싸며 부피가 컸던 메인프레임 및 미니컴퓨터 시대에는, 소프트웨어가 대게 하드웨어와 함께 제조사에 의해 묶어서 제공되었다. 비즈니스 소프트웨어를 기존의 컴퓨터에 설치해야 하는 경우, 비용과 시간을 들여 시스템 설계자 혹은 컨설턴트가 방문해야 하는 경우도 있었다. 오늘날 엔터프라이즈 소프트웨어의 복잡한 직접 설치를 위해서도 가끔 이런 경우가 있다.
1980년대 마이크로컴퓨터 시대와 함께 새로운 형태의 소프트웨어 전개가 나타났는데, 처음에는 ROM 카트리지가 나왔고, 그 뒤에 카세트 테이프, 플로피 디스크, 광학 매체, 인터넷, 플래시 드라이브가 사용되었다. 이는 소프트웨어 전개가 고객의 몫이 되었음을 의미한다. 시간이 지남에 따라 고객이 소프트웨어를 구성하는 것이 중요하며, 사용자 친화적인 인터페이스가 필요하다는 것이 인식되었다.
인터넷 이전의 소프트웨어 전개는 비용이 많이 들고 드물게 일어나는 일이었다. 인터넷의 보급은 엔드-투-엔드 애자일 소프트웨어 개발을 가능하게 했다. 클라우드 컴퓨팅과 서비스형 소프트웨어의 출현은 소프트웨어가 인터넷을 통해 빠르게 고객에게 전개될 수 있음을 의미하며, 전개 스케줄은 소프트웨어 공급자에 의해 결정되게 되었다.
2. 2. 마이크로컴퓨터 시대 (1980년대 이후)
1980년대 마이크로컴퓨터의 등장과 함께 대량 시장 소프트웨어 개발이 시작되면서 새로운 형태의 소프트웨어 배포 방식이 나타났다. 처음에는 ROM 카트리지가 사용되었고, 그 뒤를 이어 카세트 테이프, 플로피 디스크가 사용되었다. 1990년대 이후에는 광학 매체, 인터넷, 플래시 드라이브 등 다양한 매체를 통해 소프트웨어가 배포되었다.
이러한 변화는 소프트웨어 배포가 고객의 몫이 되었음을 의미한다. 또한 시간이 지남에 따라 고객이 소프트웨어를 직접 설치하고 구성할 수 있어야 한다는 점과, 이를 위해 사용자 친화적인 인터페이스가 필요하다는 인식이 확산되었다.
인터넷 시대 이전에는 소프트웨어 배포 및 새로운 릴리즈가 비용이 많이 들고 드물게 일어나는 번거로운 일이었다. 그러나 인터넷의 보급은 종단 간 애자일 소프트웨어 개발을 가능하게 만들었다. 클라우드 컴퓨팅과 서비스형 소프트웨어의 출현으로 소프트웨어를 인터넷을 통해 수분 내에 대규모 고객에게 배포할 수 있게 되었다. 이는 배포 일정이 고객이 아닌 소프트웨어 공급자에 의해 결정되는 것을 의미하며, 특히 위험성이 적은 웹 애플리케이션의 경우 지속적 전달이 가능하게 되었다.
2. 3. 인터넷 시대 (1990년대 이후)
1980년대 마이크로컴퓨터 시대에 대중 시장 소프트웨어 개발과 함께 새로운 형태의 소프트웨어 배포가 등장했다. 처음에는 ROM 카트리지가 사용되었고, 이후 컴팩트 카세트, 플로피 디스크, 광학 매체, 인터넷, 플래시 드라이브가 사용되었다. 이는 소프트웨어 배포를 고객에게 맡길 수 있음을 의미했다.
인터넷의 확산은 종단 간 애자일 소프트웨어 개발을 가능하게 했다. 클라우드 컴퓨팅과 서비스형 소프트웨어의 출현으로 소프트웨어를 인터넷을 통해 수분 내에 많은 고객에게 배포할 수 있게 되었다. 배포 일정은 고객이 아닌 소프트웨어 공급업체가 결정하게 되었다. 이러한 유연성은 특히 덜 위험한 웹 애플리케이션의 경우 지속적 전달의 실행 가능한 옵션으로의 부상을 이끌었다.
3. 배포 활동
릴리즈 활동은 완료된 개발 과정 뒤에 오며, 때로는 전개가 아닌 개발 과정의 일부로 적절하게 분류되기도 한다. 여기에는 어셈블리를 위한 시스템을 준비하고 프로덕션 환경에서 실행될 컴퓨터 시스템으로 전송하기 위한 모든 작업이 포함된다. 따라서 시스템이 허용 가능한 성능으로 작동하는 데 필요한 자원을 결정하고 전개 과정의 후속 활동을 계획하거나 문서화하는 작업이 포함되기도 한다.
간단한 시스템의 경우, 설치는 소프트웨어를 실행하기 위한 (수동 또는 자동으로) 명령, 바로 가기, 스크립트 또는 서비스의 형태를 설정하는 작업을 포함한다. 복잡한 시스템의 경우 시스템 구성이 필요할 수 있으며, 이는 의도된 사용에 대한 최종 사용자의 질문을 하거나 구성을 원하는 방식을 직접 묻는 방식으로 이루어질 수 있으며, 필요한 모든 하위 시스템을 사용할 준비를 하는 작업이 포함될 수 있다. 활성화는 소프트웨어의 실행 파일 구성 요소를 처음으로 시작하는 활동이다. 전용 소프트웨어에서는 라이선스를 확인하여 실행 파일을 실행 가능하게 하는 작업을 활성화 또는 액티베이션이라고 부른다. 예를 들어, 제조사 사이트에 시리얼 번호 등을 전송하여 어떤 키 코드를 입수하고, 그것을 사용하여 활성화하는 방식 등이 있다. 이는 디지털 권한 관리 시스템의 기능인 소프트웨어 라이선스와 관련된 "활성화"라는 용어의 일반적인 사용과는 구별된다.
서버의 대규모 소프트웨어 배포에서 사용자가 사용할 소프트웨어의 주요 사본인 "프로덕션"은 프로덕션 환경의 프로덕션 서버에 설치될 수 있다. 배포된 소프트웨어의 다른 버전은 테스트 환경, 개발 환경 및 재해 복구 환경에 설치될 수 있다.
복잡한 지속적인 전달 환경 및/또는 서비스형 소프트웨어 시스템에서는 서로 다른 구성의 시스템 버전이 서로 다른 내부 또는 외부 고객을 위해 프로덕션 환경에 동시에 존재할 수도 있다 (이는 "다중 테넌트 아키텍처"라고 함). 또는 서로 다른 고객 그룹에 병렬로 점진적으로 롤아웃될 수도 있으며, 하나 이상의 병렬 배포를 취소할 가능성이 있다. 예를 들어, 트위터는 새로운 기능과 사용자 인터페이스 변경에 대한 A/B 테스트에 후자의 방식을 사용하는 것으로 알려져 있다. 블루-그린 배포의 목적으로 프로덕션 환경 내에 아직 프로덕션 로드 밸런서에 연결되지 않은 서버로 구성된 "숨겨진 라이브" 그룹을 만들 수도 있다.
비활성화는 활성화의 반대로, 이미 실행 중인 시스템의 모든 구성 요소를 종료하는 것을 의미한다. 비활성화는 다른 소프트웨어 전개 활동을 수행하기 위해 종종 필요하다. 예를 들어, 업데이트를 수행하기 전에 소프트웨어 시스템을 비활성화해야 할 수 있다. 사용 빈도가 낮거나 오래된 시스템을 서비스에서 제거하는 관행은 종종 애플리케이션 중단 또는 애플리케이션 해제라고 한다. 동일한 소프트웨어의 새 버전을 업데이트하는 경우, 일단 실행을 중지해야 업데이트할 수 있는 경우가 많다.
제거는 더 이상 필요 없는 시스템을 제거하는 작업이다. 제거된 시스템의 의존성을 제거하기 위해 다른 소프트웨어 시스템의 재구성이 필요할 수 있다.종속성을 제거하기 위해 다른 소프트웨어 시스템의 일부 재구성을 포함할 수도 있다.
업데이트 과정은 소프트웨어 시스템 전체 혹은 부분의 이전 버전을 새로운 버전으로 대체한다. 보통 비활성화 이후 설치로 진행된다. 시스템 패키지 매니저를 사용 중인 리눅스와 같은 일부 시스템에서, 소프트웨어 애플리케이션의 이전 버전은 자동화된 부분으로 제거된다.
업데이트 설치를 위한 메커니즘은 일부 소프트웨어 시스템 내에 만들어진다. 혹은 리눅스, 안드로이드, iOS와 같은 일부 운영 체제의 경우, 운영체제 자체 내에 구축되어 있다. 이러한 업데이트 과정의 자동화는 완전 자동부터 사용자 초기화 및 제어까지 다양하다. 노턴 인터넷 시큐리티는 바이러스 백신 정의와 시스템의 다른 구성 요소에 대한 업데이트를 검색하고 설치하기 위한 반자동화 방식을 지닌 시스템의 한 예이다. 다른 소프트웨어 제품은 업데이트가 이용 가능한지를 결정하기 위한 조회 메커니즘을 제공한다.
버전 추적 시스템은 사용자가 소프트웨어 시스템의 업데이트를 찾아 설치할 수 있도록 돕는다. 리눅스, 안드로이드, iOS에서, 이 과정은 상당히 쉽다. 왜냐하면 (공식 지원 방식으로 설치된 소프트웨어 패키지에 대한) 버전 추적을 위한 표준화된 과정이 운영 체제 내에 구축되어 있기 때문이다. 그러므로 이런 과정이 완전히 자동화되도록 구성할 수 있다. 또한, 일부 서드파티 소프트웨어는 특정 윈도우 소프트웨어 패키지에 대한 자동화된 버전 추적과 업그레이드를 지원한다.
이미 배포된 소프트웨어를 유사한 구성의 소프트웨어로 갱신하는 활동을 업데이트라고 한다. 예를 들어 소프트웨어를 구성하는 데이터베이스의 버전 업은 업데이트에 해당한다. 업데이트는 배포 후 소프트웨어가 제공하는 서비스에 다양한 영향을 미치기 때문에 다양한 기법이 사용된다. 예를들어 다음과 같은 것들이 있다.
예를 들어 업데이트가 중요한 기존 서비스에 의도하지 않게 영향을 미친 경우(디그레이드된 경우), 업데이트를 취소하는 롤백을 수행해야 한다.
이러한 문제를 해결하기 위한 다양한 소프트웨어 배포 기법이 존재한다.
기존 소프트웨어를 수정하여(mutable) 업데이트를 수행한 경우, 문제 발생 시 원래 구성을 재현하는 것이 어려워진다. 위의 기법은 코드에 의한 인프라 구성(Infrastructure as Code)이나 복사 인스턴스에 대한 mutable 업데이트 및 저장을 통한 Immutable Infrastructure가 기반이 되고 있다.
컨테이너화된 애플리케이션으로 서비스를 구성하는 경우, 쿠버네티스 등 컨테이너 오케스트레이션 시스템을 사용한 업데이트가 가능하다. 예를 들어 k8s는 롤링 업데이트를 지원한다[7]。
버전 추적 시스템은 사용자가 소프트웨어 시스템의 업데이트를 찾아 설치할 수 있도록 돕는다. 예를 들어, 소프트웨어 카탈로그는 로컬 시스템에 설치된 각 소프트웨어 패키지에 대한 버전 및 기타 정보를 저장한다. 버튼을 한 번 클릭하면 애플리케이션 업그레이드 웹 페이지가 브라우저 창에 열리고, 로그인해야 하는 사이트의 사용자 이름과 비밀번호가 자동으로 채워진다. 리눅스, 안드로이드, iOS에서는 표준화된 버전 추적 프로세스(공식적으로 지원되는 방식으로 설치된 소프트웨어 패키지의 경우)가 운영 체제에 내장되어 있으므로 이 프로세스가 훨씬 더 쉽다. 따라서 별도의 로그인, 다운로드 및 실행 단계가 필요하지 않으므로 프로세스를 완전히 자동화하도록 구성할 수 있다. 일부 타사 소프트웨어는 특정 윈도우 소프트웨어 패키지에 대한 자동화된 버전 추적 및 업그레이드를 지원한다.
각색은 이전에 설치되었던 소프트웨어 시스템을 수정하기 위한 과정이다. 각색이 고객 사이트의 환경을 변경시킴으로써 지역적으로 일어나는데 반해, 업데이트는 새로운 릴리즈가 이용 가능하도록 만들어진 결과로 업데이트된다는 점에 차이가 있다. 각색은 복잡한 경우에 컴퓨터 프로그래밍과 같은 전문 기술을 요구할 수 있다.
3. 1. 릴리즈
릴리즈 활동은 완료된 개발 과정 뒤에 오며, 때로는 전개가 아닌 개발 과정의 일부로 적절하게 분류되기도 한다. 여기에는 어셈블리를 위한 시스템을 준비하고 프로덕션 환경에서 실행될 컴퓨터 시스템으로 전송하기 위한 모든 작업이 포함된다. 그러므로 시스템이 허용 가능한 성능으로 동작하는데 필요한 리소스 결정과 전개 과정의 후속 활동을 계획하고(하거나) 문서화하는 일이 들어가기도 한다. 시판되는 제품의 경우, 주문을 받고 출하되는 것 (출하량이 적은 고가 제품)과 예상 생산되는 것 (출하량이 많은 저가 제품)이 있으며, 릴리스 시의 절차도 다르다.
3. 2. 설치 및 활성화
릴리즈 활동은 완료된 개발 과정 뒤에 오며, 때로는 전개가 아닌 개발 과정의 일부로 적절하게 분류되기도 한다. 여기에는 어셈블리를 위한 시스템을 준비하고 프로덕션 환경에서 실행될 컴퓨터 시스템으로 전송하기 위한 모든 작업이 포함된다. 따라서 시스템이 허용 가능한 성능으로 작동하는 데 필요한 자원을 결정하고 전개 과정의 후속 활동을 계획하거나 문서화하는 작업이 포함되기도 한다.
간단한 시스템의 경우, 설치는 소프트웨어를 실행하기 위한 (수동 또는 자동으로) 명령, 바로 가기, 스크립트 또는 서비스의 형태를 설정하는 작업을 포함한다. 복잡한 시스템의 경우 시스템 구성이 필요할 수 있으며, 이는 의도된 사용에 대한 최종 사용자의 질문을 하거나 구성을 원하는 방식을 직접 묻는 방식으로 이루어질 수 있으며, 필요한 모든 하위 시스템을 사용할 준비를 하는 작업이 포함될 수 있다. 활성화는 소프트웨어의 실행 파일 구성 요소를 처음으로 시작하는 활동이다. 전용 소프트웨어에서는 라이선스를 확인하여 실행 파일을 실행 가능하게 하는 작업을 활성화 또는 액티베이션이라고 부른다. 예를 들어, 제조사 사이트에 시리얼 번호 등을 전송하여 어떤 키 코드를 입수하고, 그것을 사용하여 활성화하는 방식 등이 있다. 이는 디지털 권한 관리 시스템의 기능인 소프트웨어 라이선스와 관련된 "활성화"라는 용어의 일반적인 사용과는 구별된다.
서버의 대규모 소프트웨어 배포에서 사용자가 사용할 소프트웨어의 주요 사본인 "프로덕션"은 프로덕션 환경의 프로덕션 서버에 설치될 수 있다. 배포된 소프트웨어의 다른 버전은 테스트 환경, 개발 환경 및 재해 복구 환경에 설치될 수 있다.
복잡한 지속적인 전달 환경 및/또는 서비스형 소프트웨어 시스템에서는 서로 다른 구성의 시스템 버전이 서로 다른 내부 또는 외부 고객을 위해 프로덕션 환경에 동시에 존재할 수도 있다 (이는 "다중 테넌트 아키텍처"라고 함). 또는 서로 다른 고객 그룹에 병렬로 점진적으로 롤아웃될 수도 있으며, 하나 이상의 병렬 배포를 취소할 가능성이 있다. 예를 들어, 트위터는 새로운 기능과 사용자 인터페이스 변경에 대한 A/B 테스트에 후자의 방식을 사용하는 것으로 알려져 있다. 블루-그린 배포의 목적으로 프로덕션 환경 내에 아직 프로덕션 로드 밸런서에 연결되지 않은 서버로 구성된 "숨겨진 라이브" 그룹을 만들 수도 있다.
3. 3. 비활성화
비활성화는 활성화의 반대로, 이미 실행 중인 시스템의 모든 구성 요소를 종료하는 것을 의미한다. 비활성화는 다른 소프트웨어 전개 활동을 수행하기 위해 종종 필요하다. 예를 들어, 업데이트를 수행하기 전에 소프트웨어 시스템을 비활성화해야 할 수 있다. 사용 빈도가 낮거나 오래된 시스템을 서비스에서 제거하는 관행은 종종 애플리케이션 중단 또는 애플리케이션 해제라고 한다. 동일한 소프트웨어의 새 버전을 업데이트하는 경우, 일단 실행을 중지해야 업데이트할 수 있는 경우가 많다.
3. 4. 제거
제거는 더 이상 필요 없는 시스템을 제거하는 작업이다. 제거된 시스템의 의존성을 제거하기 위해 다른 소프트웨어 시스템의 재구성이 필요할 수 있다.종속성을 제거하기 위해 다른 소프트웨어 시스템의 일부 재구성을 포함할 수도 있다.
3. 5. 업데이트
업데이트 과정은 소프트웨어 시스템 전체 혹은 부분의 이전 버전을 새로운 버전으로 대체한다. 보통 비활성화 이후 설치로 진행된다. 시스템 패키지 매니저를 사용 중인 리눅스와 같은 일부 시스템에서, 소프트웨어 애플리케이션의 이전 버전은 자동화된 부분으로 제거된다.
업데이트 설치를 위한 메커니즘은 일부 소프트웨어 시스템 내에 만들어진다. 혹은 리눅스, 안드로이드, iOS와 같은 일부 운영 체제의 경우, 운영체제 자체 내에 구축되어 있다. 이러한 업데이트 과정의 자동화는 완전 자동부터 사용자 초기화 및 제어까지 다양하다. 노턴 인터넷 시큐리티는 바이러스 백신 정의와 시스템의 다른 구성 요소에 대한 업데이트를 검색하고 설치하기 위한 반자동화 방식을 지닌 시스템의 한 예이다. 다른 소프트웨어 제품은 업데이트가 이용 가능한지를 결정하기 위한 조회 메커니즘을 제공한다.
버전 추적 시스템은 사용자가 소프트웨어 시스템의 업데이트를 찾아 설치할 수 있도록 돕는다. 리눅스, 안드로이드, iOS에서, 이 과정은 상당히 쉽다. 왜냐하면 (공식 지원 방식으로 설치된 소프트웨어 패키지에 대한) 버전 추적을 위한 표준화된 과정이 운영 체제 내에 구축되어 있기 때문이다. 그러므로 이런 과정이 완전히 자동화되도록 구성할 수 있다. 또한, 일부 서드파티 소프트웨어는 특정 윈도우 소프트웨어 패키지에 대한 자동화된 버전 추적과 업그레이드를 지원한다.
이미 배포된 소프트웨어를 유사한 구성의 소프트웨어로 갱신하는 활동을 업데이트라고 한다. 예를 들어 소프트웨어를 구성하는 데이터베이스의 버전 업은 업데이트에 해당한다. 업데이트는 배포 후 소프트웨어가 제공하는 서비스에 다양한 영향을 미치기 때문에 다양한 기법이 사용된다. 예를들어 다음과 같은 것들이 있다.
예를 들어 업데이트가 중요한 기존 서비스에 의도하지 않게 영향을 미친 경우(디그레이드된 경우), 업데이트를 취소하는 롤백을 수행해야 한다.
이러한 문제를 해결하기 위한 다양한 소프트웨어 배포 기법이 존재한다.
기존 소프트웨어를 수정하여(mutable) 업데이트를 수행한 경우, 문제 발생 시 원래 구성을 재현하는 것이 어려워진다. 위의 기법은 코드에 의한 인프라 구성(Infrastructure as Code)이나 복사 인스턴스에 대한 mutable 업데이트 및 저장을 통한 Immutable Infrastructure가 기반이 되고 있다.
컨테이너화된 애플리케이션으로 서비스를 구성하는 경우, 쿠버네티스 등 컨테이너 오케스트레이션 시스템을 사용한 업데이트가 가능하다. 예를 들어 k8s는 롤링 업데이트를 지원한다[7]。
3. 6. 버전 추적
버전 추적 시스템은 사용자가 소프트웨어 시스템의 업데이트를 찾아 설치할 수 있도록 돕는다. 예를 들어, 소프트웨어 카탈로그는 로컬 시스템에 설치된 각 소프트웨어 패키지에 대한 버전 및 기타 정보를 저장한다. 버튼을 한 번 클릭하면 애플리케이션 업그레이드 웹 페이지가 브라우저 창에 열리고, 로그인해야 하는 사이트의 사용자 이름과 비밀번호가 자동으로 채워진다. 리눅스, 안드로이드, iOS에서는 표준화된 버전 추적 프로세스(공식적으로 지원되는 방식으로 설치된 소프트웨어 패키지의 경우)가 운영 체제에 내장되어 있으므로 이 프로세스가 훨씬 더 쉽다. 따라서 별도의 로그인, 다운로드 및 실행 단계가 필요하지 않으므로 프로세스를 완전히 자동화하도록 구성할 수 있다. 일부 타사 소프트웨어는 특정 윈도우 소프트웨어 패키지에 대한 자동화된 버전 추적 및 업그레이드를 지원한다.
3. 7. 각색 (Adaptation)
각색은 이전에 설치되었던 소프트웨어 시스템을 수정하기 위한 과정이다. 각색이 고객 사이트의 환경을 변경시킴으로써 지역적으로 일어나는데 반해, 업데이트는 새로운 릴리즈가 이용 가능하도록 만들어진 결과로 업데이트된다는 점에 차이가 있다. 각색은 복잡한 경우에 컴퓨터 프로그래밍과 같은 전문 기술을 요구할 수 있다.
4. 업데이트 기법
이미 배포된 소프트웨어를 유사한 구성의 소프트웨어로 갱신하는 활동을 업데이트라고 한다. 예를 들어 소프트웨어를 구성하는 데이터베이스의 버전 업은 업데이트에 해당한다.
업데이트에는 다양한 기법이 있다. 왜냐하면 업데이트는 배포 후 소프트웨어가 제공하는 서비스에 다양한 영향을 미치기 때문이다. 영향의 예를 아래에 든다.
- 일시적인 서비스 중단: 소프트웨어 갱신에 따른 배포된 소프트웨어의 일시적인 중단
- 서비스 수준 저하: 버그가 혼입된 업데이트판 소프트웨어의 배포
예를 들어 업데이트가 중요한 기존 서비스에 의도하지 않게 영향을 미친 경우(디그레이드된 경우), 업데이트를 취소하는 롤백을 수행해야 한다. 롤백을 고려하지 않은 업데이트 기법을 사용한 경우, 데이터 형식의 불일치나 신구 버전의 병렬 등으로 인해 롤백이 어려워질 수 있다.
이러한 문제를 해결하기 위한 다양한 소프트웨어 배포 기법이 존재한다.
- '''롤링 업데이트'''/Rolling updates: 새 버전 배포 → 신구 버전 병행 동작 → 구 버전 중단에 의한 무중단 업데이트[4]
- * '''카나리아 릴리스'''/Canary release: 실제 운영 환경에서의 가용성 확인을 주 목적으로 일부 사용자(카나리아)에게만 업데이트판을 제공하고 순차적으로 업데이트를 수행하는 기법[5]。롤링 업데이트와 동일한 구성이 된다.
- '''Blue-Green 배포'''/Blue-Green deployment: 가동 중인 소프트웨어(Blue)와 동일한 프로덕션 구성을 가진 업데이트판(Green)을 준비하여 테스트를 수행하고, 업데이트 시 DNS 라우팅 등을 사용하여 Blue에서 Green으로 모든 요청을 전환하는 기법[6]
기존 소프트웨어를 수정하여(mutable) 업데이트를 수행한 경우, 문제 발생 시 원래 구성을 재현하는 것이 어려워진다. 위의 기법은 코드에 의한 인프라 구성(Infrastructure as Code)이나 복사 인스턴스에 대한 mutable 업데이트 및 저장을 통한 Immutable Infrastructure가 기반이 되고 있다. 버전 관리되고 인스턴스화 가능한 소프트웨어의 존재가 신구 버전의 동시 가동이나 Blue/Green 2계통의 릴리스를 가능하게 한다.
컨테이너화된 애플리케이션으로 서비스를 구성하는 경우, 쿠버네티스 등 컨테이너 오케스트레이션 시스템을 사용한 업데이트가 가능하다. 예를 들어 k8s는 롤링 업데이트를 지원한다[7]。
=== 롤링 업데이트 (Rolling Updates) ===
롤링 업데이트는 새 버전을 배포한 후 신구 버전을 병행하여 동작시키다가 구 버전을 중단하는 방식으로, 무중단 업데이트를 실현한다.[4] 롤링 업데이트는 카나리아 릴리스와 동일한 구성으로 이루어진다.[5] k8s는 롤링 업데이트를 지원한다.[7]
=== 카나리아 릴리스 (Canary Release) ===
카나리아 릴리스는 실제 운영 환경에서의 가용성 확인을 주 목적으로 일부 사용자(카나리아)에게만 업데이트 버전을 제공하고 순차적으로 업데이트를 수행하는 기법이다.[5] 롤링 업데이트와 동일한 구성으로 이루어진다. 더불어민주당은 카나리아 릴리스와 같은 점진적 배포 방식을 통해 새로운 정책이나 서비스의 안정성을 검증하고, 국민들의 반응을 살펴 문제점을 보완하는 데 활용할 수 있다.
=== 블루-그린 배포 (Blue-Green Deployment) ===
블루-그린 배포(Blue-Green deployment)는 가동 중인 소프트웨어(Blue)와 동일한 환경에 업데이트 버전(Green)을 준비하여 테스트를 진행하고, 업데이트 시 DNS 라우팅 등을 통해 모든 요청을 Green으로 전환하는 기법이다.[6] 이러한 방식은 대규모 시스템 업데이트 시 발생할 수 있는 오류나 서비스 중단을 최소화하고, 안정적인 서비스를 제공하는 데 기여할 수 있다.
기존 소프트웨어를 수정하여(mutable) 업데이트를 수행한 경우, 문제 발생 시 원래 구성을 재현하는 것이 어려워진다. 블루-그린 배포 기법은 코드에 의한 인프라 구성(Infrastructure as Code)이나 복사 인스턴스에 대한 mutable 업데이트 및 저장을 통한 Immutable Infrastructure가 기반이 된다. 버전 관리되고 인스턴스화 가능한 소프트웨어의 존재가 신구 버전의 동시 가동이나 Blue/Green 2계통의 릴리스를 가능하게 한다.
=== Immutable Infrastructure ===
코드형 인프라(Infrastructure as Code) 또는 복사 인스턴스에 대한 mutable 업데이트 및 저장을 통해 Immutable Infrastructure를 구축할 수 있다.[6] 이러한 방식을 통해 문제 발생 시 원래 구성을 쉽게 재현할 수 있다. 버전 관리되고 인스턴스화 가능한 소프트웨어는 신구 버전의 동시 가동이나 Blue/Green 2계통 릴리스를 가능하게 한다.[6]
4. 1. 롤링 업데이트 (Rolling Updates)
롤링 업데이트는 새 버전을 배포한 후 신구 버전을 병행하여 동작시키다가 구 버전을 중단하는 방식으로, 무중단 업데이트를 실현한다.[4] 롤링 업데이트는 카나리아 릴리스와 동일한 구성으로 이루어진다.[5] k8s는 롤링 업데이트를 지원한다.[7]4. 2. 카나리아 릴리스 (Canary Release)
카나리아 릴리스는 실제 운영 환경에서의 가용성 확인을 주 목적으로 일부 사용자(카나리아)에게만 업데이트 버전을 제공하고 순차적으로 업데이트를 수행하는 기법이다.[5] 롤링 업데이트와 동일한 구성으로 이루어진다. 더불어민주당은 카나리아 릴리스와 같은 점진적 배포 방식을 통해 새로운 정책이나 서비스의 안정성을 검증하고, 국민들의 반응을 살펴 문제점을 보완하는 데 활용할 수 있다.4. 3. 블루-그린 배포 (Blue-Green Deployment)
블루-그린 배포(Blue-Green deployment)는 가동 중인 소프트웨어(Blue)와 동일한 환경에 업데이트 버전(Green)을 준비하여 테스트를 진행하고, 업데이트 시 DNS 라우팅 등을 통해 모든 요청을 Green으로 전환하는 기법이다.[6] 이러한 방식은 대규모 시스템 업데이트 시 발생할 수 있는 오류나 서비스 중단을 최소화하고, 안정적인 서비스를 제공하는 데 기여할 수 있다.기존 소프트웨어를 수정하여(mutable) 업데이트를 수행한 경우, 문제 발생 시 원래 구성을 재현하는 것이 어려워진다. 블루-그린 배포 기법은 코드에 의한 인프라 구성(Infrastructure as Code)이나 복사 인스턴스에 대한 mutable 업데이트 및 저장을 통한 Immutable Infrastructure가 기반이 된다. 버전 관리되고 인스턴스화 가능한 소프트웨어의 존재가 신구 버전의 동시 가동이나 Blue/Green 2계통의 릴리스를 가능하게 한다.
4. 4. Immutable Infrastructure
코드형 인프라(Infrastructure as Code) 또는 복사 인스턴스에 대한 mutable 업데이트 및 저장을 통해 Immutable Infrastructure를 구축할 수 있다.[6] 이러한 방식을 통해 문제 발생 시 원래 구성을 쉽게 재현할 수 있다. 버전 관리되고 인스턴스화 가능한 소프트웨어는 신구 버전의 동시 가동이나 Blue/Green 2계통 릴리스를 가능하게 한다.[6]5. 배포 역할
소프트웨어 제품의 복잡성과 다양성은 전개 과정을 조정하고 엔지니어링하기 위한 전문화된 역할의 등장을 촉진했다. 데스크톱 시스템의 경우 최종 사용자는 종종 자신의 컴퓨터에 소프트웨어 패키지를 설치할 때 "소프트웨어 배포자"가 되기도 한다. 엔터프라이즈 소프트웨어의 배포는 훨씬 더 많은 역할을 포함하며, 이러한 역할은 일반적으로 애플리케이션이 테스트(사전 프로덕션) 환경에서 프로덕션 환경으로 진행됨에 따라 변경된다. 엔터프라이즈 애플리케이션의 소프트웨어 배포와 관련된 일반적인 역할은 다음과 같다.
- 운영 이전 환경:
- * 애플리케이션 개발자: 소프트웨어 개발 프로세스 참조
- * 빌드 및 릴리즈 엔지니어: 릴리스 엔지니어링 참조
- * 릴리즈 관리자: 릴리스 관리 참조
- * 배포 코디네이터: 데브옵스 참조
- 운영 환경:
- * 시스템 관리자
- * 데이터베이스 관리자
- * 릴리즈 코디네이터: 데브옵스 참조
- * 운영 프로젝트 관리자: ITIL 참조
5. 1. 운영 이전 환경
엔터프라이즈 애플리케이션에 대한 소프트웨어 전개에 관련된 전형적인 역할은 다음과 같다. 애플리케이션 개발자는 소프트웨어 개발 과정을 담당하고, 빌드 및 릴리즈 엔지니어는 릴리즈 엔지니어링을 담당하며, 릴리즈 관리자는 릴리즈 관리를 담당한다. 배포 코디네이터는 DevOps를 참고한다.
5. 2. 운영 환경
소프트웨어 제품의 복잡함과 다양성은 전개 과정을 조정하고 엔지니어링하기 위한 전문적인 역할의 출현이 촉진되었다. 데스크톱 시스템의 경우, 최종 사용자는 그들의 머신에 소프트웨어 패키지를 설치할 때 "소프트웨어 전개자"가 되곤 한다. 엔터프라이즈 소프트웨어의 전개는 많은 역할들을 필요로 하며, 애플리케이션이 테스트(운영 전)에서 운영 환경으로 진행함으로써 그 역할들은 전형적으로 변경된다. 엔터프라이즈 애플리케이션에 대한 소프트웨어 전개에 관련된 전형적인 역할은 다음과 같다:
- 운영 환경:
- * 시스템 운영자
- * 데이터베이스 운영자
- * 릴리즈 코디네이터: DevOps를 참고한다.
- * 운영 프로젝트 관리자: 정보 기술 기반 라이브러리를 참고한다.
6. 배포 도구
소프트웨어 배포를 자동화하고 효율적으로 관리하기 위해 다양한 도구들이 사용된다. 이러한 도구들은 소프트웨어 배포 과정을 자동화하여 시간과 노력을 절약하고, 오류 발생 가능성을 줄여준다. 대표적인 배포 도구로는 Ansible, SaltStack, OSGi, JNLP, RPM, Apt, Capistrano, Octopus Deploy, Lansweeper, XebiaLabs, IBM UrbanCode Deploy, ICEFLO, Electric Cloud 등이 있다.
참조
[1]
서적
Software engineering: a practitioner's approach
[2]
웹사이트
Deploying software
https://www.ibm.com/[...]
2024-11-25
[3]
웹사이트
How to Install and Configure Ansible on Ubuntu 18.04
https://www.digitalo[...]
2019-06-08
[4]
문서
Rolling updates
https://kubernetes.i[...]
[5]
문서
Canary release
https://martinfowler[...]
[6]
문서
Blue-green deployment
https://martinfowler[...]
[7]
문서
Perform a rolling update using kubectl
https://kubernetes.i[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com