2025/10 10

Node Exporter 네트워크 수집 문제

오늘은 Node Exporter로 서버 네트워크 트래픽을 수집하다가,수치가 비정상적으로 너무 낮게 나오거나 일부 인터페이스만 보이는 문제를 겪음.원인은 단순했는데, Docker 네트워크 네임스페이스 격리 때문이었음. 문제 상황 prom/node-exporter 이미지를 Docker Compose로 올렸는데,curl localhost:9100/metrics | grep node_network_receive_bytes_totalcurl localhost:9100/metrics | grep node_network_receive_bytes_total명령어 했을 때이상하게 eth0 대신 docker0, veth 등 일부 인터페이스만 보였음. 즉, 호스트 전체 트래픽이 아니라 컨테이너 내부 네트워크만 수집되고..

TIL 2025.10.29

닷넷 프레임워크 DLL 체험기

기존 코드 약간 수정 + DLL 빌드해서 배포함 처음 써보는 .NET Framework라 기록 남김 Visual Studio에서 DLL 참조하는 법기준: 프로젝트(.csproj) 단위로 참조해야 함. 솔루션이 아님절차솔루션 탐색기 → 해당 프로젝트 우클릭 → Add → Reference…Browse 탭에서 로컬 DLL 선택 or Projects 탭에서 내부 프로젝트 참조Target Framework 맞는지 확인 (.NET Framework 버전 불일치 시 컴파일 에러/런타임 바인딩 오류 남)Platform(Target CPU) 확인 (x64/x86/Any CPU 섞이면 COM/네이티브 의존성에서 터질 수 있음)팁Copy Local = True로 설정해두면 빌드시 bin\ 폴더에 DLL 자동 복사됨여러 ..

TIL 2025.10.28

DB CPU 스파이크 원인 추적기

며칠 전, ezariadb01 서버 모니터링 그래프를 보다 이상한 걸 발견했음.CPU 사용률이 갑자기 확 튀어올랐던 것.그 시간대엔 배포도 없고, 딱히 트래픽이 몰린 시점도 아니었는데그래프가 찔끔 튀어 있는 게 너무 찜찜했음.처음엔 “DB 쪽에서 뭐 돌았나?” 싶어서 PostgreSQL 로그도 보고,운영 중인 서비스 로그도 쭉 확인했는데 다 깨끗함.결국 남은 건 Redis. AOF 리라이트의 존재감 Redis 로그를 살펴보니 그 시점 근처에서 AOF(Append Only File) 리라이트가 돌았던 흔적이 있었음.AOF는 Redis가 데이터를 안전하게 보존하기 위해모든 쓰기 명령을 순서대로 파일에 기록하는 기능임.그런데 계속 쌓이기만 하면 파일이 너무 커지니까,주기적으로 “리라이트”라는 정리 작업을 ..

TIL 2025.10.27

HTTPS 안전하지 않음 으로 바뀐다면 http 통신인가?

https:// 로 특정 사이트에 들어갈 때 아래와 같이 나오면서 값이 나올 때가 있다. 나는 이게 '아 https가 안되니까 http로 라우팅되는건가' 싶었는데 아니었다!! 지금은 “암호화된 HTTPS 통신”이긴 하지만,중간 장비가 인증서를 바꿔치기해서 브라우저가 신뢰하지 못하는 상태예요.즉, “암호화는 됐지만 믿을 수 없는 HTTPS” 상태입니다. 지금 주소창에 “안전하지 않음 | https://...” 이렇게 뜨는 건“HTTPS로 연결은 했지만, 그 보안 연결이 믿을 수 없는 상태”라는 뜻이에요. 실제로는 이렇게 통신이 흐릅니다 정상 환경Chrome → HTTPS → aria.ezcaretech.com (Nginx 서버) 브라우저가 인증서를 확인하고 “이건 진짜 서버야!”라고 믿으면주소창..

TIL 2025.10.23

Node.js의 !! 키워드 정리

Node.js 코드 보다 보면!!변수 이런 거 종종 보임.처음 보면 “이게 뭐임?!” 싶음. 뜻!!는 “값을 boolean으로 바꾸는 연산자”임.자바스크립트에서는 모든 값이 truthy(참 같은 값) 또는 falsy(거짓 같은 값)으로 평가됨.!!는 그걸 명확한 true / false로 변환함. 예시const name = "sion"; console.log(!!name); // trueconst empty = ""; console.log(!!empty); // falseconst num = 0; console.log(!!num); // falseconst obj = {}; console.log(!!obj); // trueconst undef = undefined; console.log(!!und..

TIL 2025.10.22

Redis 메모리 정책 삽질기 — noeviction → allkeys-lru 전환

