TECH 으로 돌아가기
TECH HACKER NEWS 오늘 9분 읽기 32 READS

비행기 연료를 아끼는 경로는 어떻게 찾을까? 오픈소스로 직접 돌려본 항공 경로 최적화

비행기 연료를 아끼는 경로는 어떻게 찾을까? 오픈소스로 직접 돌려본 항공 경로 최적화
SOURCE IMAGE · HACKER NEWS
비행기 연료를 아끼는 경로는 어떻게 찾을까? 오픈소스로 직접 돌려본 항공 경로 최적화

비행기 한 대가 태우는 연료, 그리고 경로 하나의 차이

항공사 운영비에서 연료가 차지하는 비중이 대략 20~30% 정도 돼요. 인천에서 뉴욕까지 가는 장거리 노선이면 한 번 비행에 연료를 100톤 가까이 싣거든요. 그래서 연료를 1%만 아껴도 항공사 전체로 보면 연간 수백억 원 단위의 돈이 왔다갔다해요. 이 연료 소모량을 좌우하는 큰 변수 중 하나가 바로 '어떤 경로로, 어떤 고도로 날아가느냐'예요.

데이터 엔지니어링 블로그로 잘 알려진 마크 리트윈칙(Mark Litwintschik)이 이 문제를 오픈소스 도구만 가지고 직접 풀어본 글을 올렸어요. 에어버스가 공개한 scikit-decide라는 라이브러리와 델프트 공대에서 만든 OpenAP이라는 항공기 성능 모델을 조합해서, 바람 데이터를 반영한 연료 최적 경로를 계산해보는 내용인데요. 항공 도메인 지식이 없는 개발자도 따라갈 수 있는 구성이라 소개해볼게요.

왜 직선이 최적 경로가 아닐까

지도만 보면 두 공항을 잇는 최단 경로(대권 항로)로 가는 게 제일 좋을 것 같잖아요. 그런데 실제로는 그렇지 않아요. 바람 때문이에요.

고도 10km 정도 상공에는 제트기류(jet stream)라는 강한 바람이 흐르는데, 빠를 때는 시속 200~300km까지 나와요. 시속 900km로 나는 비행기 입장에서 이 바람을 뒤에서 받으면 연료를 훨씬 덜 쓰고, 정면으로 맞으면 훨씬 더 써요. 그래서 실제 항공사들은 조금 돌아가더라도 순풍을 타는 경로를 택하는데, 이걸 '바람 최적 경로(wind-optimal routing)'라고 불러요. 미국에서 유럽으로 갈 때와 돌아올 때 비행 시간이 1시간 가까이 차이 나는 이유가 바로 이거예요.

고도도 마찬가지예요. 높이 올라갈수록 공기가 희박해져서 저항이 줄지만, 연료를 가득 실은 이륙 직후에는 무거워서 높이 올라가기 힘들어요. 그래서 연료를 태우며 가벼워질수록 조금씩 고도를 올리는 '스텝 클라임(step climb)' 전략을 써요. 결국 경로 최적화는 위도, 경도, 고도, 그리고 시간에 따라 변하는 바람까지 고려한 4차원 문제가 되는 거죠.

등장하는 도구: OpenAP과 scikit-decide

OpenAP은 델프트 공대(TU Delft)의 Junzi Sun 교수팀이 만든 오픈소스 항공기 성능 모델이에요. 이게 뭐냐면, 'A320이 고도 35,000피트에서 마하 0.78로 날 때 연료를 초당 몇 kg 태우느냐' 같은 걸 계산해주는 라이브러리예요. 항공기 종류별로 엔진 추력, 항력(공기 저항), 연료 소모율 같은 물리 모델이 들어 있어요. 원래 이런 모델은 유로컨트롤(Eurocontrol)의 BADA가 업계 표준인데, 라이선스가 필요해서 개인 개발자가 쓰기 어려웠거든요. OpenAP은 항공기 위치 방송 데이터인 ADS-B를 대량 분석하는 등의 방법으로 만든 완전 오픈소스 대안이라 pip으로 바로 설치돼요.

scikit-decide는 에어버스가 공개한 의사결정 AI 프레임워크예요. 계획(planning), 스케줄링, 강화학습처럼 '무엇을 어떤 순서로 해야 목표에 도달하느냐'를 푸는 도구 모음인데, 그 안에 항공 경로 계획(flight planning) 도메인이 예제로 들어 있어요. 이 도메인이 내부적으로 OpenAP을 불러서 연료 소모를 계산하고, 기상 데이터에서 바람을 읽어와 경로를 탐색해요.

