가상화 환경 또는 가상 머신 (Virtual Machine, VM)은 실제 하드웨어 시스템을 에뮬레이션하거나 복제한 소프트웨어 구현체입니다. 이는 다른 운영 체제 (OS)를 호스트 시스템에서 독립적으로 실행할 수 있게 해주며, 하나의 물리적 기계에서 여러 가상 시스템을 구동하는 것이 가능하게 합니다. 가상화 기술은 다양한 용도로 사용될 수 있습니다:

  • 개발 및 테스트: 개발자들은 가상 머신을 사용하여 다양한 OS와 환경에서 소프트웨어를 테스트하고 디버깅할 수 있습니다. 이는 개발 단계에서 버그를 찾고 수정하는 데 도움이 됩니다.
  • 서버 통합: 가상화를 통해 하나의 물리적 서버에서 여러 가상 서버를 운영함으로써 하드웨어 사용을 최적화하고 운영 비용을 절감할 수 있습니다.
  • 레거시 시스템 실행: 일부 애플리케이션은 특정 OS나 환경에서만 작동합니다. 가상화를 통해 이러한 레거시 애플리케이션을 최신 시스템에서 실행할 수 있습니다.
  • 보안 및 안전성 : 가상화는 시스템 간의 격리를 제공하므로, 하나의 시스템에서 문제가 발생하더라도 다른 시스템에 영향을 미치지 않습니다. 이는 보안 및 안정성을 향상시키는 데 도움이 됩니다.

가상화 환경을 관리하고 생성하는 데는 여러 소프트웨어 도구가 있습니다. VMware, VirtualBox, Hyper-V, KVM 등이 있습니다. 이들은 사용자에게 CPU, 메모리, 디스크 공간, 네트워크 인터페이스 등의 가상 자원을 제공하며, 각기 다른 운영 체제를 병렬로 실행할 있게 해줍니다.

 

 

쿠버네티스를 왜 해야 하나?

: 개발을 하게 될때 어플리케이션을 만들고 배포 과정을 도와주는 플랫폼으로 쿠버네티스를 많이 사용하고 있기 때문에

 

쿠버네티스란 애플리케이션을 개발하고 배포하는 과정을 크게 단순화해주는 플랫폼이다. 

 

미들웨어에서의 컨테이너 개념은 일반적으로 컨테이너 기반의 가상화 기술을 의미합니다. 컨테이너는 소프트웨어를 실행하는데 필요한 모든 요소(코드, 런타임, 시스템 도구, 시스템 라이브러리 등)를 패키지화하여 일관된 환경에서 소프트웨어를 실행하는 기술입니다.

미들웨어에서 컨테이너 기술을 이용하면, 애플리케이션과 그에 필요한 미들웨어 컴포넌트들(웹 서버, 메시지 큐, 데이터베이스 등)을 독립적으로 패키지화하고, 배포하며, 실행하고, 관리할 수 있습니다. 이는 개발, 테스트, 배포의 과정을 간소화하고, 환경에 따른 문제를 최소화하는 등의 이점을 제공합니다.

 

2023.06.28 - [Infra] - 미들웨어(Middleware), IaaS(Infrastructure as a Service), PaaS(Platform as a Service), SaaS(Software as a Service)

 

더보기

쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션을 배포, 확장 및 관리하기 위한 오픈소스 플랫폼으로, 그 자체로는 PaaS(Platform as a Service)를 완전히 제공하지는 않습니다. 쿠버네티스는 보다 기본적인 수준에서 동작하는 시스템으로, 기본적인 빌딩 블록(컨테이너, 서비스, 볼륨 등)을 제공하고, 이를 통해 사용자가 원하는 플랫폼을 구축할 수 있게 해줍니다.

그러나 쿠버네티스 위에 추가적인 추상화 계층을 제공하는 오픈소스 프로젝트나 상용 제품들이 있으며, 이러한 솔루션들을 사용함으로써 쿠버네티스를 기반으로 하는 PaaS를 구축할 수 있습니다. 예를 들어, OpenShift, Rancher, Google Cloud Run 등이 이에 해당합니다.

결국, 쿠버네티스는 컨테이너 오케스트레이션을 위한 필수적인 기능을 제공하며, 이를 기반으로 사용자나 기업이 자신들의 요구사항에 맞는 PaaS 구축하는 사용될 있습니다. 이는 쿠버네티스가 제공하는 유연성과 확장성 때문에 가능한 것입니다.

 

컨테이너 관리 플랫폼인 Docker Kubernetes 이러한 컨테이너 기술을 대중화시키는 역할을 하였습니다.

 

Docker는 컨테이너화 된 애플리케이션을 생성하고 관리하기 위한 오픈 소스 플랫폼입니다. Docker는 컨테이너라는 개념을 대중화했으며, 컨테이너를 사용하여 소프트웨어 의존성 문제를 해결했습니다.

컨테이너는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 애플리케이션 실행에 필요한 모든 것을 포함하므로, 개발자는 코드가 예상대로 실행될 것임을 확신할 수 있습니다. Docker 컨테이너는 거의 모든 곳에서 실행될 수 있으므로, 소프트웨어 배포는 물론, 배포, 테스트, 그리고 디버그 과정도 단순화되었습니다.

Kubernetes (또는 줄여서 k8s 또는 kube)는 컨테이너화 된 애플리케이션을 자동으로 배포, 확장, 관리할 수 있는 오픈 소스 플랫폼입니다. Kubernetes는 컨테이너 오케스트레이션 시스템으로, 대규모의 컨테이너화 된 애플리케이션을 관리하고 운영하는데 필요한 도구를 제공합니다.

Kubernetes는 서비스 검색, 로드 밸런싱, 자동 복구, 스케일링, 롤링 업데이트, 시크릿과 구성 관리 등을 지원합니다. 이를 통해 사용자는 복잡한 머신 클러스터 위에서 애플리케이션을 보다 효율적으로 운영할 수 있습니다.

Docker Kubernetes 상호 보완적인 관계로, Docker 애플리케이션을 패키지화하고 실행하는데 필요한 플랫폼을 제공하며, Kubernetes 이러한 Docker 컨테이너를 대규모로 관리하고 운영하는데 필요한 도구를 제공합니다.

  • 자동 복구(Auto Healing): 쿠버네티스는 시스템에 장애가 발생하면 애플리케이션을 자동으로 복구하는 기능을 제공합니다. 예를 들어, 컨테이너가 실패하면, 노드가 다운되면, 또는 애플리케이션 자체가 사용자 정의 상태 체크를 통과하지 못하면 쿠버네티스는 문제가 된 컨테이너를 재시작하여 애플리케이션을 복구할 수 있습니다.
  • 스케일링과 로드 밸런싱(Scaling and Load Balancing): 쿠버네티스는 애플리케이션의 트래픽 요구사항에 따라 동적으로 스케일링할 수 있습니다. 또한, 부하 분산을 위한 서비스를 제공하여 애플리케이션의 트래픽을 여러 인스턴스로 분산시키는 기능도 제공합니다.
  • 코드 배포 및 롤백(Deployment and Rollback): 쿠버네티스를 사용하면 새로운 버전의 애플리케이션을 빠르고 안정적으로 배포할 수 있으며, 문제가 발생하면 이전 버전으로 쉽게 롤백할 수 있습니다.
  • 개발 운영 효율성(Dev and Ops Efficiency): 쿠버네티스는 애플리케이션을 개발하고 운영하는 과정에서의 효율성을 크게 향상시킵니다. 개발팀은 애플리케이션 코드에 집중할 있으며, 운영팀은 배포, 모니터링, 로깅 등의 운영 작업을 효과적으로 수행할 있습니다.
