본문 바로가기

전체 글153

지도 앱의 정확도, Haversine 공식이 결정합니다 실제 지구 위의 거리, 정확히 재려면 어떻게 해야 할까요?서울에서 부산까지 몇 km인지, 구글 지도는 어떻게 계산할까요?이때 쓰이는 게 바로 'Haversine(하버사인) 공식'입니다.많은 분들이 잘 알지 못하지만, 위도와 경도만 알면 지구 곡률까지 고려한 정확한 거리를 계산할 수 있는 공식이죠. 이 글을 끝까지 읽으시면 단순한 공식 하나로 어떻게 두 지점 사이의 곡선 거리를 계산할 수 있는지, 그리고 그게 우리 일상에서 얼마나 자주 쓰이고 있는지를 알게 되실 거예요.위치 기반 서비스를 만들거나, 항공/물류 관련 데이터를 다루는 분들에게는 필수적인 내용입니다.Haversine 공식이란?Haversine 공식은 지구처럼 둥근 표면 위의 두 지점 사이 거리를 계산할 때 사용되는 수학 공식입니다.지구를 단순히.. 2025. 5. 1.
await를 썼는데 오류가? async를 꼭 써야 하는 이유 await는 async 함수 안에서만 쓸 수 있기 때문에, await를 쓰려면 반드시 async를 추가해야 합니다.그런데 이걸 이렇게만 들으면 "음... 그렇구나" 하고 넘기기 쉬워요.하지만 이 원리를 제대로 이해하면, 코드가 훨씬 깔끔해지고, 비동기 처리에 대한 감각도 빠르게 늘어요.오늘 글에서는 왜 async가 필요한지, await는 뭘 하는 건지, 그리고 실제 예시를 통해 자연스럽게 이해하는 방법까지 차근차근 설명해드릴게요.끝까지 읽으면, 누가 물어봐도 자신 있게 설명할 수 있게 될 거예요!왜 async를 추가해야 하는 걸까?자, 먼저 await가 뭔지부터 짚어야겠죠.await는 비동기 작업이 끝날 때까지 기다려주는 키워드입니다.그러니까 "야, 이 작업 다 끝날 때까지 다른 거 하지 말고 기다려!".. 2025. 4. 30.
서버 없이 시작하는 법, Firebase 모르면 프로젝트 늦어진다 ✅ Firebase, 서버 없이 앱을 만드는 비밀요즘은 좋은 아이디어 하나만 있어도 바로 앱이나 웹서비스를 만들 수 있는 시대입니다.하지만 개발을 시작하려고 하면, 항상 벽에 부딪힙니다.'서버는 어떻게 만들지?', 'DB는 또 뭘 깔아야 하지?' 같은 복잡한 고민들.그런데 이런 걱정, 이제 안 해도 됩니다.구글이 만든 'Firebase'만 있으면요.Firebase는 백엔드를 직접 구축하지 않고도, 데이터 저장과 로그인 같은 핵심 기능을 '진짜 빠르게' 구현할 수 있게 해주는 플랫폼입니다.오늘은 Firebase를 왜 쓰는지, 그리고 이번 프로젝트에서는 뭘 어떻게 쓸지 알려드릴게요.끝까지 읽으면 '나도 지금 바로 프로젝트 시작할 수 있겠다'는 자신감이 생길 거예요. ✅ 왜 다들 Firebase를 쓸까?빠른 .. 2025. 4. 29.
Kicad(카이캐드)와 AI 활용으로 나만의 PCB 만들기 요즘 전자 설계에 관심을 가지는 분들이 부쩍 늘어나고 있습니다.특히 "나만의 PCB 보드를 직접 만들어 보고 싶다"는 꿈, 한 번쯤 품어보셨을 텐데요.오늘은 카이캐드(KiCad)를 활용해서, 기본 회로를 직접 설계하고, 나아가 AI를 이용해 회로도와 풋프린트까지 자동 생성하는 최신 방법을 소개해드리겠습니다!"전자 설계는 어렵다"고 생각했다면, 오늘 글이 끝까지 읽을 만한 이유가 있습니다.처음엔 단순한 LED 회로 설계부터 시작하지만, 점차 센서 보드, 통신 모듈, 마이크로컨트롤러까지 복잡한 프로젝트로 자연스럽게 도전할 수 있기 때문입니다.또한 AI를 활용하면 설계 속도가 비약적으로 빨라지기 때문에, 요즘은 초보자도 전문가처럼 빠르게 성장할 수 있는 시대가 되었죠. 카이캐드(KiCad)란 무엇인가요?카이캐.. 2025. 4. 27.
Numpy의 뷰(View) : 데이터 슬라이싱의 숨은 비밀 데이터 분석과 머신러닝에서 Numpy는 필수적인 도구입니다.특히, 배열 데이터를 다룰 때 효율적으로 사용할 수 있는 기능이 많습니다.그중에서도 슬라이싱(Slicing)이 어떻게 동작하는지 이해하는 것은 매우 중요합니다.​오늘은 Numpy에서 슬라이싱으로 생성되는 뷰(View)와 복사(Copy)의 차이를 쉽게 설명하고,이를 실제로 활용하는 방법을 공유하겠습니다.​1. 뷰(View)란 무엇인가?Numpy에서 배열을 슬라이싱하면 새로운 배열을 생성하는 것이 아니라 원본 배열의 일부를 참조하는 뷰가 반환됩니다.뷰(View) : 원본 배열의 데이터를 공유하며, 수정하면 원본 배열에도 영향을 미칩니다.복사(Copy) : 원본 배열의 데이터를 복제하여 새로운 배열을 생성합니다. 복사본을 수정해도 원본 배열에는 영향을.. 2025. 4. 25.
STM32 DWT 사이클 카운터로 코드 실행 시간 측정하기 'ARM Cortex-M 기반의 STM32 개발을 하다 보면, "내 코드가 얼마나 빠르게 실행될까?"라는 궁금증이 생길 때가 있습니다. 특히, 최적화를 고민할 때는 코드 블록 단위의 정밀한 실행 시간 측정이 필요하죠. 이때 사용할 수 있는 강력한 기능이 바로 DWT 사이클 카운터(Data Watchpoint and Trace Cycle Counter)입니다. 이 기능을 쓰면 코드 실행 시간을 '클럭 사이클 단위'로 측정할 수 있어 마이크로초 수준까지 정확한 분석이 가능합니다. 하지만 DWT는 기본적으로 꺼져 있기 때문에 직접 설정해 줘야 쓸 수 있습니다. 지금부터 한 줄씩 따라하면서 STM32에서 실행 시간을 측정하는 방법을 알아볼게요. 끝까지 읽으면 코드 성능을 분석하고 개선하는 데 어떤 식으로 이 기.. 2025. 4. 23.