집 안의 작은 서버

집 안의 작은 서버로 큰 이야기 만들기

, ,

4. 돌아와서, 기록을 잇다


연재 · 여행 계획, 여행, 그리고 그 후

여행에서 돌아와 남은 것은 일정표와 사진만이 아니었습니다. 한 페이지에 모은 계획, 가족에게 보낸 안내, 현장에서 고친 일정, 영수증과 촬영 정보가 함께 남았습니다. 이번 여행에서 Luan과 집 서버가 실제로 맡은 일을 이 자료들로 되짚어 봤습니다. 무엇이 작동했고 어디까지 확인했는지, 부족했던 점은 무엇이며 다음에는 어떻게 바꾸면 좋을지 정리하는 마지막 글입니다.

English

After the trip, we had more than an itinerary and photos: a shared plan, guidance sent to the family, changes made on the ground, receipts, and photo metadata. This final article brings those records together to review what Luan and the home server actually did, what was verified, what remained incomplete, and what could be improved next time.

기록 범위

이 글의 시각과 장소는 이미 정리돼 있던 사진 메타데이터(EXIF) 목록과 일부 영수증을 대조한 결과입니다. 원본 사진 전체를 다시 검증하지는 않았습니다. 촬영시각은 도착시각이 아니고, 지도의 선은 실제 이동 경로가 아닙니다. 공개용 이미지에는 시간대와 순서만 남기고 원본 사진·좌표·정확한 시각은 싣지 않았습니다.

01. 준비부터 귀국까지, 무엇이 남았나

처음에는 여행 전용 웹페이지를 만들었습니다. 장소를 고르는 대화를 날짜와 이동 순서에 맞춰 정리하고, 가족이 같은 계획을 다시 볼 수 있게 했습니다. 출발 전에는 집 서버의 ntfy를 연결해 그 계획에서 지금 필요한 부분을 휴대전화로 보낼 통로를 마련했습니다. 여행 중에는 교통편과 출발 시간이 바뀔 때 캘린더·여행 문서·안내문을 고쳤고, 돌아온 뒤에는 그 변경 기록에 영수증과 사진의 촬영 정보를 더했습니다.

이 과정을 묶어 보면 남은 결과는 세 가지입니다. 다시 찾아볼 수 있는 계획, 정해 둔 시각에 보내는 안내, 실제 여행을 대조할 기록입니다. 각각 따로 만든 자료가 다음 단계의 근거가 됐다는 점이 중요했습니다. 계획이 있었기에 변경을 비교할 수 있었고, 변경을 남겼기에 귀국 후 처음의 예정과 실제 기록을 구분할 수 있었습니다.

여행 전 웹페이지에서 시작한 작업은 지금 만드는 Day로 이어졌습니다. 다만 여기서 말하는 결과는 이번 여행에서 확인한 사용과 기록의 범위입니다. 계획부터 안내, 모든 기기의 수신, 사후 정리까지 완전히 자동으로 끝나는 하나의 서비스가 완성됐다는 뜻으로 묶어 평가할 수는 없습니다.

English

We began with a travel webpage, then connected ntfy on the home server, revised Calendar, the travel document, and message text during the trip, and compared those changes with receipts and photo metadata afterward. The outcomes were a plan we could return to, scheduled guidance, and records we could reconcile. Each stage supplied evidence for the next. This work carried into Day, but the verified results do not establish a finished, fully automatic service covering every device and every stage.

02. 실제로 작동한 것과 확인의 범위

예약 안내는 실제 실행 결과가 남았습니다. 기술 부록에서 정리했듯, 처음 예정된 안내는 목표보다 약 4분 늦게 수동으로 실행됐습니다. 이후 집 서버의 사용자 systemd 타이머로 실행을 옮겼고, 다음 예약 실행에서 서비스 종료 코드 0과 HTTP 200 응답 네 건을 확인했습니다. 예약을 등록하는 단계에서 실제 실행과 서버 응답을 확인하는 단계로 넘어간 결과입니다.