더보기
  • 컨테이너: 더 작고 더 빠르게 애플리케이션을 실행할 수 있게 해주는 소프트웨어 표준화 단위입니다. 이는 애플리케이션의 코드, 설정 및 종속성을 하나로 모아 각 환경에서 동일하게 실행할 수 있게 해줍니다. 컨테이너는 리눅스 커널 기술인 namespaces와 cgroups를 활용해 격리된 실행 환경을 제공합니다.
  • 쿠버네티스: 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화해주는 오픈 소스 플랫폼입니다. 여러 머신에 걸쳐 컨테이너가 동작하도록 분산 시스템을 구축하고 관리하는 것을 돕습니다.
  • 웹 서버와 컨테이너: 웹 서버는 일반적으로 운영 체제 위에 설치되며, 웹 브라우저와 같은 클라이언트의 HTTP 요청에 응답합니다. 반면, 컨테이너는 필요한 소프트웨어 및 라이브러리를 포함하여 웹 서버와 같은 애플리케이션을 격리된 환경에서 실행합니다. 이를 통해 개발 환경과 운영 환경 사이의 일관성을 보장하며, 배포 및 확장을 용이하게 합니다.
  • AWS와 EKS: AWS는 클라우드 컴퓨팅 서비스를 제공하는 플랫폼이며, 가상 머신을 구동하는 서비스인 EC2 등을 포함합니다. 반면, AWS EKS는 Amazon Elastic Kubernetes Service의 약자로, AWS에서 제공하는 완전 관리형 쿠버네티스 서비스입니다. EKS는 쿠버네티스를 사용하여 컨테이너화된 애플리케이션을 실행하고 관리할 수 있도록 해줍니다. EKS는 AWS의 EC2 인스턴스를 사용하여 쿠버네티스 클러스터를 구성할 수도 있습니다.

따라서 "쿠버네티스" 컨테이너를 관리하고 운영하는 플랫폼으로, 컨테이너화된 서버와 같은 애플리케이션을 확장 배포하는 도움이 됩니다

 

 

더보기

쿠버네티스 메인서버 3개쓰는 이유?

 

쿠버네티스(Kubernetes)에서 메인 서버를 일반적으로 "마스터 노드"라고 부릅니다. 마스터 노드는 클러스터의 작업을 조정하고 관리하는 중요한 역할을 담당합니다. 여기에는 API 서버, 스케줄러, etcd 등과 같은 중요한 구성 요소가 포함됩니다.

마스터 노드를 3개 사용하는 주된 이유는 고가용성(High Availability)과 내결함성(Fault Tolerance)을 달성하기 위해서입니다.

  • 고가용성: 클러스터에서 중요한 작업을 처리하는 마스터 노드가 다운되면 전체 시스템에 심각한 문제가 발생할 수 있습니다. 여러 개의 마스터 노드를 사용하면, 한 노드가 실패하더라도 다른 노드들이 역할을 이어받아 서비스 중단을 방지할 수 있습니다.
  • 내결함성: 또한, 여러 마스터 노드를 사용하면 노드 간에 상태 정보를 복제하여 장애가 발생했을 때 데이터 손실을 방지하고 빠르게 복구할 수 있습니다.

3개의 마스터 노드를 사용하는 것은 일반적인 선택이며, 이는 홀수 개의 노드를 통해 etcd(클러스터의 핵심 데이터를 저장하는 데이터베이스) 대한 분산 합의 알고리즘을 보다 효과적으로 실행할 있기 때문입니다. 3개를 사용하면 노드가 실패해도 나머지 노드가 정상적으로 작동하여 클러스터의 상태를 유지할 있습니다.

Cloud(클라우드) 란?  인터넷을 통한 컴퓨팅 자원의 제공 ! * 엔드 유저가 중간 과정을 마치 구름처럼 모르는 것에서 유래

"클라우드" 또는 "클라우드 컴퓨팅"은 인터넷을 통해 데이터 저장, 서버, 데이터베이스, 네트워킹, 소프트웨어 등과 같은 컴퓨터 처리 자원을 제공하는 기술을 의미합니다. 이는 사용자가 개인적이거나 사업용으로 필요한 컴퓨팅 자원을 물리적인 컴퓨터나 서버에 직접 설치하거나 유지하지 않고도 이용할 수 있도록 하는 것입니다. 클라우드 컴퓨팅의 주요 장점은 다음과 같습니다:

  • 비용 절감: 클라우드 컴퓨팅은 사전에 많은 금액을 지불해 컴퓨터 하드웨어를 구매하고 유지 관리하는 비용을 절감할 수 있습니다.
  • 스케일링: 사용자는 자신의 비즈니스 요구에 따라 컴퓨팅 자원을 늘리거나 줄일 수 있습니다. 이를 '스케일 업' 또는 '스케일 다운'이라고 합니다.
  • 데이터 백업과 복구: 클라우드에서 데이터를 저장하면 데이터의 백업과 복구가 더 쉬워집니다. 이는 클라우드 서비스 제공자가 데이터 센터의 여러 위치에 데이터를 복제할 수 있기 때문입니다.
  • 어디서나 액세스: 인터넷이 연결된 모든 장소에서 데이터와 애플리케이션에 접근할 수 있습니다.

알려진 클라우드 서비스 제공자로는 Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure 등이 있습니다. 이러한 회사들은 다양한 클라우드 기반 솔루션을 제공하여 개인, 기업, 정부 등이 IT 리소스를 효율적으로 활용할  있도록 지원합니다.

 

* Cloud Computing model : Private(On-premise), Public(Off-premise), Hybrid Cloud(Private + Public) 

 

미들웨어(Middleware)는 운영 체제와 애플리케이션 사이에서 다양한 서비스를 제공하는 소프트웨어입니다. 운영체제와 응용프로그램 사이에 위치하며, 분산 환경에서 여러 다른 시스템과 애플리케이션 간의 통신과 데이터 관리를 돕는 소프트웨어입니다. 다른 애플리케이션, 데이터베이스, 사용자와의 통신을 돕고, 이러한 상호작용을 더 효과적이고 효율적으로 만들어주는 역할을 합니다.  예를 들어, 데이터베이스 시스템, 웹 서버, 메시지 큐 등이 미들웨어에 포함됩니다. 다음은 미들웨어의 주요 기능 및 예입니다:

  • 통신: 미들웨어는 종종 다른 애플리케이션, 서비스, 또는 사용자와의 통신을 촉진하는 데 사용됩니다. 이것은 종종 네트워크 프로토콜을 추상화하여 개발자가 직접 통신을 처리하는 것보다 더 쉽게 통신을 설정하고 관리할 수 있게 합니다. 예를 들어, 웹 서버 미들웨어는 HTTP 요청 및 응답을 처리합니다.
  • 인증 및 보안: 미들웨어는 종종 인증 및 보안 역할을 수행합니다. 예를 들어, 인증 미들웨어는 사용자가 애플리케이션에 액세스하는 데 필요한 자격 증명을 관리하고 검증합니다.
  • 데이터베이스 연결: 미들웨어는 데이터베이스와의 통신을 도와주는 역할도 합니다. 이를 통해 개발자는 데이터베이스 쿼리를 쉽게 작성하고, 결과를 해석하고, 에러를 처리할 수 있습니다.
  • 메시지 큐: 미들웨어는 메시지 지향 미들웨어(MOM) 형태로도 존재하며, 이는 비동기 메시지 전달을 위해 사용됩니다. 이러한 시스템에서, 메시지는 큐에 보관되며, 수신자가 준비될 때까지 기다립니다.

