OptRail 개발일지 1편. 판 v1.0.1.5. 작성 2026. 10. 7.
열차 좌석 추천 도구는 GenealogyRail 이라는 이름으로 시작하여 2026년 10월 2일 OptRail 로 이름이 바뀌었다. 본 편은 본편이 완성되기 전까지의 개발 경과를 판 단위로 누적 기록한다. 좌석 배치 자료와 일사 계산을 갖춘 첫 도구, 문서의 논문체 전환, 이름 변경과 작업 절차 수립, 기존 서비스 조사, 빈자리 알림 검토, 휴대폰 화면 초안 작성, 휴대폰 화면 구현, 참고문헌 팝업, 화면 폭 대응과 즐겨찾기, 좌석 조건 확장, 승강장 자료 반영, 회원 저장과 햇빛 분석 보완, 선택의 순위와 좌석 분석, 좌석 분석의 실치수 적용과 좌석 색 구분, 등받이 각도와 가장 좁은 좌석 비교, 같은 의자의 두 방향 도면, 무릎 여유 중심의 재구성까지를 기술하였다.
목적
본편이 완성되기 전까지는 판마다 개발일지를 따로 게시하면 경과가 여러 편으로 나뉘어 흐름을 파악하기 어려운 문제가 있다. 본 편은 v1.0.0.0 부터의 개발 경과를 1편에 누적하고, v1.0.0.3 에서는 휴대폰 화면 초안을 작성하고, v1.0.0.4 에서는 결정 필요 사항의 처리 순서를 정하고 휴대폰 화면을 도구에 적용하는 것을 목적으로 하였다.
계획
- 개발일지 1~3편을 1편으로 통합
- 이름 변경 경위 명시(옛 기록의 GenealogyRail 표기 유지)
- 빈자리 알림 기능 검토
- 디자인 자문과 화면 초안 작성
- 결정 필요 사항의 처리 순서 검토
- 평가 함수 분리와 휴대폰 화면 구현
- 참고문헌 팝업 추가
- 반응형 배치와 즐겨찾기
- 좌석 조건 확장과 분류
- 승강장 자료와 진행 방향 표시
- 회원 저장과 햇빛 분석 보완
- 선택의 순위, 무작위 추천, 달력, 좌석 분석
- 좌석 분석의 실치수와 표준 체형 적용
- 좌석 색 구분
- 등받이 각도와 가장 좁은 좌석 비교
- 같은 의자의 옆모습과 평면, 의자 윤곽과 색
- 무릎 여유 옆모습과 비교 막대
체크리스트 18/27
| 항목 | 상태 | 비고 |
|---|---|---|
| 개발일지 1~3편을 1편으로 통합, 판별 장 제목에 판 번호 표기 | 완료 | 1장 |
| 옛 기록의 GenealogyRail 표기 유지, 이름 변경일 명시 | 완료 | 1장, 15장 |
| 조회 전용 빈자리 알림 검토 | 완료 | 24장 |
| 휴대폰 화면 초안 7개와 디자인 자문 2회 | 완료 | 25장 |
| 결정 필요 사항 처리 순서 검토 | 완료 | 26장 |
| 평가 함수 분리, 휴대폰 화면 구현 v1.0.0.4 | 완료 | 26장 |
| 참고문헌 39건 IEEE 양식 팝업 | 완료 | 27장 |
| 화면 폭 4구간 반응형, 단계 표시, 문구 정비, 즐겨찾기 | 완료 | 28장 |
| 좌석 조건 5종 추가, 4개 묶음 분류, 빠른 선택 | 완료 | 29장 |
| 준비 중 조건 4종 자료 조사 | 미완 | |
| 승강장 자료 조사, 에스컬레이터 앞 호차, 진행 방향 화살표 | 완료 | 30장 |
| 회원 암호화 저장, 햇빛 그래프 통합, 디자인 자문 반영 | 완료 | 31장 |
| 정회원 계정 서버 | 미완 | 웹 게시 위치 결정 필요 |
| 묶음 이름 변경, 선택의 순위, 무작위 추천, 달력, 좌석 분석 | 완료 | 32장 |
| 좌석 분석의 실치수, 표준 체형 더미, 색 구분 | 완료 | 33장 |
| 좌석 색을 다른 객체와 구분 | 완료 | 34장 |
| 세운·젖힌 등받이, 가장 좁은 좌석 비교, 두 그림의 정투상 정렬 | 완료 | 35장 |
| 옆모습과 평면에 같은 의자 1개, 의자 윤곽선과 연한 색 | 완료 | 36장 |
| 디자인 승인 검토, 무릎 여유 옆모습과 비교 막대로 재구성 | 완료 | 37장 |
| 팔걸이 높이 실측 | 미완 | |
| KTX 1세대 실제 젖힘 각도 확인 | 미완 | |
| 특실 좌석 치수와 좌면 높이 자료 조사 | 미완 | |
| 열차 시각표 연동 | 미완 | 인증키와 중계 서버 필요 |
| 결정 필요 사항 갱신 | 완료 | 38장, 이후는 개발일지 2편 |
| 첫 공개판 기능, 웹 게시 위치, 인증키 | 미완 | SHIN 결정 필요 |
| 휴대폰 화면 채택 여부 | 미완 | SHIN 결정 필요 |
| 사이트 게시 | 미완 | SHIN 로그인 필요 |
- 개요.
- 개발 배경과 적용 범위 (v1.0.0.0)
- 수행 지시 사항 (v1.0.0.0)
- 좌석 배치 자료 구축 (v1.0.0.0)
- 좌석 평가 모델 (v1.0.0.0)
- 일사 방향 산정 (v1.0.0.0)
- 도구 구현 결과 (v1.0.0.0)
- v1.0.0.0 결과 정리
- 논문체 기준 (v1.0.0.1)
- 논문체검사.py 작성 (v1.0.0.1)
- 개발일지 재작성 (v1.0.0.1)
- 도구 화면 문구 수정 (v1.0.0.1)
- 문서 검사 결과 (v1.0.0.1)
- v1.0.0.1 결과 정리
- 이름 변경 경위 (v1.0.0.2)
- 이름과 폴더 변경 (v1.0.0.2)
- 기능 구성안 (v1.0.0.2)
- 배포 형태 검토 (v1.0.0.2)
- 판 단위 작업 절차 (v1.0.0.2)
- 단계별 작업과 일정 (v1.0.0.2)
- 작업 범위 구성 (v1.0.0.2)
- 기존 서비스 조사와 차별성 검토 (v1.0.0.2)
- v1.0.0.2 결과 정리
- 빈자리 알림 기능 검토 (v1.0.0.3)
- 화면 초안 (v1.0.0.3)
- 기획 검토와 휴대폰 화면 구현 (v1.0.0.4)
- 참고문헌 팝업 (v1.0.0.5)
- 화면 폭 대응과 즐겨찾기 (v1.0.0.6)
- 좌석 조건 확장과 분류 (v1.0.0.7)
- 승강장 자료와 진행 방향 표시 (v1.0.0.8)
- 회원 저장과 햇빛 분석 보완 (v1.0.0.9)
- 선택의 순위와 좌석 분석 (v1.0.1.0)
- 좌석 분석의 실치수 적용 (v1.0.1.1)
- 좌석 색의 구분 (v1.0.1.2)
- 등받이 각도와 가장 좁은 좌석 (v1.0.1.3)
- 같은 의자의 옆모습과 평면 (v1.0.1.4)
- 좌석 분석의 재구성 (v1.0.1.5)
- 열차 시각표 자료 조사
- 결정 필요 사항
- 결론
- ☑한국철도공사가 제공하지 않는 기능의 제공을 주 목표로 함 (좌석 선택 화면에 없는 조건 6종 적용)
- ☑HTML 로 작성 (외부 라이브러리 없는 단일 파일 HTML. 배치 자료와 선로 좌표 내장)
- ☑개발일지 작성 (본 문서. 목적·계획·체크리스트 머리글 포함)
- ☑개발일지 작성과 동시에 genealogypost.com 게시 (게시본 zip 을 작성하여 PC 의 _gp_upload 폴더에 저장)
- ☑게시판 재편 중이므로 게시 대기 (게시하지 않음. 게시판 분류(gp:category)는 재편 후 확정)
- ☑도구 이름 GenealogyRail, 첫 판 범위는 배치도 선별과 일사 계산 (v1.0.0.0 범위로 확정)
개요
본 편은 열차 좌석 추천 도구의 개발 경과 중 본편이 완성되기 전까지의 기록이다. 판별로 작성하던 개발일지 1~3편을 1편으로 통합하였으며, 본편이 완성될 때까지 이후 판의 경과를 본 편에 누적한다.
도구의 이름은 v1.0.0.1 까지 GenealogyRail 이었으며, 2026년 10월 2일 OptRail 로 변경되었다. 2~14장은 이름 변경 이전의 기록이므로 당시의 이름인 GenealogyRail 을 그대로 사용하였다. 이름 변경의 경위와 변경 범위는 15장과 16장에 기술하였다.
장 구성은 판 단위로 나누었으며, 각 장의 제목에 해당 판 번호를 표기하였다. 판별 장의 범위를 Table 1 에 나타내었다. 표의 번호는 통합본 기준으로 다시 매겼으며, 그림의 번호는 통합 전 원고의 번호를 유지하였다.
Table 1. 판별 장 구성
| 판 | 일자 | 도구 이름 | 장 | 주요 내용 |
|---|---|---|---|---|
| v1.0.0.0 | 2026.10.1. | GenealogyRail | 2~8장 | 좌석 배치 자료, 좌석 평가 모델, 선로 좌표 기반 일사 계산, 단일 HTML 도구 |
| v1.0.0.1 | 2026.10.1. | GenealogyRail | 9~14장 | 개발일지와 화면 문구의 논문체 전환, 논문체검사.py 작성 |
| v1.0.0.2 | 2026.10.3. | OptRail | 15~23장 | 이름과 폴더 변경, 기능 구성안, 배포 형태, 작업 절차와 일정, 기존 서비스 조사 |
| v1.0.0.3 | 2026.10.3. | OptRail | 24~25장 | 빈자리 알림 검토, 휴대폰 화면 초안과 디자인 자문 |
| v1.0.0.4 | 2026.10.3. | OptRail | 26장 | 결정 필요 사항의 처리 순서 검토, 휴대폰 화면 구현 |
| v1.0.0.5 | 2026.10.3. | OptRail | 27장 | 설정 화면의 참고문헌 팝업(IEEE 양식) |
| v1.0.0.6 | 2026.10.3. | OptRail | 28장 | 화면 폭 대응, 실행 순서 표시, 화면 문구 정비, 즐겨찾기 |
| v1.0.0.7 | 2026.10.3. | OptRail | 29장 | 좌석 조건 확장과 4개 묶음 분류, 빠른 선택 |
| v1.0.0.8 | 2026.10.3. | OptRail | 30장 | 승강장 자료 조사, 에스컬레이터 앞 호차, 진행 방향 화살표 |
| v1.0.0.9 | 2026.10.3. | OptRail | 31장 | 회원 저장(암호화), 햇빛 그래프 통합과 구간 요약 |
| v1.0.1.0 | 2026.10.3. | OptRail | 32장 | 조건 묶음 이름 변경, 선택의 순위, 무작위 추천, 달력, 좌석 분석 |
| v1.0.1.1 | 2026.10.3. | OptRail | 33장 | 좌석 분석의 실치수 좌석, 표준 체형 더미, 색 구분 |
| v1.0.1.2 | 2026.10.3. | OptRail | 34장 | 좌석 분석의 좌석 색 변경 |
| v1.0.1.3 | 2026.10.3. | OptRail | 35장 | 세운 등받이 기본 표시, 젖힌 등받이 점선, 가장 좁은 좌석 비교 |
| v1.0.1.4 | 2026.10.3. | OptRail | 36장 | 같은 의자의 옆모습과 평면, 의자 윤곽선과 색 |
| v1.0.1.5 | 2026.10.3. | OptRail | 37장 | 무릎 여유 옆모습과 비교 막대로 좌석 분석 재구성 |
개발 배경과 적용 범위 (v1.0.0.0)
2.1 개발 배경
요청된 기능은 8종이다. 시간표 조회, 화장실 없는 칸과 화장실에서 먼 좌석 선별, 좌석 전후 공간이 넓은 좌석 선별, 환승에 유리한 칸 선별, 순방향·역방향 선별, 4인 동반석 선택과 회피, 창측 좌석 선별, 일사가 적은 쪽 좌석 선별이다.
한국철도공사는 열차 운행 정보 API 는 공개하고 있으나 좌석 현황 API 는 공개하지 않고 있다. 따라서 본 도구는 빈 좌석을 조회하지 않는다. 조건에 부합하는 좌석 번호를 점수순으로 제시하고, 사용자가 기존 열차 예매 앱의 좌석 선택 화면에서 해당 번호를 순서대로 확인하는 방식으로 설계하였다.
2.2 적용 범위
본 판에는 8종 중 6종을 적용하였다. 기능 1 은 공공데이터포털 인증키가 필요하고, 기능 4 는 역별 계단과 출구 위치에 관한 공개 자료가 없어 차기 판의 과제로 설정하였다. 적용 범위를 Table 2 에 나타내었다.
Table 2. 기능별 적용 범위
| 기능 | v1.0.0.0 | 근거 자료 |
|---|---|---|
| 1 시간표 조회 | 차기 판 | 공공데이터포털 한국철도공사 열차운행정보 API |
| 2 화장실 없는 칸, 먼 좌석 | 적용 | 차종별 배치 자료 |
| 3 좌석 전후 공간 | 적용 | 좌석 간격(mm), 칸 최전열 여부 |
| 4 환승 칸 | 차기 판 | 공개 자료 없음 |
| 5 순방향·역방향 | 적용 | 회전식 여부, KTX 1세대 고정식 좌석 구조 |
| 6 4인 동반석 | 적용 | 배치 자료 |
| 7 창측 | 적용 | 열 기호 |
| 8 일사가 적은 쪽 | 적용 | OSM 선로 좌표, 태양 위치식, 운량 예보 |

