Lazy Developer11 min

AI 비서한테 일상까지 맡겼다

2026년 4월 · 귀찮은개발자 EP.14

2026년 4월 · 귀찮은개발자 EP.14

EP.10에서 개인용 AI 비서를 만들었다. EP.11에서 SaaS 데이터를 연결했고, EP.13에서 아침 브리핑까지 자동화했다. 전부 개발 관련이었다. 매출, 피드백, 키워드 순위. 일하는 데 필요한 데이터만 다뤘다.

그러다 문득 생각이 들었다. 구조가 똑같은데 왜 일상은 안 붙이지? MCP 서버에 모듈 하나 추가하는 데 10분이면 된다. API에서 데이터 가져와서 정리해주는 거니까.

그래서 5개를 한꺼번에 붙였다. 날씨, 장소, 차량, 지출, 뉴스. 개발용 AI 비서가 일상 비서가 됐다.

빠르게 보기

– 모듈 5개 추가로 일상 자동화 완성
– 날씨: “오늘 우산 들고 가?” 한 마디로 확인
– 장소: “근처 카페 어디 있어?” 위치 기반 검색
– 차량: 기아 커넥트로 연료, 정비, 주유소 조회
– 지출: “스타벅스 5,500원” 말하면 자동 기록
– 뉴스: 아침 브리핑에 기술 트렌드 자동 포함
비개발자를 위한 용어 안내

API — 프로그램끼리 대화하는 창구. 날씨 서버한테 “서울 날씨 알려줘”하면 응답이 온다.
JSON — 데이터를 정리하는 형식. 엑셀 시트 같은 건데 프로그램이 읽기 좋게 생겼다.
OAuth2 — 로그인 동의 과정. 카카오 로그인할 때 “정보 제공에 동의합니까?”가 뜨는 것과 같다.
GPS — 현재 위치. 지도 앱에서 “내 위치” 누르면 뜨는 그 파란 점.

1. 날씨 — 제일 먼저 붙인 거

아침에 나가기 전에 날씨 앱을 열었다. 매일. 그게 귀찮았다. “오늘 비 와?”라고 물어보면 바로 알려주면 좋겠다고 생각했다.

OpenWeatherMap이라는 날씨 서비스가 있다. 무료로 쓸 수 있는 API를 제공한다. API 키를 하나 발급받았다. 회원가입하고 키를 받는 데 2분 걸렸다.

모듈 코드는 단순하다. 도시 이름을 보내면 현재 날씨랑 주간 예보가 돌아온다.

// weather_today: 현재 날씨 + 주간 예보
const url = `https://api.openweathermap.org/data/2.5/forecast`
  + `?q=${city}&appid=${apiKey}&units=metric&lang=kr`

const res = await fetch(url)
const data = await res.json()

이 한 번의 요청으로 현재 기온, 체감 온도, 습도, 바람, 강수 확률이 전부 온다. “오늘 우산 들고 가?”라고 물어보면 AI가 강수 확률을 보고 답해준다.

이걸 아침 브리핑에 넣었다. 매일 9시에 텔레그램 life 채널에 날씨가 자동으로 들어온다. 날씨 앱을 안 열어도 된다.

2. 주변 장소 — “근처 맛집” 되는 순간

날씨를 붙이고 나니까 욕심이 생겼다. “근처 카페 어디 있어?”도 되면 좋겠다. 카카오맵 앱을 열고 검색하는 게 귀찮았다.

카카오 맵 API를 연결했다. 카카오 개발자 사이트에서 키를 받으면 된다. 키워드로 검색하면 위치, 전화번호, 거리가 돌아온다. 기본 좌표를 집이나 사무실로 설정해놓으면 “근처”라고만 말해도 그 위치 기준으로 알아서 찾아준다.

실제로 쓰면 이런 식이다.

이렇게 물어보면

“근처 카페 추천해줘”
→ 반경 1km 안에 카페 5개가 거리순으로 나온다. 별점 높은 데를 AI가 골라서 먼저 보여준다.

“지금 문 연 약국 있어?”
→ 영업 중인 약국만 필터링해서 가까운 순으로 알려준다.