이런 방식으로, 미들웨어는 개발자가 서로 다른 시스템과의 상호작용에  신경 쓰고 애플리케이션 로직에 집중할  있게 도와줍니다. 이를 통해 애플리케이션의 효율성과 안정성을 향상시킬  있습니다.

 

IaaS(Infrastructure as a Service), PaaS(Platform as a Service), SaaS(Software as a Service)는 클라우드 컴퓨팅의 세 가지 주요 서비스 모델입니다.(Cloud Service Model) -> 클라우드가 어디까지 공급을 하는가 의 기준 

  • IaaS: 기본적인 컴퓨팅 자원을 제공합니다. 가상머신, 스토리지, 네트워크 등의 기본 인프라를 클라우드에서 직접 관리하고 사용할 수 있습니다. Amazon EC2, Google Compute Engine, Azure Virtual Machines 등이 이에 해당합니다.
    -> 가상 머신 제공, 직접 어플리케이션 설치 및 설정
  • PaaS: IaaS에 추가로, 개발, 테스트, 배포, 운영 등 소프트웨어 개발 및 운영에 필요한 플랫폼을 제공합니다. 사용자는 애플리케이션 코드에 집중하며, 하드웨어, 운영체제, 미들웨어 등에 대한 관리는 PaaS 제공자가 담당합니다. Google App Engine, Heroku, Azure App Service 등이 이에 해당합니다.
    -> 필요한 어플리케이션 선택 및 필수 설정 값 설정, 개발한 Code를 Cloud에서 제공받은 어플리케이션에 업로드
  • SaaS: 사용자가 인터넷을 통해 접속하여 사용하는 소프트웨어 서비스를 의미합니다. 소프트웨어와 그 관련 데이터는 클라우드에 호스팅되며, 웹 브라우저 등을 통해 서비스를 이용합니다. Gmail, Google Docs, Dropbox, Salesforce 등이 SaaS의 예입니다.
    -> 소프트웨어 자체를 돈내고 구매하는 것 

각각의 서비스 모델은 클라우드 환경에서 제공하는 서비스의 범위와 종류, 사용자의 관리 범위 등을 다르게 정의합니다.

미들웨어에서의 컨테이너 개념은 일반적으로 컨테이너 기반의 가상화 기술을 의미합니다. 컨테이너는 소프트웨어를 실행하는데 필요한 모든 요소(코드, 런타임, 시스템 도구, 시스템 라이브러리 등)를 패키지화하여 일관된 환경에서 소프트웨어를 실행하는 기술입니다.

컨테이너는 다음과 같은 특징을 가집니다:

  • 경량성: 컨테이너는 기본 운영체제의 커널을 공유하면서 독립적으로 실행됩니다. 따라서 전통적인 가상머신에 비해 매우 경량하고 빠르게 시작될 수 있습니다.
  • 이식성: 컨테이너에는 애플리케이션을 실행하는 데 필요한 모든 것이 포함되어 있으므로, 환경에 관계없이 일관된 동작을 보장합니다.
  • 높은 효율성: 컨테이너는 리소스를 효율적으로 공유하고 사용할 수 있으며, 대량의 애플리케이션을 동시에 실행할 수 있습니다.

미들웨어에서 컨테이너 기술을 이용하면, 애플리케이션과 그에 필요한 미들웨어 컴포넌트들(웹 서버, 메시지 큐, 데이터베이스 등)을 독립적으로 패키지화하고, 배포하며, 실행하고, 관리할 수 있습니다. 이는 개발, 테스트, 배포의 과정을 간소화하고, 환경에 따른 문제를 최소화하는 등의 이점을 제공합니다.

컨테이너 관리 플랫폼인 Docker Kubernetes 이러한 컨테이너 기술을 대중화시키는   역할을 하였습니다.

 

2023.06.28 - [Infra] - Kubernetes(k8s, kube), Docker

 

미들웨어와 IaaS(Infrastructure as a Service)는 서로 다른 개념입니다.

  • 미들웨어: 앞서 설명했듯이, 미들웨어는 운영 체제와 애플리케이션 사이에서 다양한 서비스를 제공하는 소프트웨어입니다. 이는 통신, 인증, 보안, 데이터베이스 연결 등의 역할을 수행합니다.
  • IaaS: IaaS는 클라우드 기반 서비스로, 사용자에게 가상화된 컴퓨팅 리소스를 제공하는 모델입니다. 이는 서버, 네트워크, 스토리지, 데이터 센터 공간 등의 기본적인 컴퓨팅 인프라를 필요에 따라 조정 가능한 서비스로 제공합니다.

미들웨어는 그 자체로 애플리케이션과 운영 체제 사이에서 중개자 역할을 하는 소프트웨어입니다.

그러나, 특정 IaaS나 PaaS 환경에서 미들웨어를 사용하거나 배포할 수 있습니다. 예를 들어, IaaS 제공자는 가상 서버, 스토리지 등의 기본적인 인프라를 제공하고, 사용자는 이런 인프라 위에 미들웨어를 설치하고 운영할 수 있습니다. 또한, PaaS 제공자는 플랫폼을 제공하는데, 이 플랫폼은 미들웨어를 포함할 수 있습니다.

 

웹 애플리케이션 서버(WAS, Web Application Server)는 미들웨어의 한 종류로, 웹 애플리케이션과 서버 환경을 연결하는 역할을 합니다. 따라서, 미들웨어가 IaaS나 PaaS를 "가지고 있다"고 표현하기보다는, 미들웨어는 IaaS나 PaaS 환경에서 사용될 수 있고, PaaS 환경은 미들웨어를 포함할 수 있다는 식으로 이해하는 것이 더 정확합니다.

 

미들웨어 자체는 소프트웨어의 한 부분으로서, 일반적으로 두 개의 애플리케이션, 혹은 애플리케이션과 데이터베이스 사이에서 정보를 주고 받는 역할을 합니다. 그러나 컨테이너 기술은 애플리케이션의 배포, 운영을 간편하게 만드는 도구로, 이 도구를 이용하면 미들웨어를 포함한 여러 소프트웨어를 보다 쉽게 배포하고 관리할 수 있습니다. 컨테이너는 어플리케이션과 그 어플리케이션이 동작하는데 필요한 모든 환경(라이브러리, 시스템 도구, 코드, 런타임 등)을 하나로 묶어서, 어느 환경에서도 동일하게 실행될 수 있도록 도와줍니다. 따라서 미들웨어를 컨테이너화 하면 개발, 테스트, 운영 환경에서 일관된 동작을 보장하고, 배포 및 확장을 쉽게 할 수 있습니다. 즉, 컨테이너는 미들웨어를 포함한 어플리케이션의 생명주기 전반에 걸쳐 사용될 수 있습니다. 이런 컨테이너를 관리하고 오케스트레이션하는데 쿠버네티스와 같은 플랫폼이 사용됩니다. 이러한 컨테이너화된 미들웨어는 마이크로서비스 아키텍처와 같은 환경에서 특히 유용합니다.

 

'Infra' 카테고리의 다른 글

