목록으로
지역사회 문제해결을 위한 AI 활용
AI와 만든 바다·산 안전 앱 '대한수호신' — 특보는 내 자리에, 끊긴 연락은 가족에게
👤 하얀여우829 📅 2026-09-29 👁 조회 93
특보는 이미 있었다, 닿지 않았을 뿐 — AI로 만든 위치 맞춤 안전 앱 '대한수호신'과 가족 자동 알림
① 어떤 상황에서 AI를 활용했나요

저는 항해사로 배를 탔습니다. 그래서 바다에서 특보가 뜬다는 게 무슨 뜻인지 압니다.

풍랑주의보는 뉴스 자막에 지나가는 한 줄이 아닙니다. 배 위에서는 그 한 줄이 "지금 돌아가지 않으면 못 돌아온다"는 뜻일 때가 있습니다. 문제는 그 정보가 정작 필요한 사람에게 닿지 않는다는 것입니다. 기상청 특보는 '동해남부앞바다'처럼 일반인이 자기 위치와 연결짓기 어려운 이름으로 발표됩니다. 갯바위에 선 사람이 그 문자를 받고 "그래서 지금 나가야 하나"를 판단하기는 어렵습니다.

한 가지가 더 있습니다. 바다와 산에서는 연락이 끊깁니다. 데이터가 안 터지거나, 배터리가 나가거나, 휴대폰이 물에 빠집니다. 그때 육지의 가족은 아무것도 모릅니다. 그냥 신호가 약한 건지, 정말 무슨 일이 생긴 건지 구분할 방법이 없습니다. 너무 늦게 신고하거나, 별일 아닌데 여러 명이 동시에 신고하거나 둘 중 하나가 됩니다.

그래서 만들고 싶었던 것은 특보를 '전달'하는 앱이 아니었습니다. 지금 내가 선 자리의 지형과 발효된 특보를 합쳐 "지금 무엇을 하면 안 되는지"를 말해주고, 연락이 끊기면 가족에게 알아서 알리는 앱입니다. 이름은 대한수호신으로 정했습니다.

저는 개발 전공자가 아닙니다. 기획은 제가 하고 구현은 AI와 함께하는 방식을 택했습니다.


② 어떤 AI를 어떻게 활용했나요?

Claude Code를 사용했습니다. 코드를 받아 복사하는 방식이 아니라, AI가 제 컴퓨터에서 직접 파일을 만들고, 테스트를 돌리고, 실제 공공 API를 호출하고, 제 휴대폰에 앱을 설치하며 개발하는 방식입니다.

먼저 기획서를 제가 썼습니다. 화면 구성, 알림 정책, 위험 판정 기준, 개인정보 처리 범위까지 정리하고, 반드시 지킬 원칙을 못 박았습니다.

- 안전 정보는 절대 창작하지 않는다. 모든 안내 문구는 공신력 있는 기관의 원문에서만 가져온다.
- API 응답을 추측하지 않는다. 실제로 호출해 확인한 뒤에 코드를 쓴다.
- 불확실하면 멈추고 물어본다.

이 원칙이 가장 중요했습니다. AI는 모르는 것도 그럴듯하게 써내기 때문입니다. 안전 앱에서 그것은 사람이 다치는 문제입니다.

실제 진행은 이렇게 했습니다.

- 공공 API 연동: 기상청 기상특보 조회서비스와 카카오 좌표 변환 API를 실제로 호출해 응답을 저장하고, 그것을 보고 코드를 썼습니다.
- 안전 문구 확보: 기상청 날씨누리와 산불방지센터의 국민행동요령 원문을 가져와 출처 기관과 인용일을 함께 저장했습니다. 풍랑·호우·강풍·태풍·폭염·산불·대설·한파 8종 특보에 대해 12가지 안내를 만들었습니다.
- 서버: Python으로 위험 판정, 연락 두절 감시, 보호자 웹페이지를 만들었습니다.
- 앱: 안드로이드 앱을 만들어 제 휴대폰(갤럭시 S20 울트라)에 무선으로 설치하며 개발했습니다.
- 검증: 서버 테스트 292개, 앱 테스트 30개를 함께 작성했고, 마지막에는 실제 휴대폰으로 와이파이와 데이터를 끊어가며 확인했습니다.

결과적으로 커밋 22개, 서버 코드 8,053줄, 앱 코드 2,258줄이 나왔습니다. AI에게 코드를 시키는 것보다, AI가 거짓말을 못 하게 만드는 구조를 짜는 데 더 공을 들였습니다.


③ 활용 결과 어떤 변화가 있었나요?

실제로 동작하는 앱과 서버가 나왔습니다. 지금 바로 되는 기능과, 절차를 거쳐 보완할 기능을 나누어 적습니다.

[지금 바로 되는 기능]

1. 데이터가 끊기면 가족에게 자동 문자 ( 실제 휴대폰으로 확인)
산이나 바다에서는 LTE가 안 터져도 문자는 가는 경우가 많습니다. 그래서 휴대폰의 인터넷이 5분 이상 끊기면 앱이 스스로 등록된 가족에게 문자를 보냅니다.

