<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PCMEISTER 기술 노트</title><link>https://blog.pcmeister.co.kr/</link><description>서버 운영, OCI 무료 노드, 윈도우 수리, Go 와 AI 로 개발하며 겪은 문제와 해결을 기록한다.</description><language>ko-KR</language><lastBuildDate>Wed, 14 Oct 2026 10:25:00 +0900</lastBuildDate><atom:link href="https://blog.pcmeister.co.kr/index.xml" rel="self" type="application/rss+xml"/><item><title>DAV 3. Nextcloud 를 끄면서 캘린더와 연락처를 직접 만든 CalDAV 서버로 옮기기</title><link>https://blog.pcmeister.co.kr/p/30/</link><pubDate>Wed, 14 Oct 2026 10:25:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/30/</guid><description>오래 방치된 Nextcloud 서버를 옮기지 않고 끄기로 했습니다. 파일은 백업하고, 캘린더와 연락처는 ics, vcf 로 꺼내 직접 만든 CalDAV 서버에 넣었습니다. 그때 만든 가져오기 명령의 규칙을 적습니다.</description></item><item><title>DAV 2. fetch 가 로그인 302 를 따라가다 CORS 오류로 끝날 때: API 는 챌린지 없는 401 JSON 으로</title><link>https://blog.pcmeister.co.kr/p/29/</link><pubDate>Wed, 14 Oct 2026 10:20:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/29/</guid><description>세션이 만료된 웹 화면에서 API 호출이 로그인 페이지로 가는 302 를 받으면, fetch 가 그걸 따라가다 교차 출처 오류로 끝납니다. 그래서 API 경로만 401 JSON 을 주고 화면이 직접 로그인 페이지로 옮기게 했습니다.</description></item><item><title>DAV 1. DAVx⁵ 로그인이 조용히 실패할 때: forward auth 뒤 CalDAV 서버는 401 과 302 를 나눠야 한다</title><link>https://blog.pcmeister.co.kr/p/28/</link><pubDate>Wed, 14 Oct 2026 10:15:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/28/</guid><description>Go 로 직접 만든 CalDAV 서버를 authentik 의 forward auth 뒤에 두었습니다. 웹 화면은 로그인 페이지로 302 를 줘야 하지만 DAVx⁵ 에 302 를 주면 로그인이 이유 없이 실패합니다. 경로와 메서드로 응답을 나눈 규칙을 적습니다.</description></item><item><title>AI 3. AI 가 같은 함정에 두 번 빠지지 않게: 작업 메모를 파일 하나에 한 가지씩 남기기</title><link>https://blog.pcmeister.co.kr/p/27/</link><pubDate>Wed, 14 Oct 2026 10:10:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/27/</guid><description>서버 이전을 여러 세션에 나눠 하면서, 다음 세션이 같은 조사와 같은 실수를 반복하지 않도록 Claude Code 메모리에 사실 하나당 파일 하나로 메모를 남겼습니다. 어떻게 쓰고 무엇이 도움이 됐는지 적습니다.</description></item><item><title>AI 2. 작업마다 AI 모델과 추론도를 미리 정해 두기: 내가 쓰는 배분 기준</title><link>https://blog.pcmeister.co.kr/p/26/</link><pubDate>Wed, 14 Oct 2026 10:05:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/26/</guid><description>프로젝트를 시작할 때 작업 목록에 작업마다 맡길 모델과 추론도를 같이 적어 둡니다. 어떤 기준으로 나누는지, 실제로 지켜졌는지 적어 봅니다.</description></item><item><title>AI 1. Claude Code 에 한 세션 한 작업만 시키기: 작업 게이트와 PreToolUse 훅으로 수정 범위 막기</title><link>https://blog.pcmeister.co.kr/p/25/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/25/</guid><description>실제 돈이 걸린 자동매매 봇을 AI 와 같이 만들면서, 한 세션에 작업 하나만 하고 그 작업이 정한 파일 밖은 못 고치게 막았습니다. 작업 카드, 완료 조건, PreToolUse 훅으로 만든 게이트 이야기입니다.</description></item><item><title>OCI 6. OCI 에서 25번 포트가 막혀 메일을 못 보낼 때: mailcow 를 Email Delivery 릴레이로 보내기</title><link>https://blog.pcmeister.co.kr/p/24/</link><pubDate>Wed, 14 Oct 2026 09:55:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/24/</guid><description>OCI 는 바깥으로 나가는 25번 포트를 막아 둡니다. 직접 운영하는 mailcow 메일 서버는 OCI Email Delivery 를 릴레이로 거쳐 보내고 있고, 서버를 다른 리전으로 옮기면서 릴레이도 새로 맞췄습니다.</description></item><item><title>OCI 5. OCI 무료 계정에서 실수로 과금되지 않게: 할당량 정책으로 A1 4코어 24GB 와 블록 200GB 만 열어 두기</title><link>https://blog.pcmeister.co.kr/p/23/</link><pubDate>Wed, 14 Oct 2026 09:50:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/23/</guid><description>PAYG 로 바꾼 오라클 클라우드 계정은 무료 한도를 넘는 자원도 만들어집니다. 계정마다 할당량 정책을 걸어서 Always Free 범위 밖의 인스턴스와 볼륨은 아예 못 만들게 막았습니다.</description></item><item><title>트러블슈팅 10. DNS 를 바꿨는데도 authentik 아웃포스트가 옛 서버에 붙어 있을 때: 오래 열린 웹소켓</title><link>https://blog.pcmeister.co.kr/p/22/</link><pubDate>Wed, 14 Oct 2026 09:45:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/22/</guid><description>인증 서버(authentik)를 새 노드로 옮기고 DNS 가 모두 바뀐 뒤에도, 원격 아웃포스트들은 옛 서버의 앞단을 거쳐 붙어 있었습니다. DNS 를 바꾸기 전에 열린 웹소켓이 그대로 살아 있었던 겁니다.</description></item><item><title>트러블슈팅 9. 호스트에서는 되는데 컨테이너에서만 연결이 시간 초과될 때: mailcow 의 Fail2ban 이 상대 서버를 막고 있었다</title><link>https://blog.pcmeister.co.kr/p/21/</link><pubDate>Wed, 14 Oct 2026 09:40:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/21/</guid><description>원격 지원 알림을 채팅 서버로 보내는 API 가 갑자기 502 를 냈습니다. 같은 호스트에서는 채팅 서버에 잘 붙는데 컨테이너에서만 시간 초과였고, 범인은 같은 노드의 mailcow 가 건 차단 규칙이었습니다.</description></item><item><title>윈도우 8. 관리자 권한으로 다시 실행할 때 "파일 열기 - 보안 경고" 가 한 번 더 뜰 때: Unblock-File</title><link>https://blog.pcmeister.co.kr/p/20/</link><pubDate>Wed, 14 Oct 2026 09:35:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/20/</guid><description>인터넷에서 받은 배치 파일이 스스로를 관리자 권한으로 다시 띄우게 했더니, UAC 앞에 보안 경고가 한 번 더 떴습니다. 다시 띄우기 전에 Unblock-File 로 인터넷에서 받았다는 표시를 지우니 UAC 만 남았습니다.</description></item><item><title>윈도우 7. 배치 파일이 "Downloading..." 에서 멈췄다가 Enter 를 누르면 풀릴 때: 콘솔 빠른 편집 모드</title><link>https://blog.pcmeister.co.kr/p/19/</link><pubDate>Wed, 14 Oct 2026 09:30:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/19/</guid><description>고객 PC 에서 실행한 원격 지원 배치 파일이 다운로드 단계에서 멈춰 있다가 Enter 를 누르자 다시 움직였습니다. 콘솔 창을 클릭해 빠른 편집 모드의 선택 상태가 되면 그 콘솔에 글을 쓰는 프로그램이 전부 멈춥니다.</description></item><item><title>윈도우 6. RustDesk ID 는 PC 고유 번호가 아니다: 포맷하면 바뀌는 ID 대신 하드웨어 값으로 같은 PC 알아보기</title><link>https://blog.pcmeister.co.kr/p/18/</link><pubDate>Wed, 14 Oct 2026 09:25:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/18/</guid><description>원격 수리를 마치면 RustDesk ID 를 적어 두고 나중에 같은 PC 인지 확인하려 했는데, 작업 한 번에 ID 가 두세 개씩 나왔습니다. RustDesk ID 가 어떻게 정해지는지 보고, SMBIOS 값으로 PC 를 알아보는 방식으로 바꿨습니다.</description></item><item><title>윈도우 5. PhoenixPE 부팅이 시작 화면 "Initializing..." 에서 멈출 때: 시간 제한 없는 RunProgramWait</title><link>https://blog.pcmeister.co.kr/p/17/</link><pubDate>Wed, 14 Oct 2026 09:20:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/17/</guid><description>원격 수리용 PhoenixPE 가 가끔 시작 화면에서 멈췄습니다. 로그가 RAM 디스크에만 있어 원인을 볼 수 없었는데, 시작 단계의 외부 프로그램 실행에 시간 제한이 없다는 것을 찾고 감시 스크립트를 붙였습니다.</description></item><item><title>윈도우 4. Snappy Driver Installer 라이트 모드에서 "0 drivers installed, 4 drivers failed" 가 나올 때</title><link>https://blog.pcmeister.co.kr/p/16/</link><pubDate>Wed, 14 Oct 2026 09:15:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/16/</guid><description>드라이버 자동 설치에 Snappy Driver Installer Origin 을 라이트 모드로 쓰는데, 새로 깐 노트북에서 13분을 기다린 끝에 드라이버가 하나도 안 깔렸습니다. 받은 드라이버 팩을 옮길 drivers 폴더가 없어서였습니다.</description></item><item><title>윈도우 3. 윈도우 설치 후 첫 부팅에 네트워크 어댑터가 전부 '사용 안 함'일 때: PowerShell 5.1 ConvertFrom-Json 과 HardwareInterface</title><link>https://blog.pcmeister.co.kr/p/15/</link><pubDate>Wed, 14 Oct 2026 09:10:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/15/</guid><description>윈도우를 새로 깔고 첫 부팅을 했더니 유선, 무선 어댑터가 모두 꺼져 있었습니다. 다시 켜는 스크립트가 있었는데 PowerShell 5.1 의 ConvertFrom-Json 버릇 하나, 꺼진 어댑터의 HardwareInterface 값 하나에 연달아 걸렸습니다.</description></item><item><title>윈도우 2. Windows 11 24H2 에서 WlanQueryInterface 가 ERROR_ACCESS_DENIED 를 줄 때: 위치 권한과 Wi-Fi API</title><link>https://blog.pcmeister.co.kr/p/14/</link><pubDate>Wed, 14 Oct 2026 09:05:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/14/</guid><description>지금 연결된 Wi-Fi 프로필을 찾으려고 WlanQueryInterface 를 불렀더니 Windows 11 24H2 에서는 접근 거부가 났습니다. 위치 서비스가 꺼져 있으면 Wi-Fi 정보를 주는 API 가 막히도록 바뀌었기 때문입니다.</description></item><item><title>윈도우 1. 무선만 있는 노트북을 WinPE 로 부팅하면 인터넷이 안 될 때: Windows 의 Wi-Fi 프로필을 PE 로 넘기기</title><link>https://blog.pcmeister.co.kr/p/13/</link><pubDate>Wed, 14 Oct 2026 09:00:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/13/</guid><description>원격으로 윈도우를 다시 깔 때 고객 PC 를 WinPE 로 한 번 부팅시키는데, 랜선 없는 노트북은 PE 에서 인터넷이 안 됐습니다. 고객이 쓰던 Wi-Fi 프로필을 PE 로 넘기기까지 같은 노트북으로 네 번을 다시 부팅했습니다.</description></item><item><title>OCI 4. OCI 에서 공인 IP 를 그대로 둔 채 인스턴스를 새로 만들기: 예약 퍼블릭 IP 옮기기</title><link>https://blog.pcmeister.co.kr/p/12/</link><pubDate>Wed, 14 Oct 2026 08:55:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/12/</guid><description>외부 API 에 나가는 IP 를 등록해 둔 서버를 새 인스턴스로 바꿔야 했습니다. 예약 퍼블릭 IP 라면 VNIC 에서 떼어 다른 인스턴스에 붙일 수 있고, 임시 IP 는 그게 안 됩니다.</description></item><item><title>OCI 3. OCI Oracle Linux 인스턴스에서 바꾼 hostname 이 부팅 때 덮어써지지 않게 하기</title><link>https://blog.pcmeister.co.kr/p/11/</link><pubDate>Wed, 14 Oct 2026 08:50:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/11/</guid><description>OCI 의 Oracle Linux 이미지는 부팅할 때 메타데이터를 보고 호스트 이름과 /etc/hosts 를 다시 맞춥니다. 직접 정한 이름을 유지하려면 /etc/oci-hostname.conf 의 PRESERVE_HOSTINFO 와 cloud-init 설정을 같이 바꿔야 합니다.</description></item><item><title>OCI 2. OCI 인스턴스 만들기 화면에서 VCN 을 만들면 CIDR 이 10.0.0.0/16 으로 고정된다</title><link>https://blog.pcmeister.co.kr/p/10/</link><pubDate>Wed, 14 Oct 2026 08:45:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/10/</guid><description>오라클 클라우드 계정 세 개에 노드를 하나씩 만들면서 VCN 대역을 10.30, 10.31, 10.32 로 나누려고 했는데, 인스턴스 만들기 화면에서는 대역을 고를 수가 없었습니다. VCN 마법사로 먼저 만들어야 합니다.</description></item><item><title>트러블슈팅 8. "During secondary validation: DNS problem: NXDOMAIN looking up A" 로 Let's Encrypt 발급이 안 될 때</title><link>https://blog.pcmeister.co.kr/p/9/</link><pubDate>Wed, 14 Oct 2026 08:40:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/9/</guid><description>DNS 레코드를 넣은 지 얼마 안 된 새 도메인에서 Let's Encrypt 가 secondary validation 실패를 냈습니다. 공용 DNS 에는 이미 보이는데 왜 안 되는지, Caddy 에서 멈춘 발급을 어떻게 풀었는지 적습니다.</description></item><item><title>트러블슈팅 7. Apache 리버스 프록시로 https 백엔드에 넘겼더니 502: SSLProxyVerifyDepth 기본값 1</title><link>https://blog.pcmeister.co.kr/p/8/</link><pubDate>Wed, 14 Oct 2026 08:35:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/8/</guid><description>옛 서버의 Apache 가 들어온 요청을 새 서버의 https 주소로 넘기게 했더니 502 가 났습니다. SSLProxyVerifyDepth 기본값이 1 이라 Let's Encrypt 인증서 체인을 검증하지 못한 것이었습니다.</description></item><item><title>트러블슈팅 6. Caddy 에서 tls internal 을 지웠는데 인증서 발급을 시도하지 않을 때</title><link>https://blog.pcmeister.co.kr/p/7/</link><pubDate>Wed, 14 Oct 2026 08:30:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/7/</guid><description>이전 리허설 때 tls internal 로 띄워 둔 사이트를, DNS 를 바꾼 뒤 tls internal 만 지우고 reload 했는데 Caddy 가 계속 내부 인증서를 내놓았습니다. 캐시된 로컬 인증서를 지워야 했습니다.</description></item><item><title>트러블슈팅 5. DNS 를 바꿨는데 Let's Encrypt 만 옛 IP 를 볼 때: DNSSEC 질의에만 옛 값을 주는 네임서버</title><link>https://blog.pcmeister.co.kr/p/6/</link><pubDate>Wed, 14 Oct 2026 08:25:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/6/</guid><description>A 레코드를 바꾸고 nslookup 으로는 새 IP 가 나오는데 Let's Encrypt, 8.8.8.8, 1.1.1.1 은 한참 동안 옛 IP 를 봤습니다. 권한 네임서버가 DO 비트가 붙은 질의에만 옛 값을 주고 있었습니다.</description></item><item><title>트러블슈팅 4. SOGo 웹메일에서 euc-kr 메일 한글이 ÀÎÁõ¼­ 처럼 깨질 때</title><link>https://blog.pcmeister.co.kr/p/5/</link><pubDate>Wed, 14 Oct 2026 08:20:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/5/</guid><description>mailcow 의 SOGo 웹메일에서 은행, PG 사 안내 메일의 한글이 깨졌습니다. SOGo HTML 뷰어의 문자셋 표에 euc-kr 과 ks_c_5601-1987 이 없어서 Latin-1 로 읽고 있었습니다.</description></item><item><title>트러블슈팅 3. plink 로 "sudo bash -s" &lt; 스크립트를 넘겼더니 docker compose exec 뒤가 실행되지 않음</title><link>https://blog.pcmeister.co.kr/p/4/</link><pubDate>Wed, 14 Oct 2026 08:15:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/4/</guid><description>Windows 에서 plink 로 원격 서버에 복원 스크립트를 표준입력으로 넘겼는데, 중간의 docker compose exec 에서 스크립트가 끝나 버렸습니다. 남은 스크립트를 docker compose exec 가 먹어 버린 것이었습니다.</description></item><item><title>트러블슈팅 2. Caddyfile 을 고치고 reload 했는데 "config is unchanged" 가 나올 때</title><link>https://blog.pcmeister.co.kr/p/3/</link><pubDate>Wed, 14 Oct 2026 08:10:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/3/</guid><description>도커로 띄운 Caddy 의 Caddyfile 을 새 파일로 바꿔 끼우고 reload 했더니 설정이 그대로라고 나옵니다. 파일 하나만 바인드 마운트하면 생기는 일이었습니다.</description></item><item><title>OCI 1. A1 Always Free 한도가 절반이 됐다는데, 내 노드는 아직 0원인가</title><link>https://blog.pcmeister.co.kr/p/2/</link><pubDate>Wed, 14 Oct 2026 08:05:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/2/</guid><description>오라클 Always Free 문서에는 A1 무료 한도가 예전의 절반으로 적혀 있는데, 공개 요율표는 아직 예전 값입니다. 4코어 24GB 노드 세 대를 돌리면서 무엇을 확인했고 무엇을 아직 모르는지 적어 둡니다.</description></item><item><title>트러블슈팅 1. mailcow 복원이 "Can not read DOCKER_COMPOSE_VERSION variable from mailcow.conf!" 로 멈출 때</title><link>https://blog.pcmeister.co.kr/p/1/</link><pubDate>Wed, 14 Oct 2026 08:00:00 +0900</pubDate><guid>https://blog.pcmeister.co.kr/p/1/</guid><description>다른 서버로 옮긴 mailcow 를 backup_and_restore.sh 로 복원하려는데 시작하자마자 끝나 버렸습니다. 원인은 옛 서버 mailcow.conf 에 비어 있던 한 줄이었고, 복원이 끝난 뒤에는 override 파일이 빠지는 문제가 하나 더 있었습니다.</description></item></channel></rss>