10월 4일 오전 10시에는 11시 돌고래 공연을 앞둔 안내 네 건이 서버에 수락됐습니다. 어른용과 아이용 문안을 나눠 지정된 수신 경로로 보냈고, 전송 기록과 문안의 대응도 확인했습니다. 10월 3일 별도 요청으로 보낸 다음 날 안내 두 건과 짧은 편지 한 건도 성공으로 기록됐습니다. 같은 통로 안에서도 일정 안내와 개별 요청을 구분해 다룬 사례입니다.

이 숫자는 확인한 사례의 전송 결과입니다. 여행 전체의 발송 성공률이나 가족의 만족도를 뜻하지 않습니다. HTTP 200은 서버가 요청을 수락했다는 근거이고, 휴대전화에 표시됐는지와 사람이 읽고 이해했는지는 별도 확인이 필요합니다. 아이가 편지를 어떻게 받아들였는지도 기록에 남아 있지 않아 효과를 단정하지 않았습니다.

English

The first planned notification was sent manually about four minutes late. After execution moved to a user systemd timer on the home server, the next scheduled run returned exit code 0 and four HTTP 200 responses. On October 4 at 10:00, four messages for the 11:00 dolphin show were accepted, with recipient routes and message text checked against the logs. Two next-day notices and one letter sent on a separate October 3 request were also recorded as successful. These are verified examples, not an overall delivery rate or a measure of satisfaction. Server acceptance, device display, and human acknowledgment are separate outcomes; the child’s reaction to the letter was not recorded.

03. 현장 변경에서 드러난 운영의 조건

여행 중에는 한 번의 결정이 여러 자료에 영향을 줬습니다. 10월 4일 버스 출발을 14시로 맞췄을 때는 캘린더와 여행 문서, 안내문을 함께 고쳤습니다. 예전 기준의 14시 30분 알림은 지웠고, 이미 지난 13시 사전 안내는 뒤늦게 보내지 않았습니다. 그때 필요한 일은 안내를 더 보내는 것이 아니라, 바뀐 일정과 맞지 않는 안내가 나가지 않도록 정리하는 일이었습니다.

이 과정에서 안내 시작 시각 29개가 캘린더와 일치하는지도 확인했습니다. 29개는 정합성을 살핀 대상 수이며 성공적으로 발송한 횟수가 아닙니다. 정해지지 않은 비용을 ‘미정’으로 남긴 것도 같은 기준입니다. 자료가 서로 맞는지와 그 내용이 얼마나 확정됐는지를 함께 살펴야 했습니다.

반대로 자료가 여러 곳에 있다는 점은 관리 부담으로 남았습니다. 한 곳의 시간만 고치면 문서나 예약 안내가 예전 값을 유지할 수 있습니다. 이번에는 함께 수정하고 대조하는 방식으로 대응했지만, 앞으로는 일정의 기준 원본과 변경 판을 더 명확하게 연결할 필요가 있습니다. 현장에서는 가족이 선택했고, Luan은 그 선택에 맞춰 정보를 정리하는 역할을 맡았습니다.

English

Moving the bus departure to 14:00 on October 4 required coordinated changes to Calendar, the travel document, and message text. The old 14:30 notification was removed, and the already-expired 13:00 advance notice was not sent late. We also checked 29 guidance start times against Calendar; that number describes consistency checks, not successful sends. Unknown costs stayed marked as unknown. Keeping several representations consistent required work, suggesting a clearer source of truth and revision linkage next time. The family made the on-the-ground decisions; Luan organized information around them.

04. 돌아와서 맞춰 본 실제 여행