[대한수호신] ○○○님 데이터 연결 끊김
- 끊긴 시각: 09월 29일 23:33 (5분 전)
- 마지막 위치: 36도 3분 0초, 129도 36분 0초
- 배터리: 95%
※ 문자는 되지만 데이터가 끊겼습니다. 통화를 시도해 보세요.
※ 119 신고 시 위 좌표를 그대로 읽어주세요.

연결이 돌아오면 "연결이 복구되었습니다"라는 해제 문자가 자동으로 갑니다. 제 휴대폰으로 와이파이와 데이터를 끊어 시험했고, 끊긴 지 정확히 5분 뒤에 가족 번호로 문자가 도착하는 것을 확인했습니다. 터널이나 지하철처럼 잠깐 끊기는 경우와, 특보가 없는 도심에서 끊기는 경우에는 보내지 않습니다.

2. 가족에게 내 위치 문자 보내기
버튼 하나로 가족에게 현재 위치, 발효 중인 특보, 배터리 잔량을 문자로 보냅니다.

3. 119 신고용 위치 카드
119에 전화로 불러줄 수 있도록 좌표를 "36도 3분 0초, 129도 36분 0초"처럼 크게 보여주고, 읽어주기 버튼을 누르면 "북위 삼십육도 삼분 영초"라고 또박또박 읽습니다. 휴대폰 안에서 계산하기 때문에 통신이 끊겨도 뜹니다.

4. 내 위치 맞춤 위험 안내
좌표를 넣으면 해안·해상·섬·산지 같은 지형을 판정하고, 기상청에 실제로 발효 중인 특보 가운데 그 자리에 해당하는 것만 골라 안내합니다. 같은 풍랑주의보라도 해안에 있는 사람에게는 "바닷가로 나가지 마십시오", 배에 탄 사람에게는 "관계기관에 연락하고 대피하십시오"가 나갑니다. 모든 문구에는 출처 기관과 인용일이 붙습니다.

5. 머무는 동안 다시 알리기
위험구역의 같은 자리에 30분 이상 머물면 경보는 30분, 주의보는 60분마다 다시 알립니다. 주의보가 경보로 올라가면 즉시 알립니다. 경보만 방해금지 모드를 뚫고 울리게 했습니다.

6. 개인정보 자동 삭제
위치 기록은 7일, 발송 기록은 90일이 지나면 자동으로 지워지고, 언제든 즉시 전체 삭제할 수 있습니다.

[절차를 거쳐 보완할 기능]

코드는 대부분 만들어져 있고, 행정 절차와 데이터 확보가 남아 있습니다.

1. 서버를 24시간 운영 — 컴퓨터를 켜두지 않아도 되게
지금은 서버가 제 컴퓨터에서 돌고 있어서, 쓰는 동안 컴퓨터를 켜두어야 합니다. 서버를 24시간 켜져 있는 클라우드에 올리면 컴퓨터 없이 휴대폰만으로 어디서든 동작하고, 가족도 어디서든 보호자 페이지를 열 수 있습니다. 휴대폰이 꺼진 것을 알아채는 일은 휴대폰 바깥에서만 할 수 있기 때문에, 이 단계가 실제 운영의 출발점입니다.

2. 휴대폰이 꺼져도 가족에게 문자 — 발신번호 사전등록
데이터만 끊긴 경우는 지금도 휴대폰이 직접 알립니다. 하지만 배터리가 다 되거나 휴대폰이 물에 빠지면 휴대폰은 아무것도 보낼 수 없습니다. 이 경우는 서버가 신호가 끊긴 것을 보고 가족에게 알려야 합니다. 서버에서 문자를 보내려면 전기통신사업법에 따른 발신번호 사전등록(통신사 가입증명서 제출, 1~3영업일)이 필요합니다. 발송 코드는 이미 만들어져 있어 승인 후 바로 쓸 수 있습니다.

3. 가장 가까운 대피소로 안내 — 대피소 표준데이터 신청
행정안전부 대피소·무더위쉼터 데이터를 받으면, 통신이 끊겨도 나침반 방향과 거리로 가장 가까운 대피소를 가리킬 수 있습니다.

4. 산사태·대피명령까지 — 긴급재난문자 API 신청
기상특보에 없는 산사태, 침수, 대피명령까지 안내에 반영합니다.

5. 계곡 판정 — 하천 데이터 확보
하천 데이터를 확보하면 계곡을 따로 판정해 "상류의 비로 하류에 급류가 생길 수 있다"는 안내를 정확히 줄 수 있습니다.

6. 오래 켜둬도 되는지 검증 — 배터리 실측
안전 앱이 배터리를 다 써서 연락이 끊기면 자기모순입니다. 화면을 끈 채 몇 시간 켜두는 실측으로 시간당 소모를 확인하고, 목표(시간당 3% 이하)에 맞게 조정하겠습니다.

앱 안에서도 판정하지 못한 것은 화면에 그대로 표시합니다. 특보를 조회하지 못했는데 "특보 없음"으로 보이면 사용자가 안전하다고 오해하기 때문입니다.


