분류 전체보기 108

WebSocket- NGINX 연결 오류

영상 송출 및 person detection 을 Cloudflared 에서 WebSocket 으로 바꾸며 생겼던 오류 정리 문제 1 : ConnectionAbortedError [WinError 10053] ConnectionAbortedError (연결 중단 오류) 는 네트워크 통신 중 상대방이나 로컬 소프트웨어 (firewall, vaccine) 이 활성 연결을 강제로 끊을 때 발생 -> 이미 맺어진 연결을 일부러 중단 시킴 -> 윈도우 소켓 스택이 abort 처리함 요청이 들어오면 NGINX 가 직접 처리할건지 backend 로 보내줄건지 결정 -> 이 요청을 받아서 뒤로 넘겨주는게 PROXY 근데 nginx.conf 에 192.158.x.x:4327/ws/xx 가 들어왔을 때 어떻게 하면 되는지..

카테고리 없음 2026.08.13

WebSocket 개념 정리

국비지원 부캠 수업을 들을 때 Websocket 을 다루는 역할을 맡지 않아서 이번에 인턴하면서 Websocket 개념이랑 ...몰라서 생긴 여러 트러블슈팅을 정리하고 넘어가기 이번에 프로젝트에서 사용한 이유는 crowd count, 영상 CCTV 처럼 송출 이 필요한데 그 때마다 client (dashboard) 에 즉시 알려줘야 하기 땜누에 HTTP polling 보다 효율적인 방식인 Websocket 사용이었다 특징 비교 대상: HTTP HTTP응답 이후 연결이 끊김 (매번 새로 요청, 검증)keyword: 비연결, 무상태 WebSocket한 번 연결하면 계속 유지 server -> client 방향으로 먼저 데이터 보낼 수 있음 (양방향)ws:// 랑 wss:// 는 Http 랑 동일하게 암호화..

카테고리 없음 2026.08.11

NGINX 개념 정리

NGINX: 웹서버이자 리버스 프록시 서버 ..... 라는데 뭐라는지 모르겠다.... ㅜㅜ 클라이언트 요청을 받아서 뒤의 실제 application server 로 전달 역할 1. 외부 요청을 내부 백엔드로 전달 2. react 빌드 결과물 같은 정적 파일을 직접 응답 (백엔드까지 가지 않음)3. LB (로드밸런싱) : backend instance 가 여러개일때 분산시킴 proxy-pass : 이 위치로 들어온 요청을 내가 지정한 다른 주소로 그대로 넘겨줘!! 라는 의미 location /api/ { proxy_pass http://localhost:8000;}이렇게 적혀있으면 /api/ 로 시작하는 요청이 들어오면 localhost:8000 으로 전달해주라는 의미 (1) client가 배포..

카테고리 없음 2026.08.11

pip3 install 트러블슈팅

python : python interpreter 를 실행시키는 명령어 python3 은 말 그대로 python3 버전 인터프리터...왜 1이랑 2는 없는거지 했는데 옛날에는 python2, python3 이 같이 설치되어 있었기 때문에 버전 구분이 필요해서 3만 따로 생긴듯 pip, pip3 은 package 설치 도구 pip3 을 안 붙이면 PATH 에 잡힌 기본 pip 를 가리킴 (2일수도..있음) 문제 # cv2 를 사용하는 python 파일 실행했는데 cv2가 없다고 함 PS C:\Users\user\Documents\ai-cms\docs\tools> python3 test_person_count.pyTraceback (most recent call last): File "C:\Users\us..

카테고리 없음 2026.08.11

cloudflared 사용

사람 수 카운트는 POST api 로 5초에 한 번씩 숫자만 보내주면 되는 형식 대표님 (ㄷㄷ) 요구사항으로 추가되는 기능이 CCTV 처럼 카메라가 비추는 화면을 확인할 수 있으면 좋을 것 같다고 하심 나는 그냥 사진 post 하던거랑 비슷하게 프레임 하나하나 post 하면 되는건가? 했는데 숫자 하나 보내는거랑은 다르다고 해서 ai 한테 무슨 차이인지 물어봤다 1) 프레임마다 POST 를 따로 날리면 요청마다 헤더 + 왕복시간 + 초당 10~15 프레임 뽑으려면 부담이 커짐2) count POST 요청은 5초에 한번이라 가능하지만... 얘는 초당 몇 장씩 백엔드 -> 프론트 로 넘어가는거니까 트래픽 과도 -> 터널 URL 로 MJPEG 스트림을 순서대로 받는 개념은 똑같지만, 요청을 매번 새로 ..

카테고리 없음 2026.08.07

터미널에서 한글이 깨짐

