MSFS 2020에서 IFR 비행을 할 때 쓰려고 만든 개인용 터치 EFB(Electronic Flight Bag)예요. 게임 PC에서 작은 브리지 서버를 띄우고, 태블릿 브라우저로 접속해서 FCU 조작, 지도, 경로, 체크리스트를 봐요.
저장소: https://github.com/joseph-84/fs2020_EFB (MIT)

왜 만들었나
FS2020에서는 주로 기본 A320이나 FlyByWire A32NX로 IFR 비행을 해요. 비행 중 FCU 속도·방향·고도를 바꿀 때마다 가상 콕핏을 마우스로 돌리는 게 꽤 번거로웠어요. 조이스틱(TCA Sidestick)을 잡은 채로 시점을 옮기고, 작은 노브에 마우스를 맞추고, 휠을 돌리고…
마침 쓰지 않는 태블릿이 하나 있어서, 이걸 조종석 옆에 세워 두고 터치로 FCU를 돌리는 보조 화면으로 쓰기로 했어요. 처음엔 FCU만 생각했는데 만들다 보니 지도, 경로 계산, 출발 준비, 체크리스트, 음성 콜아웃까지 붙었어요.
구조
[게임 PC] [태블릿]
MSFS 2020 ⇄ SimConnect ⇄ 브리지 서버 (Node.js) ──LAN/WebSocket──▶ 브라우저 (웹 UI)
- 브리지 서버: 게임 PC에서 돌아요. SimConnect로 비행 데이터를 읽고, 태블릿에서 온 명령(FCU 조작 등)을 시뮬레이터로 보내요.
- 웹 UI: 태블릿은 브라우저만 있으면 돼요. 앱 설치가 필요 없고, Windows 태블릿·안드로이드·아이패드 어느 쪽이든 쓸 수 있어요.
- 같은 공유기(와이파이)에 붙어 있으면 콘솔에 나온 http://192.168.x.x:8787 주소로 접속하면 끝이에요.
사용한 기술
| 구분 | 사용한 것 |
| 서버 | Node.js 22+ / TypeScript, node-simconnect, ws(WebSocket) |
| 웹 UI | Vite + 바닐라 TypeScript (프레임워크 없음, 저사양 태블릿 고려) |
| 지도 | Leaflet + OpenTopoMap 타일 |
| 경로 데이터 | Little Navmap이 만든 FS2020 항법 DB (Node 내장 SQLite로 읽기) |
| 글꼴 | B612 / B612 Mono (Airbus 조종석용으로 만들어진 공개 글꼴) |
화면 소개
아래 화면들은 모두 시뮬레이터 없이 모의 비행 데이터(김포 → 제주)로 찍었어요. 그래서 상단에 MOCK 표시가 있어요.
1. FLY: FCU + 비행 정보

- 위쪽 띠: 지상속도와 바람, 남은 연료, 다음 웨이포인트까지 거리·시간, 목적지까지 거리와 ETA
- 그 아래: 비행 단계(PREFLIGHT → TAXI → … → LANDED). 속도·고도·지상 여부로 자동으로 판단해요.
- FCU 카드 4개(SPD / HDG / ALT / V/S): 큰 − + 버튼, PUSH / PULL, 길게 누르면 빠르게 바뀌어요.
- 카드마다 "현재" 줄이 있어서 목표값과 실제 속도·방향·고도·승강률을 같이 볼 수 있어요.
- 아래 줄: LOC, AP1, AP2, A/THR, EXPED, APPR 모드 버튼
기체를 바꾸면 화면도 자동으로 바뀌어요. Cessna 172(G1000)로 바꾸면 HDG / ALT / V/S와 GA용 AP 버튼(AP, HDG, NAV, APR, REV, ALT)이 나와요.