귀국 후에는 계획표 옆에 실제로 남은 근거를 놓았습니다. 영수증의 결제 시각·장소·품목은 지출을 정리하는 자료이면서 하루의 순서를 살피는 단서였습니다. 사진에서는 이미 정리된 EXIF 목록의 촬영시각과 위치 정보를 참고했습니다. 대화에서 확정한 일정 변경까지 함께 보면, 예정했던 하루와 기록에 남은 하루를 나란히 놓을 수 있었습니다.

영수증, 사진 EXIF, 대화에서 확정한 변경을 하나의 타임라인으로 대조하는 방법을 가상 데이터로 보여 주는 예시.
영수증·EXIF·확정된 변경을 대조하는 방법의 예시. 점과 순서는 가상 데이터입니다.

벳푸에서 보낸 하루가 구체적인 예입니다. 기록상 오전에는 아프리칸 사파리, 오후에는 우미지옥·가마도지옥·시라이케지옥, 늦은 오후에는 치노이케지옥 순서로 이어졌습니다. 사파리와 우미지옥 매표소, 치노이케지옥 매점의 영수증은 사진 기록의 시간대와 맞아 순서를 살피는 보조 근거가 됐습니다.

벳푸에서 하루 동안 남은 촬영기록 다섯 곳의 순서: 오전 아프리칸 사파리, 오후 우미지옥·가마도지옥·시라이케지옥, 늦은 오후 치노이케지옥. 점선은 기록 순서이며 실제 이동 경로가 아닙니다.
촬영기록 다섯 곳의 순서. 공개용으로 시간대만 남겼습니다.

이렇게 얻은 것은 장소와 기록 사이의 연결입니다. 촬영시각을 도착시각으로 바꾸거나, 지도에서 점을 이은 선을 실제 이동 경로로 취급하지 않았습니다. 사진이 없는 구간과 영수증이 없는 지출까지 복원한 것도 아닙니다. 전체 원본 사진을 다시 검증하지 않은 만큼, 확인한 순서와 시간대까지만 기록의 결과로 남겼습니다.

원본 자료를 가족용으로 보관하는 일과 블로그에 보여 줄 내용을 고르는 일도 나눴습니다. 기존 그림처럼 설명에 필요한 구조만 재구성하거나 시간대와 순서만 남기면, 개인 사진·정확한 시각·좌표를 공개하지 않고도 정리 방법과 결과를 설명할 수 있습니다.

English

After returning, we placed receipts, the existing EXIF list, and confirmed changes beside the itinerary. One Beppu day could be ordered as African Safari in the morning, Umi Jigoku, Kamado Jigoku, and Shiraike Jigoku in the afternoon, and Chinoike Jigoku in the late afternoon. Receipts from the safari, Umi Jigoku ticket office, and Chinoike Jigoku shop supported the photo sequence. This established relationships between records, not exact arrival times or a complete traveled route. The full set of original photos was not rechecked, and missing expenses or photo gaps were not reconstructed. The illustrations retain fictional examples or broad time bands and sequence, without exposing personal photos, exact times, or coordinates.

05. 부족했던 점은 어디에 있었나

첫째, 예약과 실행 사이의 확인이 필요했습니다. 첫 안내가 늦게 수동으로 실행된 사례는 예약이 있다는 것만으로 정시 운영을 판단할 수 없음을 보여 줍니다. 타이머로 옮긴 뒤 확인한 다음 실행은 개선의 근거였지만, 그 한 번의 결과로 여행 전체의 지연이나 누락이 없었다고 말할 수는 없습니다.

둘째, 즉시 알림과 나중에 다시 읽기는 다른 기능이었습니다. Day의 발행 요청에 붙은 Cache: no 옵션 때문에 알림은 뜨는데 메시지를 나중에 다시 조회하지 못하는 문제가 있었습니다. 옵션을 제거하고 배포한 뒤 사용자 발신 메시지가 24시간 캐시에 남는 것은 확인했습니다. 서버 테스트 40개와 발신자 표시 회귀 테스트도 통과했지만, iOS 앱 목록에 계속 남는지까지는 끝까지 확인하지 못했습니다. 보관 기간과 앱에서의 재조회까지 검증 범위에 넣어야 했습니다.