④ 나만의 방식 또는 개선 포인트는 무엇인가요?

첫째, AI가 안전 문구를 지어내지 못하게 구조로 막았습니다.
안내 문구를 전부 별도 파일에 모으고, 문장마다 출처 기관·주소·인용일을 필수로 넣게 했습니다. 출처 없는 문장이 하나라도 섞이면 서버가 아예 켜지지 않습니다.

둘째, 추측하지 않고 실제로 확인하게 했습니다.
이 원칙 덕분에 제 기획서의 오류를 찾았습니다. 저는 "포항은 동해중부앞바다"라고 적었는데, 실제 기상청 통보문을 받아보니 포항은 동해남부 관할이었습니다. 그대로 뒀다면 포항에서는 특보가 영원히 잡히지 않았을 것입니다. 또 카카오는 '강원특별자치도', '전남광주통합특별시'라고 쓰는데 기상청은 '강원도', '전라남도'로 발표한다는 것도 실제 호출로 알게 되었습니다.

셋째, 실제 휴대폰으로 끊어봤습니다.
데이터 끊김 문자는 처음 만들었을 때 테스트를 모두 통과했는데도, 실제 휴대폰으로 와이파이와 데이터를 끊어보니 문자가 오지 않았습니다. 기록을 읽어보니 와이파이를 끄는 순간 휴대폰이 모바일 데이터로 잠깐 갈아타는데, 그 찰나에 "아직 인터넷이 된다"고 판단해 끊김을 놓치고 있었습니다. 3초 기다렸다가 확인하고, 혹시 놓쳐도 30초마다 다시 점검하도록 고친 뒤 다시 끊어보니 정확히 5분 뒤에 문자가 왔습니다. 책상 위 테스트만으로는 찾을 수 없는 문제였습니다.

넷째, 거짓 경보를 막는 데 가장 공을 들였습니다.
가족에게 거짓 경보가 한 번 가면 다음부터 아무도 이 앱을 믿지 않습니다. 그렇다고 진짜 조난을 놓치면 더 나쁩니다. 그래서 확실한 근거가 있을 때만 알림을 멈춥니다. 반대로 배터리가 낮았다는 이유로는 멈추지 않습니다. 방전이어도 사람은 위험할 수 있으니 알리되 원인을 함께 적습니다.

다섯째, 휴대폰과 서버가 서로의 빈틈을 메우게 했습니다.
데이터만 끊긴 경우는 휴대폰이 그 순간을 알기 때문에 5분 만에 문자를 보냅니다. 휴대폰이 꺼지거나 물에 빠진 경우는 서버가 신호가 끊긴 것을 보고 알립니다. 한쪽만으로는 막을 수 없는 상황을 둘이 나눠 맡습니다.


⑤ 다른 사람도 따라 할 수 있나요?

가능합니다. 다만 순서가 중요합니다.

- 원칙을 먼저 씁니다. 코드를 한 줄도 시키기 전에 "창작 금지", "추측 금지", "모르면 물어볼 것"을 정해 둡니다.
- 원칙을 코드로 강제합니다. 출처 없는 문구가 있으면 프로그램이 멈추게 만드는 식입니다.
- 테스트를 같이 쓰게 합니다. 코드를 읽을 줄 몰라도 "이 조건이면 이 결과"는 쓸 수 있습니다.
- 실제 데이터와 실제 기기로 확인합니다. 제 기획서도 틀렸고, 테스트를 통과한 기능도 실제 휴대폰에서는 안 됐습니다.
- 작게 시작합니다. 저는 동해안과 경북권부터 채웠습니다.

같은 방식으로 등산 안전, 어선 조업 안전, 홀로 사는 어르신 안부 확인 같은 서비스도 만들 수 있습니다. 필요한 것은 개발 능력이 아니라 "누가, 어떤 상황에서, 무엇을 몰라서 위험해지는가"를 정확히 아는 것입니다.

앞으로의 계획은 이렇습니다. 먼저 서버를 24시간 운영하는 곳으로 옮기고 발신번호 등록을 마쳐, 휴대폰이 꺼져도 가족에게 알림이 가는 구조를 완성하겠습니다. 이어서 대피소 데이터와 긴급재난문자를 연결하고, 배터리 실측으로 하루 종일 켜두어도 되는지 확인하겠습니다. 그렇게 다듬은 앱을 가장 먼저 우리 가족과 친구들이 바다와 산에 갈 때 쓰게 하고, 그다음에는 포항을 비롯한 해안 지역의 낚시객, 캠핑객, 어민들이 쓸 수 있도록 넓혀 가고 싶습니다. 나아가 지자체나 지역 안전 단체와 함께 지역사회의 안전망 가운데 하나로 쓰일 수 있기를 바랍니다.

배를 타면서 알게 된 것이 있습니다. 사고는 정보가 없어서 나는 게 아니라, 정보가 필요한 사람에게 닿지 않아서 납니다. 특보는 이미 발표되고 있었습니다. 그것을 갯바위에 선 사람의 손에, 그리고 육지에서 기다리는 가족의 손에 닿게 하는 것이 대한수호신이 하려는 일입니다.
← 목록