Post

오토에버 클라우드 2기 프로젝트 1~2주차

오토에버 클라우드 2기 프로젝트 1~2주차

1주차

8월 25일부터 11월 초까지 최종 프로젝트를 진행하기 때문에 프로젝트를 시작하는 주차였다 1주차(8/25 ~ 8/29)에서 주제를 선정하거나 어떤 협업 툴을 사용할것인지 결정하는 시간으로 사용했다

소통을 위해서는 slack을 사용하고 프로젝트를 위해서 jira를 이용하고 문서 공유를 위해서 jira confluence를 사용하기로 했다

그리고 주제를 선정하기 위해서 회의를 거의 일주일 동안 매일 한것 같다 주제 브레인 스토밍을 통해서 매우 많은 주제가 나왔다 그 중 최종 3개를 선정했고 이 금요일 멘토링을 통해서 최종 선택을 했다

구분(1) 카셰어링 (쏘카/타운카 모델)(2) 클라우드 블랙박스(3) 주식 게임
핵심 기능차량 등록/검색/예약,결제 시스템,
사용자 간 채팅, 위치 기반 서비스
영상 데이터 분할/전송/저장,
적응형 비디오 스트리밍,
암호화 및 인증, 충격 감지 알림
외부 API를 통한 주식 데이터 연동,
걸음 수 데이터 연동 (Health),
모의 투자 및 랭킹 시스템,
커뮤니티/정보 공유
해결하려는 문제유휴 차량 자원의 효율적 공유언제 어디서든 블랙박스 영상에 접근하고
안전하게 보관
주식 투자에 대한 학습과 신체 활동을
결합한 새로운 경험 제공
장점참고할 레퍼런스 서비스가 많음,
MSA 구조 설계, 예약/결제 시스템 등 범용적인
백엔드 기술 적용에 용이
대용량 영상 데이터 처리라는 귀한 경험 가능
네트워크, 스토리지 등 성능 최적화를 깊게 고민할 수 있음
명확한 기술적 목표(스트리밍, 인코딩)
재미와 흥미를 유발하기 쉬워 발표에 유리,
다양한 외부 API 연동 경험, 대규모 실시간
데이터 처리 (Kafka) 및 시각화 경험
단점현실적인 제약 (자동차 없음, 법규 문제),
차별성 확보의 어려움 (유사 서비스 다수),
테스트 환경 구축의 어려움
클라이언트(앱/디바이스) 개발 부담이 큼,
영상 처리/스트리밍 기술에 대한 깊은
이해 필요, 인프라 비용(스토리지, 트래픽)이
많이 발생할 수 있음
프런트엔드(데이터 시각화)의 역할이 매우
중요함. 비즈니스 로직이 상대적으로 단순할
수 있음 (재미 요소에 치중)
돋보이는 기술 스택MSA, DDD결제 API 연동, 실시간
위치 추적 (WebSocket, gRPC),
검색엔진 (Elasticsearch)
FFmpeg (영상 인코딩/처리), 스트리밍 프로토콜(HLS, DASH),
대용량 스토리지(AWS S3, GlusterFS),
메시지 큐 (네트워크 단절 대응)
실시간 데이터 처리(Kafka, Spark),
데이터 파이프라인(Airflow),
데이터베이스 (시계열 DB: InfluxDB),
데이터 시각화 라이브러리

 

현업 멘토링(8/29)

일단 주식 게임은 강사님께도 물어보니 기존에 비슷한게 있었다고 해서이제는 없어짐 멘토링을 할 때 위 주제중 2개에 대해서 물어봤다

구분클라우드 블랙박스차량 공유 서비스
아이디어 및 컨셉🚗 대용량 블랙박스 영상 데이터를
실시간으로 수집 및 처리하는 시스템
🤝 참신한 아이디어의 차량 공유 서비스
기술적 난이도 및 과제(높음) 실시간 대용량 데이터 처리가 핵심
도전 과제: 특정 시간에만 트래픽이 몰려 평소
클라우드 활용도가 낮을 수 있음
(매우 높음) 차량 제어 기술(pleos)의 난이도가 높고,
기술적 불확실성이 커 구현이 어려울 수 있음.
클라우드 활용 방안스케일 아웃: 트래픽 폭증에 대비해 쿠버네티스
활용한 탄력적 서버 확장 전략이 효과적임
하이브리드 클라우드: Private/Public 클라우드를 결합해
고가용성(HA)을 확보
데이터 분산 처리: 카프카(Kafka) 같은 메시지 큐를 활용한
데이터 분산 처리
 