“주변 주차장 찾아줘. 근데 월정액 되는 데로.”
→ 주차장 목록을 뽑은 다음, Claude가 정보를 보고 월정액 가능 여부를 찾아서 정리해준다.

“여기서 걸어갈 수 있는 점심 맛집”
→ 500m 이내 음식점을 검색하고, 별점이랑 리뷰 수를 보고 추천해준다.

“이 근처 세차장”
→ 세차장 목록 + 거리 + 전화번호가 나온다.

중요한 건 카카오맵이 검색만 해주고, 추천은 Claude가 한다는 거다. 카카오맵 API는 “카페”라고 검색하면 주변 카페 목록을 던져줄 뿐이다. 그 목록을 보고 “별점 높은 데”, “걸어갈 수 있는 데”, “지금 영업 중인 데”를 골라주는 건 AI다. 검색 엔진이랑 AI가 같이 일하는 구조다.

이게 되니까 써먹는 상황이 계속 늘어났다. 처음에는 카페나 약국 정도였는데, 쓰다 보니 “근처 편의점”, “주변 세탁소”, “이 동네 소아과”까지 물어보게 됐다. 폰에서 앱 열고 검색창 누르고 키워드 치는 거보다, 대화창에 한 줄 치는 게 확실히 빠르다.

출장이나 낯선 동네 갔을 때 특히 좋다. 좌표를 “지금 여기”로 바꾸면 그 자리 기준으로 검색된다. 네이버 지도 앱 열어서 현재 위치 잡히길 기다릴 필요 없이 바로 물어보면 된다.

3. 차량 — 제일 오래 걸린 거

차량 모듈은 시간이 제일 많이 걸렸다. 기아 커넥트 공식 API를 쓰기로 했는데, 연결 과정이 만만치 않았다.

기아 커넥트 API는 OAuth2 인증을 쓴다. 쉽게 말하면 카카오 로그인이랑 같은 구조다. “이 프로그램이 내 차량 정보를 볼 수 있게 허용할까요?”라는 동의 화면이 나온다. 동의하면 토큰이라는 열쇠를 받는다. 그 열쇠로 차량 데이터에 접근한다.

도구는 4개다. 각각 하는 일이 다르다.

car_status — 현재 차량 상태. 연료 잔량, 주행 가능 거리, 배터리 전압, 타이어 공기압.

car_maintenance — 정비 스케줄 관리. “엔진오일 79,000km에 갈았고 6,000km마다 교체해”라고 대화로 등록하면, 임계값에 도달할 때 알림이 온다.

car_nearby_gas — 주변 주유소 + 가격. 차량 GPS 위치 기준으로 가까운 주유소와 실시간 유가를 조회한다.

car_ev — 전기차 전용. 배터리 충전 상태, 충전 소요 시간, 주행 가능 거리.
OPINET이란?
한국석유공사에서 운영하는 주유소 가격 정보 서비스다. 전국 주유소의 실시간 유가를 조회할 수 있다. 네이버 지도나 카카오맵에서 “주변 주유소”를 검색할 때도 내부적으로 이 데이터를 쓰는 경우가 많다.

연결은 됐는데 데이터가 안 왔다. “차량 정보가 없습니다.” API 키도 맞고, 토큰도 정상인데 빈 응답만 돌아왔다.

반나절 헤맸다. 원인은 개인정보 동의였다. 기아 커넥트 앱을 열고, 설정에 들어가서, 커넥티드 서비스 개인정보 동의를 따로 해야 했다. 이 단계가 API 문서에 안 나와있었다. 앱 깊숙이 숨어있는 토글 하나였다.

동의를 켜니까 바로 데이터가 왔다. “연료 잔량 64%, 주행 가능 452km.” 이 한 줄을 보려고 반나절 걸린 거다.

// 기아 커넥트 OAuth2 인증 흐름 (간략)

// 1. 인증 코드 요청 → 동의 화면
const authUrl = `${baseUrl}/authorize`
  + `?client_id=${clientId}&redirect_uri=…`

// 2. 동의 후 → 인증 코드 수신
const code = getCodeFromRedirect()

// 3. 인증 코드 → 토큰 교환
const token = await exchangeCodeForToken(code)

// 4. 토큰으로 차량 데이터 조회
const status = await getVehicleStatus(token)

