DevOps BootCamp/마이크로서비스 12

서버리스 사진첩

주요 기능 > 단순히 사진을 업로드하는 것 외에도, 인증 기능과 썸네일 생성 기능을 제공함 이미지가 업로드되면, 원본과 별도로 썸네일을 생성하고, 이를 별도의 버킷에 저장. 썸네일 이미지는 가로 200px의 크기를 가짐. 썸네일을 저장할 별도의 버킷은 람다 함수의 환경 설정으로 구성되어야 함. 1. sam init 명령을 이용해 Quick Start Template으로부터 Standalone function을 하나 생성 2.lambda 함수의 파라미터를 정의. 이는 이벤트 소스로부터 트리거가 발생했을 때 이벤트의 형태를 확인하기 위함입니다. 다음과 같이 코드를 작성 exports.helloFromLambdaHandler = async (event, context) => { console.log(event..

AWS 서버리스 애플리케이션 배포

SAM(serverless application model) 대표적인 기능 한 번에 배포 Lambda 함수, API Gateway 등의 리소스를 CLI 명령어 한 번으로 배포가 가능하게 만들 수 있습니다. 로컬에서의 테스트 꼭 배포하지 않아도 로컬 환경에서 테스트가 가능합니다. AWS CloudFormation 기능을 이용한 단일 작업을 통한 리소스(인프라) 관리 AWS CloudFormation은 이후에 배우게 될 Terraform과 같은 Infrastructure as Code 도구입니다 SAM 대안 serverless 범용성이 좀 더 좋다 멀티 클라우드에 terraform 사용할 수 있지만 서버리스위한 툴은아님 sam으로 기본적인 Hello World 애플리케이션 배포 SAM 설치(Mac) 1. ..

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는 컴퓨터와 컴퓨터 사이의 네트워크 통신이고, 이는 네트워크 지연에 따라 즉시 응답이 오지 않을 수도 있기 때..

도메인 주도 설계 예시

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