전체 글
1,964개의 글
mongodump와 oplog로 MongoDB 백업하고 장애 직전 시점으로 복구(PITR)하기
운영 중인 MongoDB에서 누군가 db.orders.drop() 을 잘못 날리는 사고는 생각보다 흔하다. 새벽에 받아둔 풀 백업만 있으면 그 시점으로는 돌아가지만, 백업 이후 낮 동안 들어온 주문…
Apache Tomcat과 Spring Boot의 차이 - WAS와 프레임워크, 내장 톰캣까지 관계 정리
톰캣 설치나 커넥터 설정을 정리해두면 현장에서 꼭 따라오는 질문이 있다. 스프링 부트를 쓰는데 톰캣을 따로 깔아야 하는지, 둘 중 무엇을 먼저 익혀야 하는지 같은 것들이다. 신입 개발자만 묻는 것도…
소니 AIBO 27년사: 1999년 ERS-110부터 2018년 부활, 그리고 2026년 판매 종료 발표까지
2026년 6월 25일 소니가 aibo ERS-1000의 일본 국내 판매를 재고 소진 시점에 종료한다고 공지했다. 20년 넘게 지켜본 사람이라면 두 번째 작별이다. 첫 번째는 2006년이었고, 그때…
6502와 65C02의 차이 정리 - 버그 수정, 추가 명령, 소비전력, 그리고 Apple IIc
Apple II 관련 자료를 뒤적이다 보면 "65C02 필요"라는 단서가 붙은 소프트웨어를 자주 만난다. 같은 6502 계열인데 왜 굳이 칩을 가려 받는지 궁금해서 두 칩의 차이를 한 번 정리해 두…
Apple Newton MessagePad 2100 - StrongARM 최후의 뉴턴과 Einstein으로 오늘 다시 켜보기
서랍 정리를 하다 오래된 뉴턴 관련 자료를 다시 들춰봤다. MessagePad 2100은 애플이 PDA 시장에서 손을 떼기 직전에 내놓은 물건이라, 지금 보면 실패한 제품 라인의 마지막 페이지 같은…
쿠버네티스에서 GPU 한 장을 여러 파드가 나눠 쓰기: Time-Slicing vs MIG
GPU 노드를 처음 붙이고 나면 곧 이런 상황을 만난다. A100 한 장이 노드에 꽂혀 있는데, 추론 파드 하나가 그걸 통째로 물고 있고 나머지 파드는 Pending 으로 줄을 선다. GPU 메모리…
Spring Boot @Async 스레드 폭증과 큐 적체 잡기: ThreadPoolTaskExecutor 설정과 MDC 전파
@Async 하나 붙였다가 운영에서 스레드가 이상하게 늘거나 응답이 밀리는 상황은 자주 온다. 그런데 그 원인을 검색하면 "@Async는 요청마다 스레드를 무한 생성해서 서버가 죽는다"는 설명이 많…
삼보 트라이젬 20: 세운상가 시대의 애플 II 호환기, 원본과 무엇이 같고 달랐나
오래된 국산 컴퓨터 이야기를 하다 보면 트라이젬이라는 이름이 빠지지 않는다. 세운상가에서 애플 II 조립품이 손바뀜하던 시절, 대기업이 정식 브랜드를 달고 애플 호환기를 내놓았다는 점에서 트라이젬 …
자바 Trie(트라이) 자료구조로 자동완성과 접두어 검색 구현하기
검색창 자동완성이나 사전 조회 기능을 만들다 보면 접두어로 후보를 빠르게 찾아야 하는 순간이 온다. 그럴 때 매번 문자열 목록 전체를 startsWith 로 훑으면 데이터가 늘수록 느려진다. 이 문…
macOS launchd로 주기적 백그라운드 작업 등록하기 - cron 대신 LaunchAgent/LaunchDaemon 쓰기
맥에서 백업 스크립트나 정리 작업을 정해진 시각에 돌리려고 crontab -e 를 열었다가, 요즘 macOS에서는 cron이 권장 도구가 아니라는 걸 뒤늦게 알게 되는 경우가 많다. cron은 아직…
Macintosh Plus 완전정리: SCSI와 1MB RAM을 처음 담은 콤팩트 맥, Mini vMac으로 System 6/7 되살리기
얼마 전 창고에서 베이지색 콤팩트 맥 한 대를 꺼내 먼지를 닦다가, 뒤판에 박힌 DB-25 SCSI 커넥터를 보고 다시 이 기종을 정리해두고 싶어졌다. 1986년의 애플은 아직 작은 회사였고, 이 …
iptables에서 nftables로 방화벽 규칙 마이그레이션하기 - iptables-translate 변환과 nft 검증
RHEL 9와 최신 데비안 계열로 서버를 올리다 보면 방화벽 백엔드가 이미 nftables로 넘어가 있다. iptables 명령은 여전히 먹지만 실제로는 nftables 위에서 도는 호환 계층이다.…
Nginx upstream keepalive로 백엔드 TCP 핸드셰이크와 TIME_WAIT 줄이기
리버스 프록시를 오래 운영하다 보면 프런트 Nginx는 멀쩡한데 백엔드 앞단에서 TIME_WAIT 소켓이 수만 개씩 쌓이는 장면을 마주한다. WAS 튜닝을 아무리 해도 안 잡히는데, 알고 보면 Ng…
Commodore Amiga 500 - 커스텀 칩 Agnus/Denise/Paula 구조와 Workbench 부팅, Amiberry/WinUAE로 재현하기
1987년의 홈컴퓨터는 대개 CPU 하나가 화면과 소리를 다 짊어졌다. Amiga 500은 그 짐을 전용 칩 셋에 떼어 준 기계다. 그래서 68000 하나만 놓고 보면 평범한데, 실제로 돌려 보면 …
Windows 환경에서 LENA + Fasoo 연동
윈도우 환경에서 LENA WAS와 Fasoo 연동하는 방법에 대한 내용이다. Fasoo 솔루션에서 제공하는 WAS별 패키지 설치 가이드 문서에는 기본적으로 Tomcat, WebLogic, Jeus,…
[LENA] SameSite 속성 설정하기
SameSite 속성 설정 (LENA-UID, L-VISITOR, JSESSIONID) LENA-UID (LENA WEB 설정) ${LENA_HOME}/servers/${SERVER_ID}/conf…
jq 실전: API 응답과 kubectl -o json, AWS CLI, CloudTrail 로그를 select와 group_by로 뽑기
운영하다 보면 JSON을 눈으로 읽어야 하는 순간이 하루에도 몇 번씩 온다. kubectl로 파드 상태를 뽑거나, AWS CLI로 인스턴스 목록을 받거나, CloudTrail에서 누가 뭘 지웠는지 …
Nginx 보안 설정 실무 - server_tokens, TLS, 보안 헤더, limit_req, 444 차단
새 서버를 인터넷에 열어두고 access log를 지켜보면 몇 분 지나지 않아 낯선 요청이 쌓이기 시작한다. wp-login.php, .env, phpMyAdmin처럼 있지도 않은 경로를 두드리는 …
PostgreSQL XID wraparound로 DB가 멈췄을 때: 'database is not accepting commands' 진단과 복구
새벽에 애플리케이션이 통째로 쓰기를 못 하고 로그에 database is not accepting commands 가 찍히면 대부분 여기서 처음 XID wraparound라는 단어를 검색하게 된다.…
금성 FC-100 살펴보기: 국산 Z80 8비트기의 사양과 TV 연결형 설계, 남은 ROM과 아카이브
오래된 국산 하드웨어를 뒤지다 보면 금성 FC-100 앞에서 한 번은 멈추게 된다. 애플 II 카피와 MSX 사이 어디쯤, 한국이 아직 반도체 조립국 소리를 듣던 시절에 나온 기계라서 그렇다. 이번…
Redis, MongoDB 로그의 THP 경고 제대로 끄기: systemd, GRUB, tuned로 영구 비활성화
새 인스턴스에 Redis나 MongoDB를 올리고 기동 로그를 보면 거의 매번 THP 관련 경고 한 줄이 붙는다. 나도 설치할 때마다 이 줄을 보고, 급하면 echo never 한 번으로 덮고 넘어…
macOS '확인되지 않은 개발자라 열 수 없습니다' 차단 해제: xattr로 quarantine 제거, spctl과 codesign으로 안전하게 처리하기
인터넷에서 받은 CLI 도구나 오픈소스 앱을 처음 실행할 때 "확인되지 않은 개발자가 배포했기 때문에 열 수 없습니다"라는 창을 만나는 경우가 잦다. 나도 GitHub 릴리스에서 받은 바이너리를 터…
삼성 SPC-1000: 1982년 개발된 초기 국산 8비트 컴퓨터의 Z80 사양과 CAS 테이프 복원
중고 장터에 국산 8비트 기계가 올라오면 대개 키보드 오른쪽이 유난히 두툼한 사진이 함께 붙는다. 그 두께의 정체가 본체에 박힌 카세트 데크다. SPC-1000을 다시 들여다보게 된 계기도 그 사진…
대용량 CSV와 로그를 pandas 대신 Polars로 빠르게 처리하기: lazy API와 벤치마크
수 GB짜리 접속 로그나 CSV를 pandas로 열다가 read_csv 에서 메모리가 꽉 차서 커널이 죽는 상황, 데이터 전처리를 해본 사람이라면 한 번쯤 겪는다. 필자도 로그 집계 스크립트를 돌릴…