여기 적는 건 둘로 나뉜다. 개발 중 실제로 재현한 문제 두 건과, 운영을 가정해 일부러 실패시켜 확인한 시나리오. 겪지 않은 것을 겪은 것처럼 쓰지 않으려고 나눴다.
홍대입구에서 삼성으로 가는 직행 질문에 이촌과 사당을 지나는 이상한 환승 경로가 나왔다. 실제 API로 검증하다가 재현한 문제다.
원인이 두 개 겹쳐 있었다. 일반 역 번호와 최단경로 API 전용 역 코드를 같은 값으로 가정했고, 이름으로 조회할 때 환승역의 다른 호선이 선택될 수 있었다. API 입장에서는 정상 응답이라 에러도 안 났다. 그래서 더 늦게 찾았다
그래서 API 응답으로 직접 확인한 역·호선별 경로 코드를 따로 관리하기로 했다. 양쪽 코드가 다 있으면 코드로 조회하고, 없으면 이름으로 조회하되 그 사실을 기록한다. 입력한 호선과 다른 후보는 아예 제외한다.
홍대입구에서 삼성이 환승 0회에 2호선으로, 이촌과 사당을 안 거치고 나오는지를 테스트로 고정했다.
남은 위험도 있다. 등록하지 않은 역은 여전히 이름으로 조회해야 하고, 공공 API의 코드가 바뀌는 건 계속 확인해야 한다.
내부 검토 두 차례에서 행동 가능성이 모두 5점 만점에 2점이었다.
근거와 주의사항은 많았다. 그런데 사용자가 출발 전에 무엇을 확인해야 하는지는 바로 안 보였다. 현재 판단과 첫 행동이 답변 앞부분에 없었던 게 원인이었다.
내부 점수보다 결론과 권장 확인을 먼저 보여주도록 답변 형식을 바꿨다. 판단 → 요약 → 권장 확인 순서로 개편하고, 역별 확인·미확인 근거도 사용자 조건에 맞춰 나눴다. 첫 세 줄 안에 판단과 첫 행동이 보이는지를 검토 기준에 추가했다.
다만 이건 내부 검토지 실제 사용자 검증이 아니다. 교통약자 당사자와 접근성 전문가의 평가가 남아 있다.
| 상황 | 기대한 동작 | 어떻게 확인했나 |
|---|---|---|
| 일부 공공 API 실패 | 확인된 근거와 실패한 소스를 함께 반환 | 실패 주입 |
| 최신 조회 실패 + 이전 응답 있음 | 허용 기간 안에서 경고와 기준 시각을 붙여 사용 | 실패 주입 |
| Redis 사용 불가 | 캐시 없이 계속 처리하고 상태를 저하로 표시 | 테스트 (실제 장애 아님) |
| 지원 범위 밖 | 시설 없음이나 장애로 오해시키지 않음 | 실제 API 범위 확인 |
| 인증·입력 제한 | 기본 토큰 거부, 크기 제한, 비밀값 비노출 | 자동 테스트 |