본문 바로가기

전체 글

(123)
이벤트 기반 아키텍처(EDA) 살펴보기 이벤트기반 아키텍처 아래 설명은 우아한테크 MSA의 이벤트기반 아키텍처 영상을 참고하여 정리한 내용입니다. 영상 참조 MSA와 EDA EDA(Event-Driven Architecture)는 MSA(Microservice Architecture)도입의 핵심 이유 중 하나인 서비스의 독립을 충족시키기에 적합하여 적용된다. 사업 규모가 커지게 되면 다수의 회사가 Monolithic 구조에서 MSA로의 전환을 고려하는데, 그 이유는 내부적으로 관리해야할 서비스의 확장, 규모가 증가하는데 있다. 가령 로그인 기능을 생각해보자. 과거 서비스 규모가 작을 떄는 로그인 요청 시 계정 검증, 로그인 허용 정도의 수준에서 끝났을지도 모른다. 하지만 이후 사업이 확장되면서 유저가 로그인을 요청했을 뿐인데 '로그인 기록 남..
HTTPS와 SSL 인증 방식에 대한 이해 HTTP/HTTPS http는 OSI 7계층에서 어플리케이션 계층 프로토콜에 해당하며 클라이언트-서버 간 단방향, 비연결성 통신을 한다. 즉 웹 브라우저에서 CRUD에 대한 요청을 보내야지만 서버에서 그에 대해 응답하는 형태이다. 여기서 중요한 점은 요청과 응답 과정에서 전달되는 정보가 암호화 되어있지 않다는 점이다. 이를 통해 중간자 공격(Man-in-the-middle-attack)을 통해 데이터를 가로챌 수 있는 가능성이 열리게 된다. https는 끝자리에 secure가 들어간 것으로 서버와 브라우저 간 암호화된 연결을 생성한다. 여기서 암호화되어 전달되는 데이터는 http message body에 해당한다. https의 암호화는 SSL/TLS 통신을 기반으로 이루어 진다. SSL/TLS SSL은 ..
AWS Cloudfront의 work flow 살펴보기 Origin 요청과 Edge location 요청 간 응답시간 비교 S3를 cloudfront로 배포했을 때 응답 시간 감소의 효과가 얼마나 좋은건지 직접 확인해 보고 싶었다. 라이브 스트리밍 프로젝트를 진행하면서 동일한 ts파일에 대한 GET 요청을 보냈을 경우 cloudfront에 배포할 때와 단순히 Origin(S3)에서 GET 요청을 보낼 때의 차이를 비교하는 방식으로 테스트를 진행하고자 했다. 그래서 Chrome의 inspector창을 열어 '네트워크'의 '타이밍' 항목을 통해 응답 대기 시간을 비교해 보았다. 방식은 간단하다. 다시보기 서비스 이용을 통해 cloudfront의 캐시 정책을 no-cache로 설정하여 전혀 캐싱을 하지 않을 때와 Elemental-MediaPackage 캐시 정책..
Nestjs passport로 카카오, 구글 로그인 인증 구현하기 Nest.js passport로 카카오, 구글 로그인 인증 구현하기 passport를 통해 카카오, 구글 계정으로 로그인할 수 있도록 구현하면 유저 입장에서는 회원가입 절차 없이 바로 로그인 가능하기 때문에 편의성을 제공해 줄 수 있게 되고, 무엇보다 소셜 로그인 정보를 기반으로 유저에게 특별한 회원가입 절차 요청 없이 회원 가입 처리가 가능해진다. 아래 링크에 접속하면 카카오에서 로그인 인증을 어떤 과정으로 처리하는지에 대한 설명이 담겨 있으니 관심있으면 참고해보자. 카카오 로그인 처리 Flow 간략하게 소셜 로그인 인증과정을 정리하자면 아래와 같다. 사용자가 사이트(이하 프론트)에서 카카오 로그인 버튼을 클릭합니다. 백엔드는 카카오 인증 서버에게 인가 코드 발급을 요청합니다. 카카오 인증 서버에서 사..
python openCV로 OBS Virtual Camera 송출하기 라이브 스트리밍 프로젝트를 진행하면서 요즘 유행하는 버튜버 기능을 구현하고자 시도해 보았다. 실제 버튜버 적용을 어떻게 하는지 알아본 바에 따르면 Vroid studio라는 프로그램으로 버튜버 캐릭터를 생성 및 저장할 수 있으며 (.vrm 파일로 생성된다.) 이를 animaze 라는 소프트웨어를 통해 캐릭터를 불러오면 웹캠에 비춰진 내 모션과 캐릭터가 연동되어 움직이는 연출이 즉시 적용되었고, 해당 화면을 OBS에서 가상 카메라 형태로 송출하는 방식임을 알 수 있었다. 이처럼 단순하게는 ZOOM의 아바타 기능에서 더 나아가 버튜버처럼 최소 눈과 입 모션 캡처를 적용하는 방법은 어디서부터 어떻게 구현해야할지 당장 떠오르지 않았다. 하지만 당장 시도해볼 만한 방법은 face detection을 통해 카메라에..
Node.js 기반 라이브 스트리밍 구현 흐름 살펴보기 현재 진행 중인 프로젝트를 통해 Nest.js 기반 API 서버와 라이브 스트리밍을 위한 서버, AWS 서비스로 라이브 스트리밍을 구현하였으며 대략적인 Work Flow는 위 그림과 같다. 어떤 방식으로 구현되었는지 단계별로 알아보고 보완이 필요한 부분을 살펴보자 1. 스튜디오 입장 BJ가 스트리밍을 시작하기에 앞서 준비 단계에 해당하는 페이지로 접속하며 이를 스튜디오로 칭했다. 해당 페이지에서는 스트리밍을 위한 신규 채널을 생성하고, 라이브 스트리밍을 진행할 수 있다. 2. 유저 정보 획득 입장한 유저의 신원을 조회한다. 이는 BJ가 스튜디오에 입장했을 때 종료되지 않은 스트리밍 채널 존재 여부를 확인하기 위함이다. 채널 존재 여부를 확인하는 이유는 첫째, BJ는 한 번에 여러 스트리밍 채널을 생성할 ..
S3, cloudfront를 활용한 라이브 스트리밍 구현 라이브 스트리밍 페이지 구현 프로젝트에서 rtmp 프로토콜과 hls 기술을 활용하였다. OBS와 같은 라이브 방송용 프로그램으로 rtmp://내IP주소/스트림키:1935 연결을 설정한 후 방송 시작을 클릭하면 해당 방송이 그대로 지정한 rtmp프로토콜로 흘러 들어온다. 이 때 실시간으로 들어오는 데이터를 하나의 파일로 저장하기 보다는 어느정도 일정한 간격으로 깍뚝썰기 하듯 조각 단위로 저장을 하는데 이렇게 하는 방식을 트랜스 먹싱이라고 부르며 대표적으로 hls 기술이 이를 구현한다. 간단하게 말해서 실시간으로 흘러들어오는 영상을 마치 가래떡 뽑는 기계에서 일정 간격으로 떡 자르듯 조각내어 파일로 저장하는 방식이라 할 수 있겠다. nodejs에서는 'node-media-server'라는 node 패키지를 ..
AWS의 EC2, Nginx, OBS로 라이브 스트리밍 구현하기 AWS의 EC2, Nginx, OBS로 라이브 스트리밍 구현하기 라이브 스트리밍 프로젝트를 준비하는 과정에서 nginx로 스트리밍이 가능하다는 것을 알게 되었고, 크롬의 hls 실행 익스텐션으로 라이브 스트리밍을 시청하는데 성공했다. 하루를 꼬박 보내버리면서 알게된 방법을 차근차근 정리해보았다. AWS EC2에서 구현하기 프리티어인 t2.micro 인스턴스(ubuntu22.04)를 생성한다. 이후 sg(보안 그룹)의 인바운드 규칙에서 앞으로 사용할 여러 포트들을 열어줘야 한다. 80포트(http) 8088포트(m3u8파일 읽기를 위한 포트) 1935포트(rtmp 프로토콜) 패키지 설치 EC2 우분투 서버에 접속 후 스트리밍을 위한 패키지 설치를 진행했다. sudo apt-get update sudo ap..