수행 지시 사항 (v1.0.0.0)
본 판에서 수행한 지시 사항과 반영 내용을 Table 3 에 나타내었다.
Table 3. 지시 사항과 반영 내용
| 지시 사항 | 반영 내용 |
|---|---|
| 한국철도공사가 제공하지 않는 기능의 제공을 주 목표로 함 | 좌석 선택 화면에 없는 조건 6종 적용 |
| HTML 로 작성 | 외부 라이브러리 없는 단일 파일 HTML. 배치 자료와 선로 좌표 내장 |
| 개발일지 작성 | 본 문서. 목적·계획·체크리스트 머리글 포함 |
| 개발일지 작성과 동시에 genealogypost.com 게시 | 게시본 zip 을 작성하여 PC 의 _gp_upload 폴더에 저장 |
| 게시판 재편 중이므로 게시 대기 | 게시하지 않음. 게시판 분류(gp:category)는 재편 후 확정 |
| 도구 이름 GenealogyRail, 첫 판 범위는 배치도 선별과 일사 계산 | v1.0.0.0 범위로 확정 |
좌석 배치 자료 구축 (v1.0.0.0)
4.1 자료 수집
대상 차량은 KTX 1세대, KTX-산천 A타입, KTX-산천 B타입, KTX-이음, KTX-청룡, ITX-새마을, ITX-마음의 7개 형식이다. 한국철도공사 공식 좌석배치도 페이지[34]는 스크립트로 화면을 생성하는 구조이므로 웹 수집 도구로 본문을 추출할 수 없었다.
따라서 한국철도공사 홍보센터의 차량 소개 자료[16]~[21]와 열차 예매 안내 블로그 자료[1]~[8]를 수집하였다. 위키백과[9]~[15]와 기사·게시글[22]~[33]도 함께 수집하였다. 수집한 출처는 34건이다. 각 값에는 Table 4 의 근거 등급을 부여하였다.
Table 4. 근거 등급의 정의
| 등급 | 정의 |
|---|---|
| 공식 | 한국철도공사 운영 사이트 원문의 수치. 총 좌석 수에 한하여 부여 |
| 2차 | 위키백과, 안내 자료, 기사 |
| 추정 | 2차자료 여러 건을 조합한 값, 또는 요약 과정에서 오류 가능성이 있는 값 |
| 모름 | 근거를 확인하지 못한 값 |
4.2 좌석 수 검증
행 수와 열 수의 곱에서 결번을 제외한 좌석 수를 공식 총 좌석 수와 비교하였다. 결과를 Table 5 에 나타내었다. KTX-산천 B타입과 ITX-마음은 일치하였고, 나머지 형식에서는 1~16석의 차이가 나타났다.
Table 5. 산출 좌석 수와 공식 총 좌석 수의 비교
| 형식 | 칸 수 | 산출 좌석 수 | 공식 총 좌석 수 | 차이 |
|---|---|---|---|---|
| KTX 1세대 | 18 | 959 | 955 | +4 |
| KTX-산천 A | 8 | 375 | 379 | −4 |
| KTX-산천 B | 8 | 410 | 410 | 0 |
| KTX-이음 | 6 | 382 | 381 (위키백과) | +1 |
| KTX-청룡 | 8 | 524 | 515 | +9 |
| ITX-새마을 | 6 | 392 | 376 | +16 |
| ITX-마음 | 4 | 264 | 264 | 0 |
이러한 차이는 휠체어석 등 결번 위치가 모두 반영되지 않은 데 기인한다. 차이가 가장 큰 형식은 ITX-새마을(16석)이다. 결번 위치는 공식 좌석배치도와 대조하여 확정할 필요가 있다.
4.3 미확인 항목
수집 자료로 확인하지 못한 항목은 다음의 4가지이다.
- 편성 내 1호차의 위치(선두 또는 후미)
- 칸 내 화장실의 위치(1번 행 쪽 끝 또는 마지막 행 쪽 끝). KTX 1세대는 추정값, 그 외 형식은 미상
- KTX 1세대 고정식 좌석의 순방향·역방향 경계 행 번호
- A열의 진행 방향 기준 좌우 위치. 2차자료 2건[24], [35]에는 상행에서 C·D열이 좌측으로 기술되어 있다.
본 도구는 위 항목을 화면 하단의 「미확인 사항과 가정」 영역에 표시하고, 추천 좌석마다 적용된 근거 중 가장 낮은 등급을 표시한다. A열의 좌우 위치는 사용자가 변경할 수 있는 입력 항목으로 구성하였다.
좌석 평가 모델 (v1.0.0.0)
5.1 창측 좌우 판정
일반실 2+2 배열의 열 순서는 A·B, 통로, C·D 이며 창측 열은 A와 D이다. 특실 1+2 배열의 열 순서는 A, 통로, B·C 이며 창측 열은 A와 C이다.
회전식 좌석은 좌석 방향만 전환되므로 A열의 차체 내 위치는 변하지 않는다. 따라서 하행에서 A열이 좌측이면 상행에서는 우측이 된다. 이 관계를 이용하여 좌석별 진행 방향 기준 좌우를 판정하였다.
5.2 좌석 방향
KTX-산천, KTX-이음, KTX-청룡은 전 좌석 회전식이며 종착역에서 진행 방향으로 전환된다[11], [15], [28]. KTX 1세대 일반실은 고정식이며, 칸 중앙의 동반석을 기준으로 전반부와 후반부 좌석이 서로 마주 보는 배치이다[1].
각 칸의 1번 행은 서울 쪽 끝에 위치한다고 기술되어 있다[1]. 따라서 1번 행부터 중앙 행까지는 서울 반대 방향을 향하며 하행에서 순방향이 된다. 중앙 행 번호는 칸 행 수의 1/2(소수점 이하 버림)로 설정하였으며, 14행 칸과 15행 칸 모두 7행이다.

5.3 화장실 거리
KTX 1세대의 화장실 설치 칸은 1·2·4·6·8·11·13·15·17·18호차이다. 이 내용은 영문 위키백과[9]와 예매 안내 블로그 자료[1]의 기술이 일치하였다. 화장실은 14행 56석 칸에 설치되어 있고 15행 60석 칸에는 설치되어 있지 않다.
칸 내 화장실 위치가 미상이므로 양 끝을 모두 화장실 위치로 가정하였다. 1호차의 위치도 미상이므로 두 가지 편성 순서를 모두 계산하고 최솟값을 채택하였다. 따라서 실제 거리는 산출값 이상이다.
점수는 최근접 화장실까지의 행 수를 10행으로 나눈 값이며 상한은 1이다. 초기 설정의 기준 행 수는 15행이었으나, 최원거리 좌석의 화장실까지 거리가 9행이므로 점수가 0.6 이하에 분포하였다. 칸의 행 수가 12~20행인 점을 고려하여 기준을 10행으로 변경하였다.
5.4 좌석 전후 공간
좌석 간격을 기준으로 기본 점수를 산정하였다. KTX 1세대 일반실의 930mm 를 0점, 특실의 1,120mm 를 1점으로 설정하고 그 사이는 선형 보간하였다. 가감점 기준은 다음과 같다.
- 회전식 좌석 칸의 진행 방향 최전열 +0.25점. 전방이 격벽인 점에 근거한 추정값
- KTX 1세대 동반석 −0.4점. 대면 배치로 전후 공간을 공유함
- KTX 1세대 5호차 1A +0.3점. 인접 좌석이 없는 1인석[1]
5.5 종합 점수
등급, 창측, 좌석 방향, 동반석, 화장실 없는 칸은 선별 조건으로 적용하였다. 선별 조건을 만족하지 않는 좌석은 순위에서 제외한다. 화장실 거리(가중치 1.0), 좌석 전후 공간(가중치 0.6), 일사 방향(가중치 1.0)은 가중 평균하여 100점 만점으로 환산하였다. 창틀 위치 가능 행의 좌석에는 0.3점을 감점하였다.

일사 방향 산정 (v1.0.0.0)
6.1 선로 좌표
선로 좌표는 초기에 Overpass API 로 수집하고자 하였으나 작업 환경에서 연결이 반복 종료되었다. Geofabrik 한국 추출 자료도 같은 원인으로 수신하지 못하였다. OpenStreetMap 편집 API[37]는 정상적으로 응답하였다.
천안아산역 주변 0.03도 범위를 편집 API 로 조회한 결과, 해당 범위를 통과하는 KTX 경로 관계 13건이 확인되었다. 이 중 3건의 전체 좌표를 수집하였으며 그 결과를 Table 6 에 나타내었다.
Table 6. 수집한 선로 좌표
| 노선 | OSM 관계 번호 | 원 좌표 수 | 간략화 좌표 수 | 연장 | 터널 연장 |
|---|---|---|---|---|---|
| 경부선 KTX 서울·부산 | 11214334 | 1,761 | 436 | 418.3km | 93.6km |
| 호남선 KTX 용산·목포 | 11272646 | 1,828 | 357 | 371.2km | 58.8km |
| 전라선 KTX 용산·여수엑스포 | 11272647 | 2,517 | 477 | 391.9km | 83.0km |
좌표는 Douglas-Peucker 알고리즘으로 허용오차 40m 를 적용하여 간략화하였다. 터널 여부가 바뀌는 좌표는 간략화 대상에서 제외하여 터널 구간 경계를 유지하였다. 3개 노선의 좌표 자료 크기는 31KB 이다.
경로 관계에 포함된 정차역은 경부선의 경우 4개소에 불과하였다. 따라서 24개 역의 좌표를 Nominatim[38]으로 별도 조회하여 선로에 투영하였다. 선로와의 이격 거리는 광명역 1.2km, 천안아산역 1.9km, 경부선 오송역 3.1km 로 나타났다. 광명역의 경우 동일 명칭의 고속도로 나들목이 우선 검색되었다.
이 이격 거리는 역간 시각 배분에서 약 1분의 차이에 해당하며 좌우 판정에는 영향이 없으므로 보정하지 않았다. 강릉선 경로 관계에는 서울에서 50km 지점까지의 좌표만 포함되어 있었고, 중앙선 KTX-이음 경로 관계는 확인되지 않았다.
6.2 태양 위치 계산
태양의 방위각과 고도는 NOAA 일반식으로 적위와 균시차를 구하여 계산하였다. 서울(북위 37.57도)에서의 검증 결과를 Table 7 에 나타내었다. 하지와 동지의 계산 고도는 이론 남중고도와 0.1도 이내로 일치하였다.
Table 7. 태양 위치 계산 검증
| 시각 | 계산 고도 | 이론 남중고도 | 계산 방위각 |
|---|---|---|---|
| 2026.6.21. 12:30 | 75.9도 | 75.9도 | 176.9도 |
| 2026.12.22. 12:30 | 29.0도 | 29.0도 | 179.9도 |
| 2026.9.27. 07:00 | 6.6도 | 해당 없음 | 96.5도 |
6.3 좌우 일사 지수
선로를 좌표 간 구간으로 분할하고, 출발 시각과 도착 시각 사이의 운행 시간을 거리에 비례 배분하여 구간별 시각을 산정하였다. 구간별 진행 방위각과 태양 방위각의 차이각으로 일사가 드는 쪽(좌측 또는 우측)을 판정하였다.
구간별 일사 지수는 식 (1)로 정의하였다. 태양 방위가 진행 방향과 직교에 가까울수록, 태양 고도가 낮을수록 측창으로 입사하는 직달광이 증가하는 관계를 반영한 식이다. 터널 구간과 일몰 후 구간은 제외하였다.
I = |sin(θ)| × cos(h) × t × (1 − 0.75 × C) (1)
θ 진행 방위각과 태양 방위각의 차이각
h 태양 고도
t 구간 운행 시간(분)
C 운량(0~1). 운량 미적용 시 0
2026년 10월 1일 기준 계산 결과를 Table 8 에 나타내었다. 남행 열차의 경우 오전에는 동측인 좌측, 오후에는 서측인 우측의 일사 지수가 크게 나타났다. 이는 태양의 일주 운동 방향에 부합하는 결과이다.
Table 8. 구간별 좌우 일사 지수 (2026.10.1.)
| 구간 | 시각 | 우측 | 좌측 | 일사가 적은 쪽 |
|---|---|---|---|---|
| 서울에서 부산 | 08:00~10:40 | 11.2 | 44.3 | 우측 |
| 부산에서 서울 | 08:00~10:40 | 39.0 | 9.3 | 좌측 |
| 서울에서 부산 | 15:00~17:40 | 88.0 | 0.8 | 좌측 |
| 용산에서 목포 | 15:00~17:30 | 89.8 | 3.4 | 좌측 |
| 용산에서 여수엑스포 | 08:00~11:00 | 5.9 | 65.9 | 우측 |


6.4 운량 보정
운량은 Open-Meteo 예보 API[36]에서 수신한다. 이 API 는 인증키가 필요하지 않으며 브라우저에서 직접 호출할 수 있다. 선로의 출발부, 중앙부, 도착부 3개 지점의 시간별 운량을 1회 호출로 수신하며, 예보 기간은 16일이다.
작업 환경에서의 첫 호출에서는 HTTP 429(요청 과다) 응답이 반환되었으며, 10초 후 재호출에서 정상 수신되었다. 공용 외부 IP 주소를 사용하는 작업 환경의 특성에 따른 현상으로 판단된다. 수신에 실패한 경우에는 맑음(운량 0)으로 계산하고 그 사실을 화면에 표시한다.
도구 구현 결과 (v1.0.0.0)
7.1 도구 구성
- 단일 파일 83KB. 배치 자료 17KB, 선로 좌표 31KB, 스크립트 포함
- 외부 라이브러리 미사용. 네트워크 접속은 운량 수신 시에 한함
- 밝은 화면과 어두운 화면 지원
- 화면 폭 390px 에서 가로 스크롤 미발생
7.2 화면 폭 대응 수정
초기 구현에서는 화면 폭 390px 에서 문서 폭이 1,990px 로 확장되었다. 편성 배치도의 가로 스크롤 영역이 그리드 열의 최소 폭을 증가시킨 것이 원인이었다. 그리드 자식 요소에 min-width 0 을 지정하고 칸 배치를 줄바꿈 방식으로 변경하여 문서 폭이 390px 로 유지되도록 수정하였다.
7.3 폴더 구성
GenealogyRail_v1.0.0.0/
GenealogyRail_v1.0.0.0.html 도구
data/ trains.json routes.json stations.json seat_layouts.json
image/ 개발일지 그림 5매
html/devlog/ 개발일지
html/posting/ genealogypost 게시본 zip
develop/ build_trains.py build_routes.py build_html.py build_devlog.py src/ devlog/
문체검사.py 머리글.py
v1.0.0.0 결과 정리
본 판에서는 차종별 좌석 배치 자료와 태양 위치 계산을 이용하여 좌석 번호를 추천하는 도구를 개발하였다. 적용한 조건은 기존 열차 예매 앱의 좌석 선택 화면에서 제공하지 않는 6종이다. 결과는 다음과 같다.
- 7개 형식의 배치 자료를 34건의 출처로 구축하였으며, 산출 좌석 수는 공식 총 좌석 수 대비 0~16석의 차이가 나타났다.
- 태양 고도 계산값은 서울의 하지·동지 이론 남중고도와 0.1도 이내로 일치하였다.
- 경부선 하행의 경우 오전에는 우측, 오후에는 좌측의 일사 지수가 낮게 나타났다.
향후 과제는 다음과 같다.
- A열 좌우 위치의 실측 확인과 기본값 수정
- 한국철도공사 공식 좌석배치도와의 대조(행 수, 결번, 화장실 위치)
- 공공데이터포털 열차운행정보 API 연동(기능 1)과 중간 정차 시간 반영
- 강릉선, 중앙선, 동해선 선로 좌표 확보
- 주요 역의 계단 위치 조사(기능 4)
논문체 기준 (v1.0.0.1)
「기존 논문에서 사용하는 표현으로 문장을 구성하라」는 지시에 따라 서술문의 종결 표현과 어휘를 Table 9 과 같이 제한하였다.
Table 9. 논문체 기준
| 구분 | 허용 표현 | 불허 표현 예 | 대체 표현 |
|---|---|---|---|
| 과거 서술 | ~하였다, ~되었다, ~없었다 | 넣었다, 뺐다 | 적용하였다, 제외하였다 |
| 지정·존재 | ~이다, ~있다, ~없다, ~같다 | ~가지다 | ~가지이다 |
| 결과 | ~나타났다, ~나타내었다, ~나타낸다 | 나왔다 | 나타났다 |
| 정의·방법 | ~한다, ~된다, ~않는다 | 보여 준다 | 표시된다 |
| 평가 | ~필요하다, ~가능하다, ~동일하다, ~상이하다, ~유사하다, ~적합하다 | ~다르다, ~맞다 | ~상이하다, ~일치하였다 |
| 어휘 | 수집, 산출, 설정, 적용, 제외, 검증 | 모았다, 받았다, 잡았다, 쟀다, 후기 | 수집하였다, 설정하였다, 측정하였다, 이용자 게시글 |
| 표기 | Table 2, Fig. 1, 식 (1), 인용 [1] | 그림 1, 번호 없는 출처 언급 | Fig. 1, 인용 번호 |
논문체검사.py 작성 (v1.0.0.1)
검사기는 p, li, figcaption 요소의 서술문을 추출하여 두 항목을 검사한다. 첫째는 「다.」로 끝나는 문장의 종결 표현이 허용 목록에 포함되는지 여부이고, 둘째는 구어 표현 목록의 어휘가 포함되는지 여부이다. 표, 코드, 인용, 머리글 영역은 검사에서 제외한다.
v1.0.0.0 문서의 측정 결과를 Table 10 에 나타내었다.
Table 10. v1.0.0.0 문서의 논문체 검사 결과
| 문서 | 종결 부적합 | 구어 표현 |
|---|---|---|
| 개발일지 1편 | 71 | 25 |
| 게시본 1편 | 72 | 26 |
| 도구 화면(정적 문구) | 3 | 0 |
검사기의 최초 허용 목록에는 「~었다」가 포함되지 않아 「없었다」「되었다」가 부적합으로 검출되었다. 허용 목록에 「~었다」와 「~않다」를 추가하였으며, 넣었다, 만들었다 등 「~었다」 형태의 구어 표현은 구어 표현 목록으로 검출하도록 설정하였다.
개발일지 재작성 (v1.0.0.1)
당시의 개발일지 1편은 학위논문의 장 구성에 따라 7장 체제로 재작성하였다. 장 구성은 개요, 수행 지시 사항, 좌석 배치 자료 구축, 좌석 평가 모델, 일사 방향 산정, 구현 결과, 결론이다. 주요 변경 사항은 다음과 같다.
- 출처 언급을 인용 번호 [1]~[38] 로 변경하고 글 끝에 참고문헌 목록 추가
- 표에 번호와 제목(Table 2~7) 부여, 그림 번호를 Fig. 1~5 로 변경
- 일사 지수 산정식을 식 (1)로 정의하고 변수 설명 추가
- 「그늘 쪽」을 「일사가 적은 쪽」, 「오른쪽·왼쪽」을 「우측·좌측」, 「발 공간」을 「좌석 전후 공간」으로 용어 변경
- 결론 장에 결과 3항목과 향후 과제 5항목 정리
도구 화면 문구 수정 (v1.0.0.1)
도구 화면의 안내문, 판정 근거, 미확인 사항 목록 등의 문구를 동일한 기준으로 수정하였다. v1.0.0.0 대비 변경된 한글 문자열은 92개이다. 수정 예를 Table 11 에 나타내었다.
Table 11. 화면 문구 수정 예
| v1.0.0.0 | v1.0.0.1 |
|---|---|
| 그늘 쪽 창 | 일사 방향 |
| 확실하지 않은 것 | 미확인 사항과 가정 |
| 양 끝을 모두 화장실로 보고 거리를 쟀다. | 양 끝을 모두 화장실 위치로 가정하여 거리를 산출하였다. |
| 회전 좌석이라 진행 방향으로 돌려 둠 | 회전식 좌석. 진행 방향으로 전환 |
| 칸 맨 앞줄(칸막이 앞, 추정) | 칸 최전열(전방 격벽, 추정) |
| 조건에 잘 맞음, 보통, 조건 밖 | 상위 15%, 조건 충족, 조건 미충족 |
| 창가·통로, 피함·고름 | 창측·통로측, 제외·선택 |
| 발 공간, 햇빛, 그늘 쪽 | 좌석 전후 공간, 일사 방향, 일사가 적은 쪽 |
| 좌석 고르기 | 좌석 추천 |

