전체 글52 앱인토스 | 환율계산과 노선비교 환율계산과 노선비교, USD로 고지하는 항공사를 100원 단위로 환산하며 실시간 환율 API 대신 고정 환율을 택한 이유와 그 구현을 정리한 개발기입니다.통화가 섞인 표를 한 줄로 세우려면유류할증료(YQ) 조회 앱을 만들면서 가장 먼저 부딪힌 벽은 기술이 아니라 통화였습니다. 앱이 다루는 8개 항공사 중 네 곳(제주항공·진에어·에어부산·이스타항공)은 유류할증료를 USD로 고지하고, 나머지 네 곳(대한항공·아시아나항공·티웨이항공·에어서울)은 원화로 고지하죠. 항공사별 상세 화면에서는 이게 큰 문제가 아니었습니다. 제주항공 화면에는 달러를, 대한항공 화면에는 원화를 원문 그대로 보여주면 되니까요.문제는 '노선비교'였습니다. 사용자가 도쿄를 고르면, 그 노선에 취항하는 모든 항공사의 유류할증료를 싼 순서대로 .. 2026. 7. 27. 인앱토스 | 스키마 설계하기 공통 스키마를 버리니 8개 항공사 표가 담겼다는, 유류할증료 조회 미니앱에서 정규화를 포기하고 항공사별 유연 스키마로 데이터 모델을 설계한 개발기입니다.하나의 표로 묶으려다 막힌 지점fuelsurcharge("유류할증료 조회하기")는 8개 항공사의 이번 달 국제선 유류할증료(YQ)를 항공사별 표와 노선 비교로 보여주는 토스 미니앱입니다. 핵심 기능이 "같은 노선인데 항공사마다 얼마씩 차이 나지?"를 한눈에 보여주는 것이다 보니, 처음에는 당연히 이렇게 생각했습니다. 모든 항공사를 하나의 거리 구간표로 정규화(normalize)해두면 비교가 깔끔하게 떨어지겠다고요. 실제로 기획서 리스크 대응란(§15)에는 아직도 그 흔적이 "항공사 공지 형식 상이 → 표준 스키마로 정규화"라고 남아 있습니다.그런데 8개사.. 2026. 7. 21. 앱인토스 | 서버, DB없이 미니앱 출시하기 서버도 DB도 없이, 타입을 스키마 삼아 출시한 미니앱 「유류할증료 조회하기」를 정적 타입 데이터만으로 만든 아키텍처 선택과 트레이드오프를 정리해봤습니다.서버를 두지 않은 이유토스 미니앱 유류할증료 조회하기를 만들며 가장 먼저 내린 결정은, 역설적이게도 "무엇을 만들까"가 아니라 "무엇을 만들지 않을까"였습니다. 결론부터 말하면 이 앱에는 백엔드가 없습니다. API 서버도, 데이터베이스도 없고, 8개 국적 항공사의 유류할증료(YQ)를 보여주는 앱인데도 정작 그 값을 받아 오는 네트워크 요청이 한 줄도 없죠. 데이터는 전부 빌드 시점에 자바스크립트 번들 안으로 들어가 있습니다. 이렇게 정한 데엔 몇 가지 이유가 있었습니다. 먼저 초기 앱은 로그인과 결제가 없는 익명 조회 유틸입니다. 기획 단계에서 토스 로.. 2026. 7. 20. 앱인토스 | 미니앱 개발 환경 뜯어보기 백엔드 없는 토스 미니앱을 만들며 파악한 앱인토스 미니앱 개발 환경 뜯어보기 — Granite·ait·TDS·Vite가 어떻게 맞물리는지 부트스트랩부터 배포까지 정리한 개발기입니다. 지난달 유류할증료 조회하기라는 미니앱을 앱인토스(Apps in Toss)에 출시했습니다. 8개 국적 항공사의 유류할증료(YQ)를 항공사별 표와 노선별 비교, 그리고 계산기로 보여 주는 작은 앱이죠. 서버는 한 대도 쓰지 않고, 요금 데이터는 전부 타입이 붙은 정적 상수로 앱 안에 넣었습니다. 로그인도 없습니다. 그만큼 기능은 단순하지만, 정작 처음 며칠을 잡아먹은 건 기능이 아니라 개발 환경 그 자체였습니다. granite dev, ait build, TDS, Vite가 한 프로젝트 안에 뒤섞여 있는데 누가 무엇을 하는지가 .. 2026. 7. 20. 낙관적 락과 비관적 락, 언제 무엇을 선택할까 낙관적 락과 비관적 락, 언제 무엇을 선택할지를 version 컬럼과 SELECT FOR UPDATE로 정리한 글입니다.두 접근의 철학 차이동시에 같은 행을 고치려는 요청이 겹칠 때, 우리가 쓸 수 있는 무기는 크게 두 갈래로 갈립니다. 하나는 "충돌은 어차피 드물 것"이라고 낙관하고 일단 진행한 뒤, 커밋 직전에 "그동안 아무도 안 건드렸지?"를 확인하는 낙관적 락(optimistic lock)입니다. 다른 하나는 "누군가 끼어들지도 모른다"고 비관하고, 읽는 순간부터 그 행에 자물쇠를 채워 놓고 작업하는 비관적 락(pessimistic lock)이죠.이 둘은 성능 튜닝 옵션이 다른 게 아니라 세상을 보는 전제가 다릅니다. 낙관적 락은 충돌이 예외적이라고 가정합니다. 그래서 평소에는 잠금 비용을 전혀 .. 2026. 7. 15. 새벽에 쌓인 데드락(deadlock) 로그를 추적한 밤 새벽에 쌓인 데드락(deadlock) 로그를 추적한 밤의 기록으로, 데드락의 원인과 해결을 정리한 글입니다.데드락은 왜 생기는가데드락을 처음 제대로 마주친 건 결제 정산 배치를 담당하던 시절이었습니다. 개념 자체는 학부 운영체제 시간에 배운 그 순환 대기(circular wait)와 똑같습니다. 두 트랜잭션이 서로가 쥔 자원을 기다리며 영원히 풀리지 않는 매듭에 빠지는 상황이죠. 다만 교과서의 다이어그램과 새벽 3시의 실제 로그는 체감이 많이 다릅니다.가장 단순한 형태를 코드로 그려 보겠습니다. 계좌 A와 계좌 B 사이에서 잔액을 옮기는 두 트랜잭션이 동시에 실행된다고 해 보죠. 하나는 A에서 B로, 다른 하나는 B에서 A로 옮깁니다.-- 트랜잭션 1: A -> B 이체BEGIN;UPDATE accoun.. 2026. 7. 14. 이전 1 2 3 4 5 ··· 9 다음