정비 스케줄이 제일 재밌다. 대화로 등록한다.

실제로 이렇게 쓴다

나: “엔진오일 79,000km에 갈았어. 6,000km마다 교체해야 해.”
AI: 등록했다. 84,500km 도달하면 알려줄게. (1,500km 전 미리 알림)

나: “9월에 정기점검 잡아놔야 하는데, 2주 전에 알려줘.”
AI: 8월 18일에 리마인드 보낼게.

나: “타이어 로테이션 75,000km에 했고, 10,000km마다야.”
AI: 등록했다. 83,000km쯤 알림 갈 거다.

나: “에어컨 필터는 작년 여름에 갈았는데 1년마다 교체래.”
AI: 올해 7월쯤 알려줄게.

이게 다 대화로 된다. 정비소에서 “다음에 언제 오세요”하면 그 자리에서 폰으로 AI한테 말하면 끝이다. 수첩에 적어놓거나 캘린더에 일일이 등록할 필요가 없다.

그리고 이건 주행거리 기반이라 날짜보다 정확하다. 출퇴근 거리가 긴 사람은 6개월도 안 돼서 교체 시기가 오고, 주말에만 타는 사람은 1년 넘게 갈 수 있다. AI가 기아 커넥트에서 현재 주행거리를 가져오니까, 실제 내 운전 패턴에 맞춰서 알려준다.

주유소 검색도 된다. “주변에 싼 주유소 어디야?”하면 차량 GPS 기준으로 가까운 주유소가 가격순으로 나온다. 한국석유공사(OPINET) 데이터라서 가격이 실시간이다.

아침 브리핑 때 연료가 부족하면 자동으로 알려주기도 한다. “연료 15% 남았습니다. 근처 주유소: OO주유소 1,648원/L (1.2km).” 이런 식이다. 내가 물어보지 않아도 알아서 챙겨준다.

4. 지출 추적 — 가장 간단한 거

5개 중에 제일 간단했다. API도 필요 없다. 로컬 파일 하나면 끝이다.

“스타벅스 아아 5,500원.” 이렇게 말하면 AI가 알아서 분류한다. 항목: 아이스 아메리카노, 금액: 5,500원, 카테고리: 커피/음료, 장소: 스타벅스. JSON 파일에 한 줄 추가된다.

// expense_log에 저장되는 데이터 (JSON 형식)
{
  “date”: “2026-04-07”,
  “item”: “아이스 아메리카노”,
  “amount”: 5500,
  “category”: “커피/음료”,
  “place”: “스타벅스”
}

카테고리는 AI가 판단한다. “스타벅스 아아”라고만 해도 커피/음료로 분류된다. “택시 12,000원”이면 교통으로, “점심 김치찌개 8,000원”이면 식사로 넣는다. 따로 카테고리를 지정할 필요가 없다.

“이번 달 커피값 얼마 썼어?” 이러면 JSON 파일을 읽어서 카테고리별로 합산해준다. “4월 커피/음료 합계: 47,500원. 12회.” 가계부 앱 없이 대화로 끝난다.

데이터는 로컬 JSON 파일에 저장된다. 엑셀 시트 같은 건데 프로그램이 읽기 좋은 형식이다. DB를 따로 안 세워도 된다. 파일 하나로 충분하다.

5. 뉴스 — 아침에 앱 안 열어도 되는 이유

Hacker News는 개발자들이 많이 보는 기술 뉴스 사이트다. 여기서 인기 있는 글이 올라오면 업계 트렌드를 파악할 수 있다. 근데 매일 들어가서 읽기가 귀찮다.

Hacker News는 Firebase API를 제공한다. 인기 글 목록을 가져올 수 있다. 상위 3개만 뽑아서 제목과 한 줄 요약을 만들었다.

// Hacker News 상위 3개 기사 가져오기
const topUrl = ‘https://hacker-news.firebaseio.com/v0/topstories.json’
const ids = await fetch(topUrl).then(r => r.json())

const top3 = ids.slice(0, 3)
const stories = await Promise.all(
  top3.map(id =>
    fetch(`https://…/${id}.json`).then(r => r.json())
  )
)