문서 검사 결과 (v1.0.0.1)
도구 화면의 문구 중 상당수는 실행 시점에 스크립트로 생성된다. 따라서 브라우저에서 도구를 실행한 후 생성된 문서도 함께 검사하였다. 검사 결과를 Table 12 에 나타내었다.
Table 12. v1.0.0.1 검사 결과
| 문서 | 논문체검사 | 문체검사 | 머리글검사 |
|---|---|---|---|
| 개발일지 1·2편 | 0건 | 0건 | 통과 |
| 게시본 1·2편 | 0건 | 0건 | 통과 |
| 도구 파일 | 0건 | 0건 | 해당 없음 |
| 도구 실행 후 문서 | 0건 | 0건 | 해당 없음 |
v1.0.0.1 결과 정리
본 판에서는 개발일지, 도구 화면 문구, 게시본의 문장을 논문체로 수정하였으며, 종결 표현과 구어 표현을 검사하는 논문체검사.py 를 추가하였다. 개발일지 1편의 부적합 건수는 종결 71건, 구어 25건에서 모두 0건으로 감소하였다. 논문체검사.py 는 현재 GenealogyRail 폴더에만 적용하였으며, Genealogy 시리즈 공용 검사기로의 확대 적용 여부는 결정이 필요하다.
이름 변경 경위 (v1.0.0.2)
v1.0.0.1 까지의 도구는 좌석 선별 기능 6종을 단일 HTML 파일로 구현하였다. 이후 프로그램 이름이 GenealogyRail 에서 OptRail 로 변경되었고, 판 폴더의 위치가 Documents 에서 DocumentsOptRail 로 변경되었다.
또한 핵심기능과 주요기능의 후보를 정리하는 과정에서 배포 형태를 PC 설치 파일 대신 웹 서비스로 하는 방안이 제시되었다. 기능 후보, 배포 형태, 외부 자료 확보 순서가 서로 연결되어 있으므로, 본 판에서는 새 기능을 구현하지 않고 이후 판의 작업 절차를 먼저 정리하였다.
이름과 폴더 변경 (v1.0.0.2)
이름 변경 방식은 CatchCatch 의 이름 변경 사례를 준용하였다. 기존 판의 폴더와 개발일지는 옛 이름을 유지하고, v1.0.0.2 부터 새 이름을 적용하였다. 변경 내용을 Table 13 에 나타내었다.
Table 13. 이름과 폴더 변경 내용
| 항목 | v1.0.0.1 까지 | v1.0.0.2 부터 |
|---|---|---|
| 프로그램 이름 | GenealogyRail | OptRail |
| 판 폴더 | DocumentsGenealogyRail_v1.0.0.x (이후 DocumentsOptRail 로 이동) | DocumentsOptRailOptRail_v1.0.0.x |
| 도구 파일 | GenealogyRail_v1.0.0.1.html | OptRail_v1.0.0.2.html |
| 게시본 슬러그 | genealogyrail-devlog-01-v1000 | optrail-devlog-03-v1002 |
| 이름 정의 위치 | 스크립트 11개소에 직접 기재 | develop/name.py 의 상수 1개 |
이름이 다시 변경될 수 있으므로 생성 스크립트의 이름 기재 11개소를 develop/name.py 의 상수 NAME 하나로 통합하였다. 이름을 변경할 때는 해당 상수만 수정하면 도구 파일 이름, 화면 제목, 개발일지 머리글, 게시본 슬러그가 함께 변경된다. 옛 판의 개발일지는 원고 머리에 옛 이름을 지정하여 이름이 바뀌지 않도록 하였다.
기능 구성안 (v1.0.0.2)
기능은 두 종류로 구분하였다. 핵심기능은 기존 열차 예매 앱의 좌석 선택 화면에 대응 기능이 있으나 해당 조건으로 선별할 수 없는 기능이고, 주요기능은 기존 앱에 대응 기능이 없는 기능이다. 기능 이름에 해당하는 동작이 모두 구현된 경우만 지원으로 판정하였다.
Table 14. 핵심기능 후보 8종
| 번호 | 기능 | v1.0.0.2 지원 | 미지원 사유 |
|---|---|---|---|
| 1 | 일사 방향 좌석 선별 | X | 3개 노선에 한정, A열 좌우 위치 가정값 |
| 2 | 화장실 거리 선별 | X | 칸 내 화장실 위치 미확인 |
| 3 | 순방향·역방향 선별 | X | KTX 1세대 경계 행 추정값 |
| 4 | 4인 동반석 선택·회피 | X | 동반석 행 번호 추정값 |
| 5 | 좌석 전후 공간 선별 | X | 근거 자료가 KTX 1세대 5호차에 한정 |
| 6 | 창틀 위치 회피 | X | 출처 2건의 행 번호 상이 |
| 7 | 환승 유리 칸 선별 | X | 역별 계단 위치 자료 없음 |
| 8 | 시간표 연동 | X | 공공데이터포털 인증키 미발급 |
Table 15. 주요기능 후보 9종
| 번호 | 기능 | v1.0.0.2 지원 | 비고 |
|---|---|---|---|
| 1 | 운량 예보 반영 | O | 예보 기간 16일 |
| 2 | 구간별 일사 띠그래프 | O | 터널 구간 표시 포함 |
| 3 | 근거 등급 표시 | O | 공식, 2차, 추정, 모름 |
| 4 | 가정값 직접 변경 | X | A열 위치만 변경 가능 |
| 5 | 조망 방향 좌석 선별 | X | 해안선·하천 자료 필요 |
| 6 | 일출·일몰 좌석 선별 | X | 일사 계산 모듈 재사용 가능 |
| 7 | 소음 칸 회피 | X | 동력차 인접 칸, 연결부 인접 행 |
| 8 | 콘센트 위치 표시 | X | KTX 1세대 출처 1건 |
| 9 | 조건 저장·공유 | X | 조건을 주소 1줄로 저장 |
핵심기능 1~6 의 계산 기능은 v1.0.0.0 에서 구현되었으나 근거 자료가 추정값이므로 미지원으로 판정하였다. 공식 좌석배치도 대조와 A열 위치 실측이 완료되면 6종의 판정을 함께 변경할 수 있다.
배포 형태 검토 (v1.0.0.2)
도구는 외부 라이브러리가 없는 정적 HTML 파일(약 84KB)이며 모든 계산을 브라우저에서 수행한다. 좌석 선택은 주로 휴대폰 예매 앱에서 이루어지므로, 같은 휴대폰에서 웹 주소로 도구를 여는 방식이 사용 순서에 부합한다. 이에 배포 형태를 웹 서비스와 오프라인 HTML 파일의 병행으로 제안하였다. 검토 항목을 Table 16 에 나타내었다.
Table 16. 웹 서비스 전환 검토 항목
| 항목 | 내용 | 대응 |
|---|---|---|
| 시간표 API 인증키 | 브라우저 코드에 포함하면 외부에 공개됨 | 서버에 중계 주소를 두고 키는 서버에 보관 |
| 게시 위치 | 사이트 하위 경로 또는 별도 하위 도메인 | SHIN 결정 후 서버 Claude 가 정적 경로 생성 |
| 본편 다운로드 단추 | 본편 규칙은 내려받기 표를 전제로 함 | 「바로 실행」 링크와 오프라인 HTML 1건으로 변경 |
| 서버 부하 | 계산은 브라우저에서 수행되므로 서버는 파일만 전송 | 시간표 중계 추가 시 요청 수 제한 설정 |
| 운량 예보 | Open-Meteo 는 브라우저 직접 호출 가능 | 변경 없음 |
| 출처 표기 | 선로 좌표는 OpenStreetMap 자료(ODbL) | 화면 하단 표기 유지 |
판 단위 작업 절차 (v1.0.0.2)
각 판은 다음 9단계로 진행한다. 이 절차는 v1.0.0.0~v1.0.0.2 에서 수행한 순서를 정리한 것이며, 판마다 반복한다.
- 지시 접수. SHIN 의 지시를 판의 체크리스트 항목으로 기록한다.
- 판 폴더 생성. DocumentsOptRail 아래에 새 판 폴더를 만들고 이전 판의 자료와 스크립트를 상속한다.
- 구현. develop 폴더의 원본(src, 생성 스크립트)을 수정하고 도구 파일을 다시 생성한다.
- 동작 검증. 브라우저 실행 화면, 휴대폰 폭 390px 화면, 실행 오류 유무를 확인한다.
- 개발일지 작성. develop/devlog 의 원고에 목적·계획·체크리스트와 본문을 작성한다.
- 문서 검사. 문체검사, 논문체검사, 머리글검사를 수행하여 검출 0건을 확인한다.
- PC 배치. 판 폴더 전체와 게시본 zip 을 PC 에 저장한다. 게시본 사본은 _gp_upload 폴더에 저장한다.
- 사이트 게시. genealogypost.com 의 Rail 개발일지 게시판에 판 순서대로 게시하고, 공개 지시가 있으면 공개로 전환한다.
- 원자료 갱신. 프로젝트 문서 pjt12 에 판별 수행 내용과 남은 항목을 기록한다.
단계별 작업과 일정 (v1.0.0.2)
이후 작업을 12단계로 구분하였다. 단계별 판, 작업 내용, 선행 단계, 담당, 완료 기준을 Table 17 에 나타내었고, 일정을 Fig. 7 의 간트차트로 나타내었다. 일정은 2026년 10월 3일 기준 계획값이며 실적에 따라 변경된다.
Table 17. 단계별 작업표
| 단계 | 판 | 작업 | 선행 | 담당 | 완료 기준 |
|---|---|---|---|---|---|
| S0 | v1.0.0.2 | 이름·폴더 정리 | 없음 | Claude | name.py 분리, OptRail_v1.0.0.2.html 생성 |
| S1 | v1.0.0.2 | 작업 절차 정의 | S0 | Claude | 본 개발일지 작성 |
| S2 | 해당 없음 | 개발일지 1~3편 게시 | S1 | Claude, SHIN(사이트 로그인) | Rail 개발일지 게시판에 3편 게시 |
| S3 | v1.0.0.3 | 기능 목록 확정 | S1 | SHIN | Table 14·14 에서 채택 항목 결정 |
| S4 | v1.0.0.3 | 근거 자료 검증 | S3 | Claude, SHIN(A열 실측) | 공식 좌석배치도 대조, 추정값 갱신 |
| S5 | v1.0.0.4 | 웹 서비스 전환 | S3 | 서버 Claude, Claude | 웹 주소에서 휴대폰 화면 동작 확인 |
| S6 | v1.0.0.4 | 화면 디자인 개선 | S5 | Claude, 외부 생성형 AI(디자인 자문) | 휴대폰 화면 목업 확정과 반영 |
| S7 | 해당 없음 | 본편 작성·게시 | S5 | Claude | Rail 본편 게시판에 본편 게시 |
| S8 | v1.0.1.0 | 시간표 연동 | S5 | SHIN(인증키), 서버 Claude, Claude | 열차 번호 선택 시 시각·차종 자동 입력 |
| S9 | v1.0.2.0 | 주요기능 추가 | S4 | Claude | S3 에서 채택한 주요기능 구현 |
| S10 | v1.0.3.0 | 노선 확장 | S4 | Claude | 강릉선, 중앙선, 동해선 선로 좌표 반영 |
| S11 | v1.1.0.0 | 환승 칸 조사·구현 | S10 | SHIN, Claude | 주요 역 계단 위치 자료와 핵심기능 7 구현 |
S4 와 S5 는 선행 단계가 S3 하나로 같으므로 병행하도록 배치하였다. S7 본편은 웹 주소가 있어야 「바로 실행」 링크를 작성할 수 있으므로 S5 이후에 배치하였다. S8 은 인증키 발급과 서버 중계 주소가 필요하여 S5 이후에 배치하였다.
작업 범위 구성 (v1.0.0.2)
작업 범위를 자료, 기능, 서비스, 문서, 검증의 5개 분야로 구분하여 Fig. 8 의 마인드맵으로 나타내었다. 각 분야의 하위 항목은 Table 17 의 단계와 대응한다.
기존 서비스 조사와 차별성 검토 (v1.0.0.2)
22.1 조사 방법
17장의 기능 후보 17종이 기존 서비스의 기능과 중복되는 경우 독창성과 차별성의 근거가 약화된다. 이에 2026년 10월 3일 기준으로 국내외 앱, 웹 서비스, 안내 글을 웹 검색으로 조사하였다. 조사 대상은 33건이며 분류별 건수를 Table 18 에 나타내었다.
개발일지 작성 규칙에 따라 본문에서는 기존 서비스의 제품명을 쓰지 않고 분류와 기호로 표기하였다. 서비스별 이름, 주소, 근거 문구는 판 폴더의 research/prior_art.json 에 수록하였다. 앱 화면을 직접 실행하여 확인하지는 않았으며, 근거는 공식 안내, 앱 소개문, 기사, 블로그이다.
Table 18. 조사 대상 분류
| 분류 | 건수 | 내용 |
|---|---|---|
| 국내 철도 예매 앱 | 5 | 기존 예매 앱 A·B·C 의 좌석배치도, 객실 보기, 좌석 변경, 자동 배정 기능 |
| 국내 좌석 안내 글 | 6 | 기사와 블로그의 좌석 선택 규칙(시간대별 일사 방향, 화장실 위치, 콘센트 좌석 번호 등) |
| 국내 도시철도 앱·공공데이터 | 2 | 지하철 빠른 환승·하차 칸 안내, 철도역 빠른 환승 정보 공공데이터 |
| 해외 버스·기차 일사 방향 도구 | 7 | 경로와 태양 위치로 그늘 쪽 좌석을 판정하는 앱·웹 |
| 해외 항공 일사·조망 도구 | 4 | 비행 경로의 태양 위치, 일출·일몰, 랜드마크 조망 쪽 판정 |
| 해외 항공 좌석 평가 | 2 | 좌석 간격, 창 위치, 화장실 근접 표시(1건은 서비스 종료) |
| 해외 철도 좌석 선호·안내 | 3 | 진행 방향, 테이블석, 조용한 칸, 전원 위치 선호 조건 |
| 해외 철도 조망 안내 | 2 | 고속철도에서 특정 산이 보이는 쪽 좌석 안내 |
| 기타 | 2 | 해외 철도 안내 사이트(KTX 좌석 정보 없음), 창과 좌석 위치 불일치에 관한 토론 |
| 합계 | 33 |
22.2 기능별 선행 사례
선행 사례는 세 등급으로 판정하였다. 「동일 기능」은 같은 동작을 제공하는 도구가 있는 경우이다. 「규칙·유사」는 같은 판단 규칙이 글로 공개되어 있거나 다른 교통수단용 도구가 있는 경우이다. 「발견 못 함」은 이번 조사에서 사례를 찾지 못한 경우이다. 판정 결과를 Table 19 에 나타내었다.
Table 19. 기능별 선행 사례 판정
| 구분 | 기능 | 판정 | 선행 사례 | 선행 사례에 없는 부분 |
|---|---|---|---|---|
| 핵심 1 | 일사 방향 좌석 선별 | 규칙·유사 | 해외 버스·기차·항공용 도구 11건, 국내 글의 시간대별 A·B열, C·D열 규칙 | 철도 선로 좌표와 열차 시각을 이용한 계산, 국내 차종의 좌석 번호 연결 |
| 핵심 2 | 화장실 거리 선별 | 규칙·유사 | 국내 글의 호차별 화장실 위치 규칙, 국내 예매 앱 A 의 객실 보기, 해외 철도 예매처의 시설 근접 선호 | 화장실 미설치 칸 선별, 좌석별 거리 산출 |
| 핵심 3 | 순방향·역방향 선별 | 동일 기능 | 국내 예매 앱 A 의 좌석배치도 방향 표시, 해외 철도 예매처의 방향 선호 조건 | 다른 조건과의 결합 |
| 핵심 4 | 4인 동반석 선택·회피 | 규칙·유사 | 국내 글의 동반석 회피 규칙, 해외 철도 예매처의 테이블석 선호 조건 | 국내 예매 화면의 선별 조건 |
| 핵심 5 | 좌석 전후 공간 선별 | 규칙·유사 | 국내 글의 차종별 좌석 간격 수치, 해외 항공 좌석 평가 서비스 | 철도 좌석 단위 선별 |
| 핵심 6 | 창틀 위치 회피 | 규칙·유사 | 국내 글의 창 사이 벽 좌석 안내, 해외 항공 좌석 평가 서비스의 창 위치 표시 | 철도 좌석의 자동 판별 |
| 핵심 7 | 환승 유리 칸 선별 | 규칙·유사 | 국내 지하철 앱의 빠른 환승 칸, 철도역 빠른 환승 정보 공공데이터 | KTX 역 기준 하차 호차 선별 |
| 핵심 8 | 시간표 연동 | 규칙·유사 | 국내 지하철 앱의 KTX 시간표 조회 | 시간표와 좌석 판정의 연동 |
| 주요 1 | 운량 예보 반영 | 동일 기능 | 해외 일사 방향 도구 2건 | 없음 |
| 주요 2 | 구간별 일사 띠그래프 | 동일 기능 | 해외 일사 방향 도구의 구간별 타임라인, 항공 도구의 경로 지도 | 없음 |
| 주요 3 | 근거 등급 표시 | 동일 기능 | 해외 일사 방향 도구의 신뢰도와 판정 이유 표시 | 자료 출처별 등급 구분 |
| 주요 4 | 가정값 직접 변경 | 발견 못 함 | 없음 | 해당 없음 |
| 주요 5 | 조망 방향 좌석 선별 | 동일 기능 | 해외 고속철도 조망 안내 2건, 항공 랜드마크 조망 도구 | 국내 노선의 바다·강 조망 계산 |
| 주요 6 | 일출·일몰 좌석 선별 | 동일 기능 | 해외 항공·버스 도구 2건 | 철도 적용 |
| 주요 7 | 소음 칸 회피 | 규칙·유사 | 국내 글의 조용한 칸 안내, 해외 철도 예매처의 조용한 칸 선호 | 동력차 인접 칸, 연결부 인접 행 판정 |
| 주요 8 | 콘센트 위치 표시 | 동일 기능 | 국내 예매 앱 C 의 좌석배치도 콘센트 표시(2차 근거), 국내 글의 콘센트 좌석 번호 | 없음 |
| 주요 9 | 조건 저장·공유 | 규칙·유사 | 해외 일사 방향 도구의 결과 공유 | 조건 전체를 주소로 저장 |
기능 17종 중 7종은 같은 기능을 제공하는 기존 도구가 확인되었고, 9종은 판단 규칙이 글로 공개되어 있거나 다른 교통수단용 도구가 확인되었다. 선행 사례를 찾지 못한 기능은 주요 4(가정값 직접 변경) 1종이다.
22.3 차별성 검토 결과
개별 판단 규칙은 대부분 기존 안내 글과 해외 도구에 공개되어 있으므로, 기능 단위의 독창성 주장은 근거가 부족한 것으로 판단된다. 특히 주요기능 1·2·3·5·6·8 은 해외 도구에 같은 기능이 있으므로 「독창적 기능」이라는 분류의 근거가 없다.
반면 다음 항목은 이번 조사에서 선행 사례가 확인되지 않았다. 따라서 OptRail 의 차별성은 개별 기능이 아니라 다음 항목으로 한정하여 기술할 필요가 있다.
- 국내 6개 차종 7개 형식의 좌석 번호 단위로 여러 조건을 결합한 추천
- 철도 선로 좌표와 열차 시각을 이용한 좌우 일사 계산
- 철도 좌석의 창틀 위치 자동 판별
- KTX 역 기준 하차·환승에 유리한 호차 선별
- 화장실 미설치 칸 선별과 좌석별 화장실 거리 산출
이에 따라 17장의 분류 기준을 「선행 사례 유무」로 재정의하는 방안을 제안한다. 선행 사례가 확인되지 않은 위 5개 항목을 핵심기능으로 하고, 선행 사례가 있는 기능은 주요기능으로 하되 독창성 주장 없이 제공 기능으로만 기술한다. 국내 예매 앱의 자동 배정 선호 옵션(창측, 방향 등)은 공식 원문을 확인하지 못하였으므로 앱 화면을 직접 확인한 뒤 판정을 보완해야 한다.
v1.0.0.2 결과 정리
본 판에서는 프로그램 이름을 OptRail 로 변경하고 이후 개발의 작업 절차를 정리하였다. 결과는 다음과 같다.
- 프로그램 이름을 생성 스크립트의 상수 1개로 통합하여, 이름 변경 시 수정 위치를 11개소에서 1개소로 줄였다.
- 핵심기능 후보 8종과 주요기능 후보 9종을 정리하였으며, v1.0.0.2 기준 지원 기능은 주요기능 3종이다.
- 기존 서비스 33건을 조사한 결과, 기능 17종 중 7종은 같은 기능을 제공하는 기존 도구가 있었고 9종은 판단 규칙 또는 다른 교통수단용 도구가 있었다.
- 선행 사례가 확인되지 않은 항목은 좌석 번호 단위의 조건 결합 추천, 선로 좌표 기반 일사 계산, 창틀 위치 자동 판별, KTX 역 하차 호차 선별, 화장실 미설치 칸 선별이다.
- 배포 형태를 웹 서비스와 오프라인 HTML 파일의 병행으로 제안하였다.
- 판 단위 작업 절차 9단계와 이후 작업 12단계를 정리하였으며, 일정은 2026년 12월 19일 v1.1.0.0 완료를 계획값으로 하였다.
다음 판 v1.0.0.3 에서는 결정 필요 사항의 결정에 따라 기능 목록을 확정하고 근거 자료 검증을 수행할 계획이었다. 결정이 이루어지지 않은 상태였으므로, v1.0.0.3 에서는 빈자리 알림 검토와 화면 초안 작성을 먼저 수행하였다(24장, 25장). 결정 필요 사항은 32장에 갱신하였다.
빈자리 알림 기능 검토 (v1.0.0.3)
24.1 검토 배경
원하는 열차에 좌석이 생기면 휴대폰으로 알림을 보내는 기존 도구가 있다는 지적이 있었다. 이에 좌석 현황 API 가 공개되지 않은 조건에서 같은 기능을 구현할 수 있는지 검토하였다. 공개 저장소에 등록된 취소표 감시 도구 1건의 작동 방식을 분석하였다.
24.2 기존 도구의 작동 방식
분석한 도구는 공개 API 를 사용하지 않는다. 기존 예매 앱의 내부 통신을 모사하는 비공식 라이브러리로 좌석을 조회하며, 이용자 본인의 계정 정보를 등록해야 한다. 조회 간격은 최소 10분으로 제한되어 있고, 클라우드 예약 실행 환경에서 3분 단위로 실행된다. 알림은 메신저 봇과 푸시 알림 앱으로 전송한다. 알림 항목에 임시 예약과 결제 마감이 포함되어 있으므로 예약 단계까지 진행하는 기능도 갖춘 것으로 판단된다.
24.3 조회 전용 알림의 조건
OptRail 에서 검토한 범위는 예약과 결제를 하지 않고 조회와 알림만 수행하는 기능이다. 검토 결과를 Table 20 에 나타내었다.
Table 20. 조회 전용 빈자리 알림의 검토 결과
| 항목 | 검토 결과 |
|---|---|
| 조회 수단 | 공개 API 없음. 기존 예매 앱 또는 웹의 내부 통신을 비공식으로 호출해야 함 |
| 법적 사항 | 철도사업법의 과태료 대상은 승차권을 상습적으로 웃돈을 받고 판매하는 행위이며 최대 1,000만원이다. 조회 전용 기능은 이에 해당하지 않음 |
| 로그인 | 열차 단위 판매 상태(매진, 예약 가능)는 비로그인 조회 화면에 표시됨. 비공식 라이브러리의 로그인 요구 여부는 미확인 |
| 알림 단위 | 열차와 등급 단위. 특정 좌석 번호 단위의 조회는 로그인이 필요할 가능성이 높아 제외 |
| 차단 위험 | 운영사의 반복 접속 탐지 대상. 서버 1개소에서 여러 이용자의 조회를 수행하면 서버 주소 단위로 차단될 수 있음 |
| 브라우저 직접 조회 | 교차 출처 요청 제한으로 불가능할 것으로 판단됨 |
| 약관 | 자동 접속 금지 조항의 존재 여부 확인 필요 |
이에 열차 단위 알림은 구현 가능한 기능으로 분류하고, 화면 초안에는 「검토 중」 표시와 함께 포함하였다. 비로그인 조회 범위의 확인과 약관 검토는 결정 필요 사항으로 분류하였다.
화면 초안 (v1.0.0.3)
25.1 작성 방법
배포 형태를 웹 서비스로 정함에 따라 휴대폰 화면 기준의 화면 초안을 HTML 로 작성하였다. 화면 디자인은 외부 생성형 AI에 2회 자문하였다. 1회차는 화면 흐름, 정보 우선순위, 입력 방식에 관한 권장안을 수집하였고, 2회차는 초안 화면을 제시하여 개선점을 수집하였다. 자문 결과는 참고 자료로만 사용하였으며, 기능 범위와 사실 관계에 맞지 않는 제안은 제외하였다.
25.2 자문 결과의 반영
1회차 자문의 반영 여부를 Table 21 에 나타내었다.
Table 21. 1회차 디자인 자문의 반영 여부
| 자문 내용 | 반영 | 비고 |
|---|---|---|
| 여정 입력, 조건 선택, 추천 결과의 3단계 분리 | 반영 | 조건 선택은 하단 시트 |
| 주요 단추의 화면 하단 고정 | 반영 | 조건 선택, 추천 좌석 보기, 좌석 번호 복사 |
| 좌석 번호를 가장 큰 글자로 표시 | 반영 | 결과 카드 26px, 상세 화면 34px |
| 택일 조건은 칩, 켜고 끄는 조건은 토글 | 반영 | |
| 슬라이더 대신 3단 선택 | 반영 | 「중요·보통·무관」 |
| 결과는 목록 기본, 카드 펼침 시 호차 배치도 | 반영 | 전체 편성도는 별도 탭 |
| 신뢰 등급은 채도를 낮춘 작은 배지 | 반영 | 공식 녹색, 2차자료 파랑, 추정 황색, 모름 회색 |
| 좌석 번호 복사 단추 | 반영 | 결과 카드와 상세 화면 |
| 예매 단추로 오인되는 디자인 금지 | 반영 | 판매 여부 미확인 문구 표시 |
| 열차 운영사 고유색을 강조색으로 사용 | 미반영 | 운영사 화면으로 오인될 수 있어 청록 단색 사용 |
| 좌석 근거 예시 「콘센트 있음」 | 미반영 | v1.0.0.3 미지원 기능 |
25.3 화면 구성
화면 초안은 7개 화면으로 구성하였으며 Table 22 에 나타내었다. 표시 값은 v1.0.0.2 도구의 계산 예시(2026년 10월 10일 서울에서 부산, 08:00~10:40, KTX 1세대)이며, 실제 열차 정보가 아닌 예시값이다.
Table 22. 화면 초안의 구성
| 번호 | 화면 | 주요 요소 |
|---|---|---|
| ① | 여정 입력 | 출발역, 도착역, 날짜, 열차 목록(시간표 연동 이후) |
| ② | 조건 선택 | 하단 시트. 칩 2종, 토글 3종, 3단 선택 3종 |
| ③ | 추천 결과 | 좌우 창 햇빛 비율, 추천 카드, 카드 펼침 시 호차 배치도와 좌석 번호 복사 |
| ④ | 좌석 상세 | 판정 항목별 근거와 신뢰 등급 배지 |
| ⑤ | 편성도·햇빛 | 구간별 햇빛 띠, 호차별 조건 충족 범위와 상위 좌석 위치 |
| ⑥ | 빈자리 알림 | 열차·등급 단위 알림 등록. 검토 중 표시 |
| ⑦ | 가정값 설정 | A열 위치, 순방향·역방향 경계 행, 칸 내 화장실 위치, 운량 반영 |
25.4 2회차 자문의 반영
2회차 자문에서는 초안 화면 7개에 대해 개선점 19건을 수집하였다. 각 지적을 초안의 실제 수치와 대조하여 반영 여부를 정하였으며, 그 결과를 Table 23 에 나타내었다. 초안과 맞지 않는 지적 3건은 사실 관계가 다른 것으로 판단하여 제외하였다.
Table 23. 2회차 디자인 자문의 반영 여부
| 화면 | 지적 내용 | 반영 | 수정 내용 또는 제외 사유 |
|---|---|---|---|
| ① | 선택된 열차 카드의 구분이 약함 | 반영 | 테두리 1px 에서 2px 로 변경, 「✓ 선택됨」 표기 |
| ① | 출발·도착 칸과 날짜 칸 사이 여백이 과다함 | 제외 | 초안의 간격은 8px 이며 다른 칸 간격과 같음 |
| ① | 열차 목록과 하단 단추 사이 오조작 위험 | 제외 | 하단 단추는 구분선이 있는 고정 영역에 배치되어 있음 |
| ② | 칩과 3단 선택의 모양이 유사함 | 반영 | 3단 선택을 테두리 있는 막대형으로 바꾸고 선택 칸은 청록 글자로 표시 |
| ② | 구획 제목의 글자가 작음 | 반영 | 12px 회색에서 13px 본문색 굵은 글자로 변경 |
| ② | 항목이 촘촘하여 시트 안 스크롤이 깊어짐 | 부분 반영 | 항목 상하 여백만 2px 늘림. 항목 수는 기능 범위에 따라 유지 |
| ③ | 햇빛 비율 상자가 커서 좌석 번호보다 눈에 띔 | 반영 | 상자 2개를 한 줄 막대로 축소 |
| ③ | 점수 숫자가 커서 좌석 번호와 위계가 겹침 | 반영 | 점수를 20px 본문색에서 15px 회색으로 변경 |
| ③ | 카드 안 호차 배치도의 좌석 격자가 작음 | 미반영 | 배치도는 위치 확인용이며 좌석 선택 기능이 없음. 휴대폰 폭에서 14행 표시를 유지 |
| ④ | 신뢰 등급 배지의 대비가 약함 | 반영 | 글자 10px 에서 11px 로, 투명도 제거, 옅은 바탕색 추가 |
| ④ | 하단 단추 2개의 비중이 같음 | 제외 | 초안에서 복사 단추는 채움, 목록 단추는 테두리로 이미 구분됨 |
| ④ | 설명 문장의 줄 간격이 좁음 | 반영 | 줄 간격 1.5 에서 1.6 으로, 항목 간격 10px 에서 12px 로 변경 |
| ⑤ | 햇빛 띠에 시간 축이 없음 | 반영 | 역 이름 아래에 통과 시각 표기 |
| ⑤ | 편성도에 진행 방향 정보가 없음 | 부분 반영 | 진행 방향과 1행 위치 표기. 창문과 출입문 위치는 자료 미확보로 제외 |
| ⑤ | 탭 영역이 좁고 아이콘이 없음 | 반영 | 탭 높이 56px, 선 아이콘 추가. 자문은 탭이 상단에 있다고 하였으나 초안의 탭은 하단에 있음 |
| ⑥ | 알림 대상 열차의 글자가 큼 | 반영 | 17px 에서 15px 로 변경 |
| ⑥ | 토글 항목 사이 여백이 좁음 | 반영 | 항목 상하 여백 8px 에서 10px 로 변경 |
| ⑦ | 안내 문장의 명도 대비가 낮음 | 반영 | 안내 문장 전체를 옅은 회색에서 진한 회색으로 변경, 글자 11px 에서 12px |
| ⑦ | 되돌리기 단추의 인지성이 낮음 | 미반영 | 되돌리기는 보조 동작이므로 주요 단추와 구분되는 옅은 단추를 유지 |
Fig. 9 는 2회차 자문을 반영한 화면이다. 반영 14건(부분 반영 2건 포함) 중 편성도의 창문과 출입문 위치는 좌석 배치 자료에 해당 정보가 없으므로, 자료를 확보한 이후 판에서 추가한다.

