주니어 개발자, AI 시대에 살아남기 (1)
·
회고
처음 만난 AI학부 시절 처음 접한 GPT 3.0부터 어느새 Opus 5.5, Sol6.1까지 발전하게 됐습니다.당시에는 그냥 바로바로 물어볼 수 있는 선생님이 생겼다고만 생각했는데, 어느 순간부터 직접 코드 파일을 작성하고 수정하며 커밋과 PR/Merge까지 처리하는 걸 넘어 일상생활 속에서 밥집을 예약하고, 환불을 대신 요청하는 개인화 에이전트 시대까지 왔네요. 저는 2025년 7월에 처음으로 취업에 성공했습니다. 사실 이때까지만 해도 이것저것 많은 단어들이 등장했지만, 저는 그냥 GPT/Claude에게 프론트 작업이나 작성이 어려운 부분을 맡기며 공부에 활용하는 단계였습니다.저는 틈틈이 Threads나 GeekNews 등을 보는데, 이때 "n8n 자동화 미쳤다", "하네스 엔지니어링", "랄프 루..
쉬고싶음 청년에게 한줄기 빛 그룹바이
·
기타
[협찬] 그룹바이 AI 앰배서더 활동으로 혜택을 받고 쓴 글이에요 안녕하세요 최인호입니다. 요즘 개발자 취업이 쉽지 않습니다.신입도 힘들고 주니어 개발자인 저 역시도 수많은 불합격과 반복되는 이력서 첨삭 피로도가 너무 힘들었네요 그래서 사람인/잡코리아 등 유명한 채용플랫폼 등을 많이 사용했지만 포지션 제안 등 핏이 잘 맞지 않는 경우에 괜히 아쉬움만 남기도 한 적이 많습니다. 저는 개인적으로 0to1 경험을 통해 1to10까지 이끌어 나가고 싶었고 그걸 위해선 스타트업에서 회사와 함께 성장하고 싶었어요! 그러던중 우연히 그룹바이 스타트업 채용 전문 플랫폼 발견하게 됐습니다. 사용성 측면에서 되게 좋았던건 사람인, 잡코리아, 원티드 등 채용플랫폼이 달라질 때마다 매번 해당 양식에 옮겨넣는 피로도 역시 심한..
[WebRTC] Congestion Control 원리와 OpenCV Letterbox를 활용한 서버 안정화
·
트러블슈팅
WebRTC웹에서 실시간 통신을 할 수 있게 해주는 기술브라우저끼리 실시간 통신하며 중간에 누구를 거치지 않는다는 특징이 있음예시로 유튜브의 경우 유튜브 서버에서 우리가 사용하는 단말기로 영상을 보는 구조인데, WebRTC를 쓴다면 상대방 혹은 카메라에서 내폰으로 바로 오는 P2P 방식이다.서버가 중간에 없어서 생기는 문제점서버가 중간에 없으니 보내는 쪽 Sender는 계속 송신하기만 할 뿐, 지금 보내는 영상이 잘 도착하는지 알 수 있는 방법이 없다.그래서 받는 쪽 Receiver는 RTCP라는 별도의 채널로 Receiver Report를 계속 보내줘야한다.네트워크가 막혀서 영상 데이터(패킷) 들이 제대로 못오고 있는 상황에서 받는쪽이 보내는쪽에게 현재 인터넷 상태가 좋지 않다고 증거를 제시하려면 들어..
WebRTC RTSP 스트림의 동적 해상도 변화에 따른 디코딩 및 송출 장애
·
트러블슈팅
[ISSUE] WebRTC RTSP 스트림의 동적 해상도 변화에 따른 디코딩 및 송출 장애1. 문제 현상 (Symptom)WebRTC를 통해 중계되는 RTSP 스트림을 입력으로 사용할 때, 초기 연결 시에는 정상 동작하다가 특정 시점 이후 시스템 터미널에 다음과 같은 에러가 반복적으로 발생하며 영상 처리가 불안정해지는 현상이 발견되었습니다.[swscaler @ 0x7f9610619c00] Slice parameters 0, 540 are invalid[h264 @ 0x559e2a3b4c00] corrupted macroblock ...[h264 @ 0x559e2a3b4c00] error while decoding MB ...특히, 입력 스트림이 잠시 끊겼다 재연결되거나 네트워크 환경이 변할 때 해상도가 ..
HLS 스트리밍 파이프라인 최적화: GOP·비트레이트·인코딩 전략 분석 결과
·
트러블슈팅
1. 재인코딩 기반 HLS 변환의 구조적 한계초기 파이프라인은 libx264로 재인코딩한 뒤 HLS 세그먼트를 생성하는 방식이었다. 테스트에는 아래와 같은 명령어를 사용했다.ffmpeg -i input.mp4 \\ -c:v libx264 \\ -preset fast \\ -crf 23 \\ -g 120 \\ -keyint\_min 30 \\ -sc\_threshold 0 \\ -c:a aac -b:a 128k \\ -hls\_time 4 \\ -hls\_list\_size 0 \\ -hls\_flags independent\_segments \\ -hls\_segment\_type mpegts \\ -hls\_segment\_filename seg\_%04d.ts \\ index.m3u8여기서 중요한 옵..
HLS 스트리밍 기반 다중 영상 동기화 플레이어 구현 - 3
·
트러블슈팅
영상 재생 방식 성능 비교 분석테스트 기준: CAM1_20231220002321.mp4 (크기: 928MB) 기준, 5개 영상 동시 재생 테스트1. 변환 방식 비교 (HLS 생성)항목 방법 1 (Codec Copy) 방법 2 (Re-encode)변환 속도(영상 1개당)빠름 (약 12초)느림 (약 75초)세그먼트 크기원본 비트레이트 유지 (29MB)5Mbps 제한 (2.6MB)버퍼링큰 세그먼트로 인해 버퍼링 발생 가능작은 세그먼트로 버퍼링 최소화Seek 정확도GOP 경계 불일치 가능GOP 경계 일치 (정확)권장 사용변환 속도가 중요한 경우버퍼링 최소화가 중요한 경우결론: 버퍼링 최소화를 위해 방법 2 (Re-encode) 선택2. 초기 로딩 속도 비교 (5개 영상 동시 로딩)방식 초기 로딩 시간 비고MP4..
HLS 스트리밍 기반 다중 영상 동기화 플레이어 구현 - 2
·
트러블슈팅
AWS MideaConverter에 대한 자료를 찾아보았다.이전 문서에서 S3 + CloudFront + MideaConverter에 대한 파이프라인을 고려했었는데 비용 측면에서 어려움이 있을거 같아 차선책을 찾는다.https://www.reddit.com/r/aws/comments/18ivn66/what_the_best_design_for_serve_s3_streaming_video/?tl=kohttps://www.reddit.com/r/aws/comments/18ivn66/what_the_best_design_for_serve_s3_streaming_video/?tl=ko이 게시글에서는 교육용 비디오 컨텐츠를 제공하기 위해 S3 + CloudFront 조합을 채택했다.하지만 S3/CloudFront는..
HLS 스트리밍 기반 다중 영상 동기화 플레이어 구현 -1
·
트러블슈팅
요구사항영상 갯수는 가변미디어 플레이어는 동기화하여 모든 영상을 제어함재생, 정지, 10초 전 후, 처음으로 등...테스트 단계에서는 1G 영상 5개로 진행실제 운영 환경에서는 한번에 8000TB 영상이 저장된 하드디스크를 전달 받아 그 영상들을 선박 정보 등에 따라 선택하여 재생목표 대용량 HLS 기반 멀티스트림을 지연 없이 실시간 동기화 재생할 수 있는 아키텍처 구축시도한 것들CASE 1 : 클라이언트 단에서 직접 브라우저 메모리에 저장후 재생-> 문제없이 잘 되지만 매번 영상을 직접 업로드 해야하고 해당 영상에는 메타데이터 등 다양한 정보들에 따른 View를 반환해야하는데 현실적으로 어려움CASE 2 : EC2 - 서버에 정적 리소스로 매핑-> 용량이 작은 경우에는 상관없지만 1G만 되어도 재생할 ..
[XHR vs Fetch] 동기, 비동기 - VOD 삭제 영상 처리 방식
·
트러블슈팅
문제 상황요구사항VOD에서 삭제된 영상을 선택했을 때아무 UI 변경도 하지 않고 팝업만 표시원래 상태(라이브 영상) 유지현재 문제점사용자가 VOD 삭제 영상 클릭경로는 DB에 존재하지만 실제 파일은 서버에서 삭제됨VOD 선택 처리가 진행됨vTop 바뀜, LIVE 영상 사라짐 (원하지 않는 동작)이후에 팝업 표시됨 (늦음)핵심 문제파일 존재 여부를 확인하지 않고 UI 변경이 먼저 실행됨🔍 현재 setVod 함수 실행 순서기존 코드 흐름function setVod(videoIdx){ // 1. 영상 경로 확인 const recordUrl = $("#vod_"+videoIdx).attr('data-path'); // 2. UI 변경 시작 (문제!) $(".liveCtrl").css("d..
C - C언어 for Beginner 개정 4판 연습문제 풀이
·
학부 기록/C
6장 반복문의 기초, for문 9번 입력된 문자열을 반대로 출력하면서 동시에 숫자는 #으로 변경하는 코드 만들기 #include #include int main(void){ char str[100]; int str_cnt; int i; printf("영문자 및 숫자를 입력: "); scanf("%s", str); printf("\n"); printf("입력한 문자열 ==> %s\n", str); printf("변환된 문자열 => "); str_cnt = strlen(str); for(i=str_cnt;i>-1;i--){ if(str[i]>47&&str[i]='A'&&ch='a'&&ch='0'&&ch