가상화 환경 또는 가상 머신 (Virtual Machine, VM)  (0) 2023.06.29
Kubernetes(k8s, kube), Docker  (0) 2023.06.28
TCP/IP stack (4 Layers)  (0) 2023.06.15
OSI model (7 Layers)  (0) 2023.06.14
S3(Simple Storage Service), CloudFront  (0) 2023.05.24

인터넷구조에 특화된 layered architecture

 

 

TCP/IP 스택, 또는 인터넷 프로토콜 스위트는 인터넷과 유사한 컴퓨터 네트워크에서 사용되는 통신 프로토콜 세트를 의미합니다. 이는 그 안에 포함된 가장 중요한 두 가지 프로토콜, 즉 전송 제어 프로토콜(TCP)과 인터넷 프로토콜(IP)의 이름을 따서 명명되었습니다. TCP/IP 스택은 일반적으로 네 개의 계층으로 설명되지만, 일부 모델에는 다섯 개의 계층이 포함됩니다. 여기 네 가지 계층에 대해 설명드리겠습니다:

  1. 응용 계층(Application Layer): TCP/IP 스택에서 가장 높은 수준으로, 브라우저, FTP 클라이언트, 이메일 클라이언트 등의 응용 프로그램이 작동하는 곳입니다. 계층의 프로토콜은 HTTP, SMTP, FTP, DNS 등의 네트워크 서비스와 상호 작용하는 책임이 있습니다.
  2. 전송 계층(Transport Layer): 계층은 응용 프로그램을 위한 종단 또는 호스트 통신 서비스를 제공합니다. 계층에서 가장 일반적인 가지 프로토콜은 신뢰할 있고, 연결 지향적인 통신을 제공하는 TCP 연결이 없는 최선 노력 통신을 제공하는 UDP(User Datagram Protocol)입니다.
  3. 인터넷 계층(Internet Layer): 네트워크 계층(Network Layer)이라고도 하며, 계층은 네트워크 전반에 걸친 패킷의 이동을 처리합니다. 계층에서 가장 중요한 프로토콜은 인터넷의 핵심인 IP입니다. 또한, 계층에서는 데이터 전송의 최적 경로를 결정하는 라우팅이 발생합니다.
  4. 네트워크 인터페이스 계층(Network Interface Layer): 링크 계층(Link Layer) 또는 네트워크 액세스 계층(Network Access Layer)이라고도 하며, 이는 TCP/IP 모델에서 가장 낮은 계층입니다. 계층은 데이터의 물리적 전송과 관련된 프로토콜을 포함하며, 네트워크 인터페이스 카드와 디바이스 드라이버와 같은 하드웨어 세부 사항을 다룹니다.

TCP/IP 스택을 통한 데이터 전송은 출발 호스트의 응용 계층에서 시작하여, 계층을 거쳐 네트워크 인터페이스 계층에 이르릅니다. 그런 다음 데이터는 네트워크를 통해 전송되며, 목적지 호스트에 도달하면 응용 계층으로 다시 계층을 거슬러 올라갑니다. 과정은 계층이 서로 다른 기능을 담당하면서도, 서로 상호 작용하며 전체 통신 과정을 완성하는 방식으로 이루어집니다.

 

https://www.youtube.com/watch?v=6l7xP7AnB64 

 

OSI(Open Systems Interconnection) 7계층 모델은 네트워크 프로토콜 디자인과 통신을 설명하기 위해 국제 표준화 기구(ISO)가 1984년에 개발한 모델입니다. 네트워크에서 통신이 어떻게 이루어지는지 이해하는 데 도움이 됩니다. 각 계층은 특정 네트워크 기능을 수행하며, 하위 계층에서 받은 데이터에 헤더를 추가하거나 상위 계층으로부터 받은 데이터에서 헤더를 제거합니다.

OSI 7계층 모델은 다음과 같은 계층으로 이루어져 있습니다:

  1. 물리 계층 (Physical Layer): 비트 단위의 정보를 전기적 신호로 변환해 전송합니다. 케이블, 허브, 리피터 등이 계층에 속합니다.
    신호 변환, 비트 전송, 회선 구성 등을 담당합니다. 또한 물리적 매체를 통해 데이터를 전송하는 방법을 정의합니다. 
  2. 데이터 링크 계층 (Data Link Layer): 네트워크 기기 간의 데이터 전송 오류 검출 등을 수행합니다. 브리지나 스위치가 계층에 속합니다.
    물리계층으로부터 받은 정보를 관리하고 에러 검출, 에러 수정, 흐름 제어 등을 수행합니다. 프레임을 만들어 물리계층으로 보내며 해당 과정에서 MAC 주소를 이용해 통신합니다. 
  3. 네트워크 계층 (Network Layer): 서로 다른 네트워크 간의 통신을 가능하게 합니다. IP 주소를 이용하여 패킷의 경로를 결정합니다. 라우터가 계층에 속합니다.
    IP 주소를 사용하여 데이터 패킷을 목적지까지 가장 효과적으로 전송하는 경로를 결정하는 라우팅을 수행합니다. 또한 패킷 분할 및 조립 등의 작업을 수행하며 IP, ICMP, IGMP 등의 프로토콜이 사용됩니다. 
  4. 전송 계층 (Transport Layer): 데이터의 전송을 제어합니다. TCP UDP 프로토콜을 통해 데이터를 분할하고 재조합합니다.
    통신 세션의 설정, 유지, 종료 등을 담당하며, 신뢰성 있는 데이터 전송을 보장합니다. 오류 검출 및 복구, 흐름 제어등을 담당하며 전송 계층에서 데이터 단위는 세그먼트라고 불립니다. 
  5. 세션 계층 (Session Layer): 통신 세션을 구성하고 관리합니다. 세션 시작, 유지, 종료 등의 기능을 수행합니다.
    통신 세션을 설정, 관리, 종료하는 역할을 합니다. 통신 세션은 데이터 교환의 시작과 종료를 정의하는 단위로 두 장치 간에 세션이 활성화 되면 데이터 교환이 가능합니다.  
  6. 표현 계층 (Presentation Layer): 데이터의 암호화, 복호화, 압축, 해제 등을 수행합니다. 데이터의 형식과 코드 변환을 담당합니다.
    표현 계층은 데이터의 표현 방식을 관리하며, 암호화, 압축, 변환 등의 작업을 수행합니다. 사용자 시스템에서 데이터의 형식을 네트워크 표준 형식으로 변환하거나 네트워크에서 전송된 데이터를 사용자 시스템이 이해할 수 있는 형식으로 변환하는 역할을 합니다. 또한 응용 프로그램이 네트워크에서 전송될 데이터의 형식을 이해하도록 해줍니다. 
  7. 응용 계층 (Application Layer): 최종 사용자와 가장 가까운 계층으로, 이메일 클라이언트, 브라우저 등의 응용 프로그램이 작동하는 계층입니다.
    OSI 모델의 최상위 계층인 응용계층은 사용자와 가장 가까운 계층으로 네트워크 서비스와 사용자 어플리케이션을 연결합니다. 이메일 클라이언트, 웹 브라우져 , 데이터베이스 관리 시스템(DBMS) 등의 프로그램이 이 계층에서 작동합니다. 응용계층의 프로토콜에는 HTTP, FTP, SMTP 등이 포함됩니다.

각 계층은 서로 상호작용하면서 네트워크 통신을 가능하게 하며 이를 통해 개발자들은 네트워크의 복잡한 요소를 분리하고 각 계층에 집중하여 문제를 해결하거나 기능을 개선할 수 있습니다.  

 