기획 검토와 휴대폰 화면 구현 (v1.0.0.4)
26.1 기획 검토
결정 필요 사항이 9건으로 늘어나 처리 순서를 정하기 어려운 상태였다. 이에 개발 요약, v1.0.0.3 도구 파일, 화면 초안 파일을 외부 생성형 AI 에 제시하고 제품 기획 관점의 검토를 요청하였다. 답변은 파일에서 확인한 사실과 추측을 구분하도록 요청하였으며, 사실로 제시된 항목은 원본 파일과 대조하였다.
도구 파일에 관한 지적 3건은 원본과 일치하였다. 입력 영역은 폭 340px 의 좌측 고정 열로 구성되어 있었고, 입력 수단은 목록 선택 상자 4개와 단추 묶음이었으며, 추천 결과는 표로 출력되었다. 검토 결과와 처리 순서의 판단을 Table 24 에 나타내었다.
Table 24. 결정 필요 사항의 처리 순서 검토
| 사항 | 자문 의견 | 판단 | 사유 |
|---|---|---|---|
| 기능 채택 항목 | 지금 결정 | 지금 결정 | 첫 공개판의 범위를 정하는 사항이다 |
| 웹 게시 위치 | 지금 결정 | 지금 결정 | 웹 전환 단계(S5)의 선행 조건이다 |
| 공공데이터포털 인증키 | 지금 결정 | 지금 결정 | 발급에 시간이 소요되며, 시간표 연동(S8)의 선행 조건이다 |
| 화면 초안 채택 | 지금 결정 | v1.0.0.4 로 대체 | 본 판에서 휴대폰 화면을 도구에 적용하였다 |
| A열 좌우 실측 | 이후 결정 | 이후 결정 | 설정 화면에서 가정값을 변경할 수 있다 |
| 게시판 이름 변경 | 이후 결정 | 이후 결정 | 도구의 기능과 무관하다 |
| 기능 분류 기준 재정의 | 제외 | 이후 결정 | 도구에는 영향이 없으나 본편의 차별성 기술에 필요하다 |
| 빈자리 알림 채택 | 제외 | 보류 | 공식 API 가 없고 비공식 조회의 차단 위험이 있다. 첫 공개판에서 제외한다 |
| 빈자리 알림 약관 확인 | 제외 | 보류 | 빈자리 알림 보류에 따라 함께 보류한다 |
첫 공개판에 포함할 기능으로는 좌석 번호 단위의 조건 결합 추천, 선로 좌표 기반 햇빛 계산, 근거 등급 표시가 제시되었다. 제외할 기능으로는 빈자리 알림, 시간표 연동, 환승 칸 안내가 제시되었으며, 이는 v1.0.0.2 의 작업 일정과 일치한다.
26.2 화면 설계 기준
화면은 휴대폰 운영체제 제조사가 직접 개발한 앱을 가정하고, 「기존 휴대폰 운영체제의 화면 설계 지침」의 원칙에 따라 설계하였다. 외부 생성형 AI 에 같은 가정으로 설계 원칙을 자문하였으며, 수치는 지침의 일반값으로 확인한 항목만 사용하였다. 제조사의 상표, 아이콘 원본, 기존 앱의 화면은 사용하지 않았으며 아이콘은 단순한 선 그림으로 새로 작성하였다. 적용 기준을 Table 25 에 나타내었다.
Table 25. 휴대폰 화면의 설계 기준
| 항목 | 적용 내용 |
|---|---|
| 화면 구조 | 하단 탭 3개(좌석 찾기, 구간과 편성, 설정). 좌석 찾기 탭은 여정 입력, 추천 좌석, 좌석 상세의 3단계를 오른쪽에서 밀려 들어오는 화면 전환으로 연결 |
| 조건 입력 | 아래에서 올라오는 시트. 택일 조건은 세그먼트 컨트롤 6개, 켜고 끄는 조건은 스위치 1개 |
| 목록 | 좌우 여백 16px 의 둥근 그룹 목록(반경 10px), 행 높이 44px 이상, 구분선은 왼쪽 16px 들여쓰기 |
| 글자 | 큰 제목 34px, 본문 17px, 보조 설명 13px. 좌석 번호는 목록 20px, 상세 화면 44px |
| 색 | 밝은 화면과 어두운 화면의 시스템 색 체계. 강조색은 파랑 한 가지, 햇빛은 주황, 그늘은 하늘색 |
| 재질 | 상단 제목줄과 하단 탭 바에 반투명 흐림 배경. 내용이 아래로 지나갈 때 비침 |
| 주요 단추 | 「추천 좌석 보기」는 하단 탭 바 위에 고정, 「좌석 번호 복사」는 상세 화면 상단 |
| 제외 사항 | 빈자리 알림 화면, 예매 단추, 사각 체크 상자, 11px 이하 본문 글자 |
26.3 구현
v1.0.0.3 까지의 좌석 평가 함수는 화면의 입력 요소를 직접 읽었다. 본 판에서는 평가 함수를 입력값 객체를 받는 별도 모듈(ios_model.js)로 분리하고, 화면 로직(ios.js)과 화면 틀(ios.html)을 새로 작성하였다. 평가 규칙과 가중치는 변경하지 않았다. 동일 조건(2026년 10월 3일 서울에서 부산, 08:00~10:40, KTX 1세대)에서 상위 3석은 v1.0.0.3 과 같은 5호차 8D, 5호차 6D, 7호차 6D 로 나타났다.
도구 파일은 OptRail_v1.0.0.4.html(97KB)이며 외부 라이브러리를 사용하지 않는다. 기존 PC 화면은 생성 스크립트의 –pc 선택 사항으로 계속 생성할 수 있다. 화면 폭 390px 의 밝은 화면과 어두운 화면에서 7개 화면을 확인하였으며, 실행 오류와 가로 스크롤은 발생하지 않았다. 구현 결과를 Fig. 10 에 나타내었다.
구현 과정에서 다음 2건을 수정하였다. 첫째, 단추를 누를 때 브라우저가 숨겨진 시트 쪽으로 앱 영역을 스크롤하여 탭 바가 화면 중간에 표시되었다. 앱 영역의 넘침 처리를 스크롤이 불가능한 방식으로 변경하고, 닫힌 시트와 대기 중인 화면을 보이지 않게 처리하였다. 둘째, 「추천 좌석 보기」 단추가 조건 행을 가리는 문제가 있었다. 차종 행을 여정 묶음에 합쳐 첫 화면 안에 모든 입력 행이 표시되도록 하였다.

