전체 글 28

MQTT를 활용한 실시간 예약/인증 앱 개발

운송용 (Cargo) 개인 모빌리티 (PM)를 예약하고 사용하기 위한 앱을 위해, MQTT를 사용해 통신하는 시스템을 개발한 사례. 안드로이드 앱과 MQTT 서버를 개발하여 제공하였다.시스템 구조[휴대폰 앱] - (QR Code) - [MQTT Server] - [개인 모빌리티 (MCU)]--------------- 개발 범위 --------------- MQTT란?MQTT(Message Queuing Telemetry transport)는 저대역폭 환경에서 M2M (machine to machine) 원격 측정을 위해 설계된 경량 발행-구독 메시징 프로토콜이다. 1999년 초기 버전이 IBM에서 만들어졌고, 2010년 8월에 무료로 오픈되었다. MQTT의 특징은 매우 단순한 형태, 간단한 저대역의 통신..

프로젝트 기록 2025.12.29

왜 우리는 사변(思辨)해야 하는가

이전 글에서 언급했듯이, 디자인은 공예로부터 출발하였다고 여겨집니다. 디자인에게 주어진 첫 역할은 기능과 형태가 거의 완성된 디자인 대상물에 심미적인 요소를 더하여 상품성을 더 올리는 것이었는데, 이로 인해 디자인은 '제작 과정에서 장식을 더해 더 높은 값으로 판매하려 하는' 일종의 상술처럼 여겨지기도 했습니다. 물론 이 당시 기준으로는 그렇게 볼 수도 있었겠지만, 이것은 오래된 오해일 뿐입니다. 디자인의 역할과 개념이 더 발전하면서 디자인은 공정의 초기 단계로 점차 옮겨 참여하게 되었는데, '기능과 형태를 어떻게 정할지' 고민하는 역할로 그 지위가 점차 바뀌게 된 것입니다. 이는 소비자들이 점차 상품 구매 결정에 심미성을 중요하게 반영하기 시작했기 때문이었는데, 그렇게 보다 결정권을 가지기 시작한 디자..

디자인 담론 2025.06.02

미래를 위한 디자인 시작하기

스페큘러티브 디자인(Speculative Design)이라는 개념이 있습니다. '디자인(Design)'이라는 개념은 처음에 공예(Craft)로부터 출발했다고 여겨지는데요, 공산품에 예술을 더하는 공예의 개념에서 점차 공산품을 만드는 과정에서 예술을 생각하는 식으로 분화되어 나온 것이라고 할 수 있겠습니다. 그런 식으로 무언가의 공정에서 그 목적과 효율성에 맞춰 기획하고 조율하는 것으로 의미가 확장되어 오던 '디자인'에 추측, 전망을 뜻하는 '스페큘레이션(Speculation)'이 붙은 것이지요. 즉, 미래를 예측하고 전망하는 디자인을 뜻하는 개념인데, 사실 이 자체는 '디자인'이라는 개념에는 자연스럽습니다. 디자인은 원래 그 목적물의 사용자와 사용환경을 예측하고 사용 목적에 맞춰 효율화된 형태를 제공해왔..

디자인 담론 2025.06.02

[AI-14] 근접 영역 속에서 나를 찾도록 : k-Nearest Neighbors

k-NN 알고리즘(k-Nearest Neighbors)은 레이블이 지정되어 분류된 기존의 데이터 분포에 새로운 데이터를 배치시키면서 임의의 k값을 기준으로 근처에 위치한 데이터들이 갖는 레이블로 데이터를 분류하는 분류 방법이다. 일단은 레이블 개념이 등장하는 것부터 알 수 있듯이, 기본적으로 지도학습(Supervised Learning)에 속한다.그런데 분류하는 방법은 위에서 설명한 바와 같이 비지도학습인 군집분석(clustering)과 유사한 방식을 취한다. 즉 특별히 어떤 학습을 거치지 않고 마치 군집화하듯이 데이터 간의 거리를 계산해 그 분포로 데이터를 파악하는데, 이러한 접근이 '비지도학습적'으로 느껴질 수 있어 비지도학습으로 분류하거나 준지도학습(Semi-supervised)으로 따로 보려는 접..

[AI-13] 단순하지만 강력하게 평균으로 모으기 : K-means Clustering

통계에서 means는 의미가 아닌 '평균'을 의미하는 말로, K-means의 means 역시 이름을 보면 평균을 활용하는 군집분석(Clustering)일 것임을 알 수 있다. 그렇다면 K-는 무엇일까? 일반적으로 K-라는 말이 상징하는 수많은 단어들이 떠오르지만, 사실 여기에서 K는 큰 의미가 없이 단지 미지수 x나 정해지지 않은 숫자를 표현할 때 주로 사용되는 n과 같은 의미이다, 일상에서는 이러한 경우에 n이 더 많이 사용되지만, 수학이나 알고리즘에서는 k가 많이 사용되는 것이 그 이유라고 할 수 있다.즉 이 방법의 이름을 정리하면 K개의 평균으로 군집화하는 분석이라고 설명할 수 있다.그래서 K-means Clustering의 가장 첫 번째 절차는 몇 개(k)의 군집을 만들 것인지를 정하는 것이다. ..