https://www.youtube.com/watch?v=TBUaVzNkxFg

https://www.youtube.com/watch?v=6l7xP7AnB64 

https://shlee0882.tistory.com/110

 

OSI 7계층 모델의 4번째 레이어는 전송 계층(Transport Layer)입니다.

이 계층에서는 서로 다른 네트워크에서 데이터의 전송을 관리하고 제어하는 기능을 합니다. 전송 계층의 주요 역할 중 하나는 패킷의 분할과 재조합입니다. 큰 데이터는 여러 개의 패킷으로 나누어 전송되고, 이들 패킷은 도착지에서 다시 원래의 데이터로 재조합됩니다.

또한 계층에서는 오류 검출 복구, 데이터 흐름 제어, 다중화 등을 수행하여 데이터의 신뢰성 있는 전송을 보장합니다. 계층의 대표적인 프로토콜로는 TCP(Transmission Control Protocol) UDP(User Datagram Protocol) 있습니다. TCP 신뢰성 있는 데이터 전송을 위해 오류 검출 복구 기능을 제공하며, UDP 이러한 기능 없이 데이터를 빠르게 전송하는 것을 목표로 합니다.

 

2023.05.27 - [Mockterview] - TCP(Transmission Control Protocol), UDP(User Datagram Protocol)

Amazon S3 데이터를 안전하고 내구성 있게 저장할 있는 스토리지 서비스이며, Amazon CloudFront 세계 사용자에게 콘텐츠를 빠르고 안전하게 전달하는 CDN 서비스입니다. 둘은 함께 사용될 애플리케이션의 성능과 안정성을 크게 향상시킬 있습니다.

 

Amazon S3

Amazon S3는 인터넷 스토리지 솔루션으로, 개발자들이 웹에서 대용량 데이터를 저장하고 검색할 수 있도록 설계되었습니다. 사용자는 데이터를 '버킷'이라는 단위로 저장하고, 각 버킷은 고유한 이름을 가집니다. S3는 거의 무제한의 스토리지를 제공하며, 데이터의 안전성과 내구성을 보장합니다. S3는 정적 웹 호스팅, 백업 및 복구, 아카이브, 엔터프라이즈 애플리케이션, IoT 디바이스, 빅 데이터 분석 등 다양한 사용 사례에 적합합니다.

  • Amazon S3는 AWS에서 제공하는 안전하고 내구성이 뛰어난 객체 스토리지 서비스입니다.
  • 데이터를 '객체'로 저장하며, 각 객체는 고유한 키를 통해 식별됩니다. 이러한 객체는 '버킷'이라는 이름의 컨테이너 안에 저장됩니다.
  • 각 객체에는 데이터 외에도 메타데이터를 포함할 수 있습니다.
  • 또한, S3는 파일의 버전 관리를 지원합니다. 이를 통해 객체를 실수로 삭제하거나 수정한 경우 이전 버전으로 복원할 수 있습니다.
  • 데이터를 저장할 때에는 다양한 스토리지 클래스를 선택할 수 있습니다. 예를 들어, 자주 접근하지 않는 데이터를 저렴한 비용으로 저장하려면 S3 Standard-IA (Infrequent Access) 또는 S3 One Zone-IA를 선택할 수 있습니다.
  • S3 또한 데이터 보호를 위한 다양한 기능을 제공합니다. 예를 들어, 버킷 정책을 통해 데이터의 액세스를 제한할 있으며, S3 서버 암호화를 사용하여 데이터를 암호화할 있습니다.

Amazon CloudFront

Amazon CloudFront는 AWS의 콘텐츠 전송 네트워크(CDN) 서비스입니다. CloudFront는 사용자에게 빠르고 안전하게 데이터, 비디오, 애플리케이션, API 등을 전달하도록 최적화되어 있습니다. CloudFront는 전 세계적으로 배포된 엣지 로케이션에서 콘텐츠를 캐시하여 사용자에게 더 빠른 응답 시간과 높은 전송 속도를 제공합니다. 또한, DDoS 공격과 같은 보안 위협으로부터 콘텐츠를 보호하기 위한 기능들을 제공합니다.

  • Amazon CloudFront는 AWS의 콘텐츠 전송 네트워크 (CDN) 서비스입니다.
  • CDN은 사용자에게 빠른 전송 속도를 제공하기 위해 전 세계의 여러 위치에 콘텐츠를 캐시하는 네트워크입니다. 사용자의 요청이 CDN의 가장 가까운 엣지 로케이션으로 라우팅되므로, 사용자는 더 빠른 응답 시간과 높은 전송 속도를 경험할 수 있습니다.
  • CloudFront는 HTTP와 HTTPS를 모두 지원하며, 동적 웹 사이트, 정적 웹 사이트, 스트리밍 비디오, 웹 애플리케이션, API 등 다양한 콘텐츠를 전송할 수 있습니다.
  • CloudFront는 또한 다양한 보안 기능을 제공합니다. 예를 들어, AWS Shield를 사용하여 DDoS 공격을 방어하거나, AWS Certificate Manager를 사용하여 SSL/TLS 인증서를 무료로 제공받을 수 있습니다.
  • 사용자가 처음 콘텐츠를 요청할 때 CloudFront는 콘텐츠의 원본 위치 (예: Amazon S3 버킷, EC2 인스턴스, ELB 로드 밸런서 등)에서 콘텐츠를 가져와 사용자에게 제공하고, 그 콘텐츠를 가까운 엣지 로케이션에 캐시합니다. 다음 번에 같은 콘텐츠가 요청되면 CloudFront는 원본 위치에서 콘텐츠를 다시 가져오지 않고 캐시된 콘텐츠를 바로 제공합니다. 이런 방식으로 사용자의 응답 시간을 크게 줄일 수 있습니다.
  • CloudFront는 콘텐츠를 캐시하는 동안에도 세밀한 제어를 제공합니다. 예를 들어, 콘텐츠의 캐시 된 버전을 업데이트하거나 삭제할 수 있습니다. 또한 TTL(Time to Live)을 설정하여 캐시된 콘텐츠가 얼마나 오래 저장될지를 지정할 수 있습니다.
  • CloudFront는 원본 서버에 대한 요청을 줄이므로 원본 서버의 부하를 줄이는 효과도 있습니다. 이는 트래픽이 급증하는 상황에서 원본 서버를 보호하는 데 도움이 될 수 있습니다.
  • AWS WAF(Web Application Firewall) 함께 사용하여 보안을 강화할 수도 있습니다. WAF SQL 삽입, XSS 공격 애플리케이션을 대상으로 일반적인 공격을 차단할 있습니다.

 


 

CORS(Cross-Origin Resource Sharing) 페이지의 리소스가 자신의 출처(도메인, 프로토콜, 포트) 다른 출처의 리소스를 요청할 있도록 하는 메커니즘입니다. 이것은 애플리케이션의 보안을 강화하기 위한 것인데, 동일 출처 정책(Same-Origin Policy) 따르면 애플리케이션은 동일 출처의 리소스만 요청할 있습니다. CORS 이를 유연하게 하여 다른 출처의 리소스를 안전하게 요청할 있도록 합니다.

 

1. Amazon S3에서 CORS 설정:

어떤 출처가 버킷의 리소스에 액세스할 수 있는지, 어떤 HTTP 메서드(GET, PUT, POST, DELETE 등)를 사용할 수 있는지 정책 설정 

 

