8P by baeba 22일전 | favorite | 댓글 16개

국내 항공권을 검색해서 항공사 홈페이지에서
예약을 할 수 있는 안드로이드 앱입니다.

개인적으로 제주도 여행을 자주 가는 편이라서
편하게 빨리 저렴한 가격의 항공권을 찾다가
아이디어가 떠올라서 만들었습니다.

[ 주요 기능 ]

  • 항공권 비교 검색
  • 항공권을 직접 항공사 홈페이지에서 예약 가능

[ 고려한 사항 ]

  • 저사양 스마트폰에서 돌아갈 수 있도록 가볍게 만들었음.
  • 기존 항공사 앱이 있으면 해당 앱에서 띄울수 있음.

[ 다른 앱과의 차이점 ]

  • 수수료 없음.
  • 사용자가 해당 앱을 통하여 직접 항공권 예약가능.
  • 개인정보 요구하지 않음. 로그인 필요없음.

[ 사용 기술 ]

  • Android : WebView, java
  • Frontend : Vanilna JS, CSS, Webpack, Swagger API

개발 관련 내용도 물어 보시면 답변해드리겠습니다.
취미로 만들다 보니 부족한 점이 많았습니다.
관련하여 피드백 주시면 감사하겠습니다.

항공사 사이트 api는 어떻게 분석하셨나요?

무식하게 했습니다. -_-

대한항공,아시아나,진에어,제주항공,티웨이,에어서울,에어부산,이스타
구글항공,네이버항공,웹투어,인터파크항공 등
국내에 소개된 항공사들 홈페이지 들어가서
전부다 일일이 디버거창과 네트웍 패킷캡쳐 띄워 놓고
어떻게 서로 주고 받는지 분석했습니다.

분석하다가 보면 길이(?) 보입니다.

저도 분석해보고 싶은데 보다보니 뭔가 잘 안보이네요 ㅠㅠㅠㅠㅠ 조금 팁이라도 가능할까요..?

그리고...
각각의 항공사들 별로 결제 시스템이 천차만별이기 때문에
웹뷰상에서 결제를 시도하려고 하면
별에별 오류가 발생합니다.
쉽게 설명하면
PC에 뱅킹할때 보안프로그램 설치되듯이
안드로이드용 보안프로그램을 설치해야 결제 되는 곳도
있기 때문에

항공사 1개에 결제 모듈이 5개가 있다면
항공사 8개이면 대략 40가지 테스트를 해야 해요.
이걸 개인이 하는것은 힘듭니다.

다른 커뮤니티에 항공권 예약을 어떻게 하는지 간단히
질문 해보니...
네이버나, 인터파크나, 구글 항공이나 이런곳에서
가격만 검색하고.
실질적인 예약은 항공사앱을 통해서 하더군요.

제가 만든 앱도 처음 의도는 이것과 비슷했어요.
검색하고.. 항공사앱 안띄우고 바로 항공사 홈피의
검색 결과 창으로 이동해서 바로 결제하는것..

조언을 드리자면...
Firefox 개발자용 브라우저 있습니다.
Chrome 개발툴도 괜찮습니다만.
약간 차이가 있어요.

보통 API가 호출되고 다음 페이지로 redirect 되기 때문에..
실질적인 API가 어떻게 호출되는지 알아내기가 쉽지 않아요.
무식하게 redirect 넘어가기 전에 웹을 중단 시키든지..

아니면..
네트웍 패킷 캡쳐 프로그램을 띄워 놓고
모니터링 하시면 최종 API를 찾을 수 있어요.

API를 찾아다고 하더라도..
인증키, 쿠키정보, 관련 세션정보가 맞지 않으면
해당 API를 호출하더라도 오류 발생합니다.

각각의 항공사들 마다 특징이 있기 때문에.
정말로 -_- 트릭이 필요합니다.

제일 힘든곳이 대한항공입니다!! 앵귤러사용해서
리버스하기가 매우 어려워요.

때려치울까 하다가...
한 2년정도 삽질했어요.ㅎㅎㅎ 머리가 나쁘다 보니.. 손발이 고생을...

우선 진에어 부터 시도중인데 x-csrf-token과 cookie값 처리를 어떻게 하셨었는지 어쭈어 봐도 괜찮을까요...? 다른 항공사는 아직 감을 못잡았는데 진에어는 어떻게 요청을 보내야 하는지는 찾았는데 이 두 값이 문제이네요 ㅠㅠㅠ