“오늘 테크 뉴스 뭐 있어?” 이러면 상위 3개 기사의 제목과 요약이 나온다. 직접 물어볼 수도 있고, 아침 브리핑에 자동으로 포함시켜놨다.

매일 아침 9시에 텔레그램 life 채널에 날씨랑 같이 온다. “서울 22도, 오후 비 가능성. HN Trending: 1. Claude MCP ecosystem, 2. Rust for web, 3. Apple Vision SDK.” 뉴스 앱을 따로 안 열어도 된다.

Claude에게 날씨, 카페, 차량 상태를 물어보는 대화 화면
하나의 대화창에서 날씨, 장소, 차량까지 물어본다 / GoCodeLab

아침 브리핑에 합류

EP.13에서 만든 아침 브리핑에 날씨와 뉴스가 자동으로 들어간다. life 채널 메시지가 더 풍성해졌다.

기존 브리핑: 일정 + 메일 요약. 추가된 내용: 날씨 + 강수 확률 + 기술 트렌딩 3개. 아침에 이 메시지 하나만 읽으면 오늘 하루가 대충 그려진다.

텔레그램 Life 채널에 날씨와 트렌딩이 포함된 모닝 브리핑
life 채널 모닝 브리핑. 날씨와 뉴스가 자동으로 포함된다 / GoCodeLab

모듈 구조가 해준 일

5개를 하루 만에 붙일 수 있었던 건 구조 덕분이다. EP.10에서 만든 모듈 패턴이 있다. API 호출하고, 결과 정리하고, 응답 형식 맞추고. 이 구조만 따르면 새 기능 하나 추가하는 데 코드 50줄이면 된다.

5개 모듈 카드 다이어그램: 날씨, 장소, 차량, 지출, 뉴스
모듈 5개 추가 = 일상 자동화 완성 / GoCodeLab

날씨 모듈이 제일 단순했다. API 키 하나, fetch 한 번. 10분이면 끝났다. 지출도 비슷했다. 파일 읽고 쓰는 것뿐이니까. 장소 검색도 카카오 맵 API 연결하면 끝이었다.

차량만 시간이 걸렸다. OAuth2 인증이 필요했고, 숨겨진 동의 단계가 있었고, API 응답 구조도 복잡했다. 근데 그것도 모듈 껍데기는 같았다. 안에 들어가는 로직이 좀 더 길었을 뿐이다.

모듈별 소요 시간

날씨 (weather_today) — 10분. API 키 발급 + fetch 한 번
장소 (nearby_search) — 20분. 카카오 앱 등록 + 키워드 검색
차량 (car 4개) — 반나절. OAuth2 + 개인정보 동의 이슈
지출 (expense_log) — 15분. JSON 파일 읽기/쓰기
뉴스 (news_digest + trending_tech) — 15분. Firebase API

실제로 쓰는 모습

아침. 텔레그램 알림이 온다. life 채널을 열면 날씨, 일정, 뉴스가 정리돼있다. “22도, 오후 비 가능성.” 우산을 챙긴다.

점심시간. “근처 국밥집 있어?” 텔레그램에 보내면 500m 안에 있는 식당 3곳이 나온다. 골라서 간다.

퇴근 전. “차 기름 얼마나 남았어?” 연료 잔량 38%, 주행 가능 270km. 내일 넣어도 되겠다. “근처 싼 주유소는?” 500m 거리에 리터당 1,620원.

저녁. “오늘 택시 12,000원, 저녁 삼겹살 32,000원.” 기록 완료. “이번 주 지출 합계 알려줘.” 식사 87,000원, 교통 24,000원, 커피 16,500원.

앱 5개를 열 일이 없어졌다. 날씨 앱, 지도 앱, 기아 커넥트 앱, 가계부 앱, 뉴스 앱. 전부 대화 한 줄로 대체됐다.

안 된 것들

“차량 정보가 없습니다” 에러. 위에서 말한 대로 개인정보 동의 문제였다. 기아 커넥트 앱의 설정 > 서비스 > 커넥티드 서비스 약관에 숨어있었다. API 문서에는 이 단계가 언급되지 않았다. 같은 문제를 겪을 사람이 있을 거다.