2. Amazon CloudFront에서 CORS 설정:

  • HTTP 헤더 전달: CloudFront가 원본 서버에 요청을 보낼 때 CORS 관련 HTTP 헤더를 전달해야 합니다. 이를 위해 CloudFront 배포 설정에서 "Origin Request Policy"를 수정하여 "Access-Control-Request-Headers", "Access-Control-Request-Method", "Origin" 등의 HTTP 헤더를 전달하도록 설정할 수 있습니다.
  • request header에 Origin을 설정
  • 요청을 넣을때에 request header 에 Origin을 넣으면 response header에 access-control-allow-origin 을 넣어 내려보내준다.
  • Cloudfront는 중간다리 역할이라서 원본에게 요청을 보내는 Request 세팅도 할 수 있고, Cloudfront에 접근하는 쪽(주로 클라이언트)에 응답을 하는 Response 세팅도 할 수 있다

 

'Infra' 카테고리의 다른 글

TCP/IP stack (4 Layers)  (0) 2023.06.15
OSI model (7 Layers)  (0) 2023.06.14
EC2, CodeDeploy pt.2  (0) 2023.05.24
EC2, CodeDeploy pt.1  (0) 2023.05.24
Route 53, Elastic Load Balance(ELB)  (0) 2023.05.24

1. EC2를 사용하여 어떤 애플리케이션을 배포한 경험이 있나요? 그 과정은 어떻게 진행되었나요? 

"저는 GitHub Actions를 이용해서 CI/CD 파이프라인을 구성하고 AWS EC2에 웹 애플리케이션을 자동으로 배포한 경험이 있습니다.

이러한 작업 흐름은 다음과 같이 이루어졌습니다:

  1. 먼저, 웹 애플리케이션의 소스 코드를 Git을 통해 GitHub 리포지토리에 업로드했습니다.
  2. GitHub Actions를 설정하기 위해 .github/workflows 디렉토리에 YAML 파일을 생성했습니다.
  3. 이 파일에는 원격 서버(EC2 인스턴스)에 접속하기 위한 SSH 키와 AWS 접근 정보를 포함하고 있었습니다. 이 정보는 GitHub Secrets를 통해 안전하게 관리되었습니다.
  4. 파일에는 또한 배포가 이루어질 때마다 실행되는 일련의 명령들을 정의하였습니다. 이 명령들은 애플리케이션의 종속성을 설치하고, 테스트를 실행하고, 애플리케이션을 빌드하고, 빌드된 애플리케이션을 EC2 인스턴스로 전송하는 것을 포함했습니다.
  5. 마지막으로, 애플리케이션을 EC2 인스턴스에서 실행하는데 필요한 명령들을 작성했습니다.

이런 식으로, GitHub Actions 통해 CI/CD 파이프라인을 구축하고, 코드 변경 사항이 GitHub 리포지토리에 푸시되는 즉시 자동으로 EC2 배포되도록 설정했습니다."

 

2. EC2 인스턴스의 선택과 관리에 어떤 고려 사항이 있나요? 

  1. 인스턴스 유형 선택: AWS 다양한 유형의 EC2 인스턴스를 제공하며, 이는 다른 CPU, 메모리, 스토리지, 네트워크 용량을 가지고 있습니다. 중에서 애플리케이션의 요구 사항과 예상 트래픽에 맞는 유형을 선택해야 합니다.
  2. 비용 최적화: 인스턴스 유형에는 다른 비용이 연관되어 있으며, 이를 최적화하는 것이 중요합니다. 예를 들어, 상시 실행해야 하는 애플리케이션의 경우 예약 인스턴스를, 일시적이거나 비정상적인 워크로드의 경우 스팟 인스턴스를 사용할 있습니다.
  3. 보안 그룹 설정: EC2 인스턴스의 보안 그룹을 적절하게 설정하여, 필요한 트래픽만 허용하고 외의 트래픽은 차단하는 것이 중요합니다.
  4. 스케일링: 애플리케이션의 로드와 성능 요구 사항이 변화할 자동으로 EC2 인스턴스를 스케일링할 있는 방법을 고려해야 합니다. AWS Auto Scaling 기능을 사용하여 이를 처리할 있습니다.
  5. 백업과 복구: EC2 인스턴스의 데이터를 보호하고, 시스템 장애나 데이터 손실이 발생했을 복구할 있는 전략이 필요합니다. 이를 위해 Amazon EBS 볼륨 스냅샷을 주기적으로 생성하고 관리하는 것이 중요합니다.
  6. 모니터링과 로깅: AWS CloudWatch 사용하여 EC2 인스턴스를 모니터링하고 로그를 수집할 있습니다. 이를 통해 시스템의 성능을 추적하고 문제를 빠르게 식별할 있습니다.
  7. AMI 관리: Amazon Machine Image(AMI) 사용하면 EC2 인스턴스의 설정을 빠르게 복제하고 재사용할 있습니다. AMI 적절히 관리하면 인스턴스 배포를 표준화하고 빠르게 확장할 있습니다

3. AWS CodeDeploy를 사용한 배포 프로세스에서 어떤 문제가 발생했고, 어떻게 해결했나요? 

문제 1: 배포 실패

때때로, 배포가 실패하며 이는 다양한 원인으로 인해 발생할 수 있습니다.

해결책: AWS CodeDeploy는 배포 중에 발생한 문제에 대한 로그를 제공합니다. 이를 통해 배포가 실패한 원인을 파악하고 해결할 수 있습니다. 일반적으로, 이 문제는 애플리케이션의 종속성, 스크립트 오류, 리소스 부족 등으로 발생합니다. 이러한 문제를 해결하기 위해 해당 로그를 검토하고, 필요한 수정사항을 소스 코드에 반영한 뒤, 다시 배포를 진행합니다.

문제 2: 오래된 배포 구성

배포 과정에서 이전에 사용되었던 구성이나 설정이 여전히 존재하여, 최신 버전의 애플리케이션을 제대로 배포하지 못하는 경우가 있습니다.

해결책: 이런 경우, AWS CodeDeploy의 배포 설정을 검토하고 필요한 변경사항을 적용해야 합니다. 이에는 배포 그룹의 설정, 배포 방법, 배포 구성 등이 포함될 수 있습니다.

문제 3: 서비스 중단

일부 배포는 애플리케이션에 서비스 중단을 야기할 수 있습니다. 이는 배포 중에 새로운 버전의 애플리케이션을 실행하면서 이전 버전의 애플리케이션이 중지되기 때문입니다.

해결책: 이를 해결하기 위해 AWS CodeDeploy 블루/그린 배포 방법을 사용할 있습니다. 방법을 사용하면, 새로운 버전의 애플리케이션을 배포하는 동안 서비스를 계속 유지할 있습니다.

 

