DevOps BootCamp 171

API Gateway

API Gateway는 무엇일까? > 경로와 엔드포인트로 구성되어 정의된 HTTP 서버 > 각 경로는 해당 경로를 처리하는 리소스와 연결 > 서버리스 아키텍처에서 이러한 핸들러는 FaaS 기능을 종종 사용 > 즉, API Gateway는 각 API 요청의 관문 역할 > API Gateway는 요청을 수신하면 요청과 일치하는 라우팅 구성을 찾고, 관련된 FaaS 기능을 호출 > 일반적으로 API Gateway는 HTTP 요청 매개변수에서 FaaS 기능을 간결한 입력으로의 매핑을 허용하거나 전체 HTTP 요청이 일반적으로 JSON 객체로 전달되도록 허용 > FaaS 기능은 로직을 실행하고 결과를 API Gateway에 반환하며, 차례로 이 결과를 원래 호출자에게 다시 전달하는 HTTP 응답으로 변환 > Am..

AWS Lambda

AWS Lambda란? AWS가 제공하는 서버리스 FaaS 솔루션 함수의 인스턴스를 실행하여 이벤트를 처리 FaaS FaaS는 자체 서버 시스템이나 수명이 긴 서버 애플리케이션을 관리하지 않고 백엔드 코드를 실행하는 것 FaaS는 런타임(node.js, Java 등)에 대한 사전 준비가 필요하지 않음 FaaS 기능에는 특히 상태 및 실행 기간과 관련하여 상당한 아키텍처 제한이 있음 수평적 확장은 완전 자동이며 탄력적이며 공급자가 관리함 FaaS의 기능은 일반적으로 공급자가 정의한 이벤트 유형에 의해 트리거 됨 HTTP 요청에 대한 응답으로 트리거 되도록 만들 수 있음 특징 서버를 프로비저닝 하거나 관리할 필요 없이 작성한 코드를 백엔드 서비스로서 배포할 수 있게 해 줍니다. Lambda 함수를 실행하려면..

CQRS

CQRS란? CQRS는 Command Query Responsibility Segregation(명령과 조회의 책임 분리)의 약자 명령을 처리하는 책임과 조회를 처리하는 책임을 분리하는 것 CQRS는 초기 CQS에서 시작되어 확장, CQS는 Command Query Separation의 약자로 시스템에서 처리되는 명령과 조회, 이 두 작업을 정의하는 핵심 개념이자, 이 둘을 분리시키는 디자인 패턴, CQRS에서 명령은 상태를 변경하는 작업을 의미하며 조회는 상태를 반환하는 작업을 의미 마이크로서비스의 핵심은 서비스별 데이터 저장소를 각기 다르게 채택한다는 점 이때 서비스 성능 향상을 위해서 인스턴스를 스케일 아웃하여 여러 개로 실행할 경우 빈번한 명령과 조회 작업으로 리소스 교착상태가 발생할 수 있음 뿐..

메시지 브로커를 이용한 비동기식 통신

Review: 프로세스 간 통신 요청을 보내는 즉시 수신자로부터 응답이 오길 기대하는 "동기적 방법" 클라이언트-서버 아키텍처의 REST(HTTP)가 대표적 요청을 일단 보내놓고 수신자가 받을 때까지 보관했다가 처리하는 "비동기적 방법" 수신자가 받기 전에 누군가는 메시지를 보관해놓아야 한다 → 메시지 브로커 (메시지 큐) 메시지 브로커가 필요한 이유 > 분산 애플리케이션에서 프로세스 간의 느슨한 결합(loosely coupled)을 제공하는 것이 가장 큰 장점 > 그렇다면 강하게 결합된 시스템에서의 단점은 무엇일까요? 서로 연결되어 있는 시스템 중 한 곳에서 장애가 발생했을 때 그 장애가 연결된 다른 시스템들에 영향이 감 그러나 중간에 메시지 브로커가 있다면, 한 시스템의 장애가 다른 시스템에 주는 영..

동기식 요청/응답 통신 REST