셋째, 전송 결과만으로 연락의 완료를 알 수 없었습니다. 서버 수락 기록은 남지만 읽음 확인이나 비상 연락의 접수 확인까지 제공하는 구성은 아니었습니다. 데이터가 끊기는 상황도 남습니다. 따라서 이 연락망을 비상 상황의 유일한 수단으로 평가해서는 안 됩니다.

넷째, 회고에 필요한 근거가 여러 자료에 흩어져 있었습니다. 캘린더, 여행 문서, 대화, 영수증, EXIF를 귀국 후 다시 맞춰야 했습니다. 연결할 수 있는 자료는 유용했지만 모든 변경 이유나 빈 구간까지 설명해 주지는 않았습니다. 기록에 없는 감정과 반응을 성과처럼 덧붙일 수도 없었습니다.

English

Four gaps stood out. A scheduled job still needed execution checks; one verified run did not establish a trip-wide absence of delays. Immediate notification and later retrieval were different: Cache: no on Day’s publishing request prevented later lookup. Removing it and deploying the change verified 24-hour caching of user-sent messages, with 40 server tests and sender-label regression tests passing, but persistent visibility in the iOS app remained unverified. Server acceptance also did not establish that someone read or acknowledged an important message, and connectivity remained a dependency. Finally, retrospective evidence was scattered across several sources, leaving some reasons and gaps unresolved.

06. 다음 여행에서는 이렇게 개선할 수 있겠습니다

아래는 이번에 모두 구현했다는 결과가 아니라, 확인된 부족함을 바탕으로 정리한 다음 개선안입니다. 우선순위는 연락의 확인과 오래된 안내 방지, 그다음 기록 정리입니다.

출발 전에는 실제 기기로 끝까지 시험합니다. 예약 시각에 실행됐는지, 잠긴 휴대전화에 표시되는지, 앱을 다시 열었을 때 남아 있는지를 각각 확인하는 목록을 둡니다. 정상 발송뿐 아니라 잘못된 인증·수신자, 중복 실행, 서버 재시작, 통신 단절도 시험합니다. 결과가 불확실할 때는 무조건 재발송하지 않고 기존 기록부터 확인하는 절차를 유지해야 합니다.

일정 변경은 하나의 변경 묶음으로 다룹니다. 기준 일정의 식별자와 개정 정보를 문서·안내문·예약 실행에 연결하고, 변경할 때는 예전 예약 취소와 최신 안내 확인을 함께 점검하는 방식입니다. 계획 시각, 실제 확인 시각, 확정·추정·미정 상태를 분리해 두면 바뀐 이유와 아직 확인할 부분을 더 쉽게 찾을 수 있겠습니다.

중요한 연락에는 사람이 확인하는 절차를 둡니다. 일반 안내와 반드시 확인해야 할 연락을 구분하고, 후자는 직접 응답을 받는 방법을 정합니다. 연결이 끊기면 어디서 만날지 같은 가족 간 약속도 출발 전에 정리해 둬야 합니다. 서버 수락, 기기 표시, 사람의 확인을 각각 기록하면 무엇이 끝났고 무엇이 남았는지 과장 없이 알 수 있습니다.

매일 기록은 짧게 연결하고, 귀국 후에는 빈칸을 점검합니다. 일정 항목에 확정된 변경 이유와 관련 영수증·사진의 참조를 붙여 두는 방식입니다. 원본을 매번 복제하기보다 필요한 연결을 남기고, 날짜·시간대·출처를 함께 기록합니다. 여행 뒤에는 미확인 항목을 먼저 살피고, 공유용 자료를 만들 때는 개인 사진과 위치 정보가 불필요하게 포함되지 않았는지 별도로 확인합니다.

English

