<?xml version="1.0" encoding="UTF-8"?>
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Hwanseok Sim</title>
      <link>https://shsblog.gttemp.cloud/blog</link>
      <description>전화망부터 운영 화면까지, 현장에서 돌아가는 음성 AI와 주차 서비스를 만드는 개발자</description>
      <language>ko-KR</language>
      <managingEditor>hs502983@gmail.com (심환석)</managingEditor>
      <webMaster>hs502983@gmail.com (심환석)</webMaster>
      <lastBuildDate>Sun, 01 Nov 2026 00:00:00 GMT</lastBuildDate>
      <atom:link href="https://shsblog.gttemp.cloud/tags/개발기/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://shsblog.gttemp.cloud/blog/visitcall-devlog-08-v2-client-and-deploy</guid>
    <title>VisitCall 개발기 8 — 2.0 클라이언트 호환과 부천 단지 배포</title>
    <link>https://shsblog.gttemp.cloud/blog/visitcall-devlog-08-v2-client-and-deploy</link>
    <description>앱 하나가 1.x와 2.0 서버에서 모두 동작하도록 단지 선택과 공통 네트워크 계층을 넣고, 부천 단지 로컬 PC에 Docker Compose 스택을 올려 스토어 배포까지 마친 과정(2026년 10~11월).</description>
    <pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>visitcall</category><category>개발기</category><category>flutter</category><category>docker</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-08-ai-settings-assistant</guid>
    <title>GT PBX 개발기 8 — AI 설정 도우미와 남은 과제</title>
    <link>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-08-ai-settings-assistant</link>
    <description>자연어로 PBX 설정을 묻고 바꾸는 AI 도우미를 붙였다. AI는 변경안만 만들고 반영은 사람이 [적용]을 눌러야 하며, 위험 등급은 서버가 매긴다. 평가 세트 58→66사례와 프롬프트 버전, 평가 예시가 프롬프트로 새어 들어 30.2 실행을 버린 일, 두 모델 비교, 그리고 일주일을 돌아보며 남은 과제를 정리한 마지막 편.</description>
    <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gtpbx</category><category>개발기</category><category>ai</category><category>평가</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-04-load-test-ec2</guid>
    <title>GT PBX 개발기 4 — EC2에서 동시 통화 100건까지 걸어 보기</title>
    <link>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-04-load-test-ec2</link>
    <description>로컬 SIPp로 인터넷 너머 EC2 t3.medium PBX에 동시 통화를 10건에서 100건까지 계단으로 걸어 본 기록. 시험 도구와 판정 기준, 도중에 바꾼 기준, NAT 때문에 끊기지 않던 통화, 녹취가 한꺼번에 멈춘 이상 현상, ringall 분배의 비용을 정리했다(2026년 10월 28일).</description>
    <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gtpbx</category><category>개발기</category><category>부하시험</category><category>sipp</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-05-ami-realtime</guid>
    <title>GT PBX 개발기 5 — AMI 이벤트로 실시간 현황 만들기</title>
    <link>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-05-ami-realtime</link>
    <description>Asterisk AMI 이벤트를 받아 월보드·TV 모드·상담원 상태 화면을 만든 M3. 두 번째 AMI 연결, 스냅샷과 이벤트 재적용, SSE 전체 스냅샷 전송, contact 단위 등록 집계, 새 장비 이름이 30초 비던 문제와 리뷰에서 고친 SSE 백프레셔를 정리했다.</description>
    <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gtpbx</category><category>개발기</category><category>ami</category><category>실시간</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-06-stats-aggregation</guid>
    <title>GT PBX 개발기 6 — 15분 사전 집계로 통계 만들기</title>
    <link>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-06-stats-aggregation</link>
    <description>콜센터 지표를 표로 먼저 정하고, 15분 버킷 사전 집계(5분 증분 + 매일 04:10 KST 재집계)와 리포트·XLSX를 만든 M4. 리뷰에서 고친 증분 커서 10분 겹침·pending_from·하루씩 트랜잭션, 의존성 없는 XLSX 작성기, 바꾼 때부터 적용되는 지표 기준값을 정리했다.</description>
    <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gtpbx</category><category>개발기</category><category>통계</category><category>postgresql</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-07-device-calls-outbound</guid>
    <title>GT PBX 개발기 7 — 장비 간 통화와 상담원 외부 발신</title>
    <link>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-07-device-calls-outbound</link>
    <description>같은 그룹 장비끼리 큐를 거치지 않고 통화하게 한 X2와, 상담원만 통신사 트렁크로 외부 번호를 걸 수 있게 한 X4. 미등록 상대를 Dial 하면 404가 되던 문제, 실패하면 끊는 결정, 판정 순서와 fail-closed, 장비 context에는 나갈 길 자체가 없게 한 구조, 그리고 실제 회선 검증이 남은 상태를 정리했다.</description>
    <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gtpbx</category><category>개발기</category><category>asterisk</category><category>dialplan</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-03-legacy-migration</guid>
    <title>GT PBX 개발기 3 — 레거시 PBX에서 무엇을 옮기고 무엇을 두고 왔나</title>
    <link>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-03-legacy-migration</link>
    <description>기존 상용 PBX의 화면과 데이터를 조사해 옮길 기능을 고른 기록: 장비 그룹과 CP949 CSV 일괄 등록, 사이트 라우팅을 옮기지 않은 결정과 일부 번복한 협력사 시간표, 녹취 켬/끔, 공통 기본 비밀번호의 득실, 화면 조사에서 나온 고칠 거리(2026년 10월 26~29일).</description>
    <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gtpbx</category><category>개발기</category><category>이관</category><category>설계결정</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-01-asterisk-core</guid>
    <title>GT PBX 개발기 1 — 레거시 PBX를 대신할 Asterisk 코어 세우기</title>
    <link>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-01-asterisk-core</link>
    <description>주차장 콜센터의 기존 상용 PBX를 대체하려고 요구와 결정부터 적고, 단계별 계약 문서로 일을 나눠 M1 PBX 코어(Asterisk 22 소스 빌드, ODBC Realtime, 장비 전용 context, 스테레오 녹음, watchdog, 방화벽, SIPp 통합 시험)를 세운 2026년 10월 23~26일 기록.</description>
    <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gtpbx</category><category>개발기</category><category>asterisk</category><category>인프라</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-02-web-without-reload</guid>
    <title>GT PBX 개발기 2 — reload 없이 반영하는 설정 웹앱</title>
    <link>https://shsblog.gttemp.cloud/blog/gtpbx-devlog-02-web-without-reload</link>
    <description>M2 웹앱 골격: 인증·권한·CSRF, 설정을 DB 트랜잭션으로 커밋한 뒤 Asterisk reload 없이 AMI로 반영을 확인하고 실패하면 되돌리는 흐름, 지울 수 없는 감사 로그, 통화 이력·녹취 재생, 그리고 TTS 음성을 실제 통화로 흘려 녹취 채널을 받아쓰기로 판정하는 시험(2026년 10월 26일).</description>
    <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gtpbx</category><category>개발기</category><category>웹앱</category><category>보안</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/visitcall-devlog-07-v2-redesign</guid>
    <title>VisitCall 개발기 7 — 2.0 재설계: 멀티 단지 통합 서버</title>
    <link>https://shsblog.gttemp.cloud/blog/visitcall-devlog-07-v2-redesign</link>
    <description>1.x 저장소 네 개를 분석해 결함을 정리하고, 메인 서버와 폴링 서버를 Fastify + PostgreSQL 통합 서버 하나로 합친 과정. 커서 영속, 멱등 아웃박스, 사이트별 단일 워커를 넣었다(2026년 10월).</description>
    <pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>visitcall</category><category>개발기</category><category>fastify</category><category>postgresql</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gem3park-devlog-08-timeout-self-correction-next</guid>
    <title>Gem3Park 개발기 8 — timeout, 자기 정정 복구, 그리고 남은 과제</title>
    <link>https://shsblog.gttemp.cloud/blog/gem3park-devlog-08-timeout-self-correction-next</link>
    <description>방문 목적 분류 호출의 48%가 timeout으로 버려지던 원인, 외부 결정 모델 Jev를 shadow로만 붙인 이유, 말을 고쳐 말한 동·호수를 복구하되 오복구 0을 우선한 결정, 그리고 아직 풀지 못한 과제를 정리한 마지막 편.</description>
    <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gem3park</category><category>개발기</category><category>운영</category><category>품질측정</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gem3park-devlog-07-live-stt-and-monitoring</guid>
    <title>Gem3Park 개발기 7 — 두 번째 귀와 모니터링 웹</title>
    <link>https://shsblog.gttemp.cloud/blog/gem3park-devlog-07-live-stt-and-monitoring</link>
    <description>Google STT 옆에 Gemini 3.5 Transcribe Live를 PoC에서 shadow, 병렬 보조로 단계 승격한 과정과, 그 결과를 사람이 확인할 수 있게 9월 12일 하루에 다시 만든 운영 모니터링 웹(통화 검색·녹음 재생·검수·SSE)을 다뤘다.</description>
    <pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gem3park</category><category>개발기</category><category>gemini</category><category>모니터링</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gem3park-devlog-06-unit-ambiguity-guard</guid>
    <title>Gem3Park 개발기 6 — 0 하나 차이 호수의 오승인을 막기까지</title>
    <link>https://shsblog.gttemp.cloud/blog/gem3park-devlog-06-unit-ambiguity-guard</link>
    <description>호출자가 1006호라고 했는데 106호로 확정된 통화에서 시작해, STT N-best 보존·위험 쌍 탐지·Gemini 우선·호출자 확인으로 오승인을 막은 8월 15일 하루의 설계와, 배포 직후 발견한 우회 경로를 정리했다.</description>
    <pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gem3park</category><category>개발기</category><category>stt</category><category>안전설계</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/visitcall-devlog-06-incidents-in-production</guid>
    <title>VisitCall 개발기 6 — 운영 중 장애와 교훈</title>
    <link>https://shsblog.gttemp.cloud/blog/visitcall-devlog-06-incidents-in-production</link>
    <description>노원 단지에서 1.x를 운영하며 겪은 입차 매칭 실패, 시각 형식, 자정 배치, 알림 오발송, 이중 게이트, 그리고 Change Tracking 버전을 문자열로 비교해 감지가 멈춘 사건까지(2025년 11월~2026년 8월).</description>
    <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>visitcall</category><category>개발기</category><category>운영</category><category>장애</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gem3park-devlog-05-allowlist-audio-assist</guid>
    <title>Gem3Park 개발기 5 — 허용 목록, 그리고 오디오 보조 설계를 줄인 이야기</title>
    <link>https://shsblog.gttemp.cloud/blog/gem3park-devlog-05-allowlist-audio-assist</link>
    <description>동·호수를 현장 허용 목록으로 검증하게 된 계기, 첫 발화 오디오 fallback을 크게 만들었다가 모든 guided 턴의 &#39;누락 시 전사만&#39; 보조로 줄인 판단, 그리고 그 운영 수치를 정리했다.</description>
    <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gem3park</category><category>개발기</category><category>gemini</category><category>stt</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gem3park-devlog-04-sip-watchdog-final-verification</guid>
    <title>Gem3Park 개발기 4 — SIP 등록 장애, watchdog, 그리고 최후검증</title>
    <link>https://shsblog.gttemp.cloud/blog/gem3park-devlog-04-sip-watchdog-final-verification</link>
    <description>프로세스는 살아 있는데 전화가 바로 끊기던 5월의 SIP 등록 장애와 그 뒤 만든 3단계 watchdog, 그리고 통화 녹음을 근거로 상담원 전환 직전에 방문 목적을 다시 판정하는 최후검증을 정리했다.</description>
    <pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gem3park</category><category>개발기</category><category>asterisk</category><category>운영</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gem3park-devlog-03-guided-mode-visit-purpose</guid>
    <title>Gem3Park 개발기 3 — guided 모드와 방문 목적 판정</title>
    <link>https://shsblog.gttemp.cloud/blog/gem3park-devlog-03-guided-mode-visit-purpose</link>
    <description>모델이 재질문을 정하던 구조를 슬롯 기반 guided 상태 기계로 옮기고, 방문 목적 판정을 공통 resolver로 모은 3~5월의 작업. 정규식 오탐, 단일 사이트 회귀, 재질문 무한 루프 수정까지 다뤘다.</description>
    <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gem3park</category><category>개발기</category><category>상태기계</category><category>대화설계</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gem3park-devlog-02-agent-handoff-and-state-split</guid>
    <title>Gem3Park 개발기 2 — 상담원 인계 안전장치와 1,400줄 클로저 해체</title>
    <link>https://shsblog.gttemp.cloud/blog/gem3park-devlog-02-agent-handoff-and-state-split</link>
    <description>동·호수를 세 번 못 알아들으면 상담원에게 넘기는 규칙을 넣으며, 프롬프트에 맡긴 흐름의 한계와 1,400줄짜리 함수를 CallFlowController·SessionState로 쪼갠 과정을 적었다.</description>
    <pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gem3park</category><category>개발기</category><category>상태관리</category><category>리팩터링</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/gem3park-devlog-01-audiosocket-gemini-live-relay</guid>
    <title>Gem3Park 개발기 1 — AudioSocket과 Gemini Live로 인터폰 전화 받기</title>
    <link>https://shsblog.gttemp.cloud/blog/gem3park-devlog-01-audiosocket-gemini-live-relay</link>
    <description>주차장 인터폰 전화를 AI가 받게 하려고 Asterisk AudioSocket과 Gemini Live API를 잇는 릴레이 서버를 만든 첫 열흘. 샘플레이트 변환, 20ms 재생 큐, 통화 종료 타이밍에서 막힌 지점을 정리했다.</description>
    <pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>gem3park</category><category>개발기</category><category>asterisk</category><category>audiosocket</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/visitcall-devlog-05-release-and-store</guid>
    <title>VisitCall 개발기 5 — 1.x 출시: Xcode Cloud와 스토어 배포</title>
    <link>https://shsblog.gttemp.cloud/blog/visitcall-devlog-05-release-and-store</link>
    <description>Flutter 앱을 App Store와 Google Play에 올리기까지의 빌드 실패, Xcode Cloud 스크립트 시행착오, Android 서명, 서버를 PM2로 상시 운영하게 된 과정(2025년 8~10월).</description>
    <pubDate>Thu, 23 Oct 2025 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>visitcall</category><category>개발기</category><category>flutter</category><category>xcodecloud</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/visitcall-devlog-04-admin-web</guid>
    <title>VisitCall 개발기 4 — 관리자 웹: 정적 페이지에서 Next.js까지</title>
    <link>https://shsblog.gttemp.cloud/blog/visitcall-devlog-04-admin-web</link>
    <description>관리사무소가 쓰는 관리자 웹을 문자 사용량 화면, 정적 HTML 통계 페이지, Next.js 대시보드로 세 번 다시 만든 과정과, 두 DB에 직접 붙는 구조의 비용(2025년 4~9월).</description>
    <pubDate>Fri, 26 Sep 2025 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>visitcall</category><category>개발기</category><category>nextjs</category><category>관리자웹</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/visitcall-devlog-03-parking-db-integration</guid>
    <title>VisitCall 개발기 3 — 주차관제 DB 연동과 Change Tracking 폴링</title>
    <link>https://shsblog.gttemp.cloud/blog/visitcall-devlog-03-parking-db-integration</link>
    <description>구조를 바꿀 수 없는 업체 주차관제 DB에서 입출차를 읽고 방문 차량을 써 넣기 위해 SQL Server Change Tracking 1초 폴링 서버를 만든 과정과, 알림 큐·필터링 결정(2025년 7~9월).</description>
    <pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>visitcall</category><category>개발기</category><category>sqlserver</category><category>주차관제</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/visitcall-devlog-02-push-and-entry-alerts</guid>
    <title>VisitCall 개발기 2 — 입차 푸시 알림과 중복 제거</title>
    <link>https://shsblog.gttemp.cloud/blog/visitcall-devlog-02-push-and-entry-alerts</link>
    <description>방문 차량이 들어오면 세대 구성원의 휴대폰이 울리게 만든 FCM 푸시 경로와, 같은 알림이 두 번 뜨는 문제를 서버 캐시와 앱 메시지 ID 저장으로 막은 과정(2025년 7~8월).</description>
    <pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>visitcall</category><category>개발기</category><category>fcm</category><category>flutter</category>
  </item>

  <item>
    <guid>https://shsblog.gttemp.cloud/blog/visitcall-devlog-01-prototype-and-stack</guid>
    <title>VisitCall 개발기 1 — SMS 링크 프로토타입에서 Flutter와 Express로</title>
    <link>https://shsblog.gttemp.cloud/blog/visitcall-devlog-01-prototype-and-stack</link>
    <description>React Native 앱을 Flutter로 옮기고 SMS 링크로 방문 차량을 받던 첫 프로토타입에서, 앱에서 차량번호를 직접 등록해 주차관제 쪽으로 넘기는 구조로 바뀌기까지의 2025년 3~7월 기록.</description>
    <pubDate>Sat, 05 Jul 2025 00:00:00 GMT</pubDate>
    <author>hs502983@gmail.com (심환석)</author>
    <category>visitcall</category><category>개발기</category><category>flutter</category><category>express</category>
  </item>

    </channel>
  </rss>
