배포? 무중단배포? 서버호스팅? 젠킨스? AWS?

mon99745·2022년 5월 14일
0
post-thumbnail

😠 배포? 무중단배포? 서버호스팅? 젠킨스? AWS?

오랜만에 만난 친구들과의 대화 중 프로젝트 배포단계의 작업으로, 클라우드 컴퓨팅의 사용하여 외부 사용자에게 노출시키며, 무중단되는 행위 를 칭하는 명칭이 달라 혼동이 왔고 서로의 화를 불러왔다.

기본적인 배포부터 AWS(EC2)를 줄곧 사용해오며 쉬운 개념이라고 자부했던 나였지만, 자세한 설명을 하지못하였다.
그 이유는 추상적인 개념만 희미하게 갖고 기존의 사용하던 방식대로 이어져왔기 때문이라고 생각한다.

이 글을 통해 외부 사용자에게 노출시키며, 무중단되는 행위에 대해 알아보고,
이 일을 계기로 알고 있는 개념을 끊임없이 의심하고 더욱 세밀한 공부를 하려고 한다.

🤔 그렇다면 하나씩 개념들을 정리해보자.

그래서 배포가 뭐야?
배포를 정확히 알기 위해서는 몇가지의 기능들과 차이점을 기술하면서 코드의 구동순서와 함께 이해하는게 좋을 것이라 생각한다.

순서 : 컴파일 ➡️ 빌드 ➡️ 배포
이 순서는 출판사의 과정 과정과 유사하다고 많이 말한다!!

  1. 컴파일 정의: 사용자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 일

👍 설명: 외국어 글을 한글로 번역하는 컴파일

  1. 빌드: 컴파일된 코드를 실제 실행할 수 있는 상태로 만드는 일

👍 설명: 한글으로 만드는 빌드

  1. 배포: 빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일

👍 설명: 을 고객들이 읽을 수 있도록 서점에 진열하는 것은 배포

그렇다면 우리의 주제인 "외부 사용자에게 노출시키며, 무중단되는 행위" 이게 맞는가?

결론 : 주제와 같은 행위의 명칭이 될 수 있지만 안될 수 있다. 그 이유는 포괄적인 개념이기 때문이다 즉 외부사용자에게 노출을 시키지 않는 경우도 존재하고 무중단되는 행위는 무중단 배포 기법에 따라야하기 때문이다!

그러면 무중단 배포는 또 뭔데??
여기서 "무중단"이라는 단어에 집중하면 쉽게 해결된다.
말 그대로 애플리케이션의 중단 없이 배포를 하는 행위를 말한다!

애플리케이션의 중단은 v1 서비스가 실행 중일때 v2 버전을 다운받게 된다.
이 후 v1 서비스 종료시키는 시점부터 서비스가 시작하기 전까지 중단되는 시간이 존재하게 된다. 이 X구간을 다운타임(downtime)이라고 한다.

TIP: 작은 프로젝트나 개인프로젝트에서 학습하기위함이 아닌 경우 무중단 배포는 제외할 수 있다.

무중단 배포 기법에는 무엇이 있을까?

  1. Rolling 배포
    사용 중인 인스턴스 내에서 새 버전을 점진적으로 교체하는 방식

  2. Blue Green 배포
    로드밸런서를 통해 모든 트래픽을 한번에 신버전 쪽으로 전환하는 방식

  3. 카나리 배포
    트래픽을 한번에 확 바꾸는 것이 아니라 단계적으로 전환

    로드 밸런서란? 서버에 가해지는 트래픽을 여러대의 서버에게 균등하게 분산시켜주는 역할을 하는 것이 로드 밸런서

물론 무중단 배포 기법을 사용하지 않고 외부 사용자에 접근을 허용시키는 방법도 존재한다 하지만 무수히 많은 단점들이 존재한다. 그렇기에 무중단 배포 기법의 대한 지식을 알고 있어야한다 하지만 이 글에서는 상세한 설명은 생략하겠다.

결론: 외부 사용자에게 노출시키며, 무중단되는 행위의 가장 부합하는 명칭이라고 생각한다 물론 외부 사용자 뿐만아니라 로컬에서만 사용가능하지만 대체적으로 외부노출이 된다고 생각하기 때문에 적합하다고 판단한다.

서버호스팅라고 할수도 있나?
서버호스팅은 말 그대로 서버를 호스팅할 수 있는 공간과 회선을 임대해주는 서비스를 말한다.

즉, 서버호스팅이란 외부 사용자에게 노출시키며, 무중단되는 행위를 해주는 서비스 명칭이고, 행위에 대한 명칭이 아니기 때문에 부적합하다.

Jenkins? AWS? 둘의 관계가 있나?

일단 젠킨스(Jenkins)를 알기위해서는 CI/CD 에 대한 이해가 필요하다.
CI는 지속적인 통합(Continuous Intergration)
CD는 지속적 배포(Continuous Delivery or Continuous Deploy)

간단히 설명하자면, 어플리케이션 개발 단계부터 배포 때까지 이 모든 단계들을 자동화를 통해 더 효율적이고 빠르게 사용자에게 빈번이 배포할 수 있도록 만드는 것이다.

그렇다면 젠킨스는? 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴이다.
모든 언어의 조합과 소스 코드 레포지토리에 대한 지속적인 통합(Continuous Intergration, CI)과 지속적 배포(Continuous Delivery, CD) 환경을 구축하기 위한 도구이다.

그렇다면 또 AWS 는?
Amazon Web Services의 약자로 아마존닷컴에서 개발한 클라우드 컴퓨팅 플랫폼이다.
aws는 아마존(Amazon)에서 제공하는 클라우드 서비스로, 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 제공하고 있다.

즉, 클라우드 컴퓨팅은 내 컴퓨터 이외에도 Apache Tomcat 과 같은 서버나 Mysql 같은 데이터를 사용할 수 있도록 가상 컴퓨터를 제공해주는 서비스이다.

필요 이유는 자신의 컴퓨터를 통해 서버 구동하여 배포를 하게 될 경우, 하루 온종일 컴퓨터를 켜둬야한다는 번거러움이 존재하기 때문에 서버컴퓨터인 가상컴퓨터를 지원 사용이 필요하다.

또한 비즈니스와 개발자가 웹 서비스를 사용하여 확장 가능하고 정교한 애플리케이션 구축을 지원한다.

현재 소규모 법인(회사) 및 개인 을 포함한 다양한 사용자들이 사용하고 있으며, 클라우드 컴퓨팅의 장점을 이용하기 위해 많은 거대 기업에서도 활용하고 있다고 한다.

결론 : Jenkins와 AWS의 관계가 있는 것이 아니라, 연동을 통해 더 효율적인 관리가 가능하다는 점이다.

References (참고 자료)

0개의 댓글