Cessna로 바꾸면 GA 오토파일럿 배치로 바뀌고, 위쪽 띠에 IAS가 추가돼요
기본 A320과 FBW A32NX는 내부 구현이 완전히 달라요. FBW는 FCU 대부분을 자체 L:Var와 커스텀 이벤트로 처리해서 표준 SimConnect 이벤트가 먹지 않아요. 그래서 서버에서 기체 이름(TITLE)으로 기체를 판별하고, 기체별 어댑터(기본 A320 / FBW / GA)가 같은 버튼을 각자 맞는 방식으로 보내도록 했어요.
2. MAP: VFR Map처럼 경로와 내 위치

지형도 위에 경로, 웨이포인트, 내 항공기, T/D(강하 시작점)가 표시돼요
- 지나온 구간은 흐리게, 다음 웨이포인트까지는 굵게, 다음 지점은 강조해요.
- 왼쪽 위 카드: GS, 고도, 트랙, 다음 지점, T/D까지 거리, 목적지
- 오른쪽 버튼: 확대/축소, 따라가기, 경로 전체 보기, 북쪽 위 / 진행 방향 위, 레이어(공항·VOR·NDB·이름)
야간 비행용 어두운 지도도 있어요.

야간 모드. 같은 지형도의 색을 반전해서 어둡게 만들었어요
진행 방향을 위로 두는 모드도 있어요. 실제 항공기 ND처럼 진행 방향이 항상 위를 향하고, 내 항공기는 화면 아래쪽에 있어서 앞쪽이 더 넓게 보여요.

진행 방향 위(TRK UP). 웨이포인트 이름은 지도가 돌아가도 똑바로 서 있어요
3. ROUTE: FS2020 데이터로 경로 계산

- SimBrief 사용자명으로 OFP를 불러오거나, 출발·도착 공항만 넣고 "직접 계산"을 눌러요.
- 활주로는 실제 METAR 바람을 보고 고르고, SID → 항로 → STAR까지 이어서 계산해요.
- 비행 중에는 현재 위치 기준으로 지나간 지점(PASSED), 다음 지점(NEXT), 남은 거리와 ETA가 자동으로 갱신돼요.
- 계산한 경로는 MSFS용 .PLN 파일로도 저장해서 월드맵에서 바로 불러올 수 있어요.
4. PREP: 출발 준비 순서

- 무게·연료(SimBrief), 이륙·착륙 속도, QNH와 바람
- 기체별 MCDU/G1000 입력 순서: FBW 8단계, 기본 A320 9단계, Cessna 5단계
- 각 항목에 넣을 값이 오른쪽에 나와서 MCDU 옆에 두고 하나씩 체크하면서 입력하면 돼요.
5. CHECKLIST + 음성

비행 단계가 바뀌면 맞는 체크리스트가 자동으로 선택돼요
- A320 NORMAL과 Cessna 172 체크리스트
- 항목을 음성으로 읽어 주고, 조이스틱 버튼 하나로 "확인하고 다음"을 할 수 있어요. 손을 스틱에서 뗄 필요가 없어요.

음성 콜아웃 설정. 기체 계열별로 콜아웃을 켜고 끌 수 있어요
- 이륙(One hundred knots, V1, Rotate, Positive climb), 고도(One thousand to go), 접근(Hundred above, Minimums), 착륙 후(Spoilers, Seventy knots) 콜아웃 9개
- FBW·기본 A320은 기체가 직접 Minimums를 불러 주기 때문에 기본값은 꺼 뒀어요.
- 소리는 게임 PC 스피커(헤드셋)로 나와요.
만들면서 부딪힌 것들
1. SimBrief 경로와 MCDU가 안 맞는 문제 처음엔 경로를 SimBrief OFP에서 그대로 가져왔어요. 그런데 무료 SimBrief는 AIRAC가 최신이고, FS2020 기본 항법 데이터는 그보다 오래돼서 SID/STAR 이름이 안 맞는 경우가 자주 생겼어요. 결국 경로 계산은 **FS2020 항법 데이터(Little Navmap DB)**로 직접 하고, SimBrief는 무게·연료·CI만 쓰도록 바꿨어요. 항로망을 그래프로 만들어 SID 끝점에서 STAR 시작점까지 최단 경로를 찾아요.
2. 다크 지도에 API 키가 필요해짐 야간 지도로 CARTO 다크 타일을 쓰려고 했는데, 지금은 API 키를 요구하더라고요. 그래서 같은 OpenTopoMap 타일에 CSS 필터(색 반전 + 색상 회전)를 걸어서 어두운 지도를 만들었어요.
3. 브라우저 음성의 제약 처음엔 태블릿 브라우저의 음성 합성(Web Speech API)으로 콜아웃을 냈는데, 브라우저 정책상 화면을 한 번 터치해야 소리가 나요. 헤드셋으로 듣는 것도 불편했고요. 지금은 게임 PC에서 Windows 내장 음성(PowerShell + System.Speech)으로 말하게 고정했어요. PowerShell을 매번 띄우면 1초 넘게 늦어서, 하나를 계속 띄워 두고 한 줄씩 보내는 방식으로 지연을 줄였어요.
4. 해상도가 다른 태블릿 처음엔 3:2 태블릿(1440×960) 하나에 맞춰 만들어서 아이패드나 16:10 안드로이드 태블릿에서는 아래쪽 버튼이 겹쳤어요. 지금은 1440×960 기준 레이아웃을 화면 크기에 맞춰 통째로 키우거나 줄이고, 비율이 다르면 남는 방향으로 레이아웃이 늘어나게 했어요.