참고문헌 팝업 (v1.0.0.5)
v1.0.0.4 의 설정 화면은 자료 출처 34건을 제목과 주소만으로 나열하였으며, 기상 예보, 선로 좌표, 태양 위치 계산식의 출처는 화면에 표시하지 않았다. 본 판에서는 설정 화면의 「자료 출처」 제목 옆에 원형 정보 단추를 두고, 단추를 누르면 참고문헌 목록이 화면 중앙의 팝업으로 표시되도록 변경하였다. 같은 묶음의 「참고문헌」 행을 눌러도 팝업이 열리며, 팝업 밖을 누르거나 「닫기」 단추 또는 Esc 키를 누르면 닫히도록 구성하였다.
참고문헌은 좌석 배치 자료 34건에 기상 예보, 선로 좌표, 역 좌표 검색, 좌석 안내 기사, 태양 위치 계산식의 출처 5건을 더한 39건이다. 표기는 IEEE 양식의 웹 자료 형식(저자, “제목,” 사이트. Accessed: 열람일. [Online]. Available: 주소)을 따랐으며, 저자가 확인되지 않은 자료는 제목부터 표기하였다. 서지 정보는 별도 파일(data/references.json)로 분리하여 도구 파일 생성 시 삽입하였다.
팝업의 목록 영역은 높이를 화면의 78% 이내로 제한하고 내부 스크롤을 적용하였다. 화면 폭 390px 에서 목록 높이는 3,256px, 표시 높이는 508px 이며, 밝은 화면과 어두운 화면에서 39건 전체의 스크롤과 닫기 동작을 확인하였다. 결과를 Fig. 11 에 나타내었다.

화면 폭 대응과 즐겨찾기 (v1.0.0.6)
28.1 지시 사항
v1.0.0.5 의 화면에 대하여 다음 4건이 지시되었다. 첫째, 휴대폰 화면만 제공하므로 태블릿과 PC 화면 비율에 맞는 반응형 배치가 필요하다. 둘째, 「구간과 편성」 화면은 좌석 찾기를 실행한 이후에만 의미가 있으므로 선택 순서와 활성화 순서를 사용자에게 명확히 제시하여야 한다. 셋째, 화면 제목과 항목 이름만으로 기능을 알 수 있어야 하며, 설명 주석은 제거하여야 한다. 넷째, 차종은 지정할 수 있으나 선호 좌석은 지정할 수 없으므로 즐겨찾기 기능이 필요하다.
28.2 화면 폭별 배치
화면 폭별 배치는 외부 생성형 AI 에 자문하였다. 자문 결과 중 다음 4건을 반영하였다. 넓은 화면에서는 하단 탭 바를 사이드바 또는 상단 메뉴로 전환하고, 목록과 상세를 동시에 표시한다. 조건 입력은 화면 전체를 덮지 않는 형태로 표시하고, 분석 그래픽은 최대 폭을 제한하여 2단으로 배치한다. 적용한 배치를 Table 26 에 나타내었다.
Table 26. 화면 폭별 배치
| 화면 폭 | 대상 기기 | 메뉴 | 좌석 찾기 화면 | 조건 입력 |
|---|---|---|---|---|
| 700px 미만 | 휴대폰 | 하단 탭 바 | 입력, 추천 좌석, 좌석 상세의 화면 전환 | 아래에서 올라오는 시트 |
| 700~1023px | 태블릿 세로 | 상단 캡슐형 탭 | 2단. 왼쪽 입력(380px), 오른쪽 추천 좌석과 좌석 상세의 화면 전환 | 화면 중앙의 폼 시트 |
| 1024~1359px | 태블릿 가로 | 왼쪽 사이드바(240px) | 2단. 왼쪽 입력(360px), 오른쪽 추천 좌석과 좌석 상세의 화면 전환 | 화면 중앙의 폼 시트 |
| 1360px 이상 | PC | 왼쪽 사이드바(240px) | 3단. 입력(360px), 추천 좌석(400px), 좌석 상세 | 화면 중앙의 폼 시트 |
폭 700px 이상에서는 좌석 찾기를 실행하기 전 결과 영역에 실행 순서 3단계를 표시하며, 1차 실행 이후에는 입력값을 변경하면 추천 결과를 다시 계산한다. 티켓 분석 화면은 1024px 이상에서 햇빛과 편성도를 2단으로 함께 표시하고, 설정과 즐겨찾기 화면은 본문 폭을 720px 이내로 제한하였다. 화면 폭 390, 820, 1180, 1440px 에서 7개 화면을 확인하였으며 실행 오류와 가로 스크롤은 발생하지 않았다. 결과를 Fig. 12 에 나타내었다.

28.3 단계 표시와 메뉴 활성화
좌석 찾기 화면의 입력 묶음에 실행 순서 번호 1(여정과 열차), 2(원하는 좌석), 3(추천 좌석 보기)을 표시하였다. 추천을 실행하면 1과 2의 번호를 녹색으로 변경한다. 티켓 분석 메뉴는 추천을 실행하기 전에는 흐리게 표시하여 비활성 상태로 설정하였으며, 누르면 먼저 추천 좌석 보기를 실행하도록 안내한다.
28.4 화면 문구
항목 이름만으로 기능을 알 수 있도록 화면 문구를 변경하고 설명 주석을 제거하였다. 변경 내용을 Table 27 에 나타내었다.
Table 27. 화면 문구 변경
| v1.0.0.5 | v1.0.0.6 | 비고 |
|---|---|---|
| 구간과 편성 | 티켓 분석 | 메뉴와 화면 제목 |
| A열 위치 (하행 진행 방향 기준) | 서울에서 출발할 때 A석은 「왼쪽 창가 · 오른쪽 창가」 | 하행 기준을 출발역으로 표현 |
| 창틀에 걸릴 수 있는 행 감점 | 창문 기둥에 가리는 좌석 피하기 | 감점 대신 결과 동작으로 표현 |
| 구름 예보 반영 | 구름 예보로 햇빛 보정 | |
| 창측·통로측 | 창가와 통로 | 조건 시트 |
| 4인 테이블석 「제외·선택」 | 마주 보는 4인 테이블석 「피하기·원함」 | 조건 시트 |
| 좌석 전후 공간이 넓은 좌석 우선 | 다리 공간이 넓은 좌석 우선 | 조건 시트 |
| 설명 주석 7건 | 삭제 | 차종 정보는 차종 행의 보조 글자(KTX-I · 18량)로 표시. 계산 가정은 설정의 「계산 가정」 팝업으로 이동 |
28.5 즐겨찾기
좌석 상세 화면에 별 모양 단추를 두어 차종과 좌석 번호의 조합을 즐겨찾기에 추가하도록 하였다. 즐겨찾기는 별도 메뉴에서 차종별로 묶어 표시하며, 현재 여정 기준의 순위와 점수를 함께 표시한다. 즐겨찾기 항목을 누르면 해당 차종으로 추천을 계산한 뒤 좌석 상세 화면을 표시하도록 구성하였다. 추천 좌석 화면에는 현재 차종의 즐겨찾는 좌석을 목록 위에 별도로 표시하여, 선호 좌석이 이번 여정의 조건에 맞는지 확인할 수 있도록 하였다. 즐겨찾기는 이용자 기기의 브라우저 저장소에 보관하며, 서버로 전송하지 않는다.
좌석 조건 확장과 분류 (v1.0.0.7)
29.1 추가 조건의 선정
v1.0.0.6 의 좌석 조건 7종 외에 이용자가 좌석을 고르는 기준을 이동과 하차, 소음과 흔들림, 일행, 짐과 편의, 풍경의 5개 묶음으로 정리하였다. 이 중 현재의 좌석 배치 자료만으로 계산할 수 있는 조건을 본 판에 구현하고, 차종별 조사 자료 또는 지리 자료가 필요한 조건은 화면에 「준비 중」으로 표시하였다. 구현 여부를 Table 28 에 나타내었다.
Table 28. 추가 좌석 조건의 구현 여부
| 조건 | 판정 방법 | 구현 |
|---|---|---|
| 둘이 나란히 | 같은 행에서 붙은 두 자리(A·B, C·D, 특실 B·C)를 한 묶음으로 평가. 점수는 두 자리 평균 | 구현 |
| 넷이 마주 보기 | 테이블석 행 2개의 같은 쪽 네 자리를 한 묶음으로 평가. 마주 보는 자리는 앉는 방향 조건에서 제외 | 구현 |
| 옆자리 없는 1인석 | 같은 행에 붙은 자리가 없는 좌석만 선별 | 구현 |
| 화장실 가까이 | 기존 화장실 거리의 역순 점수 | 구현 |
| 출입문 멀리·가까이 | 칸 양 끝을 출입문으로 보고 가까운 끝까지의 행 수로 점수 산정(5행 이상은 같은 점수) | 구현 |
| 콘센트 있는 좌석 | 차종별 콘센트 위치 자료 필요 | 준비 중 |
| 짐 보관대 가까운 좌석 | 차종별 보관대 위치 자료 필요 | 준비 중 |
| 내릴 역 출구와 가까운 호차 | 역별 계단·출구 위치 자료 필요 | 준비 중 |
| 바다·강이 보이는 쪽 | 선로 좌표와 해안선·하천 자료의 결합 필요 | 준비 중 |
29.2 조건 분류와 항목 이름
조건이 15개로 늘어남에 따라 조건 시트를 질문의 대상에 따라 「누구와」, 「자리」, 「칸 안의 위치」, 「창밖」의 4개 묶음으로 분류하였다. 설정 화면에 있던 「창문 기둥에 가리는 좌석 피하기」는 좌석 선호에 해당하므로 「창밖」 묶음으로 이관하였다. 4인 테이블석의 「원함」 선택은 「넷이 마주 보기」와 중복되므로 삭제하고, 「마주 보는 테이블석 피하기」 스위치로 단순화하였다. 인원을 「둘이」 또는 「넷이」로 고르면 함께 쓸 수 없는 「옆자리 없는 1인석」과 「테이블석 피하기」를 흐리게 표시하여 선택할 수 없도록 설정하였다.
시트 맨 위에는 자주 쓰는 조합을 한 번에 고르는 「빠른 선택」 4종을 배치하였다. 「멀미 적게」는 순방향, 창가, 출입문 멀리, 햇빛 적은 쪽을 선택한다. 「빨리 내리기」는 통로와 출입문 가까이를, 「조용히」는 출입문과 화장실 멀리를 선택한다. 「둘이 여행」은 인원을 둘이 나란히로 선택한다. 빠른 선택은 해당 조건만 변경하고 나머지 조건은 유지한다. 조건 시트를 Fig. 13 에 나타내었다.