4. AWS CodeDeploy의 어떤 기능을 활용하여 배포 프로세스를 최적화했나요? 

  1. 블루/녹그린 배포: 기능을 사용하면 애플리케이션이 배포되는 동안 서비스가 중단되지 않습니다. 버전의 애플리케이션을 별도의 환경에서 실행하고, 배포가 성공적으로 완료되면 트래픽을 환경으로 전환합니다. 이렇게 하면 애플리케이션의 가용성을 높이고 배포 리스크를 줄일 있습니다.
  2. 인스턴스 대상 묶음: CodeDeploy 인스턴스 대상 묶음을 사용하여 복잡한 배포를 쉽게 관리할 있게 합니다. 기능을 사용하면 동일한 설정을 공유하는 인스턴스 그룹을 번에 업데이트할 있습니다.
  3. 롤백: 배포가 실패하거나 애플리케이션이 예상대로 작동하지 않는 경우, CodeDeploy 자동 롤백 기능을 통해 이전 버전으로 쉽게 되돌릴 있습니다. 기능은 배포 리스크를 크게 줄여줍니다.
  4. 훅스: CodeDeploy 배포 생명주기 동안에 실행할 있는 여러 훅스를 제공합니다. 이러한 훅스를 사용하여 배포 , 배포 , 배포 후에 커스텀 스크립트를 실행할 있습니다. 예를 들어, 배포 전에 테스트를 실행하거나, 배포 후에 모니터링 도구를 설정할 있습니다.
  5. AWS 서비스와의 통합: CodeDeploy 다른 AWS 서비스와 쉽게 통합될 있습니다. 예를 들어, AWS CloudWatch 사용하여 배포를 모니터링하고, AWS Auto Scaling 사용하여 인스턴스를 자동으로 스케일링할 있습니다.

5. GitHub Actions를 사용하여 CI/CD 파이프라인을 구성한 경험 및 그 과정에서 어떤 도구나 기술을 사용했나요? 

  1. 소스 코드 관리: 먼저, 애플리케이션의 소스 코드를 Git 통해 GitHub 리포지토리에 업로드합니다.
  2. CI/CD 파이프라인 구성: GitHub Actions .github/workflows 디렉토리 내부의 YAML 형식 파일을 통해 CI/CD 워크플로우를 구성합니다. 파일에는 워크플로우의 트리거 조건, 실행 환경, 실행할 명령어 등을 정의합니다.
  3. 빌드 테스트 자동화: 워크플로우 파일에는 소스 코드의 빌드와 테스트를 자동화하는 단계를 포함합니다. 이는 프로젝트에 따라 다르지만, 일반적으로 필요한 패키지를 설치하고, 코드 빌드 도구를 실행하며, 단위 테스트나 통합 테스트를 실행하는 단계를 포함합니다.
  4. 배포 자동화: 배포 단계에서는 빌드된 애플리케이션을 최종 배포 환경으로 전송하고 실행합니다. 이는 AWS EC2 인스턴스, Kubernetes 클러스터, 서버리스 환경 등이 있으며, 해당 환경에 맞는 배포 도구와 명령어를 사용합니다.

6. GitHub Actions와 AWS CodeDeploy를 통합하여 어떻게 작업했나요? 이를 통해 얻은 이점은 무엇인가요? 

GitHub Actions AWS CodeDeploy 통합하면 GitHub에서 코드 변경이 발생할 때마다 자동으로 AWS 코드를 배포하는 효율적인 CI/CD 파이프라인을 구축할 있습니다. 이를 통해 코드 품질을 개선하고 배포 시간을 단축할 있습니다.

  • 효율성: 코드 변경이 발생할 때마다 자동으로 테스트하고 배포하는 것으로 개발자가 배포를 위한 시간을 줄일 수 있습니다.
  • 신뢰성: 모든 코드 변경이 자동으로 테스트되므로, 배포 전에 문제를 발견하고 수정할 수 있습니다.
  • 속도: 코드를 빠르게 테스트하고 배포함으로써, 기능을 빠르게 사용자에게 제공할 있습니다.

 

7. GitHub Actions를 사용한 배포 프로세스에서 보안 관련 고려 사항은 무엇인가요? 

  1. 비밀 관리: 비밀(: API , 비밀번호 ) 절대로 워크플로우 파일이나 소스 코드에 직접 포함시키지 않아야 합니다. 이러한 비밀은 GitHub Actions "Secrets" 기능을 사용해 안전하게 저장하고 워크플로우에서 참조해야 합니다.
  2. 최소한의 권한 원칙: 워크플로우에서 사용하는 AWS 계정이나 비밀은 필요한 최소한의 권한만을 부여해야 합니다. 이렇게 하면 잠재적인 보안 위협이 발생했을 때도 피해를 최소화할 있습니다.
  3. 코드 리뷰 병합 정책: 모든 코드 변경은 코드 리뷰를 통해 검증되어야 합니다. 또한, 보안 측면에서 중요한 변경(: 워크플로우 파일이나 보안 설정 변경) 권한이 있는 사람만 병합할 있어야 합니다.
  4. 외부 동작의 사용: GitHub Actions에서는 외부 동작(actions) 사용할 있습니다. 이들 동작은 소스 코드를 검토하고 신뢰할 있는 소스에서만 사용해야 합니다. 가능한 경우, 동작의 버전을 지정하여 무작위 변경으로부터 보호할 있습니다.
  5. 로그 모니터링: 워크플로우 실행에 대한 로그를 수집하고 모니터링해야 합니다. 이를 통해 잠재적인 보안 문제를 조기에 발견할 있습니다.

8. 배포 과정에서 롤백을 처리한 경험은 있나요? 어떻게 처리했나요? 

 

 

9. 애플리케이션 모니터링 및 로깅에 사용한 도구나 전략은 무엇인가요? 

애플리케이션의 모니터링과 로깅은 시스템의 안정성과 성능을 유지하고 문제를 신속하게 해결하는 데 중요합니다. 이를 위한 다양한 도구와 전략이 있습니다.

  1. 로깅 도구: 애플리케이션의 작동에 대한 정보를 로깅하고 분석하는 데 사용되는 도구입니다. AWS CloudWatch, ELK 스택(Elasticsearch, Logstash, Kibana), Grafana, Splunk 등이 대표적인 예입니다.
  2. 성능 모니터링 도구: 시스템의 성능을 실시간으로 모니터링하고 분석하는 데 사용되는 도구입니다. 이를 통해 CPU 사용률, 메모리 사용, 네트워크 트래픽, 디스크 IO 등을 모니터링하고 문제를 신속하게 파악할 수 있습니다. AWS CloudWatch, New Relic, Datadog, Prometheus 등이 대표적입니다.
  3. 에러 트래킹 도구: 애플리케이션에서 발생하는 에러를 실시간으로 추적하고, 에러의 원인을 분석하고 보고하는 데 사용되는 도구입니다. Sentry, Rollbar, Bugsnag 등이 이에 해당합니다.
  4. 분산 추적 시스템: 마이크로서비스 아키텍처와 같이 분산 시스템에서 요청이 어떻게 처리되는지를 추적하는 데 사용되는 도구입니다. Zipkin, Jaeger, AWS X-Ray 등이 대표적입니다.
  5. 로깅 및 모니터링 전략: 로깅 및 모니터링 전략은 어떤 데이터를 수집할 것인지, 얼마나 오래 보관할 것인지, 어떻게 분석하고 사용할 것인지 등을 결정합니다. 이는 회사의 요구사항, 규제 준수, 데이터 저장 및 분석 비용 등을 고려하여 결정됩니다.

 