카카오 맵 좌표 기본값. 처음에 좌표 없이 키워드만 보냈다. “근처”라고 했는데 서울 한복판 결과가 나왔다. 기본 좌표를 설정 파일에 넣어서 해결했다.

지출 카테고리 분류 오류. “다이소 3,000원”을 AI가 “식료품”으로 분류했다. 다이소는 생활용품이다. 이건 AI가 맥락 없이 판단해서 생긴 문제다. 장소 기반으로 카테고리 힌트를 추가했다.

기술 선택 이유

왜 OpenWeatherMap인가. 무료 티어가 넉넉하다. 분당 60회 호출 가능하고, 5일 예보까지 제공한다. 개인용으로는 충분하다. 기상청 API도 있지만 응답 형식이 복잡해서 파싱이 귀찮았다.

왜 카카오 맵인가. 한국 주소 체계를 가장 잘 처리한다. 구글 맵은 한국에서 상세 주소가 부정확한 경우가 많다. 네이버도 있지만 카카오가 API 사용 조건이 더 자유롭다.

왜 기아 공식 API인가. 써드파티 라이브러리를 먼저 썼었다. 근데 인증 방식이 바뀌면서 먹통이 됐다. EP.10에서 겪은 교훈이다. 써드파티에 의존하면 언젠가 깨진다. 공식 API를 직접 연결하면 내가 통제할 수 있다.

왜 로컬 JSON인가. 지출 데이터는 월 수십 건이다. DB를 세우기엔 과하다. 파일 하나로 충분하다. 나중에 연간 데이터가 쌓여서 느려지면 그때 SQLite로 바꾸면 된다.

정리

개발용 AI 비서를 만들었는데, 구조가 같으니까 일상까지 얹었다. 모듈 5개를 추가하는 데 하루 걸렸다. 차량 빼면 반나절이다.

핵심은 모듈 구조였다. API 호출, 결과 정리, 응답 포맷. 이 패턴이 동일하니까 새 기능을 빠르게 붙일 수 있었다. 앞으로도 필요한 게 생기면 모듈 하나 만들면 된다. 택배 조회가 됐으면 좋겠다. 대중교통 노선도 붙이고 싶다.

결국 자동화는 “귀찮은 걸 한 번만 해결하면 다음부터는 안 해도 되는 것”이다. 날씨 앱 여는 게 귀찮았고, 가계부 쓰는 게 귀찮았고, 뉴스 읽는 게 귀찮았다. 모듈 하나씩 붙이니까 다 해결됐다.

다음 편에서는 이 시스템을 구독자한테 열 계획을 이야기할 거다. 내가 쓰는 MCP를 다른 사람도 쓸 수 있게. EP.15에서 계속된다.

자주 묻는 질문

Q. API가 뭔가요?

프로그램끼리 대화하는 창구다. 날씨 서버한테 “서울 날씨 알려줘”라고 요청하면 응답이 온다. 앱이 데이터를 가져올 때 쓰는 통로라고 보면 된다.

Q. OAuth2가 뭔가요?

로그인 동의 과정이다. 카카오 로그인할 때 “프로필 정보 제공에 동의하시겠습니까?”가 뜨는 것과 같다. 기아 커넥트도 똑같은 방식으로 “이 프로그램이 차량 정보를 볼 수 있게 허용할까요?”라는 동의 화면이 나온다.

Q. JSON이 뭔가요?

데이터를 정리하는 형식이다. 엑셀 시트 같은 건데 프로그램이 읽기 좋게 생겼다. 대부분의 앱과 웹서비스가 이 형식으로 데이터를 주고받는다.

Q. 비개발자도 이런 걸 쓸 수 있나요?

지금은 코드를 직접 짜야 한다. 근데 모듈 하나가 코드 50줄 정도다. 구독자용 서비스를 준비 중이라 코딩 없이 쓸 수 있는 버전도 나올 예정이다.

Q. 기아 커넥트 연결이 어렵나요?

OAuth2 인증이라 다른 로그인 연결과 같다. 다만 앱에서 개인정보 동의를 따로 해야 한다. 이 단계를 놓치면 “차량 정보가 없습니다” 에러가 나온다. 동의만 하면 연결 자체는 어렵지 않다.

관련 글