29.3 확인 결과
2026년 10월 3일 서울에서 부산(08:00~10:40), KTX 1세대 조건에서 결과를 확인하였다. 혼자의 기본 조건에서 1순위는 5호차 8D(67점)로 v1.0.0.6 과 동일하였다. 둘이 나란히의 1순위는 5호차 8C·8D(64점), 넷이 마주 보기의 1순위는 7호차 7C·7D·8C·8D(60점)였다. 특실과 옆자리 없는 1인석을 함께 고르면 3호차 6A(60점)가 1순위로 나타났다. 멀미 적게를 고르면 출입문 거리 점수가 더해져 5호차 8D 의 점수가 73점으로 증가하였다. 화면 폭 390, 820, 1180, 1440px 에서 실행 오류와 가로 스크롤은 발생하지 않았다.
승강장 자료와 진행 방향 표시 (v1.0.0.8)
30.1 환승 관련 자료 조사
환승이 빠른 좌석을 추천하려면 내리는 역에서 계단이나 에스컬레이터 앞에 서는 호차를 알아야 한다. 이에 공공데이터와 웹 자료를 조사하였으며, 그 결과를 Table 29 에 나타내었다.
Table 29. KTX 승강장 호차 위치 자료의 조사 결과
| 조사 대상 | 결과 | 반영 |
|---|---|---|
| 국토교통부 철도역 빠른 환승 정보 (2025.9.23. 기준, 1,052건) | 지하철·광역철도의 호차와 출입문 번호만 수록. KTX 등 고속철도 자료 0건 | 미반영 |
| 국가철도공단 역사별 환승정보 | 도시·광역철도 승강장 이격거리 자료 | 미반영 |
| 동대구역 상행 승강장(11·12번 타는 곳) | 10·14호차 앞 에스컬레이터, 12호차 앞 엘리베이터 (안내 글, 2025년 수정) | 점수 반영 |
| 서울역 KTX 승강장 | 1~7호차는 뒤쪽 에스컬레이터, 8~18호차는 정면 에스컬레이터가 가까움 (언론 기사, 2020년) | 좌석 상세에 안내만 표시 |
| 오송, 광명, 대전, 용산, 부산 | 호차 번호가 적힌 자료를 확인하지 못함 | 자료 없음 |
KTX 승강장의 호차 위치 자료가 부족한 것은 차종마다 편성 길이가 다르기 때문으로 판단된다. KTX 1세대는 18량, KTX-산천은 8량이며, 두 편성을 연결하여 운행하는 경우도 있으므로, 같은 역에서도 계단 앞 호차는 열차마다 다를 수 있다. 이에 확인된 자료만 수록하고, 자료가 없는 역은 점수에 반영하지 않았다. 서울역 자료는 모든 호차에 가까운 에스컬레이터가 있다는 내용이므로 호차 간 차이를 산정할 수 없어 안내 문구로만 사용하였다.
30.2 에스컬레이터 앞 호차 조건
조건 시트에 「타고 내리기」 묶음을 새로 두고, 「칸 안의 위치」에 있던 출입문 조건과 새 조건 「에스컬레이터 앞에 서는 호차」를 이 묶음으로 이동하였다. 이 조건은 타는 역 또는 내리는 역, 운행 방향, 차종이 수록 자료와 일치할 때만 켤 수 있다. 일치하지 않으면 「이 구간은 승강장 자료 없음」을 표시하여 선택할 수 없도록 설정하였다. 점수는 가장 가까운 에스컬레이터·엘리베이터 호차까지의 칸 수로 산정하였으며, 4칸 이상 떨어지면 0점으로 하였다. 「빨리 내리기」 빠른 선택에도 이 조건을 포함하였다.
2026년 10월 3일 부산에서 동대구, KTX 1세대 조건에서 이 조건을 켜면 상위 3석은 10·12·14호차의 11D 로 나타났다. 서울에서 부산, 부산에서 서울, KTX-산천의 부산에서 동대구 구간에서는 조건이 잠기는 것을 확인하였다.
30.3 진행 방향 표시
좌석 상세의 호차 배치도는 왼쪽 끝을 1행(서울 쪽)으로 그리므로, 열차가 어느 쪽으로 달리는지는 화면에서 알 수 없었다. 배치도 아래에 진행 방향 화살표와 「가는 방향 · 도착역」 글자를 추가하였다. 하행은 오른쪽, 상행은 왼쪽을 가리키며, 티켓 분석의 편성도에도 같은 화살표를 표시하였다. 결과를 Fig. 14 에 나타내었다.
30.4 예매 사이트 연결
좌석 상세 화면의 「좌석 번호 복사」 아래에 「코레일 예매 사이트 열기」 단추를 추가하였다. 단추를 누르면 브라우저의 새 탭에 한국철도공사 승차권 예매 화면이 표시된다. 같은 동작에서 좌석 번호를 복사하여, 예매 화면의 좌석 선택 단계에서 바로 찾을 수 있도록 하였다. v1.0.0.3 의 화면 초안에서는 예매 앱으로 오인될 수 있어 예매 단추를 두지 않았으나, 본 판의 단추는 외부 사이트로 이동하는 연결 단추로 표시하고 이동 표시 아이콘을 붙여 OptRail 자체의 예매 기능과 구분하였다.

회원 저장과 햇빛 분석 보완 (v1.0.0.9)
31.1 회원 저장
즐겨찾기는 이용자 본인만 조회할 수 있는 회원 정보로 저장하도록 변경하였다. 계정 서버는 웹 게시 위치가 정해진 이후에 구축할 수 있으므로, 본 판에서는 처음 실행할 때 기기별 임시회원 번호를 발급하고 즐겨찾기를 이 번호의 저장소에 보관하였다. 저장 내용은 AES-GCM(256비트)으로 암호화하며, 암호 키는 브라우저 밖으로 내보낼 수 없는 형태로 브라우저 저장소(IndexedDB)에 보관한다. v1.0.0.8 까지 평문으로 저장된 즐겨찾기는 처음 실행할 때 암호화 저장으로 옮기고 평문을 삭제한다. 다시 실행한 뒤에도 즐겨찾기가 복원되는 것과 저장소에 평문이 남지 않는 것을 확인하였다.
즐겨찾기 화면 맨 아래와 설정 화면의 계정 묶음에는 다음 안내 문구를 표시하였다.
저장 데이터는 회원에 한정하여 제공됩니다. (임시회원 포함) 개인정보는 암호화되어 보호됩니다.
계정 서버와 연결되는 정회원 기능은 「계정 연결 준비 중」으로 표시하였다.
31.2 햇빛 분석의 그래프 통합
티켓 분석의 햇빛 화면은 좌우 햇빛 비율 막대와 구간별 햇빛 그래프를 따로 표시하였다. 두 그래프를 하나로 합치기 위해 위의 비율 막대를 삭제하고, 구간별 햇빛 그래프의 「오른쪽」, 「왼쪽」 줄 이름 옆에 해당 창의 햇빛 비율을 표시하였다. 그래프 위에는 구간 길이, 터널 비율(구간 길이 대비 터널 길이), 운행 시간을 표시하였다.
31.3 디자인 자문의 반영
1차 수정안의 화면을 외부 생성형 AI 에 제시하여 개선점을 자문하였으며, 반영 여부를 Table 30 에 나타내었다.
Table 30. v1.0.0.9 디자인 자문의 반영 여부
| 자문 내용 | 반영 | 수정 내용 또는 사유 |
|---|---|---|
| 줄 이름과 비율이 두 줄로 눌려 있음. 한 줄로 쓰거나 오른쪽 끝으로 이동 | 반영 | 줄 머리 폭을 58에서 76으로 넓혀 「오른쪽 21%」를 한 줄로 표시 |
| 비율 숫자의 하늘색·주황색이 시선을 분산함 | 반영 | 기본 글자색으로 통일하고 굵기로만 강조 |
| 운행 시간 「160분」은 체감이 어려움 | 반영 | 「2시간 40분」으로 표기 |
| 390px 폭에서 수치 칸 3개가 좁음. 세로 목록으로 변경 | 반영 | 구간 길이, 터널 비율, 운행 시간의 3행 목록. 터널은 비율을 크게, 길이를 작게 표기 |
| 결론 문장이 카드 맨 아래에 있음 | 반영 | 그래프 위로 이동 |
| 맑음 가정·추정 배지가 문장에 섞여 있음 | 반영 | 카드 아래 각주 한 줄로 이동 |
| 회원 상태 행과 안내 문구는 설정으로 분리 | 부분 반영 | 회원 상태 행은 설정의 계정 묶음으로 이동. 안내 문구는 개발자 지시에 따라 즐겨찾기 화면 맨 아래에도 유지 |
| 제목을 가리는 상단 알림은 휴대폰 운영체제의 표준 방식이 아님 | 반영 | 화면 가운데에 잠시 표시되는 반투명 알림으로 변경 |
화면 폭 390, 820, 1180, 1440px 에서 실행 오류와 가로 스크롤은 발생하지 않았다. 결과를 Fig. 15 에 나타내었다.

선택의 순위와 좌석 분석 (v1.0.1.0)
32.1 조건 묶음의 이름 변경
조건 시트의 묶음 이름은 묶음에 포함된 조건의 성격을 직접 나타내도록 변경하였다. 변경 내용을 Table 32 에 나타내었다.
Table 32. 조건 묶음의 이름 변경
| 이전 이름 | 변경 이름 | 포함 조건 |
|---|---|---|
| 누구와 | 인원 수 | 인원, 옆자리 없는 1인석 |
| 자리 | 좌석 유형 | 등급, 창가와 통로, 앉는 방향, 다리 공간, 테이블석 |
| 칸 안의 위치 | 열차 칸 유형 | 화장실, 짐 보관대(준비 중) |
| 타고 내리기 | 환승 조건 | 출입문, 에스컬레이터 앞 호차 |
| 창밖 | 햇살 솔솔 | 창으로 드는 햇빛, 창문 기둥, 바다·강(준비 중) |
32.2 선택의 순위
v1.0.0.9 까지의 점수는 켜진 조건의 점수를 같은 비중으로 평균하였다. 이 방식은 켜진 조건이 많아질수록 좌석 간 점수 차이가 줄어 대부분의 좌석이 비슷한 점수로 모이는 문제가 있다. 이를 해결하기 위해 인원 수를 제외한 4개 묶음의 순서를 이용자가 정하도록 하고, 순서에 따라 묶음별 가중치를 곱하였다. 묶음별 가중치를 Table 33 에 나타내었다.
Table 33. 순위별 가중치와 적용 조건
| 순위 | 가중치 | 묶음 | 가중치를 곱하는 조건 |
|---|---|---|---|
| 1순위 | 2.0 | 좌석 유형 (기본값) | 다리 공간 |
| 2순위 | 1.4 | 열차 칸 유형 (기본값) | 화장실 거리 |
| 3순위 | 1.0 | 환승 조건 (기본값) | 출입문 거리, 에스컬레이터 앞 호차 |
| 4순위 | 0.7 | 햇살 솔솔 (기본값) | 창으로 드는 햇빛, 창문 기둥 감점 |
등급, 창가와 통로, 앉는 방향, 테이블석, 1인석은 점수가 아니라 좌석을 거르는 조건이므로 순위의 영향을 받지 않는다. 순서는 조건 시트의 「순서 변경」 단추를 누르면 각 묶음이 한 줄로 접힌 상태에서 위아래 화살표 단추 또는 끌기 표시(≡)를 끌어 바꾸도록 하였다. 바꾼 순서는 이 기기에 저장하고, 「초기화」를 누르면 기본값으로 되돌리도록 하였다.
KTX 1세대, 서울에서 부산, 기본 조건에서 열차 칸 유형을 1순위로 올린 결과 1위 좌석의 점수는 57점에서 65점으로 높아졌으며, 상위 좌석 간 점수 차이가 증가하였다.
32.3 무작위 추천
빠른 선택에 「무작위」 단추를 추가하였다. 누르면 인원 수를 제외한 모든 조건을 「무관」 또는 꺼짐으로 바꾸고, 조건 시트를 닫은 뒤 추천 좌석 화면으로 바로 이동한다. 추천 목록은 등급과 인원 조건을 만족하는 좌석을 무작위 순서로 섞어 상위 12석을 표시하며, 목록 머리에 「무작위로 고른 12석」을 표기한다. 조건을 하나라도 바꾸면 무작위 상태는 해제된다.
32.4 날짜 달력
날짜 입력은 브라우저 기본 날짜 선택 창을 사용하였으며, 기본 선택 창은 다른 달의 날짜를 함께 표시하고 휴일을 구분하지 않았다. 이를 대체하여 목록 안에서 펼쳐지는 달력을 작성하였다. 달력의 표시 규칙은 다음과 같다.
- 해당 월에 속하지 않은 날짜는 표시하지 않는다.
- 토요일은 파란색, 일요일과 공휴일, 대체공휴일은 빨간색으로 표시하며 공휴일 이름을 날짜 아래에 표기한다.
- 구름 예보를 받을 수 있는 기간(오늘부터 16일)을 벗어난 날짜는 노란색(불투명도 70%) 음영으로 표시한다. 이 날짜는 맑음을 가정하여 햇빛을 계산한다.
- 지난 날짜는 고를 수 없다.
공휴일 자료는 2026년과 2027년분을 수록하였으며, 2026년은 1건, 2027년은 2건의 자료로 확인하였다 [R43~R45]. 2028년 이후의 달은 표시하지 않는다.
32.5 좌석 분석
티켓 분석에 「좌석 분석」 화면을 추가하였다. 선택한 좌석이 없으면 추천 1위 좌석을 기준으로 한다. 화면은 다음 2개의 개념도와 비율 목록으로 구성하였다.
- 옆에서 본 모습. 더미가 앉은 좌석과 앞 좌석 등받이를 그리고, 등받이 뒷면에서 앞 좌석 등받이 뒷면까지의 앞뒤 공간을 실루엣으로 겹쳐 표시한다.
- 위에서 본 1인 공간. 앞뒤 간격과 1인 폭을 곱한 면적을 실루엣으로 겹쳐 표시한다.
실루엣은 회색이 선택한 좌석, 녹색이 같은 열차에서 앞뒤 간격이 가장 넓은 일반실, 노란색이 특실 또는 우등실이다. 비율은 선택한 좌석의 1인 공간을 100%로 둔 값이며, KTX 1세대 8호차 9A 기준으로 5호차 일반실은 103%, 2호차 특실은 161%였다.
앞뒤 간격은 기존에 수집한 2차자료의 좌석 간격(mm)을 사용하였다. 객실 폭과 좌석 폭의 실측 자료는 확보하지 못하였으므로, 1인 폭은 객실 폭이 같다고 가정하고 한 줄 좌석 수(일반실 4석, 특실 3석)로 나눈 비율로 추정하였다. 좌석 간격 자료가 없는 칸(KTX-산천 특실, KTX-이음, KTX-청룡 등)은 비교 대상에서 제외하고 각주에 호차 번호를 표시하였다.
32.6 차량 도면과 열차 시각표의 확보 가능성
에스컬레이터 앞에 서는 호차를 모든 정차역에 대해 정의하려면 차량의 실물 치수와 정차역 승강장의 도면이 필요하다. 조사 결과를 정리하면 다음과 같다.
- KTX 차량의 도면과 정차역 승강장 평면도는 공개 자료로 확인되지 않았다. 공공데이터포털의 승강장 관련 자료는 승강장 수와 시설 목록 수준이며 평면도를 포함하지 않는다.
- 확보 방법으로는 국가철도공단과 한국철도공사에 승강장 평면도와 차종별 정차 위치를 정보공개청구하는 방법, 현장에서 정차 위치 표지와 에스컬레이터 위치를 확인하는 방법이 있다.
- 호차 위치를 정하는 핵심 자료는 승강장 길이보다 차종별 정차 위치(열차 앞쪽이 서는 지점)이다. 정차 위치와 차량 길이를 알면 호차별 위치를 계산할 수 있다.
출발 시각은 이용자가 임의로 입력하는 값이 아니라 운행 열차 중에서 고르는 값이다. 공공데이터포털에 국가철도공단의 열차별 운행 시각 자료가 등록되어 있으나 제공 항목과 갱신 주기는 확인이 필요하다. 시각표를 도구에 연결하려면 인증키 발급과 함께, 브라우저에서 외부 자료를 직접 받을 수 없는 제약(교차 출처 제한)을 피하기 위한 중계 서버가 필요하다. 중계 서버는 웹 게시 위치에 따라 구성이 달라지므로, 웹 게시 위치를 정한 뒤 출발 시각 입력을 열차 목록 선택으로 바꿀 예정이다.
32.7 디자인 자문의 반영
1차 수정안의 휴대폰 화면 4장을 외부 생성형 AI 에 제시하여 개선점을 자문하였으며, 반영 여부를 Table 34 에 나타내었다.
Table 34. v1.0.1.0 디자인 자문의 반영 여부
| 자문 내용 | 반영 | 수정 내용 또는 사유 |
|---|---|---|
| 화살표 단추와 끌기 표시를 함께 두면 복잡하며, 긴 묶음 전체를 끄는 방식은 화면 높이를 벗어나 스크롤과 충돌함 | 반영 | 「순서 변경」 단추를 누르면 묶음을 한 줄로 접고, 이 상태에서만 화살표와 끌기 표시를 표시 |
| 노란 원이 한 달 전체를 덮어 날짜보다 부가 정보가 먼저 보임. 날짜 아래 작은 점으로 표시 권장 | 보류 | 개발자 지시(노란색 불투명도 70% 음영)를 유지. 음영 위 숫자는 진한 파란색, 진한 빨간색으로 대비를 높임. 점 표시안은 결정 필요 사항으로 이관 |
| 무작위 결과의 행마다 「무작위」를 반복 표기하는 것은 불필요함 | 반영 | 행의 점수 자리를 비우고 목록 머리에만 표기 |
| 범례의 네모 기호가 선택 상자로 오인됨 | 반영 | 둥근 막대 기호로 변경 |
| 위에서 본 더미가 사람으로 읽히지 않음 | 반영 | 어깨 폭, 머리, 팔걸이 위 팔을 구분하여 다시 그림 |
화면 폭 390, 820, 1180, 1440px 에서 실행 오류와 가로 스크롤은 발생하지 않았다. 결과를 Fig. 16 에 나타내었다.