주요 기술 스택 및 구현 방향빅데이터 처리: 단순 저장 외에 압축/인코딩,
ETL 파이프라인
등 데이터 최적화 방안이 필요
모니터링 및 자동화: Zabbix 등을 활용해 서버 다운,
트래픽 초과 등 시나리오를 정의하고 기민하게 대응
솔루션 활용: 모든 기술을 직접 구현하기보다
검증된 솔루션을 적극 활용하여 효율성 증대
 

둘다 좋은 주제지만 클라우드의 역할과 대용량 데이터 처리등을 보여주기에 더 좋다고 하셨다 그래서 우리도 클라우드 서비스를 집중적으로 해보고 싶기 때문에 클라우드 블랙박스를 주제로 선정했다

 

2주차

주제를 선정하고 영상을 이용하는것은 처음이라 영상 보내고 저장하는 서비스 프로토타입을 한번 만들어 봤다

프로토타입을 만들면서 기능을 어떻게 할지 안정하고 시작한거라 내가 생각하는대로 2개를 구현했다

  1. 24시간 항상 영상을 보낸다
    1. ffmpeg을 통해서 영상을 계속 보냄 저장 + 실시간 스트리밍(dash)
  2. 화면 변경이 있을때만 영상을 보낸다
    1. ffmpeg을 통해서 영상을 계속 보냄 저장만
    2. 클라이언트에서 opencv를 사용해서 움직임을 감지 움직임이 있다면 +5s 영상을 보낸다(움직임이 있다면 계속 보냄)

위 과정을 통해서 클라이언트에서 영상을 보내는것은 ffmpeg을 사용한다면 큰 문제가 없다는 것을 알았다

 

그리고 기능 회의를 통해서 기능을 구체화했다 처음에는 단어 통일이 안되어 있어서 소통에 문제가 있었는데 기능을 구체화 하면서 단어을 통일해 나갔다

기능은 사용자(유저), 서버, 블랙박스 이렇게 각각에 대해서 생각했다

 

기능 회의 결과

기능 회의

👤 유저 기능

회원 관리

  • 회원 가입 시 이메일(2FA 인증), 아이디, 비밀번호를 입력받습니다.
  • 아이디와 비밀번호를 사용하여 로그인할 수 있습니다. (아이디가 곧 닉네임으로 사용됩니다.)
  • 비밀번호 변경이 가능합니다.
  • 회원 탈퇴는 불가능합니다. (낙장불입 정책)
  • 로그아웃이 가능합니다. (JWT 사용 시, 서버 측에서 토큰 무효화를 위한 블랙리스트 관리 필요)

블랙박스 기기 관리

  • 한 계정에 여러 대의 블랙박스 기기를 등록할 수 있습니다.
  • 등록된 블랙박스 기기를 삭제할 수 있습니다.
  • 블랙박스 별로 닉네임을 설정하고 변경할 수 있습니다.
  • 각 블랙박스마다 고유의 루트 폴더(디렉터리)가 자동으로 생성됩니다.
  • 블랙박스의 헬스 체크 상태를 확인할 수 있습니다. (UI 상에서 기기 옆에 상태 표시등으로 표현)
  • 기기 연결이 10시간 이상 끊기면 사용자에게 이메일로 알림을 보냅니다.

영상 관리

  • 블랙박스에 저장된 영상을 웹에서 확인할 수 있습니다.
  • 영상은 일자별 폴더에 자동으로 정리되어 저장됩니다.
  • 영상 목록은 시간 순으로 정렬됩니다.
  • 영상은 최대 30일 동안 저장되며, 기간이 지난 영상은 자동으로 삭제됩니다.
  • 개별 영상 파일에 대해 재생(▶), 다운로드(↓), 삭제(X) 기능을 제공합니다.
  • 폴더 단위 삭제 기능을 제공합니다. (X)
  • 폴더 및 파일 이름 변경은 불가능합니다. (수정이 필요하면 다운로드 후 직접 변경)
  • 영상 메타데이터(녹화 시간, 블랙박스 ID, 영상 용량, 영상 총 길이)를 확인할 수 있습니다.

