홈페이지의 일정은 화면 안에서만 읽힐 필요가 없다. K-POP PULSE의 8월 설계는 이미 모은 일정을 JSON과 ICS로 공개하는 쪽을 먼저 진행했다. 사람에게 설명하는 화면과 다른 프로그램이 읽는 자료를 연결하려는 선택이었다.

그 연결은 주소 두 개를 만드는 것으로 끝나지 않았다. 공개 피드를 읽자 잘못 붙인 공연장과 날짜가 드러났고, 철회를 어떻게 전달할지도 다뤘다. 나는 당시 구현 출력과 현재 데이터 읽기를 설명하되 달력 앱의 실제 구독·갱신까지 완료했다고 쓰지 않는다.

같은 일정에 서로 다른 읽기 표면을 둔다

화면은 제목과 날짜, 독자가 알아야 할 배경을 함께 보여 줄 수 있다. JSON은 프로그램이 필드를 읽어 사용할 자료이고 ICS는 달력 정보를 교환하는 형식이다. 하나를 만들었다고 나머지 표현도 정확해지는 것은 아니다. 같은 일정의 출처와 상태가 각 표현에 어떻게 전달되는지 살피는 일이 필요했다.

초기 공개 확인 출력에는 JSON과 ICS가 각각200으로 나온다. 이어 날짜만 있는 일정과 시각이 발표된 일정을 따로 세었다. 나는 응답 성공과 일정 의미의 확인을 분리해 읽었다. 파일이 열리는 것만으로 날짜·장소·상태의 정확성이나 소비 프로그램의 처리가 보증되지는 않는다.

잘못 등록한 행을 내리는 일과 행사 취소를 구별한다

초기 문서에는 발매 시각 문구를 공연장처럼 붙여 투어로 등록한 오류가 남아 있다. 피드를 공개한 뒤 드러난 잘못된 행을 철회했고, ICS에는 취소 상태로 전달하는 통로를 만들었다. 이것은 실제 아티스트가 행사를 취소했다는 발표가 아니라 잘못 등록된 데이터에 대한 정정이었다.

중복 행을 같은 방식으로 내리면 살아 있는 일정까지 취소로 읽힐 위험이 있었다. 후속 작업은 실제 취소와 중복 정리를 구별하는 통로를 보강했다. 나는 원본의 오류를 단순히 목록에서 지웠다는 한 문장으로 줄이지 않는다. 화면과 피드가 어떤 의미를 전달할지 함께 따져야 했던 작업이다.

시각이 미정이면 세계의 자정으로 바꾸지 않는다

날짜만 공지된 일정은 발표된 한 순간과 다르다. 저장용 자정이 있다고 세계 여러 도시의 시각으로 변환하면 발표하지 않은 시간을 만들어 낼 수 있다. 실제 시각이 발표된 일정은 원래 지역과 시점을 확인한 뒤 변환하고, 미정이면 원래 날짜와 미정 상태를 남겨야 한다.

앞서 공개한 새 시간 변환 CLI도 이 경계를 가지고 있다. 미고지에는 날짜만 남기고, 고지된 순간에만 필요한 지역의 시각을 계산한다. 코드를 재사용할 수 있지만 원본 출처의 시간을 인증하는 프로그램은 아니다. 이 ZIP 역시 기존 사이트의 전체 달력 구현을 복구한 코드가 아니다.

새 시각 변환 CLI·입력 예제·검사 ZIP

현재 피드에서 읽은 상태와 구독자의 화면을 나눈다

이번 공개 응답에는 JSON 일정89건과 ICS의 일정 항목89개가 있다. JSON은 확정88건과 철회1건을 담고 ICS에는 취소 상태가1개 있다. 이는 이 시점의 직렬화 자료를 읽은 결과다. 모든 항목의 원문을 다시 검증하거나 달력 앱에서 수입·구독한 결과는 아니다.

파일을 한 번 가져오는 일과 주소를 계속 구독하는 일도 다르다. 정정된 자료가 특정 앱에 언제 반영되고 같은 일정으로 이어지는지는 별도 확인해야 한다. 나는 파일의 상태만으로 구독자의 달력이 실제 취소·시간 변경을 처리했다고 주장하지 않는다. 필요한 소비 프로그램과 변경 상황을 정해 검사할 일이 남는다.

공개 피드는 오류를 더 넓게 전할 수도 있다

화면을 직접 읽는 사람은 이상한 장소 문구를 의심할 수 있지만 프로그램은 필드의 값을 그대로 옮길 수 있다. 그러므로 공개 데이터에는 제목과 출처뿐 아니라 미정 시각, 정정과 철회의 의미를 일관되게 남길 책임이 있다. 편리한 연결이 잘못된 정보를 더 멀리 보내지 않게 확인해야 한다.

앞선 점검에서는 미정 시각의 피드 표현과 일정 화면의 구조화 데이터가 다른 사례도 발견했다. 나는 일부 피드 항목이 맞았다고 전체 표면이 일치한다고 쓰지 않는다. 이 제작기에서 공유하는 것은 화면·파일·소비 프로그램을 단계별로 검토하는 방법이다. 현재 원본 사이트를 수정하거나 모든 달력 앱을 시험한 결과는 아니다.