전체 글
2,027개의 글
MariaDB 10.6에서 11.4 업그레이드
운영 중인 MariaDB 10.6이 슬슬 손이 가는 시점이 왔다. 10.6도 LTS라 아직 지원 기간이 남았지만, 11.4가 새 LTS로 자리를 잡으면서 신규 장비는 11.4로 깔고 기존 장비만 1…
HardwareZX Spectrum 48K를 Fuse로 되살리기
영국 8비트 이야기를 하다 보면 늘 이 기계가 나온다. 국내에서는 MSX와 애플 II가 익숙하지만, 유럽에서는 이 검은 벽돌이 한 세대의 프로그래밍 입문기였다. 실물을 처음 만지면 두 가지에 놀란다…
자바 PriorityQueue로 다익스트라 최단경로 구현
코딩테스트 그래프 문제를 풀다 보면 다익스트라가 거의 매번 등장한다. 그런데 개념은 아는데 막상 제출하면 시간초과(TLE)로 미끄러지는 경우가 많다. 원인을 따라가 보면 대부분 PriorityQue…
Spring Boot 3에서 Swagger UI 자동 생성
REST API를 만들고 나면 문서가 항상 뒤로 밀린다. 코드는 계속 바뀌는데 위키나 노션에 손으로 적어둔 파라미터 표는 금세 낡는다. 저는 이럴 때 문서를 사람이 쓰지 않고 코드에서 뽑아내는 방향…
반다이 마스코트 로보 하로 시리즈, 말하는 1/4 하로
건담 굿즈 중에서 하로만큼 일찍 상품이 됐어야 할 물건도 드문데, 정작 하로 자체를 세워 파는 완구가 나온 것은 TV판 방영으로부터 20년도 더 지난 2002년이었다. 마스코트 로보 하로(マスコット…
Hardware올드맥 시리즈 4편, Power Macintosh 5200 LC
1994년 첫 PowerPC 3종을 1편 6100 , 2편 7100 , 3편 8100 으로 마쳤다. 출시 순서대로 이어가면 다음 차례는 1995년 4월의 Power Macintosh 5200 LC다…
Hardware팜파일럿 프로페셔널을 POSE로 다시 켜기
셀빅을 다룬 김에 그 맞은편에 있던 물건을 마저 정리한다. 1990년대 후반 국내 PDA 시장은 제이텔 셀빅과 미국에서 건너온 팜파일럿이 양분했고, 사무실 책상마다 둘 중 하나가 크래들에 꽂혀 있었…
Flyway로 Spring Boot 스키마 버전 관리
운영 DB 스키마를 누가 언제 어떻게 바꿨는지 추적이 안 돼서 곤란했던 경험은 대부분 있을 것이다. 개발 DB에서는 되던 쿼리가 운영에서 컬럼이 없다고 터지고, ALTER 문은 누군가의 로컬 메모나…
RHEL 9에서 Podman rootless 컨테이너 운영하기
사내 서버를 Rocky 9로 올리면서 Docker를 그대로 쓸지 고민하는 상황이 종종 생긴다. RHEL 계열에는 이미 Podman이 기본 저장소에 들어 있고, 데몬을 띄우지 않는 구조라 운영 부담이…
Hardware올드맥 시리즈 3편, Power Macintosh 8100
1994년 첫 PowerPC 맥 3종을 한 대씩 훑는 시리즈의 마지막 편이다. 1편에서 보급형 피자박스 Power Macintosh 6100 을, 2편에서 중형 데스크톱 Power Macintosh…
GPT-6 Astra 달라진점
새 모델이 나오면 제일 먼저 하는 일이 가격표와 모델 문서 두 페이지를 나란히 열어놓고 지금 쓰는 모델과 비교하는 것이다. 발표문에 붙은 벤치마크 표는 대체로 좋아 보이게 그려져 있어서, 실제로 갈…
ExecutorService로 병렬 호출하면 왜 스레드가 새는가 - JDK 25 구조적 동시성 StructuredTaskScope로 실패 시 자동 취소
서비스 하나가 화면을 그리려고 회원 정보, 주문 내역, 추천 목록을 각기 다른 API에서 끌어오는 구조는 어디에나 있다. 순차로 부르면 느리니 병렬로 묶는데, 이때 ExecutorService 와 …
Nginx 502 'upstream sent too big header' - proxy_buffer_size, proxy_buffers, busy_buffers_size로 큰 응답 헤더 받기
1. 개요 백엔드 WAS 앞에 Nginx를 리버스 프록시로 두는 구성은 흔하다. 평소 잘 돌던 경로가 어느 날 특정 사용자, 특정 API에서만 502를 내뱉을 때가 있다. 로그인 직후나 세션이 커진…
Kafka 스키마를 안전하게 바꾸기 - Schema Registry와 Avro로 호환성 지키고 배포 순서 사고 막기
메시지 스키마에 필드 하나 추가하는 일은 사소해 보인다. 그런데 카프카처럼 프로듀서와 컨슈머가 따로 배포되는 구조에서는 이 사소한 변경이 컨슈머를 멈춰 세우는 원인이 된다. 예전에 JSON 문자열을…
Langfuse 자체 호스팅으로 LLM 앱 관측하기 - 트레이스 계측, 토큰 비용 추적, 프롬프트 버전과 평가 대시보드
LLM 애플리케이션을 운영에 올리고 나면 항상 같은 질문을 받는다. "이번 달 OpenAI 요금이 왜 이렇게 나왔나", "어제 그 답변이 왜 이상하게 나갔나", "프롬프트를 바꿨는데 품질이 좋아진 …
HAProxy L7 로드밸런싱 - balance 알고리즘 고르기, httpchk 헬스체크(기본은 OPTIONS), sticky 세션과 stats 대시보드
서버를 두 대 이상으로 늘리고 나면 그 앞에 뭘 세울지가 다음 고민이 된다. 클라우드 관리형 로드밸런서(ALB, NLB)를 쓰면 편하지만, 온프레미스나 단일 VM 위에서 프로세스를 여러 개 띄워 분…
쿠버네티스에 Argo CD로 GitOps 파이프라인 깔기 - Application, 자동 sync, self-heal로 kubectl apply 손절하기
클러스터를 몇 명이서 나눠 쓰다 보면 어느 순간 아무도 지금 떠 있는 게 Git의 어느 커밋인지 자신 있게 말하지 못하는 상태가 된다. 누군가 급해서 kubectl edit 로 replicas를 바…
Testcontainers로 Spring Boot 통합 테스트에 진짜 DB와 Kafka 띄우기 - @ServiceConnection, 컨테이너 재사용, CI 설정
통합 테스트를 H2 인메모리 DB로 돌려놓고 운영은 PostgreSQL로 하는 프로젝트를 자주 본다. 나도 예전엔 그렇게 했다. 빠르고 편하니까. 문제는 방언(dialect) 차이에서 터진다. H2…
대우 재믹스 슈퍼V(CPC-61) - 카트리지 게임기가 된 국산 MSX2, 실기와 openMSX로 돌려보기
IQ-2000을 다룰 때 국산 MSX2 이야기를 하다가, 같은 대우전자가 그 MSX2를 게임기로 다시 포장해 팔았다는 사실을 짚고 넘어가지 못했다. 재믹스 슈퍼V가 그 물건이다. 1980년대 말에서…
한글 검색이 standard 토크나이저로 안 잡힐 때 - Elasticsearch, OpenSearch에 Nori 형태소 분석기 붙이고 사용자 사전까지
1. 개요 검색 기능을 붙였는데 "백두산"으로 검색하면 나오던 글이 "백두산이"라고 치면 안 나온다는 제보를 운영하다 보면 한 번쯤 받는다. 대부분 기본 토크나이저를 그대로 쓴 인덱스가 원인이다. …
Spring Boot에서 Logback JSON 구조화 로깅
운영 중인 서비스에서 장애 원인을 좇다 보면 로그가 텍스트 한 줄로 흩어져 있어 특정 요청만 뽑아보기 어려운 경우가 많다. 톰캣 접근 로그와 애플리케이션 로그를 grep으로 맞춰 보다가 시간만 쓴 …
HardwareMacintosh SE/30 - 68030을 담은 최강의 콤팩트 맥, 사양 정리와 30년 뒤 배터리 누액, 커패시터 교체
부품 상자를 정리하다 반쯤 부식된 1/2 AA 리튬 배터리를 하나 발견했다. 오래된 콤팩트 맥에서 뽑아둔 것이다. SE/30 이야기를 하려면 결국 이 배터리와 로직보드 위 작은 커패시터들 이야기를 …
pip와 venv, poetry를 uv 하나로 합치기 - pyproject.toml과 uv.lock으로 재현성 잡고 CI 빌드 시간 줄이기
Python 프로젝트를 새로 잡을 때마다 python -m venv 로 가상환경 만들고, pip install 로 패키지 넣고, pip freeze requirements.txt 로 목록을 뽑는 과…
Amazon EKS 1.34 표준 지원 종료 메일을 받았다면 - 확장 지원 요금과 업그레이드 선택지
EKS 클러스터를 몇 개라도 굴리고 있으면 요즘 받은편지함에 "[조치 필요] Amazon EKS Kubernetes 1.34 표준 지원 종료" 제목의 AWS Health 알림이 하나 들어와 있을 것…