크롬 또는 Firefox 또는 edge를 에서 F12 누르면
개발툴 뜹니다.
여기서 디버거 탭 선택하시고.. 왼쪽에 소스창을 확인하고
저장소 탭 선택하면 왼쪽에 로컬저장소,세션저장소,캐시저장소,indexed DB, 쿠키 항목들
있어요.. 이거 확인하시고...

네트워크 탭 선택하시고.. 웹 페이지 눌렀을때 패킷들이 어떻게 왔다 갔다 하는지 확인하시고
대충 파악되면

디버거 탭에서 브레이크포인트 걸고
이 상태에서 웹 페이지가 서버와 어떻게 왔다 갔다 하는지
일일이 확인 해야 해요.

진에어는 쉬운 편인데^^;;; 최근에 화면이 이쁘게 개편이 되긴 했습니다.
내부 로직은 예전(2년전과 거의 바뀐게 없어요)

서버에서 생성된 token이 클라이언트로 넘어오면 웹브라워저 내부의 저장소의
어디에 저장되는지 확인해보세요.

저의 경우는 단순하게 사용자 정보와 날짜정보만 가지고
해당 화면까지 이동만 하고..
해당 시간의 위치까지 화면 스크롤 하고 끝이에요.

여기서 가격 누르고 로그인 시키고 할수도 있는데.
이부분은 너무 케이스 바이 케이스라..

사용자에게 자유롭게 할 수 있도록 남겨 놨어요.

더 쉽게 설명하자면
사용자가 항공사 앱을 키지 않고
그냥 스마트폰에 있는 많이 사용하는 웹브라우저(크롬, 삼성인터넷 등등)으로
항공사 홈피에 접속해서 검색하고
로그인 하고 결제하는 거죠..

그런데 이걸 웹뷰로 하면
제한 사항이 아주 많아서 제대로 구현이 되지 않아요.
각각의 항공사 별로 별에별 희한한 로직으로 구현되어 있어서..
진에어만 해도 결제 시스템이 여러게 있을꺼에요.
이거 연동테스트 다 해봐야 되니..

저도 이글 보고 제가 자주타는 노선의 항공사 위주로 해보려 하는게 저도 삽질 많이 하겠네요 ㅋㅋㅋㅋ
감사합니다

멋진 프로젝트네요 !! 안드로이드가 없어서 ㅜㅜ ios 혹은 웹페이지 기대하고 있겠습니다!!

웹앱이라.. 웹페이지로도 만들수 있었습니다만...^^
서버 관리하기 귀찮아서 -_-
그냥 폰에다가 웹페이지용 파일들을 다 올려버렸습니다.
사용자 입장에서는 서버에 접속을 하지 않으니..
반응 속도도 빠르고..

그렇다 보니...
관련 보안 제약 및 충돌이 많이 있어서
개발할 때 고생좀 했습니다.
특히 결제 모듈들은
항공사 별로 다 천차 만별이고 별에별 결제 시스템이 붙어 있는것을
출시 직전에 알아서
테스트 하느라 힘들었어요.

저도 가끔 살때 크롤러 만들어서, 최저가 검색했었는데 유용할거 같아요 ㅋㅋ
궁금한점이 있습니다. Skyscanner에는 안나오는 것들이 많았었나요?

skyscanner과 같은 해외 항공권 검색사이트는 글로벌하게 검색을 하는 것을 지원합니다.
즉, 나라간 이동을 최저가로 하기 때문에... 국내용으로 별루 였습니다.

국내용은 그냥 내가 원하는 항공사, 날짜와 시간을 한번에 쉽게 볼수 있게 만들자
라는 것이 처음에 개발 방향 이었어요...

최초에는 자동(?)으로 검색해서 특정 날짜에 항공사와 시간과 가격을 맞춰놓고
알람을 보내줄려고 했는데... 이 기능은 잠시 접어 두고...
기존 항공권 앱처럼 검색해서 쉽게 필터링하고 바로 항공사 홈페이지에
이동해서 예약하게 만들었어요.

멋진 서비스를 만드셨군요.

  1. 국내항공권의 가격 정보는 스크린 스크래핑으로 처리 하신 건가요?
  2. 속도문제가 필연적으로 발생할텐데 캐시를 사용하시나요?

스크린 스크래핑은 사용하지 않았어요.
캐시는 사용하지 않습니다.
항공사에서 사용자 웹 페이지에 전달되는 정보들을
일일이( -_-) 수동으로 내부적으로 파싱해서 필요한 정보만 뽑아서
가격정보를 만들었어요...

서버에서 하려고 하다가..
서버 비용때문에...
그냥 webview에서 다 처리를 했습니다.

와 멋지십니다. IOS 계획은 없으신가요?

IOS용으로 만들려고 맥미니 샀습니다. ^^