대규모 채팅 서비스 설계하기(끝): 트러블 슈팅과 부하 테스트
·
Infra
이번주는 주로 백엔드-인프라 연동, 프론트-백엔드 연동을 진행했다.일단 백엔드-인프라 연동을 하면서 예상치 못한 문제들이 많이 있었다...1. SSM으로 Private EC2 접근하기아키텍처를 설계할 때는 별 생각없이 짰는데, 생각해보니 Private EC2에 접근하는 방법이 없었다. 생각해보면 EC2는 Private Subnet에 있고, 사용자는 오직 ALB를 통해 서비스에 접근한다. 즉, 개발자 입장에서 EC2에 직접 접근할 방법이 없었던 것이다.보통이라면 EC2에 탄력적 IP(Elastic IP)를 부여하고 SSH로 접속했겠지만, Private Subnet의 EC2는 외부에서 접근 가능한 퍼블릭 IP를 가지면 안 된다. 그래서 검색해보니, Private Subnet의 EC2에 접근하는 방법은 대표적..
대규모 채팅 시스템 설계하기 2 : EC2 + WebSocket 기반 최종 아키텍처
·
Infra
1주차에는 아무것도 정확하게 확정을 내리지 못하고 실시간 통신 공부와 AWS 아키텍처 공부만 하다 끝났다...그래도 2주차에는 최종 아키텍처를 드디어 정했다!이것 때문에 이번 주차에만 인프라 회의를 3번이나 했다... 전체 회의까지하면 4번...ㅜㅜ 지난주에는 정말 막막했는데 그래도 다행히 어느정도 감을 잡은 것 같다!사실 다 쓰자면 너무 주제도 많고, 길어서 우리 팀의 주요 쟁점이었던 API Gateway + Lambda, EC2 + Websocket 중 무엇을 사용할 것이냐를 중심으로 글을 쓰겠다!📍 WebSocket API Gateway + Lambda구성 요소AWS API Gateway (WebSocket 타입)AWS Lambda (메시지 처리)DynamoDB / SQS / Kinesis 등→ ..
대규모 채팅 시스템 설계하기 1: 실시간 통신 방식
·
Infra
ACC에서 사이드 프로젝트를 시작했다. 주제는 총 4개가 있었는데, 그 중 우리 팀은 대규모 채팅 시스템을 만들기로 했다.📌 채팅 시스템 요구 사항일대일 채팅 및 그룹 채팅 지원채팅 이력을 키-값 저장소에 보관평균 1,000명 동시 사용자초당 약 50건의 메시지 처리최대 6개월간 메시지 보관메시지 전송 지연 시간 2초 이내이 외에도 다음과 같은 심화 조건이 있었다:그룹 채팅: 최대 100명까지 참여 가능첨부 파일 전송: 최대 10MB오프라인 메시지 처리: 재접속 시 동기화 지원멀티 디바이스: 동일 계정으로 최대 3대까지 동시 접속 허용우리는 먼저 기본 조건부터 완성하기로 했다.💬 채팅 시스템의 핵심: 실시간 통신일반적인 웹 서비스에서는 HTTP 요청/응답 방식으로 통신하지만, 채팅 서비스처럼 빠른 상..
FastAPI EC2에 배포하기
·
Infra
그동안은 AI 코드를 로컬에서만 실행하면서 프론트엔드와 직접 연결했기 때문에, 별도로 서버를 배포할 필요는 없었다. 하지만 이번에는 백엔드를 통해 통신하는 구조로 변경되면서 FastAPI를 사용해 배포 환경을 구성하게 되었다. 마침 이미 백엔드가 배포되어 있는 EC2 인스턴스가 있었기 때문에, 별도로 인스턴스를 새로 만들지 않고 해당 EC2 내에 함께 배포했다.같은 EC2 내에 구성하면 네트워크 지연이 거의 없고, FastAPI에서 따로 HTTPS 설정을 하지 않아도 백엔드와 안정적으로 통신할 수 있다는 장점이 있다. 물론, 프론트엔드가 직접 FastAPI에 접근하는 구조라면 HTTPS 설정은 반드시 필요하다. 만약 EC2 인스턴스가 없다면, EC2 인스턴스부터 생성하면 된다. 1. SSH로 EC2에 접..
RDS & Amazon DynamoDB
·
Infra
RDS데이터 베이스란?: 데이터 베이스는 구조화된 정보 또는 데이터의 조직화된 모음으로 DBMS(Database Management System)에 의해서 제어됨. Relational Database: 구조화된 데이처를 저장테이블 형태엄격한 스키마SQL을 사용해서 데이터 조작예시) MySQL, PostgreSQLNon-Relational Database: 비정형 데이터를 저장스키마 X대량의 분산 데이터 저장다양한 형태의 데이터를 빠르게 처리mongoDB, redisRDS (Relational Database Service)On-Premise: 사용자가 직접 서버를 구축해서 DB 관리AWS EC2: AWS에서 제공하는 EC2 인스턴스 위에 사용자가 직접 DB를 설치하고 관리AWS RDS: AWS의 완전관리..
Storage - S3 & CloudFront
·
Infra
🫙 Storage: 클라우드 컴퓨팅 제공업체를 통해 데이터와 파일을 인터넷에 저장할 수 있는 클라우드 컴퓨팅 모델로, 사용자는 퍼블릭 인터넷 또는 전용 프라이빗 네트워크를 통해 스토리지에 엑세스 가능🧱 Block Storage: 데이터베이스 또는 전사적 자원 관리 시스템과 같은 엔터프라이즈 애플리케이션을 위해 지연 시간이 짧고, 빠른 데이터 엑세스를 제공하는 스토리지데이터를 블록 형태로 저장빠른 저장 및 검색을 위해 블록에 고유한 식별자 부여Amazon EBS📁 File Storage: 데이터를 파일 및 폴더의 계층 구조로 저장하는 데이터 스토리지어플리케이션에 가장 널리 사용되는 유형네트워크 환경에서의 파일 기반 스토리지는 NAS 기술 사용로컬 하드 드라이브와 유사한 방식으로 네트워크 스토리지 데이..