상황 요약운영 중이던 Redis 클러스터(3서버 × 2포트 = 6노드 구조)에서16379 인스턴스가 갑자기 종료되는 현상 있었음.원인 추적 결과AOF rewrite 시점에 메모리 사용량이 급등하면서커널 OOM(Out of Memory)에 의해 프로세스가 kill된 것으로 보임. 당시 설정 maxmemory = 1000000000 # 약 1GB maxmemory-policy = noevictionnoeviction 은 메모리 꽉 차면 더 이상 쓰기를 허용하지 않음Redis가 오래된 키를 삭제하지 않고 그대로 두는 정책AOF rewrite 나 RDB save 시 fork() 발생 → 순간적으로 메모리 2배 필요여유가 거의 없던 상황이라 커널이 Redis 프로세스 kill⚙️ 조치 내용정책과 상한선을 아래..

TIL 2025.10.22

갑자기 redis 안되는 현상

톡 장애 후기 오늘 갑자기 서비스가 안된다고 팀에서 말이 나옴 -> 그럴리가 없는데??→ 확인해보니 API 서버에서 Redis 연결 오류 발생→ 클러스터링된 Redis(6379 포트)가 아예 죽어 있었음→ Redis 다시 살리니까 서비스 정상 복귀 🔍 장애 원인Redis systemd 설정 중 ProtectSystem=strict 옵션 켜져 있었음이 옵션은 systemd 보안 하드닝 기능으로,Redis 프로세스가 파일시스템에 쓰기 불가능(읽기 전용) 상태로 동작함Redis는 클러스터 구성 정보(nodes-16379.conf) 파일에 접근해야 하는데접근이 막혀서 프로세스가 즉시 종료(exit code 1) 됨결국 Redis 클러스터가 기동되지 않음 → API 서버에서 연결 실패 ⚠️ 증상API 로그에..

TIL 2025.10.18

다중 소켓서버 삽질 후기 (feat. 미친 20%)

증상: 유저의 20%가 간헐적으로 소켓 연결 실패 처음엔 진짜 별거 아닌 줄 알았음.전체 유저 중 한 20% 정도만 소켓 연결이 안 된다고 해서,"아, 간헐적이면 당연히 클라 문제겠지" 하고 넘김.근데 이상한 건,개발 서버에서는 그런 현상이 단 한 번도 안 나타남.그 순간부터 좀 찜찜했음. 의심 1차: Redis 클러스터 문제인가? 소켓 서버가 Redis Pub/Sub으로 메시지 주고받으니까혹시 운영 Redis 클러스터링 문제인가? 싶었음.그래서 클러스터 상태도 보고, cluster info 도 찍어봄.결과는 정상.slot 다 배정돼 있고, fail도 0.Redis는 깨끗했음.“그래, Redis는 무죄구나…” 의심 2차: 소켓 서버 로그 분석 그다음은 소켓 서버 로그를 보기로 함.운영에 총 8개의 소..

TIL 2025.10.13

node JS 스프레드 연산자에 대해

Node에서 ... 인 코드가 종종 보인다. 처음 봤을 때 느낌자바 개발자 입장에서 ... 이거 보면 당황함“이게 뭐야? 매개변수도 아닌데 변수 앞에 점 세 개?”“전개? 복사? 구조분해?”대충 느낌은 오는데 정확히 뭐하는 놈인지는 헷갈림 1️⃣ 기본 개념스프레드(spread) 연산자는 말 그대로 ‘펼친다’는 뜻임.배열이나 객체 안의 요소를 하나씩 꺼내서 ‘전개’해줌.const arr1 = [1, 2, 3]const arr2 = [...arr1, 4, 5] // [1,2,3,4,5] ...arr1 이 부분이 배열의 요소를 풀어서 넣어주는 것.만약 arr2 = [arr1, 4, 5] 했으면 [ [1,2,3], 4, 5 ] 됐을 거임.즉, ...은 “이 배열(또는 객체)의 안쪽 내용을 꺼내라”는 의미임!..

TIL 2025.10.13

서버간 ping 은 동작 안되는데 curl은 되는 경우

🧠 ping은 안되는데 curl은 되는 이유서버 구축하다가 ping은 안 되는데 curl은 잘 되는 경우가 있었음. 당최 이해가안되서 좀 정리함! 1️⃣ ping과 curl은 역할부터 다름명령어역할사용하는 프로토콜계층ping네트워크 연결 확인ICMP3계층 (Network)curl웹 서비스 응답 확인TCP/IP + HTTP4~7계층 (Transport~Application)즉, ping은 “서버랑 연결되는가?”만 보는 거고curl은 “서버 프로그램이 실제로 응답하는가?”를 보는 거임. 2️⃣ 3계층인 ping이 동작이 안되는데 7계층이 되는 이유사실 “3계층이 안 된다”는 표현이 틀림.정확히는 3계층 중 ICMP만 막혀 있는 경우임.ping은 ICMP를 씀.근데 서버나 방화벽이 ICMP를 차단하는 경우..

TIL 2025.10.13