1024×768(구형 아이패드 크기)에서도 겹치지 않아요
설치와 실행
- 게임 PC에 Node.js LTS(22.13 이상)를 설치해요.
- (ROUTE를 쓰려면) Little Navmap에서 MSFS 2020 Scenery Library를 한 번 불러와요. 브리지가 DB를 자동으로 찾아요.
- 저장소를 받아요. GitHub(https://github.com/joseph-84/fs2020_EFB)에서 Code → Download ZIP으로 받거나 git clone을 써요.
git clone https://github.com/joseph-84/fs2020_EFB.git - 받은 폴더에서 start-efb.bat을 더블클릭해요. 처음 실행하면 패키지를 설치하고 빌드해요.
- 콘솔에 나온 주소를 태블릿 브라우저에서 열어요. 방화벽 창이 뜨면 "개인 네트워크"를 허용해요.
FS2020을 먼저 켜 두지 않아도 돼요. 브리지가 5초마다 다시 연결해요. 시뮬레이터 없이 화면만 보고 싶으면 start-efb.bat --mock으로 모의 비행을 볼 수 있어요.
⚠️ 집 네트워크 안에서만 쓰는 툴이에요. 인증이 없으니 공유기 포트포워딩으로 외부에 열지 마세요.
앞으로
- 실제 비행으로 하나씩 테스트하는 중이에요. (기본 A320 FCU는 확인 완료, FBW와 Cessna는 진행 중)
- 실기 테스트에서 나온 문제를 고치면서 FBW 전용 기능(FCU 모드 표시 등)을 더 채워 갈 예정이에요.
- 이슈나 개선 아이디어는 GitHub 저장소에 남겨 주세요: https://github.com/joseph-84/fs2020_EFB/issues
- 저장소: https://github.com/joseph-84/fs2020_EFB
- 라이선스: MIT
- 지도: © OpenStreetMap contributors, SRTM · © OpenTopoMap (CC-BY-SA)
- Microsoft Flight Simulator, Airbus, FlyByWire, Cessna, SimBrief는 각 소유자의 상표이며 이 프로젝트와 관계가 없어요.
'일상속 이야기' 카테고리의 다른 글
| 자출족의 마이너 교양 팟캐스트 추천 6선 (0) | 2026.07.02 |
|---|---|
| 📱 스마트폰으로 기도를 더 쉽게! '기도여정' 앱 사용법(천주교 기도생활 앱) (1) | 2026.05.14 |
| AI 만능주의 시대, 가끔은 '오버 스펙' 아닐까요? (1) | 2026.03.19 |
| 📚 나만의 똑똑한 법령 비서, NotebookLM 활용기 (0) | 2026.02.07 |
| 출퇴근 교통비 100% 환급받는 법! 2026 새해부터 바뀌는 K-패스 정리 (0) | 2026.01.02 |
