본문 바로가기

개발기술

(128)
적응형 비트레이트 스트리밍(Adaptive Bitrate Streaming) 설계 적응형 비트레이트 스트리밍(Adaptive Bitrate Streaming) 프로토콜공통 구조 요약구성요소설명Manifest (플레이리스트)어떤 세그먼트들이 있는지 정의한 메타파일. 예: .m3u8, .mpdSegment (세그먼트)실제 미디어 데이터 (영상/음성). 일반적으로 짧은 시간 단위로 나눔 (예: 4~10초) 적응형 스트리밍 동작방식개념 : "같은 시점"의 영상에 대해 서로 다른 비트레이트 버전의 세그먼트들이 존재하고, 네트워크 상태에 따라 클라이언트가 선택해서 요청하는 방식이에요. 세그먼트 구조 (Sequence 번호는 동일, 비트레이트별로 따로 존재)예를 들어, 다음과 같이 여러 화질 버전이 있을 수 있어요:비트레이트세그먼트 이름 (예시)240p (300kbps)chunk_001_240.m..
테스트의 종류와 선택 일반적으로는 단위 테스트, 통합 테스트, API 테스트 모두 시행하는 것이 이상적인 테스트 전략입니다.  왜 세 가지를 모두 사용하는가?  테스트 종류 목적어떤 걸 확인하나?단위 테스트개별 클래스나 메서드의 로직이 정확한지 검증비즈니스 로직, 조건 분기, 예외처리 등통합 테스트여러 빈(서비스 ↔ 레포지토리 ↔ 설정)이 잘 연결됐는지 검증Bean 주입, 설정값, 실제 외부 의존성과의 통합 작동API 테스트외부 사용자의 시각에서 API가 제대로 동작하는지 검증요청/응답 포맷, HTTP 상태코드, 검증 오류 등  이상적인 테스트 방향  규모  / 상황 테스트 전략 현실화1인 개발 / 사이드 프로젝트단위 + API 테스트 위주. 통합 테스트는 최소한으로.스타트업 / MVP 단계빠른 개발을 위해 단위 or API..
HLS 프로토콜 튜닝 HLS (영상 프로토콜)HLS는 내부적으로 **HTTP 요청/응답(GET)**을 이용해서 .m3u8 (playlist) 파일과 .ts (video segment) 파일을 순차적으로 다운로드해서 재생합니다.HLS 같은 미디어 스트리밍 프로토콜은 "브라우저 자체"가 지원하지 않으면, JavaScript 라이브러리에 의존해야 합니다. 때문에 자신이 원하는 방식의 통신을 위한 프로토콜에 맞추어 설계하여야함통신 순서1. 클라이언트 → HTTP GET → playlist.m3u8 요청2. 서버 → playlist.m3u8 응답 (.ts 목록이 들어 있음)3. 클라이언트 → HTTP GET → segment1.ts4. 클라이언트 → HTTP GET → segment2.ts  FFmpeg HLS 튜닝 플래그-hls_t..
Encoding, Decoding, Frames 개념 효율적인 비디오 파이프라인 정리단계설명필요한 요소🎥 캡처 (입력)카메라에서 실시간 영상 데이터를 가져옴빠른 접근 가능한 장치 (예: /dev/video0, v4l2, avfoundation)🎞 인코딩원본 영상을 압축해서 전송/저장하기 좋게 변환고효율 코덱 사용 (예: libx264, nvenc, vaapi 등 하드웨어 가속)🧠 디코딩압축된 영상 데이터를 다시 프레임으로 복원하드웨어 가속 디코더 사용 시 성능 향상🔄 트랜스코딩 / 스트리밍스트리밍 형식(HLS 등)으로 재가공적절한 키프레임 간격, GOP 설정, 버퍼 조절 등📤 전달 (브라우저/플레이어로).ts 세그먼트와 .m3u8 재생 목록을 클라이언트에 제공HLS 세그먼트 생성, 재생 목록 실시간  What Are Video Frames?When..
영상 스트리밍 처리과정 스트리밍 구조사용자가 데이터를 한꺼번에 받지 않고, 순차적으로 실시간에 가깝게 받아보는 시스템의 전체 구성“스트리밍 구조”는 단순히 영상만이 아니라,"데이터(특히 미디어)가 지속적으로 흐르는 시스템 구조"를 말합니다.일반 HTTP vs 스트리밍"스트리밍"은 단순 HTTP처럼 한 번에 요청/응답하는 구조가 아니라,데이터가 계속 흘러가는(지속 전달되는) 구조를 의미해요.그리고 이 흐름은 "실시간성"과 아주 밀접한 관계를 맺고 있습니다.항목일반HTTP 스트리밍구조요청 → 응답 → 끝연결 후 지속적으로 데이터 전송데이터 흐름한 번에 받음조각/이벤트 단위로 나눠서 받음연결 방식단발성 (short-lived)장기 연결 or 연속 요청예시게시글 API, 로그인영상, 채팅, 주식, 실시간 지도 등 사용예시영상 스트리밍..
쉘 커맨드 , 쉘 스크립트 리눅스 쉘 쉘은 사용자가 운영체제와 상호작용할 수 있도록 명령어를 입력받아 실행해주는 프로그램입니다.모든 것은 파일이라는 철학 아래에서 인터렉션이 파일을 읽고 쓰는 것처럼 이루어져있음 (마우스, 키보드 디바이스 관련 기술도 포함)리눅스의 철학은 여러 기본단위의 프로그램들이 유기적으로 각자의 역할을 하면서, 이를 조합하여 전체 시스템이 동작하도록함.(ls | grep의 경우에도, lsgrep이란 명령어가 아닌 ls와 grep을 유기적으로 조합하여 사용함)리눅스에는 여러가지 shell이 있지만 ubuntu에서도 그렇고 bash shell이 범용으로 쓰이기에 bash 명령어 위주로 학습할것.Bash: 기본적인 쉘로, 많은 시스템에서 기본으로 제공됩니다. 간단하고 강력하지만, Zsh에 비해 기능이 제한적입니다...
프론트엔드 환경설정 및 배포 JavaScript 실행 환경 구축1. Node.js 버전 고정왜 필요한가?JS 문법, async 처리, ES modules 등은 Node.js 버전에 따라 다르게 작동할 수 있어.팀 프로젝트에서 모두 같은 버전으로 작업하지 않으면, 한 사람은 잘 돌아가고 다른 사람은 에러나는 상황이 생김 😵어떻게 고정하나?nvm (Node Version Manager 사용)한 컴퓨터에서 여러 버전의 Node.js를 사용 가능하게 해주는 버전 관리를 하는 쉘 스크립트 도구프로젝트 내 .nvmrc 파일에 node 버전을 기재해둠# .nvmrc 파일18.18.2nvm은 동적으로 변경적용되는 버전관리 도구이기때문에 쉘 스크립트 프로그램이다. 쉘스크립트의 특성상 전역 프로그램이 아니므로 쉘 설정파일에 nvm 명령어를 인식하..
Persistence Context, EntityManager Persistence Context 개념JPA가 데이터를 DB로부터 불러오거나 저장할 때 사용하는 1차 캐시. 이 안에 들어간 엔티티들은 영속 상태(Persistent State) 라고 불리고, JPA가 자동으로 변경 사항을 추적합니다.트랜잭션이 시작될때 영속성 컨텍스트를 생성하였다가 트랜잭션이 끝나면 추적한 변경사항을 일괄 DB에 반영합니다.JPA 동작 구조 (Repository → EntityManager → Persistence Context)JPA는 DB가 아니라 Persistence Context를 다루는 기술이다.EntityManager는 이 Persistence Context를 조작하는 표준 API 계층이며, Repository는 EntityManager를 추상화해서 개발자가 쉽게 사용할 수..