어떻게 동작하나

동작 원리는 생각보다 직관적이에요. 출발 공항과 도착 공항 사이의 공간을 격자로 쪼개요. 진행 방향으로 N개, 좌우로 M개, 고도로 K개 지점을 두면 3차원 그리드가 만들어지고, 각 지점이 그래프의 노드가 돼요. 한 노드에서 다음 노드로 이동할 때 드는 비용을 OpenAP으로 계산하는데, 이때 그 위치와 고도, 시각의 바람을 반영해서 실제 대지 속도(ground speed)와 연료 소모를 구해요.

그다음은 익숙한 그래프 탐색 문제예요. scikit-decide는 A* 알고리즘과 그 변형들을 제공하고, 휴리스틱으로는 '여기서 목적지까지 직선으로 날아갔을 때 최소 연료' 같은 값을 써요. 결국 코딩 테스트에서 풀던 최단 경로 문제인데 간선 비용이 물리 시뮬레이션에서 나온다는 점만 달라요.

바람 데이터는 미국 해양대기청(NOAA)의 GFS라는 전 지구 기상 예보 모델을 써요. GRIB이라는 기상 전용 바이너리 포맷으로 배포되는데, 격자마다 고도별 풍향과 풍속이 들어 있어요. 이걸 받아서 보간(interpolation)하면 임의의 위치와 고도의 바람을 얻을 수 있어요. 마크의 블로그가 늘 그렇듯 설치부터 실행까지 하나하나 따라가는 형식이라, 직접 재현해보기 좋아요.

업계 맥락: 진짜 항공사는 어떻게 하나

실제 항공사들은 루프트한자 시스템즈의 Lido, 제프슨(Jeppesen)의 JetPlanner, 에어버스의 NAVBLUE 같은 상용 비행 계획 시스템을 써요. 이런 시스템은 바람뿐 아니라 나라별 영공 통과 요금, 기상 회피, 관제 제한, 예비 연료 규정까지 전부 반영하니까 오픈소스 예제와는 복잡도가 차원이 달라요.

하지만 흐름 자체는 오픈 쪽으로 가고 있어요. 유럽은 '자유 항로 공역(Free Route Airspace)'이라고 해서 정해진 항로 대신 원하는 경로로 날 수 있게 규제를 풀고 있고, 그럴수록 이런 최적화 알고리즘의 가치가 커져요. 최근에는 연료뿐 아니라 비행운(contrail)을 피하는 경로 연구도 활발해요. 비행운이 기후에 미치는 영향이 CO2 못지않게 크다는 게 밝혀졌거든요. 구글과 아메리칸항공이 함께 비행운 회피 실험을 한 적도 있어요.

OpenAP 쪽에는 OpenAP.top이라는 별도 최적화 도구도 있어요. 그래프 탐색 대신 최적 제어(optimal control) 방식으로 연속적인 궤적을 푸는 건데, 이산화해서 탐색하는 scikit-decide 방식과 비교해보면 좋은 공부거리예요.

한국 개발자에게 주는 시사점

항공사 개발팀이 아니더라도 배울 게 많아요. 첫째, '도메인 물리 모델 + 오픈 데이터 + 그래프 탐색'이라는 조합이 다른 분야에도 그대로 적용돼요. 물류 배송 경로, 선박 항로, 전기차 충전 경로 계획도 구조가 같거든요. 둘째, GRIB 같은 기상 데이터를 다뤄본 경험은 의외로 희소해서 데이터 엔지니어 포트폴리오로 차별화가 돼요. 셋째, 인천에서 LA까지 같은 실제 노선을 넣고 돌려보면 결과가 직관적으로 와닿아서 사이드 프로젝트 주제로도 괜찮아요.

마무리

한 줄 정리하면, 항공 경로 최적화는 결국 '물리 모델로 비용을 계산하는 A* 탐색'이고, 이제 그 모든 부품이 오픈소스로 나와 있어요.

여러분이라면 이 조합으로 어떤 경로 최적화 문제를 풀어보고 싶으세요? 실무에서 비슷한 탐색 문제를 풀어본 경험이 있다면 공유해주세요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://tech.marksblogg.com/scikit-decide-openap-optimal-fli...
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...