10. 병렬 또는 블루/그린 배포와 같은 다른 배포 전략에 대해 경험이 있나요? 

  1. 병렬 배포: 병렬 배포는 모든 서버 또는 인스턴스에 동시에 업데이트를 배포하는 전략입니다. 이 방식은 매우 빠르지만, 만약 새로운 버전에 결함이 있다면 전체 시스템에 영향을 미칠 수 있습니다. 따라서 이 전략은 테스트가 철저히 이루어진 경우나, 전체 시스템에 빠르게 변경사항을 적용해야 하는 경우에 적합합니다.
  2. 블루/그린 배포: 블루/그린 배포는 두 개의 동일한 프로덕션 환경(블루와 그린)을 두고 한 환경에는 실제 트래픽을, 다른 한 환경에는 새로운 버전의 애플리케이션을 배포하는 전략입니다. 새로운 버전이 정상적으로 동작한다면, 트래픽을 새로운 환경으로 점진적으로 이동시킵니다. 이 방식은 실제 사용자에게 서비스 중단 없이 새로운 버전을 안전하게 배포할 수 있으므로, 신뢰성이 중요한 애플리케이션에 적합합니다.

가지 전략 모두 장단점이 있으며, 특정 상황에 따라 적합한 전략을 선택해야 합니다. 예를 들어, 신뢰성이 중요하다면 블루/그린 배포를, 빠른 배포가 필요하다면 병렬 배포를 선택할 있습니다.

 

 

'Infra' 카테고리의 다른 글

TCP/IP stack (4 Layers)  (0) 2023.06.15
OSI model (7 Layers)  (0) 2023.06.14
S3(Simple Storage Service), CloudFront  (0) 2023.05.24
EC2, CodeDeploy pt.1  (0) 2023.05.24
Route 53, Elastic Load Balance(ELB)  (0) 2023.05.24
더보기

AWS는 개인에게 클라우드 환경의 가상서버를 제공

AWS는 여러 나라에 데이터 센터를 갖고 있습니다. 데이터 센터가 있는 나라를 리전이라고 하고, 리전 내의 데이터 센터 위치를 존(AZ)이라고 합니다.

 

EC2 (Elastic Compute Cloud)

  • Amazon EC2는 AWS에서 제공하는 가상 서버 서비스입니다. 사용자는 이를 통해 필요한 만큼의 가상 서버를 확보하고, 원하는 운영체제를 설치하고, 필요한 어플리케이션을 배포할 수 있습니다. 사용자는 필요에 따라 EC2 인스턴스의 사양을 조정하거나, 여러 인스턴스를 동시에 운영할 수 있어, 확장성이 뛰어납니다.
  • EC2는 Amazon Web Services (AWS)의 핵심 컴퓨팅 서비스로서, 사용자가 필요에 따라 가상 서버를 생성하고 관리할 수 있게 해줍니다. 이런 가상 서버를 EC2 인스턴스라고 부릅니다. 사용자는 EC2 인스턴스에서 원하는 운영 체제를 실행할 수 있고, 여기에는 Ubuntu를 비롯한 여러 가지 Linux 배포판과 Windows 등이 포함됩니다.
  • EC2 사용하면 물리적 서버를 직접 관리하는 것에 비해 많은 유연성과 효율성을 얻을 있습니다. 예를 들어, 서버의 성능을 업그레이드하거나 다운그레이드하는 것이 단순히 새로운 인스턴스 유형을 선택하는 것만큼 간단해집니다. 또한, 수요가 증가하거나 감소함에 따라 인스턴스를 추가하거나 제거함으로써 사용 중인 컴퓨팅 리소스를 쉽게 조절할 있습니다.

CodeDeploy

  • AWS CodeDeploy는 사용자가 빠르게 애플리케이션을 배포하고 업데이트하는 데 도움을 주는 서비스입니다. CodeDeploy는 자동화된 배포 절차를 제공하므로, 수동 배포에서 발생할 수 있는 오류를 줄이고, 빠른 반복 배포를 가능하게 합니다. AWS EC2 인스턴스 뿐만 아니라 온프레미스 환경에서도 사용할 수 있습니다.
더보기

온프레미스(On-premise) : 

기업이나 조직이 자신의 물리적인 위치, 즉 사무실이나 데이터 센터 등에 IT 인프라를 직접 설치하고 운영하는 환경을 가리킵니다.

온프레미스 환경에서는 기업이나 조직이 자체 서버와 네트워크 장비를 소유하며, 그 운영과 관리를 직접 담당하게 됩니다. 이는 보안, 커스터마이징, 데이터 제어 등을 위해 필요할 수 있으며, 종종 큰 기업이나 정부 기관에서 선호하는 방식입니다.

반면에 클라우드 환경에서는, 서버나 네트워크 장비를 직접 소유하거나 관리하지 않고, 이를 Amazon Web Services(AWS)나 Google Cloud Platform(GCP) 같은 클라우드 서비스 공급자에게 위임합니다. 이는 운영 및 유지 관리 비용을 절감하고 빠른 확장성을 제공하며, IT 팀의 역량을 핵심 비즈니스에 집중하는 데 도움을 줄 수 있습니다.

AWS CodeDeploy 같은 서비스는 가지 환경 모두를 지원합니다. , 사용자가 자신의 애플리케이션을 AWS EC2 인스턴스에 배포할 수도 있고, 자신의 데이터 센터에 위치한 서버에 배포할 수도 있습니다.

  • AWS CodeDeploy는 사용자가 자신의 애플리케이션을 신속하고 안정적으로 업데이트하고 배포할 수 있도록 돕는 서비스입니다. CodeDeploy는 AWS 클라우드에서 물론, 사용자의 온-프레미스 환경에서도 작동하므로 사용자가 소프트웨어를 어디서든지 배포하는 데 유용합니다.CodeDeploy 사용하면, 개발자는 배포 단계에서 실행되는 명령어 시퀀스를 지정할 있는 배포 스크립트(앱스펙 파일) 작성해야 합니다. 이런 방식으로 CodeDeploy 사용자가 필요로 하는 특정 작업을 수행하면서 애플리케이션 코드를 배포합니다. 이는 서버 설정, 애플리케이션 종속성 설치, 애플리케이션 시작 등을 포함할 있습니다.
  • CodeDeploy는 애플리케이션 업데이트를 자동으로 EC2 인스턴스에 배포하며, 이러한 과정에서 애플리케이션 중단 시간을 최소화합니다. 이 서비스는 롤아웃 트래킹, 배포 중인 인스턴스 상태의 실시간 보기 등의 기능을 제공합니다.
더보기

롤아웃 트래킹 : 

소프트웨어 배포 과정에서 새로운 버전의 애플리케이션 또는 기능이 시스템에 도입되는 과정을 추적하고 모니터링하는 것을 의미합니다.

이것은 소프트웨어 업데이트가 일련의 서버나 장치, 사용자에게 순차적으로 배포되는 경우에 특히 중요합니다. 롤아웃 트래킹을 통해 개발자나 IT 관리자는 배포가 어디까지 완료되었는지, 어떤 문제가 발생했는지, 어떤 단계에서 개선이 필요한지 등을 파악할 수 있습니다.

AWS CodeDeploy 같은 도구는 이러한 롤아웃 트래킹 기능을 제공하며, 이를 통해 배포 과정을 더욱 투명하게 관리하고 필요한 조치를 취할 있습니다. 예를 들어, 배포 문제가 발생하면 즉시 알아채고 해당 배포를 중지하거나, 문제가 발생한 부분을 수정하고 다시 배포를 진행할 있습니다.

 

'Infra' 카테고리의 다른 글

TCP/IP stack (4 Layers)  (0) 2023.06.15
OSI model (7 Layers)  (0) 2023.06.14
S3(Simple Storage Service), CloudFront  (0) 2023.05.24
EC2, CodeDeploy pt.2  (0) 2023.05.24
Route 53, Elastic Load Balance(ELB)  (0) 2023.05.24