좌석 분석의 실치수 적용 (v1.0.1.1)
33.1 수정 배경
v1.0.1.0 의 좌석 분석은 개념도 수준이었으며, 다음 3가지 문제가 지적되었다.
- 어두운 화면에서 좌석, 더미, 공간 실루엣이 모두 회색 계열이어서 구분되지 않는다.
- 좌석의 형상이 실제 치수에 근거하지 않는다.
- 더미의 형상이 표준 신체 치수에 근거하지 않는다.
33.2 좌석과 표준 체형의 치수
좌석과 더미를 모두 mm 좌표로 다시 작성하였다. 좌석 치수는 KTX 1세대 일반실의 의자 주요 치수를 정리한 한국철도학회 논문의 값을 사용하였다 [R46]. 더미 치수는 8차 한국인 인체치수조사의 20~69세 남녀 전체 측정값 중 50분위 값을 사용하였다 [R47]. 사용한 치수를 Table 35 에 나타내었다.
Table 35. 좌석 분석에 사용한 치수
| 구분 | 항목 | 값(mm) | 근거 |
|---|---|---|---|
| 좌석 | 좌판 폭, 좌판 깊이 | 450, 495 | 2차자료 [R46] |
| 좌석 | 팔걸이 폭(창 쪽, 가운데), 2인 좌석 폭 | 50, 70, 1,070 | 2차자료 [R46] |
| 좌석 | 통로 폭, 등판 각도 | 480, 126° | 2차자료 [R46] |
| 좌석 | 좌석 간격(일반실, 5호차, 특실) | 930, 960, 1,120 | 2차자료 |
| 표준 체형 | 앉은키, 앉은어깨높이 | 900, 585 | 공식 [R47] |
| 표준 체형 | 엉덩이무릎길이, 엉덩이오금길이 | 562, 459 | 공식 [R47] |
| 표준 체형 | 오금높이, 무릎높이 | 389, 492 | 공식 [R47] |
| 표준 체형 | 엉덩이너비, 어깨너비 | 377, 370 | 공식 [R47] |
| 가정 | 좌면 높이(오금높이와 같음), 등받이 두께 | 389, 100 | 추정 |
무릎 앞 여유는 무릎 높이에서 더미의 무릎 앞면부터 앞 좌석 등받이 뒷면까지의 거리로 정의하였다. 등받이를 가장 세운 상태(126°)로 계산한 결과 좌석 간격 930mm 는 170mm, 960mm 는 200mm, 1,120mm 는 360mm 였다. 좌판 깊이(495mm)는 표준 체형의 엉덩이오금길이(459mm)보다 36mm 길었다.
1인 폭은 v1.0.1.0 의 「한 줄 좌석 수로 나눈 비율」 대신 실제 치수로 계산하였다. 일반실은 2인 좌석 폭의 절반인 535mm 이다. 특실은 좌석 치수 자료가 없으므로, 일반실 좌석 2개와 통로의 합(2,620mm)을 객실 폭으로 보고 통로를 뺀 값의 1/3 인 713mm 로 추정하였다. 좌면 높이, 특실 좌석 치수, KTX 1세대 이외 차종의 좌석 치수는 확인되지 않았으며, 이 차종은 KTX 1세대 일반실 치수로 표현하였다.
33.3 색 구분
회색 계열의 겹침을 없애기 위해 선택한 좌석의 1인 공간은 파란 면으로 표시하였다. 비교 대상의 앞 좌석 위치는 녹색(앞뒤 간격이 가장 넓은 일반실)과 주황색(특실) 점선 윤곽으로 표시하였다. 좌석은 중간 회색, 더미는 밝은 화면에서 진한 회색, 어두운 화면에서 흰색으로 지정하였다.
33.4 디자인 자문의 반영
수정안의 밝은 화면과 어두운 화면을 외부 생성형 AI 에 제시하여 개선점을 자문하였으며, 반영 여부를 Table 36 에 나타내었다.
Table 36. v1.0.1.1 디자인 자문의 반영 여부
| 자문 내용 | 반영 | 수정 내용 또는 사유 |
|---|---|---|
| 어두운 화면에서 좌석과 파란 공간의 명도 대비가 부족하고 점선 윤곽이 얇음 | 반영 | 어두운 화면의 파란 면을 밝고 진하게, 좌석을 밝은 회색으로 변경. 점선 두께를 2.2 로 변경 |
| 치수 글자가 작고 선과 겹침 | 반영 | 치수 글자를 13 으로 키우고 배경색의 둥근 표지 위에 표시 |
| 위에서 본 모습의 파란 띠가 공간인지 앞 좌석인지 구분되지 않음 | 반영 | 1인 공간을 면과 실선 윤곽으로 표시하고 「내 1인 공간」, 「앞 좌석 등받이」 글자를 추가 |
| 3단락의 각주가 길어 화면 부담이 큼 | 반영 | 각주는 한 줄 요약과 정보 단추로 줄이고, 치수와 출처 7건은 팝업으로 분리 |
화면 폭 390, 820, 1180, 1440px 에서 실행 오류와 가로 스크롤은 발생하지 않았다. 결과를 Fig. 17 에 나타내었다.

좌석 색의 구분 (v1.0.1.2)
v1.0.1.1 의 좌석은 회색이었으며, 회색 바닥선, 회색 글자, 진한 회색 더미(밝은 화면)와 구분되지 않는 문제가 지적되었다. 좌석에 다른 객체에 쓰지 않은 색을 지정하기 위해 보라(안 A), 갈색(안 B), 청록(안 C)의 3안을 밝은 화면과 어두운 화면에서 비교하였다. 3안을 외부 생성형 AI 에 제시하여 자문한 결과를 Table 38 에 나타내었다.
Table 38. 좌석 색 후보의 비교
| 후보 | 밝은 화면 | 어두운 화면 | 자문 결과 |
|---|---|---|---|
| 안 A 보라 | #a77fd6 | #9b72d9 | 채택. 기존 색(파랑, 녹색, 주황)과 색상환에서 가장 멀어 구분이 쉬움. 적록 색각 이상에서도 황갈색으로 보이는 점선과 구분됨 |
| 안 B 갈색 | #b7926a | #a07a55 | 제외. 주황 점선(특실)과 같은 계열이며, 적록 색각 이상에서 녹색·주황과 함께 황갈색으로 보임 |
| 안 C 청록 | #4fb0b0 | #3a9c9c | 제외. 파란 면(1인 공간)과 녹색 점선에 인접한 색이며, 청황 색각 이상에서 파랑과 구분이 어려움 |
자문에 따라 안 A 를 채택하고, 밝은 화면은 채도를 높인 #af52de, 어두운 화면은 명도를 높인 #bf5af2 로 조정하였다. 색에만 의존하지 않도록 1인 공간은 면, 비교 대상은 점선, 좌석은 채운 도형으로 구분하는 방식은 유지하였다. 화면 폭 390, 820, 1180, 1440px 에서 실행 오류와 가로 스크롤은 발생하지 않았다. 결과를 Fig. 18 에 나타내었다.