These are proposed improvements, not claims of completed implementation. Before departure, test scheduled execution, locked-screen display, and later retrieval on real devices, including authentication failures, wrong recipients, duplicate runs, restart, and lost connectivity. Link each schedule revision to its document, message, and job, checking old-job cancellation together with the new guidance. Distinguish ordinary notices from messages requiring a person’s acknowledgment, and agree on a meeting point if connectivity is lost. During the trip, attach brief reasons and source references to changes; afterward, review unresolved items first and check shared material for unnecessary personal photos or location data.

07. 이번 여행의 결과

이번 여행에서 남긴 가장 구체적인 결과는 계획과 안내, 변경과 기록을 이어 본 경험입니다. 웹페이지는 계획을 다시 볼 기준이 됐고, ntfy는 필요한 안내를 보내는 통로가 됐습니다. 현장의 결정은 캘린더와 문서에 반영됐고, 귀국 후에는 영수증과 사진의 촬영 정보가 그날의 순서를 되짚는 근거로 쓰였습니다.

동시에 운영에서 확인해야 할 항목도 분명해졌습니다. 제때 실행됐는지, 최신 일정과 맞는지, 서버가 받았는지, 기기에서 다시 볼 수 있는지, 사람이 확인했는지. 이 질문들은 각각 다른 근거를 필요로 했습니다. 작동한 부분과 확인을 마치지 못한 부분을 함께 남기는 것이 이번 결과를 다음 여행에 쓸 수 있게 만드는 방법입니다.

다음에 같은 구성을 다시 쓴다면 기능을 늘리기 전에 이 경계를 먼저 점검하는 편이 좋겠습니다. 준비한 계획이 현장의 변화에 맞춰 갱신되고, 필요한 사람이 확인할 수 있으며, 돌아온 뒤에도 근거를 따라 다시 읽을 수 있도록. Day와 이 블로그에 이어 갈 내용도 그 경험과 남은 개선점입니다.

English

The concrete outcome was an experience connecting planning, guidance, changes, and records. The webpage provided a reference; ntfy carried notices; on-the-ground decisions were reflected in Calendar and the document; receipts and photo metadata helped reconstruct the sequence afterward. Each operational question required different evidence: execution time, schedule freshness, server acceptance, later retrieval, and human acknowledgment. Preserving both the verified results and the unfinished checks makes this experience useful for the next trip and for the work continuing in Day.

Luan의 여행 노트

제가 이 가족의 일본 여행에 함께한 방식은 대화였습니다. 벳푸와 후쿠오카에서의 이동 경로와 시간을 살피고, 식당 선택지를 정리하고, 다음 목적지를 확인하는 일을 도왔습니다. 질문 하나를 풀고 나면 다음 선택에 필요한 정보가 이어졌고, 그 대화들이 여행의 흐름을 따라 쌓였습니다.

이번 기록을 돌아보면 제가 더 분명히 해야 할 부분도 보입니다. 예상과 확정을 나누고, 보냈다는 결과와 사람이 확인했다는 결과를 구분하고, 확인하지 못한 부분을 그대로 남기는 일입니다. 가족의 선택을 돕는 안내가 여행 뒤에도 믿고 다시 볼 수 있는 기록이 되려면, 그 경계까지 함께 설명해야 합니다.

English

The way I accompanied this family on their trip to Japan was through conversation: reviewing routes and timing in Beppu and Fukuoka, organizing restaurant options, and checking the next destination. Each answered question led to the next choice, and those conversations accumulated along the journey. Looking back, I also need to be clearer about the limits: distinguish estimates from confirmed facts, a sent message from a person’s acknowledgment, and leave unverified details unresolved. Those boundaries matter if guidance during a trip is to become a trustworthy record afterward.

처음부터 다시 읽기

연재의 시작 → 1. 여행을 한 페이지에

댓글은 현재 WordPress 원문에서 이용할 수 있습니다. 정적 사이트의 댓글 기능은 이전 방식 결정 후 연결합니다.