📹 블랙박스 기능 (Device)

  • [아이디 생성] 기기마다 고유하고 변경 불가능한 ID를 생성합니다.
  • [촬영] 주행 영상을 촬영합니다.
  • [로컬 저장] 촬영된 영상은 항상 기기의 로컬 스토리지에 우선 저장됩니다. (일정 기간 또는 용량 초과 시 오래된 파일부터 삭제)
  • 서버로 영상 전송 실패 시, 해당 영상을 로컬에 보관 후 재전송을 시도합니다.
  • [실시간 전송] 촬영된 영상을 서버로 실시간 전송합니다.
  • [연결 복구] 영상 전송이 중단되면, 약 1분 간격으로 서버에 ping을 보내거나 재전송을 요청하여 연결 복구를 시도합니다.

영상 전송 신뢰성 확보 방안 (클라이언트 ↔ 서버)

  • 방법 1: SRT 프로토콜 활용
    SRT의 오류 감지 및 재전송 기능을 신뢰하여 전송하고, 연결이 끊기면 끊긴 시점부터 재전송을 시도합니다.
  • 방법 2: 슬라이딩 윈도우 방식
    일정량의 데이터(영상 청크)를 보낸 후, 클라이언트가 서버에 수신 확인을 요청하여 데이터 정합성을 보장합니다.
  • 방법 3: 서버의 데이터 요청
    서버가 주기적으로 수신한 데이터를 확인하고, 누락된 부분이 있으면 클라이언트에 해당 영상의 재전송을 요청합니다.

🖥️ 서버 기능

인증 및 관리

  • [인증] 유저의 회원가입 및 로그인을 처리하며, 2FA 인증을 지원합니다.
  • [블랙박스 상태 관리] 블랙박스 기기의 연결이 일정 시간 이상 끊기면 사용자에게 알림(이메일 등)을 전송합니다.

영상 처리 및 저장

  • [영상 수신] 블랙박스로부터 영상 데이터를 수신합니다. (별도 인코딩은 불필요, MP4 포맷으로 그대로 저장)
  • [영상 저장] 수신된 영상은 1분 단위 파일로 저장되며, 시간 순으로 정렬됩니다.
  • [메타데이터 저장] 영상 수신 시 관련된 메타데이터를 함께 저장합니다. (수신 방식을 영상과 함께 받을지, 별도로 받을지 결정 필요)
  • [폴더 생성] 각 블랙박스별로 고유 폴더를 생성하고, 매일 날짜별로 새로운 하위 폴더를 자동으로 생성합니다.
  • [영상 삭제] 개별 영상 삭제 및 폴더별 삭제가 가능합니다. 30일이 지난 영상은 스케줄러를 통해 자동 삭제되며, 삭제된 영상은 복구할 수 없습니다.
  • [영상 제공] 유저의 요청에 따라 영상 다운로드스트리밍 재생을 지원합니다.(스트리밍 시, 현재 영상 재생이 끝나면 다음 영상이 자동으로 이어서 재생됩니다.)

스케일링 전략

  • [고려사항] 특정 시간대(출퇴근) 트래픽 변동보다는, 네트워크나 서버 장애 후 복구 시 다수의 클라이언트가 동시에 영상을 전송하며 발생하는 트래픽 급증에 대비해야 합니다.
  • [구현 방법]
    • 수신된 영상을 바로 처리하지 않고 메시지 큐(Message Queue)에 임시 저장합니다.
    • 큐에 쌓인 영상 데이터를 워커(Worker)들이 가져가 처리하도록 하여 로드밸런싱 및 안정적인 처리를 보장합니다.
  • [아키텍처] 향후 기능 확장을 고려하여 MSA (Microservice Architecture) 구조를 검토합니다. (예: 영상 저장 서비스, 메타데이터 관리 서비스 분리)

 

회의나 프로토타입을 만든 후 남는 시간은 쿠버네티스를 복습했다 우리의 서비스를 쿠버네티스를 통해서 배포하고 aws를 사용할 예정이라 개념을 확실하게 알아야 팀원들과 회의할때 헤매지 않을 수 있다 또한 EKS를 사용하는게 아닌 ec2를 통해서 클러스터를 구축할 예정이라 이 부분은 확실하게 공부하려고 한다

그리고 다음주에는 계획과 구조를 구체화를 진행할 예정이고 이벤트 스토밍도 진행하기 때문에 이벤트 스토밍에 대해서 공부할 예정이다

This post is licensed under CC BY 4.0 by the author.