REST > HTTP로 소통하는 프로세스 간 통신 규약 > REST API는 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식 REST API 예시 GET 메서드를 사용하여 사용자 정보를 조회하는 API URI: /users/{user_id} 요청 예시: GET /users/123 응답 예시: { "id": 123, "name": "John Doe", "age": 30, "email": "johndoe@example.com" } POST 메소드를 사용하여 새로운 사용자를 생성하는 API URI: /users 요청 예시: POST /users { "name": "Jane Doe", "age": 25, "email": "jan..

대표적인 데이터 교환 포맷 JSON

JSON의 탄생 배경 > JavaScript Object Notation의 줄임말 > 데이터 교환을 위해 만들어진 객체 형태의 포맷 const message = { sender: "김코딩", receiver: "박해커", message: "해커야 오늘 저녁 같이 먹을래?", createdAt: "2021-01-12 10:10:10" } > 메시지 객체가 전송 가능하려면, 메시지를 보내는 발신자와 메시지를 받는 수신자가 같은 프로그램을 사용하거나, 문자열처럼 범용적으로 읽을 수 있는 형태여야 함 전송 가능한 조건 (transferable condition) 수신자(reciever)와 발신자(sender)가 같은 프로그램을 사용한다. 또는, 문자열처럼 범용적으로 읽을 수 있어야 한다. > 객체는 타입 변환을..

API 디자인과 프로세스 간 통신

”마이크로서비스 간의 통신”이라고 이름 붙이지 않고, “프로세스 간 통신(Inter-process communication, IPC)”이라고 이름 붙인 것은, 결국 마이크로서비스는 하나의 프로세스 단위로 실행되기 때문 프로세스 간의 통신 > 서비스와 서비스가 서로 통신하기 위해서는 인터페이스(interface)가 존재해야 하고, 인터페이스가 요구하는 방식대로 커뮤니케이션해야 함 동기/비동기 > HTTP 프로토콜은 기본적으로 TCP(또는 UDP) 연결을 만들고, 이 위에서 요청에 따라 즉시 응답이 오는 형태로 구현, 즉 동기적인 응답을 제공 여기서 잠깐! HTTP는 비동기 아닌가요? 어쨌든 HTTP는 컴퓨터와 컴퓨터 사이의 네트워크 통신이고, 이는 네트워크 지연에 따라 즉시 응답이 오지 않을 수도 있기 때..

쿠버네티스 - 차트 시트

명령적 접근 kubectl create deployment ‘deployment이름’ —image=‘dockerhub 경로’ 예)sanghyupl/kub-first-app kubectl get deployments > 클러스터에 deployment가 얼마나 있는지 확인할 수 있음 > deployment에 생성된 모든 것을 볼수 있음 kubectl get pods > 이미지에 대한 오류를 확인 > 이미지는 로컬에 있기 때문에 찾을 수 없음 kubectl delete deployment first-app > first-app deployment 삭제 Kubectl expose > service를 생성하여, deployment에 의해 생성된 pod를 노출시킴 kubectl expose deployment fi..

쿠버네티스-작동원리

쿠버네티스 > 클라우드 서비스 프로바이더가 아님 > AWS, Microsoft Azure의 대안도 아님 Cluster(배포 혹은 원하는 최종 상태를 구성하는 모든 것의 컬렉션 세트) Master Node : Control Plane -> Pod 및 container 제어 : API Server(Worker Node와 통신) : Scheduler(Pod를 감시) - API에 알림 : Kube-Controller-Manager(Worker Node 전체를 감시하고 제어) -> 적당한 수의 포드를 가동 중에 있는지 확인하는 역할 : Cloud-Controller-Manager(클라우드 프로바이더에 따라 다름) -> 클라우드 프로바이더에게 무슨 일을 해야 하는 지 알려줌 Worker Node = ec2 인스턴스..

도메인 주도 설계 예시

팀 전체가 도메인 지식을 공유를 통해 프로젝트의 방향성을 얼라인(align)시키는 것에 있습니다. 이 과정에는 프런트엔드 개발자, 백엔드 개발자, 데브옵스 개발자, 인프라 엔지니어 등의 소프트웨어 관련 담당자만 참여하는 것이 아닙니다. 하나의 프로젝트 팀에 속하는 기획자와 프로젝트 매니저, UI/UX 디자이너 등 모든 인원이 참가하게 됩니다. 모든 구성원이 이해할 수 있는 형태와 언어로 프로젝트를 시각화합니다 완성된 결과물을 가지고 모든 팀 구성원이 하나의 방향성을 가진 상태로 각자의 역할을 수행하게 됩니다. 도메인 주도설계의 주요 용어 도메인 이벤트: 발생한 사건 커맨드: 도메인 이벤트를 트리거하는 명령 외부 시스템: 도메인 이벤트가 호출하거나 관계가 있는 레거시 또는 외부 시스템 액터: 개인 또는 조..