맥북에 있던 내용을 데스크탑으로 싹 옮기면서 JDK 랑 도커랑 ... IDE 랑 등등 다운을 받고 ./gradlew 실행을 시켜봄콘솔이 UTF-8 로그를 못 읽어서 화면에서 깨져보이는거라구 함 chcp 65001이걸 terminal 에 치고 run 하면 되는데 터미널 시작 할 때 마다 쳐야함 ... 개발단계라 여러번 터미널을 닫고 켜서 귀찮기 때문에 영구 설정을 해보기로 했다 notepad $PROFILE파워쉘 프로필을 열어 설정해주면 되는데 나는 저 명령어를 치니까 메모장이 뜨더니 지정된 경로를 찾을 수 없다는 오류가 발생 프로필이 가리키는 파일/폴더 가 존재하지 않아서 뜨는 것 ...빈 메모장에 쳐도 되는데 그럼 저장할 폴더가 애매해지기 때문에 폴더부터 만들어줬다if (!(Test-Path $P..

카테고리 없음 2026.08.06

PostgreSQL (Docker) 접속 (로컬)

로컬 개발 DB 를 접속하려고 하는데 지금 인턴하면서 스는 cursor 에는 내장 SQL 실행기가 따로 없다고 해서 터미널에서 docker exec 으로 여는거 메모 1. 컨테이너 이름 확인하기 docker ps맨 뒤에 있는 NAMES 를 기억하면 된다 지금 접속하려고 하는건 postgres 니까 aicms-dev-postgres 를 기억하기 ! IMAGE 이름이랑 착각하지 않게 조심.... 2. psql 접속docker exec -it psql -U -d -it 는 psql 프롬프트로 들어간다는 의미-U 뒤에는 DB 유저 (사수님께서 보내주셨다 ㅎ)-d 뒤에는 DB 이름 (이것두..) 그냥 접속 정보는 docker-compose.yml 또는 application.yml 파일에 가면 알 수 있다고 ..

카테고리 없음 2026.08.04

UnsatisfiedLinkError 트러블슈팅

인턴 하면서 노트북 필요하다고 그래서 친구한테 맥북을 빌려왔다......처음 써보는 맥북이라 더 헤매는 중인듯 와서 프로젝트 파악을 하면서 테스트를 돌려보고 있었늗네 ./gradlew test로 실행하니까 다른 테스트 40개는 성공하는데 AiMediaTest의 두 개 테스트만 실패java.lang.UnsatisfiedLinkErrorjava.lang.NoClassDefFoundErrorOpenCV를 사용하는 테스트에서만 오류가 발생한다는걸 알았다. 이 프로젝트는 AI 로 영상을 제작해서 화면에 띄우는 프로젝트인데 OpenCV 랑 FFmpeg를 사용 os 에 맞는 native library (.dll, .so, .dylib)을 함께 사용하는 프로젝트 -> 현재 실행중인 운영체제 (난 arm64) 랑 C..

카테고리 없음 2026.08.03

실시간 카메라 - 백엔드 서버 연결

목업으로 처리하고 있던 유동인구 정보를 실제 카메라에 잡히는 인원으로 추정할 수 있도록 하는 과정 인구를 감지하는 방법중 제시한건 2개 1 그냥 그 때 그 때 화면에 나오는 사람 수를 기준으로 추정하는 방법과2 특정 사람을 인식해서 몇 명 정도인지 대략 측정하는 방법 (중복으로 카운트 되지 않도록 함) 2번은 최대 가능한 인원이 3개정도고, 가격이 너무 비싼 문제 등 여러가지 하자가 많았기 때문에 1을 선택했다. 1에서도 4개로 나눌 수 있었고 간단하게 정리했다 연결 방법웹캠 구매 라즈베리파이 사용 -> 직접 웹캠을 연결 맥북 등 노트북 카메라 사용그냥 터미널에서 돌리면 됨 아이폰 연결와이파이 스트림 사용 (맥북이나 라즈베리파이 아무거나 상관 x)안드로이드 연결 라즈베리파이 (USB 웹캠 모드로 하고 파..

카테고리 없음 2026.08.03

Race Condition 검증 Test 정리

주요 비즈니스 로직에 분산 락을 적용하면서... 튜터님께서 이렇게 고치는 이유가 뭐냐고 여쭤보셨다 TX 시작 -> Lock 획득 -> 비즈니스로직 -> Lock 해제 -> TX commit 이 이루어지면 Lock 해제와 TX commit 사이에 빈 공간이 생기기 때문에 해제된 락을 다른 스레드가 잡아서 읽어버리면 TX commit 전이기 때문에 바뀌기 전의 정보를 읽는다.... 라고 대답했는데 그걸 직접 확인을 해봤냐고 여쭤보셔서... 아니라구 함 그냥 널리 알려져있는 문제라 내가 꼭 확인을 해야하나? 라는 생각도 들었다 그래도 테스트 하기 ....테스트 1확인 목적: 실제로 락이 트랜잭션 안쪽이면 문제가 생기는가? 안티패턴 시나리오[ANTI-PATTERN] A: @Transactional 시작 → ..

카테고리 없음 2026.06.05