반응형

분류 전체보기 128

도메인 주도 설계 (DDD, Domain-Driven Design, 분산화 응용 프로그램 설계, 마이크로서비스, miro)

도메인 이란? - 지식, 영향력 또는 활동 영역 - 개발 분야에서는 소프트웨어로 해결하려는 문제의 영역을 의미함 도메인 지식 이란? - 어떤 산업 또는 분야를 이해하기 위해 필요한 지식 도메인을 개념적으로 표현하는 방법 - 객체지향 설계, ERD 등 도메인 주도 설계의 주요 용어 - 보편언어 (ubiquitous language) => 도메인의 특정 업무와 관련된 사람들 사이에서 통용되는 개념 - 한정된 맥락 (bounded context) => 한정된 맥락이 없다면 클래스 이름 설계의 어려움, 클래스가 비대해질 위험, 단일 책임 원칙 위배 가능성 높음, 의존 관계 신경써야함 등의 단점이 있음 DDD 가 제안하는 해결책 - 서비스를 나눔 - 데이터 베이스도 나눔 (마이크로 서비스와 DDD는 같지 않으며,..

DevOps/DevOps 2023.02.16

[Mac OS] helm, kubernetes 패키지 매니저 (helm으로 Jenkins 설치하기)

helm이란? kubernetes 어플리케이션 관리를 위한 오픈소스 패키지 매니저 kubernetes 에서 어플리케이션 배포를 위한 YAML 파일의 복잡성을 줄이는데 사용 Helm 을 사용하면 관리자는 쉽게 어플리케이션 설치, 업그레이드, 롤백 및 구성을 할 수 있음 Chart 라고 불리는 패키지를 사용하여 kubernetes 어플리케이션을 설치함 Chart 는 kubernetes 오브젝트, 구성 파일 및 기타 필요한 파일을 포함하는 패키지 임 https://helm.sh/ Helm Helm - The Kubernetes Package Manager. helm.sh 차트, 저장소, 릴리즈 helm에서의 패키지 = 차트 (Chart) helm에서의 패키지 저장공간 = 저장소 차트를 설치하고 쿠버네티스 클러..

Orchestration/helm 2023.02.16

[Mac OS] 인그레스 란? (Ingress 실습, Ingress 필요성, ingress controller)

인그레스 란? - 클러스터 내부의 서비스에 대한 외부 액세스를 제공하는 Kubernetes 오브젝트 임 => 즉, Kubernetes 클러스터 내에서 실행중인 서비스에 대한 외부 HTTP(S) 및 TCP 액세스를 관리함 제공 기능 - 클라우드에서 호스팅되는 어플리케이션을 위한 라우팅, 로드밸렁싱, SSL 종료와 같은 기능을 제공함 ( SSL (Secure Sockets Layer) = 데이터를 안전하게 전송하기 위한 프로토콜) => 일반적으로 인그레스 컨트롤러는 외부에서 들어오는 HTTPS 요청에 대해 SSL 인증서를 제공함 이를 사용해 요청을 수신하여 내부의 HTTP 서비스로 전달함 이때 SSL 인증서의 유효성을 검증하고 요청 전달하기 전 요청을 복호화 함 *** 이로써 클라이언트와 서버 간의 통신은 ..

볼륨 & 스테이트풀셋 (Persistence Volme)

Pod는 Stateless 하다 파드는 일시적이며, 언제나 삭제될 수 있음 파드 그 자체는 Stateless 하며 파드의 교체와 배치를 담당하는 것이 디플로이먼트임 Pod가 사라져도 데이터 남기기 파드 자체에 상태를 남겨야 하는 Stateful App => MYSQL, mongoDB, redis 와 같은 데이터베이스가 있을 수 있음 => 데이터 베이스 어플리케이션이 담긴 파드가 사라질때, 데이터가 같이 사라지면 안됨 Kubernetes 에도 영속적인 (Persistence) 데이터 저장을 위해 볼륨을 연결할 수 있음 Q. 볼륨과 퍼시스턴스 볼륨(Persistence Volume)은 어떤 차이가 있나요? (AWS EC2에도 비슷한 개념이 있습니다. EBS와 인스턴스 스토어 볼륨의 차이점과 연결해서 설명해주..

kubernetes 치트 시트

리소스 YAML 적용 kubectl apply -f 리소스 조회 kubectl get # 목록 조회 kubectl get all # 현재 네임스페이스에서 모든 리소스 조회 kubectl describe # 상세 조회 리소스 삭제 kubectl delete kubectl delete -f 파드 로그 조회 kubectl logs 클러스터 삭제 후 다시 생성 클러스터에 문제가 생겼거나, 초기화하고 처음부터 다시 시작하고 싶을 때 이용합니다. minikube delete # 삭제 minikube start # 다시 생성 참고링크 https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/ kubectl 치트 시트 이 페이지는 일반적으로 사용하는 kubectl 커맨드..

[Mac OS] 파드 외부 노출 시키기 (k8s, kubernetes, pod)

파드 외부로 노출 시키기 - 클러스터 안에 위치한 pod는 고유한 IP를 가지고 있지만, 직접 내부로 접속하는것이 아님 - 파드 서비스를 외부로 노출시키기 위해선 어떻게 해야 하는가? 서비스 리소스를 사용하면 파드에서 실행 중인 애플리케이션을 클러스터 외부에서 접근할 수 있다. 또한 서비스를 사용하여 클러스터 내부에서 사용할 수 있는 서비스만 게시할 수 있다. 쿠버네티스에서 서비스는 파드의 집합에 접근할 수 있는 정책을 정의하는 추상적 개념입니다. 서비스 리소스가 정의된 YAML 파일에 selector라는 것을 이용해 서비스할 대상 타겟을 설정할 수 있습니다. 파드 외부 노출 참고 링크 https://kubernetes.io/ko/docs/concepts/services-networking/ 서비스, 로..

[Mac OS] Deployment 란? (디플로이먼트, Deployment)

Deployment (디플로이먼트) 파드를 업데이트 하기 위한 선언적 명세 Deployment 리소스를 통한 설정 가능한 기능 - 레플리카셋, 즉 복제본 구성을 이용하여 파드를 원하는 개수만큼 실행시킬 수 있음 - Control Plane 을 이용하여 파드를 업데이트 할 수 있음 - 파드를 롤백할 수 있음 *복습* 다양한 배포 전략 어플리케이션 복제본에 대한 새버전 업데이트 배포 전략 1. 재생성 (Recreate) : 이전 버전을 삭제하고 새 버전 생성 2. 블루/그린 배포 : 한번에 이전 버전에서 새 버전으로 연결을 전환 3. 롤링 배포 : 이전 버전을 Scale down 하고, 새 버전을 Scale up 하는 방식으로 단계별로 교체 (롤아웃 이라고도 함) 4. 카나리 배포 : 새 버전이 잘 작동한닫..

[Mac OS] 파드 란?(Pods, k8s, kubernetes)

파드란? 파드 (pods)는 쿠버네티스의 배포 가능한 가장 작은 컴퓨팅 유닛 하나의 논리적인 호스트 ** 파드의 포함 요소 (도커 컨테이너 처럼 파드 내에서 다음 요소들은 격리 됨) 1. 하나 이상의 어플리케이션 컨테이너 2. IP 주소 3. 볼륨과 같은 공유 스토리지 워크로드란? 쿠버네티스에서는 "쿠버네티스 상에서 작동되는 어플리케이션"을 의미함 클라우드 분야에서는 "어떤 어플리케이션을 실행할 대 필요한 IT 리소스의 집합"을 의미함 - YAML 파일 생성 및 파드 생성 (simple-pod.yaml) apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - conta..

[Mac OS] 쿠버네티스 설치 (minikube 설치, minikube 실습, cozserver)

minikube 란? - 쿠버네티스 로컬환경 실행을 위한 쿠버네티스 로컬 클러스터 환경 minikube 설치 참고 링크 https://minikube.sigs.k8s.io/docs/start/ minikube start minikube is local Kubernetes minikube.sigs.k8s.io **** 이미지 기반의 디플로이먼트 생성 및 배포 실습 ( cozserver:1.0 ) 1. minikube 설치 - 필자는 macOS M1 환경에서 설치를 진행하므로 아래 스펙으로 설치 % brew install minikube // minikube 설치 2. cluster 시작 % minikube start // 관리자 액세스 권한이 있는 터미널에서 실행 - doker가 실행중이여야함 => ope..

쿠버네티스란? (kubernetes 란, k8s 란, 컨테이너 오케스트레이션)

쿠버네티스란? (kubernetes, k8s) - 오픈소스로 만들어진 컨테이너 오케스트레이션 도구 => 컨테이너 오케스트레이션 도구 : 수십~수백 개의 컨테이너를 잘 관리하기 위한 툴 - 컨테이너화된 어플리케이션을 자동으로 배포, 스케일링 하는 등의 관리 기능 제공 => 각기 다른 환경 (온프레미스 서버, VM, 클라우드)에 대응 가능 컨테이너가 늘어나게 되는 이유 ? - 아키텍처가 모놀리식에서 마이크로 서비스로 바뀜 - 확장성을 고려한 스케일링 까지 더 할 경우에도 컨테이너 증가 쿠버네티스를 사용하지 말아야 하는 경우 ? 여러 단계 (Tier)로 나뉘어지지않은 모놀리식 아키텍처 => 모놀리식 아키텍처는 마이크로 서비스 분해 전략을 세우는 것이 우선 적은 수의 컨테이너 컨트롤 시 => docker-com..

[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 3~4

** Terraform 실행 시 현 디렉토리 내 모든 tf 파일 참조됨 => 리소스 별 분리 관리 시 편함 *** Terraform 디렉토리 구성 *** 최종 목표 아키텍처 STEP 3: DB 인스턴스 생성 - 자습서 사양대로 RDS 인스턴스를 생성 https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateDBInstance.html ** RDS 인스턴스 사양 - EC2 인스턴스 리전과 동일한 리전에서 생성 (ap-northeast-2 = 서울) - 데이터 베이스 생성 -> 표준 생성 -> MySQL - 프리티어 선택 - 가용성 및 내구성 기본값 설정 - 암호 자동생성 OFF - 인스턴스 구성 ..

IaC/Terraform 2023.02.12

[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 2

** Terraform 실행 시 현 디렉토리 내 모든 tf 파일 참조됨 => 리소스 별 분리 관리 시 편함 최종 목표 아키텍처 STEP 2: EC2 인스턴스 생성 - AMI : Ubuntu Server 18 - instance type : t2.micro - 사용자 데이터 (최종 출력 확인 시 Hello, World 확인) #!/bin/bash echo "Hello, World" > index.html nohup busybox httpd -f -p ${var.server_port} & - 키페어 : EC2 할당 (수동 or 원래 있던 키페어 사용 - 필자는 원래 있던것 사용) 1. Key pair 생성 (ec2.tf) #key-pair 생성 #키페어 생성 및 설정 resource "aws_key_pair..

IaC/Terraform 2023.02.11

[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 1

** Terraform 실행 시 현 디렉토리 내 모든 tf 파일 참조됨 => 리소스 별 분리 관리 시 편함 최종 목표 아키텍처 STEP 1: DB인스턴스에 사용할 Amazon VPC 생성 자습서 참고 https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html 0. Terraform 구성 (main.tf) #Provider 구성 terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 4.16" } } required_version = ">= 1.2.0" } #provider 구성 provider ..

IaC/Terraform 2023.02.11

[Mac OS]서버리스 어플리케이션 (Lambda, API Gateway, S3, Thumbnail, 자동화, SNS 알림)

Bare Minimum Requirements 이미지가 업로드되면, 원본과 별도로 썸네일을 생성하고, 이를 별도의 버킷에 저장해야 합니다. 썸네일 이미지는 가로 200px의 크기를 가집니다. 썸네일을 저장할 별도의 버킷은 람다 함수의 환경 설정으로 구성되어야 합니다. 썸네일 생성이 완료되면, 메일로 해당 썸네일 URL과 함께 전송이 되어야 합니다. Amazon SNS를 활용합니다. 아래 과제 제출 방법을 참고해 GitHub에 제출합니다. Homebrew 사전 설치가 필요하다 (MacOS 기준) 참고 링크 https://brew.sh/ Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 1. Quick Start Template 를 이용해..

클라우드/AWS 2023.02.07
반응형