[React] 무의미한 반복을 피하기 위해 기억하기 : useMemo

우리는 어떤 일을 할 때 과거의 기억을 활용한다. 카메라를 활용할 때에는 카메라에 대한 기억이 단서가 된다.처음 보는 카메라라도, 우리는 카메라에 대한 기억을 통해 하나하나 뜯어보는 대신 뻔한 것들을 건너뛰고 새로운 정보를 이해하고 처리한다. 시스템 역시도 그렇게 반복될 내용들을 기억할 수 있다면 더 빠른 처리가 가능해질 것이다.useMemo는 그러한 캐싱(caching)을 해주는 훅이다. 캐싱이란 과거에 처리했던 데이터를 임시적으로 저장하여 새로운 처리에 활용하도록 하는 것을 의미하는데, useMemo는 이러한 기억의 역할을 한다. 기본적으로 리액트는 어떤 컴포넌트를 호출할 때마다 그 내부에 선언된 기능을 다시 실행하는데, 컴포넌트가 복잡하다면 이는 많은 낭비를 초래한다. 데이터에 변화가 있다면 당연히..

[React] 시스템의 공영 방송: Context API

지난 글에서 Props의 역할이 컴포넌트의 속성을 정의하기 위한 것이며, 우리가 많이 사용하는 '하향 데이터 통신' 기능은 결과적으로 속성을 전달하는 과정에서 활용할 수는 있지만, 속성을 전달하는 과정이 하향식으로 이뤄지다보니 그런 식으로도 활용할 수 있게 되는 것이며, 속성의 본연적 기능은 자식 컴포넌트의 정체를 정의하는 것으로 보아야 정확하게 사용할 수 있을 것임을 살펴보았다. 그렇다면 실제로 컴포넌트 간의 통신을 할 때에는 무엇을 사용해야 할까? 여러가지 방법이 있지만, 이번에 다뤄볼 Context API가 그 중 하나가 될 수 있다.API(Application Programming Interface)는 그 용어 자체적으로도 연결의 의미를 지니고 있다. 즉 접면(Interface)으로써 둘 사이를 ..

[React] Props는 통신용이 아니다 : Props 진짜 이해하기

리액트를 다루면서 처음에 많이 헷갈렸고, 지금도 종종 막히는 부분이 속성(Props) 관련 내용인데, 그리 어렵지 않은 것 같으면서도 막상 뭔가 만들 때에는 의도한대로 작동하지 않아 당황하게 만드는 요인이기 때문이다. 이번 포스팅에서는 이 속성에 대해 완벽히 살펴봄으로써 올바르게 사용해보고자 한다.일단 속성(Props; Properties) 자체는 웹에서 쓰던 형태와 동일하다. 웹에서는 문서의 엘리먼트(Element)의 구체적인 속성을 정의할 때 속성을 활용하는데, 예를 들어LINK위의 예시에서 하이퍼링크 참조(href; hyper reference)가 a 엘리먼트의 속성에 해당한다. 속성은 문서의 마크업 태그 자체가 가지고 있는 성질이며, 해당 성질을 정의해줌으로써 엘리먼트가 그 성질을 갖도록 한다.리..

[AI-12] 최적의 분류 평면 찾기, 서포트 벡터 머신(SVM)

회귀 등의 방법을 통해 일반적으로 데이터를 분류하는 방법들은, 각 데이터의 분류를 확률적으로 계산하여 그 소속 여부를 결정한다. 즉, 확률에 대한 어떤 특정한 임계값을 넘는지 못넘는지에 따라 분류 여부를 판단하는 방식으로, 각 데이터가 특정 클래스에 속할 확률을 계산함으로써 분류가 실패할 확률(에러율)을 줄이는 쪽으로 학습을 진행한다. 이는 처음부터 분류 자체를 목적으로 한다기보다는, 데이터가 가까운 쪽의 클래스로 분류됨으로써 자연스럽게 분류가 완성되는 것이다.서포트 벡터 머신(Suppor Vector Machine)은 이러한 방법들과 다르게 분류 자체를 목적으로 두고 데이터 간의 거리를 계산하여 그 사이의 가장 여백(margin)이 큰 경계를 찾는 방식으로 데이터 간에 경계를 나누면서 학습을 진행한다...

[React] 값 참조하기: useRef

리액트에서 어떤 값을 선언하고 대응하여 사용할 때에 일반적으로 쓰이는 것은 지난 글에서 다룬 상태(State)값이다. 그런데 상태는 말 그대로 구성요소의 상태에 관계된 값이기 때문에, 상태가 변하면 구성요소 역시 변해야 한다. 즉, 상태의 변화는 구성요소를 다시 로드(렌더)시킨다. 이 동작이 원하는 동작이었다면 관계 없지만, 값이 변하더라도 결합된 구성요소가 바로 다시 렌더링되기를 원하지 않을 수 있다. 이 때 사용할 수 있는 것이 참조(useRef)이다.useRef의 사용법은 아래와 같다:import {useRef} from 'react';const ref = useRef(initialValue);위를 통해 상수 ref는 initialValue라는 초기값을 current로 갖는 객체가 되는데, 따라서 ..

728x90
반응형