등받이 각도와 가장 좁은 좌석 (v1.0.1.3)
35.1 등받이 각도
v1.0.1.1 은 등받이를 논문의 등판 각도 126° 로 그렸으며, 실제 좌석에서는 그만큼 젖힐 수 없다는 지적이 있었다. 논문의 표에는 등판 각도의 측정 기준이 없으며, 바닥 앞쪽을 기준으로 보면 126° 는 등받이가 수평에서 54° 인 상태로, 젖힌 상태에 해당한다 [R46].
이에 따라 세운 등받이를 기본으로 표시하고, 젖힌 등받이는 점선으로 표시하였다. 세운 등받이는 유럽 철도 좌석 편안함 사양의 읽기 자세 기준인 수평에서 76° 로 하였다 [R49]. 젖힌 등받이는 고속열차 좌석이 세운 상태에서 약 20° 까지 젖혀진다는 문헌에 따라 56° 로 하였으며 [R50], 이 값은 같은 사양의 휴식 자세 기준(56°)과 같다. KTX 1세대의 실제 젖힘 각도는 확인되지 않았다.
등받이 각도를 바꾸어 무릎 앞 여유를 다시 계산한 결과를 Table 40 에 나타내었다. 그림에는 앞 좌석을 세운 상태의 값만 표시하고, 앞 좌석을 젖힌 상태의 값은 비교 목록에 괄호로 표시하였다.
Table 40. 좌석 간격별 무릎 앞 여유 (mm)
| 좌석 간격 | 앞 좌석 세움(76°) | 앞 좌석 젖힘(56°) | v1.0.1.1 값(126°) |
|---|---|---|---|
| 930 (일반실, 가장 좁음) | 239 | 178 | 170 |
| 960 (5호차) | 269 | 208 | 200 |
| 1,120 (특실) | 429 | 368 | 360 |
35.2 가장 좁은 좌석의 비교
같은 열차에서 좌석 간격이 가장 좁은 칸을 비교 대상에 추가하였다. 선택한 좌석보다 간격이 좁은 칸이 있으면 빨강 점선으로 표시하고, 선택한 좌석이 가장 좁으면 목록에 「가장 좁은 간격」으로 표기한다.
35.3 디자인 자문의 반영
수정안을 외부 생성형 AI 에 제시하여 자문하였으며, 반영 여부를 Table 41 에 나타내었다.
Table 41. v1.0.1.3 디자인 자문의 반영 여부
| 자문 내용 | 반영 | 수정 내용 또는 사유 |
|---|---|---|
| 비교 좌석도 점선이어서 젖힌 등받이(점선)와 혼동됨. 젖힌 등받이는 반투명 면으로 표시 | 부분 반영 | 개발자 지시에 따라 점선은 유지하고, 점선 안에 반투명 보라 면을 추가 |
| 빨강과 주황이 인접하여 색각 이상에서 구분이 어려움. 선 4개가 겹쳐 복잡함 | 반영 | 비교 대상을 목록에서 1개만 골라 그림에 표시. 어두운 화면의 빨강은 밝은 색(#ff8a80)으로 변경 |
| 무릎 앞 여유의 긴 표지와 화살표 2개가 그림을 가림 | 반영 | 그림에는 세운 상태의 값 1개만 표시하고, 젖힌 상태의 값은 목록으로 이동 |
35.4 옆모습과 위에서 본 모습의 정렬
위에서 본 모습은 옆모습과 다른 축척과 원점으로 그려져 있어, 옆모습의 머리 뒤끝과 앞 좌석 등받이가 위에서 본 모습의 같은 위치와 세로로 맞지 않았다. 두 그림을 하나의 그림 영역에 넣고 같은 x 좌표와 축척을 쓰는 정투상으로 다시 작성하였다. 위에서 본 모습의 등받이는 세운 등받이의 평면 투영(앞뒤 315mm)으로, 더미의 머리, 어깨, 엉덩이, 무릎, 발은 옆모습과 같은 앞뒤 위치로 표시하였다. 머리 뒤끝과 앞 좌석 등받이 앞면에는 두 그림을 잇는 점선 투상선을 추가하였다. 앞 좌석 등받이는 더미의 발 위에 있으므로 더미보다 위에 표시하였다.
화면 폭 390, 820, 1180, 1440px 에서 실행 오류와 가로 스크롤은 발생하지 않았다. 결과를 Fig. 19 에 나타내었다.

같은 의자의 옆모습과 평면 (v1.0.1.4)
36.1 수정 배경
v1.0.1.3 의 두 그림은 축척은 같았으나 그린 대상이 서로 다른 문제가 있었다. 옆모습은 의자 1개와 앞 좌석이었고, 위에서 본 모습은 팔걸이 3개를 포함한 2인 좌석 단위였다. 또한 의자의 윤곽선이 없어 형태가 분명하지 않았으며, 의자 색(#af52de)이 지나치게 진하다는 지적이 있었다.
36.2 수정 내용
- 위에서 본 모습을 옆모습과 같은 대상으로 다시 작성하였다. 대상은 창 쪽 의자 1개(창 쪽 팔걸이 50mm, 좌판 450mm, 가운데 팔걸이 70mm, 등받이)와 같은 형태의 앞 좌석이다.
- 옆모습에 팔걸이를 추가하여 두 그림의 구성 요소를 일치시키도록 하였다. 팔걸이의 앞뒤 범위는 좌판 뒤끝부터 좌판 앞끝 40mm 안쪽까지이며, 높이는 자료가 없어 좌면 위 200mm 로 가정하였다.
- 젖힌 등받이는 두 그림 모두 점선 윤곽으로 표시하였다. 평면에서는 더미를 가리지 않도록 면을 채우지 않았다.
- 의자는 연한 보라 면에 진한 보라 윤곽선(굵기 2)을 적용하였다. 밝은 화면은 면 #d6c6ec, 윤곽 #6e4fa3, 어두운 화면은 면 #5e4b80, 윤곽 #cbb6ef 이다.
36.3 디자인 자문의 반영
수정안을 외부 생성형 AI 에 제시하여 자문하였으며, 반영 여부를 Table 43 에 나타내었다.
Table 43. v1.0.1.4 디자인 자문의 반영 여부
| 자문 내용 | 반영 | 수정 내용 또는 사유 |
|---|---|---|
| 평면에서 1인 공간의 범위가 의자에 가려 보이지 않음 | 반영 | 1인 공간의 경계를 의자 위에 파란 실선으로 다시 표시 |
| 의자 윤곽과 비교 점선의 굵기가 비슷하여 위계가 약함 | 반영 | 의자 윤곽 2, 비교 점선 1.6 으로 조정 |
| 평면 안의 「내 1인 공간」 글자가 좌판과 겹침 | 반영 | 글자를 그림 아래 설명으로 이동 |
| 어두운 화면의 의자 면을 #4a3b66 등으로 변경 | 미반영 | 제안 색은 기존 색보다 어두워 배경과의 대비가 더 낮아짐. 윤곽선으로 형태를 구분하므로 기존 색 유지 |
화면 폭 390, 820, 1180, 1440px 에서 실행 오류와 가로 스크롤은 발생하지 않았다. 결과를 Fig. 20 에 나타내었다.

좌석 분석의 재구성 (v1.0.1.5)
37.1 디자인 승인 검토
v1.0.1.4 는 수정 전 시안에 대한 자문만 반영하였으며, 수정 결과에 대한 승인 검토는 수행하지 않았다. 최종안을 외부 생성형 AI 에 제시하여 승인 여부를 확인한 결과는 승인 불가였다. 지적 사항은 다음과 같다.
- 이용자가 알려는 정보는 다른 좌석 대비 다리 공간의 차이인데, 팔걸이, 젖힌 등받이, 투상선 등 도면 요소가 많아 인지 부담이 큰 문제가 있다.
- 앞뒤 공간은 길이 하나의 차이이므로 위에서 본 모습은 정보를 추가하지 못하고 화면만 늘리는 문제가 있다.
- 절대 치수만 표시되어 이용자가 기준 대비 차이를 직접 계산해야 한다.
제시된 대안 중 개발자가 무릎 여유를 강조한 옆모습과 비교 막대를 결합하는 안을 선택하였다.
37.2 구성
좌석 분석은 다음 2개 요소로 구성하였다.
- 옆모습. 세운 등받이의 의자 2개와 표준 체형 더미만 남기고, 무릎 앞면부터 앞 좌석 등받이 뒷면까지의 빈 공간을 파란 면으로 표시하였다. 그림 아래에 무릎 앞 여유와 가장 좁은 좌석 대비 차이를 표시하였다.
- 무릎 앞 여유 비교 막대. 같은 열차에서 가장 좁은 간격, 가장 넓은 일반실, 특실 또는 우등실, 선택한 좌석을 좌석 간격 순으로 나열하였다. 기준은 가장 좁은 간격이며, 기준 대비 차이를 녹색 굵은 글자로 표시하였다. 앞 좌석 등받이를 젖혔을 때의 값은 막대 아래에 한 줄로 표시하였다.
위에서 본 모습, 팔걸이, 젖힌 등받이 점선, 투상선, 비교 대상 선택 목록은 삭제하였다. 치수 근거 팝업은 유지하였다.
37.3 승인 검토의 반영
결합안을 다시 제시한 결과 승인 판정이 나타났으며, 승인 조건으로 제시된 수정 사항의 반영 여부를 Table 45 에 나타내었다.
Table 45. v1.0.1.5 승인 조건의 반영 여부
| 승인 조건 | 반영 | 수정 내용 |
|---|---|---|
| 무릎 공간의 테두리와 지시선을 삭제하고 면만 남김 | 반영 | 테두리와 지시선을 삭제하고, 수치 표지를 그림 아래 가운데로 이동 |
| 절대치와 차이값의 위계를 분리 | 반영 | 절대치는 기본 굵기와 기본 글자색, 차이값은 굵은 녹색 글자 |
| 막대를 얇게 하고 아래 여백 확보 | 반영 | 막대 두께 10 에서 6 으로, 아래 여백 8 |
화면 폭 390, 820, 1180, 1440px 에서 실행 오류와 가로 스크롤은 발생하지 않았다. 결과를 Fig. 21 에 나타내었다.

열차 시각표 자료 조사
38.1 공공 API 활용신청
v1.0.1.5 까지의 도구는 이용자가 날짜, 출발 시각, 도착 시각을 직접 입력하는 방식이었다. 열차 시각표가 이미 공개되어 있으므로 날짜와 구간을 선택한 뒤 그날 운행하는 열차 목록에서 고르는 방식이 타당하다고 판단하였다. 이를 위하여 2026년 10월 4일에 공공 API 25종의 활용신청을 하였으며, 그 목록을 Table 46 에 나타내었다.
Table 46. 활용신청한 공공 API 목록 (2026.10.4. 기준)
| 신청처 | API 명 |
|---|---|
| 공공데이터포털 | 국토교통부_(TAGO)_열차정보 |
| 공공데이터포털 | 한국철도공사_KTX 노선별 역정보 |
| 공공데이터포털 | 한국천문연구원_특일 정보 |
| 공공데이터포털 | 한국천문연구원_출몰시각 정보 |
| 공공데이터포털 | 기상청_단기예보 조회서비스 |
| 공공데이터포털 | 기상청_중기예보 조회서비스 |
| 공공데이터포털 | 기상청_지상(종관, ASOS) 시간자료 조회서비스 |
| 공공데이터포털 | (주)에스알_SRT 승차권 진위확인 사용통계 |
| 철도 데이터 포털 | 역사별 인접 계단 차량번호 |
| 철도 데이터 포털 | 도시철도 노선별 열차 편성종류 |
| 철도 데이터 포털 | 차량별 휠체어 승차가능 차량정보 |
| 철도 데이터 포털 | 차량별 노약자 좌석 유무 |
| 철도 데이터 포털 | 차량별 임산부 좌석 유무 |
| 철도 데이터 포털 | 열차운영기관정보 |
| 철도 데이터 포털 | 역사별 정보 |
| 철도 데이터 포털 | 열차별 운행시각표 |
| 철도 데이터 포털 | 열차별 운행시각표(급행) |
| 철도 데이터 포털 | 역사별 승강장 정보 |
| 철도 데이터 포털 | 출입구 승강장 이동경로(표준) |
| 철도 데이터 포털 | 환승 이동경로 |
| 철도 데이터 포털 | 편의정보(표준) |
| 철도 데이터 포털 | 역사별 공기질 측정 정보 |
| 철도 데이터 포털 | 역사별 인접 승강기 차량번호 |
| 철도 데이터 포털 | 역사별 에스컬레이터 현황 |
| 철도 데이터 포털 | 역사별 엘리베이터 현황 |
API 별 기능, 요청 조건, 인증키, 시험 호출 결과는 공개하지 않으며 별도의 인증키 관리 문서에서 관리한다.
38.2 KTX 구간별 통계 자료
한국철도공사 KTX 구간별 통계(2024년 1월 1일 기준)는 경부선과 호남선의 운행 횟수, 운임, 이용객을 2004년부터 2023년까지 연도별로 수록하였다. 주요 값을 Table 47 에 나타내었다.
Table 47. KTX 노선별 운행 횟수, 운임, 이용객
| 항목 | 노선 | 2004년 | 2019년 | 2020년 | 2023년 |
|---|---|---|---|---|---|
| 운행 횟수, 화요일(회) | 경부선 | 96 | 105 | 105 | 111 |
| 운행 횟수, 화요일(회) | 호남선 | 36 | 56 | 56 | 52 |
| 운행 횟수, 연말 토요일(회) | 경부선 | 104 | 126 | 126 | 131 |
| 운행 횟수, 연말 토요일(회) | 호남선 | 38 | 58 | 58 | 54 |
| 운임(원) | 경부선 서울에서 부산 | 45,000 | 59,800 | 59,800 | 59,800 |
| 운임(원) | 호남선 용산에서 목포 | 41,100 | 52,800 | 52,800 | 52,800 |
| 이용객(천 명) | 경부선 서울에서 부산 | 4,129 | 6,032 | 2,854 | 6,686 |
| 이용객(천 명) | 호남선 서울·용산에서 목포 | 303 | 744 | 471 | 832 |
2004년 이용객은 개통월인 4월부터의 값이다. 운임은 경부선과 호남선 모두 2015년 이후 2023년까지 변동이 없었다. 이용객은 2020년에 2019년 대비 경부선 53%, 호남선 37% 감소하였으며, 2023년에는 두 노선 모두 2019년 값을 넘어선 것으로 나타났다.
38.3 월별 시간표 파일의 처리
한국철도공사 열차운임·시간표 게시판은 하나의 자료를 갱신하는 방식이 아니라 기준일이 바뀔 때마다 새 파일을 게시하는 방식이다. 이 파일을 매월 수집하여 도구에 반영하는 방식은 다음 이유로 채택하지 않았다.
- 열차 시각표 API 로 승차권 예매 가능 기간 안의 열차 목록을 확보할 수 있다.
- 게시판 파일은 형식이 기준일마다 같다는 보장이 없어 자동 처리의 유지 비용이 증가한다.
- 예매 사이트의 자동 수집은 이용약관 위반 소지가 있다.
게시판 파일은 API 가 제공하지 않는 날짜를 선택한 경우의 참고 시각표 후보로만 검토한다.
결정 필요 사항
v1.0.1.6 이후의 결정 필요 사항은 개발일지 2편 10장에 정리하였다.
결론
v1.0.0.0 부터 v1.0.1.5 까지의 개발 경과와 이후의 자료 조사를 정리하면 다음과 같다.
- v1.0.0.0 에서는 좌석 선별 기능 6종을 단일 HTML 파일로 구현하였으며, 선로 좌표와 태양 위치로 좌우 창의 일사 비율을 계산하였다.
- v1.0.0.1 에서는 개발일지와 화면 문구를 논문체로 수정하고, 종결 표현과 구어 표현을 검사하는 논문체검사.py 를 작성하였다.
- v1.0.0.2 에서는 이름을 GenealogyRail 에서 OptRail 로 변경하고, 기능 후보 17종, 작업 절차, 일정을 정리하였다. 기존 서비스 33건을 조사한 결과 선행 사례가 확인되지 않은 항목은 5종이었다.
- v1.0.0.3 에서는 조회 전용 빈자리 알림을 열차 단위 기능으로 검토하였고, 휴대폰 화면 초안 7개를 작성하였다. 외부 생성형 AI 의 디자인 자문 2회차 지적 19건 중 14건을 반영하였다.
- v1.0.0.4 에서는 결정 필요 사항을 지금 결정 4건, 이후 결정 3건, 보류 1건으로 정리하였다. 좌석 평가 함수를 화면과 분리하고, 휴대폰 운영체제의 화면 설계 지침에 따른 화면을 도구에 적용하였다.
- v1.0.0.5 에서는 설정 화면에 참고문헌 39건을 IEEE 양식으로 표시하는 팝업을 추가하였다.
- v1.0.0.6 에서는 화면 폭 4구간의 반응형 배치, 실행 순서 표시와 티켓 분석 메뉴의 활성화 조건, 화면 문구 정비, 좌석 즐겨찾기를 적용하였다.
- v1.0.0.7 에서는 일행 좌석, 1인석, 화장실 가까이, 출입문 거리 조건을 추가하고, 조건을 4개 묶음으로 분류하였다. 차종별 조사가 필요한 조건 4종은 「준비 중」으로 표시하였다.
- v1.0.0.8 에서는 KTX 승강장의 호차 위치 자료를 조사하여 확인된 동대구역 상행 자료를 에스컬레이터 앞 호차 조건에 반영하고, 배치도에 진행 방향 화살표를 추가하였다.
- v1.0.0.9 에서는 즐겨찾기를 임시회원의 암호화 저장소에 보관하고, 티켓 분석의 햇빛 그래프를 좌우 비율과 구간 요약을 포함한 한 그래프로 통합하였다.
- v1.0.1.0 에서는 조건 묶음의 이름을 바꾸고, 묶음 순서에 따라 가중치를 곱하는 선택의 순위와 무작위 추천을 추가하였다. 휴일을 구분하는 달력과, 더미 개념도로 1인 공간 비율을 비교하는 좌석 분석을 추가하였다.
- v1.0.1.1 에서는 좌석 분석의 좌석을 KTX 1세대 일반실 치수로, 더미를 8차 한국인 인체치수조사의 50분위 치수로 다시 작성하였다. 무릎 앞 여유는 좌석 간격 930mm 에서 170mm, 특실에서 360mm 였다.
- v1.0.1.2 에서는 좌석 색을 보라로 변경하여 더미, 1인 공간, 비교 윤곽과 구분하였다.
- v1.0.1.3 에서는 세운 등받이(수평에서 76°)를 기본으로, 젖힌 등받이(56°)를 점선으로 표시하고, 가장 좁은 좌석을 비교 대상에 추가하였다. 옆모습과 위에서 본 모습은 같은 축척의 정투상으로 정렬하였다. 좌석 간격 930mm 의 무릎 앞 여유는 앞 좌석을 세운 상태에서 239mm, 젖힌 상태에서 178mm 였다.
- v1.0.1.4 에서는 옆모습과 위에서 본 모습에 같은 의자 1개와 앞 좌석을 그리고, 의자에 윤곽선과 연한 색을 적용하였다.
- v1.0.1.5 에서는 디자인 승인 검토 결과에 따라 좌석 분석을 무릎 여유를 강조한 옆모습과 비교 막대로 재구성하고, 기준 대비 차이를 함께 표시하였다.
- v1.0.1.5 이후 열차 시각표, 정차역, 휴일, 태양 위치, 날씨 자료를 얻기 위하여 공공 API 25종의 활용신청을 하였다.
본편(글 1684)은 v1.0.1.5 로 게시되었다. 이후 판의 경과는 개발일지 2편에 기록한다.
REFERENCES
- [1][1] KTX 좌석배치도 · 코레일톡. https://korailtalk.co.kr/299/
- [2][2] KTX-산천 좌석배치도(A타입) · 코레일톡. https://korailtalk.co.kr/304/
- [3][3] 신형 KTX-산천(타입B) 좌석배치도 · 코레일톡. https://korailtalk.co.kr/486/
- [4][4] KTX-이음 좌석배치도 · 코레일톡. https://korailtalk.co.kr/704/
- [5][5] KTX-청룡 좌석배치도 · 코레일톡. https://korailtalk.co.kr/763/
- [6][6] ITX-마음 좌석배치도 · 코레일톡. https://korailtalk.co.kr/758/
- [7][7] ITX-새마을 좌석배치도 · 코레일톡. https://korailtalk.co.kr/293/
- [8][8] 새로나온 열차, ITX-마음을 소개합니다 · 코레일톡. https://korailtalk.co.kr/750/
- [9][9] KTX-I · Wikipedia(영문). https://en.wikipedia.org/wiki/KTX-I
- [10][10] KTX-I · 위키백과(한국어). https://ko.wikipedia.org/wiki/KTX-I
- [11][11] KTX-Sancheon · Wikipedia(영문). https://en.wikipedia.org/wiki/KTX-Sancheon
- [12][12] KTX-산천 · 위키백과(한국어). https://ko.wikipedia.org/wiki/KTX-산천
- [13][13] KTX-이음 · 위키백과(한국어). https://ko.wikipedia.org/wiki/KTX-이음
- [14][14] KTX-Eum · Wikipedia(영문). https://en.wikipedia.org/wiki/KTX-Eum
- [15][15] KTX-Cheongryong · Wikipedia(영문). https://en.wikipedia.org/wiki/KTX-Cheongryong
- [16][16] 한국철도공사 홍보센터 기차소개 KTX. https://info.korail.com/info/contents.do?key=1503
- [17][17] 한국철도공사 홍보센터 기차소개 KTX-산천. https://info.korail.com/info/contents.do?key=1504
- [18][18] 한국철도공사 홍보센터 기차소개 KTX-산천(원강). https://info.korail.com/info/contents.do?key=2730
- [19][19] 한국철도공사 홍보센터 기차소개 KTX-청룡. https://info.korail.com/info/contents.do?key=2731
- [20][20] 한국철도공사 홍보센터 기차소개 ITX-새마을. https://info.korail.com/info/contents.do?key=1507
- [21][21] 한국철도공사 홍보센터 기차소개 ITX-마음. https://info.korail.com/info/contents.do?key=2732
- [22][22] 코레일 직원이 알려줬다는 'KTX 명당' 좌석 · 위키트리. https://www.wikitree.co.kr/articles/1134067
- [23][23] 예매 전에 꼭 알아야 할 KTX 꿀팁 6가지 · 위키트리. https://www.wikitree.co.kr/articles/1092477
- [24][24] KTX 좌석 배치도를 활용한 최고의 KTX 좌석 선택 방법 · 트립닷컴. https://kr.trip.com/guide/train/KTX+.html
- [25][25] KTX 좌석 배치도 / KTX 좋은 좌석 자리는 어디일까? · 블로그. https://fearless.co.kr/577
- [26][26] KTX에도 편한 좌석이? · 브런치. https://brunch.co.kr/@azafa/737
- [27][27] 고속버스·KTX 명당 좌석 꿀팁 · 경기도 게시판. https://gits.gg.go.kr/web/newboard/5567.do?mode=view&idx=188197139
- [28][28] [박병선의 열차이야기] KTX-이음 · 철도경제신문. https://www.redaily.co.kr/news/articleView.html?idxno=2408
- [29][29] KTX(차량) · 나무위키. https://namu.wiki/w/KTX()
- [30][30] KTX 산천 차이 · 이즐 블로그. https://blog.myezl.com/ktx-------/
- [31][31] ITX-Saemaeul · Wikipedia(영문). https://en.wikipedia.org/wiki/ITX-Saemaeul
- [32][32] 코레일의 신형 ITX-새마을 공개 · 코레일톡. https://korailtalk.co.kr/168/
- [33][33] KTX-산천 · 나무위키. https://namu.wiki/w/KTX-
- [34][34] 코레일 열차 좌석배치도(공식, 본문 미판독). https://www.korail.com/ticket/train/trainGuide/seatingPlan
- [35][35] KTX 예매 좋은 좌석부터 모든 꿀팁 총정리 · 여행톡톡. https://www.tourtoctoc.com/news/articleView.html?idxno=54
- [36][36] Open-Meteo Forecast API. https://open-meteo.com/en/docs
- [37][37] OpenStreetMap API v0.6. 경로 관계 11214334, 11272646, 11272647. © OpenStreetMap contributors, ODbL. https://api.openstreetmap.org/
- [38][38] Nominatim 지명 검색 서비스. https://nominatim.openstreetmap.org/