본문 바로가기

분류 전체보기33

[Spring Integration] Spring에서 MQTT 통신하기 02 들어가기 전에지난 글에서 공식문서 예제에 다음과 같은 문제점이 있다고 생각을 했습니다. 단일 토픽설정 클래스에 너무 많은 로직 이번 글에서는 여러가지 고민 끝에 생각한 구조를 공유해보려고합니다. 나름대로 확장성과 성능을 고려해보려고 했지만, 아직 많이 부족하니 감안하고 봐주시면 감사하겠습니다. 모든 코드는 github에 올려두었으니 참고하시면 될 것 같습니다. 아키텍처먼저 어떤 방식으로 여러 토픽을 구독할 수 있는지 찾아보았습니다. 하지만 Spring Integration에 관련된 레퍼런스나 Spring에서 MQTT 통신하는 예제가 많이 없어서, 여러 토픽을 구독할 수 있는 아키텍처를 직접 생각을 해야했습니다. 그 중에서 StackOverflow에서 저와 비슷한 고민을 했던 질문이 있어서 해당 내용을 참.. 2024. 10. 13.
[Spring Integration] Spring에서 MQTT 통신하기 01 들어가기 전에MQTTMQTT란 Message Queuing Telemetry Transport의 약자로, 보통 스마트 센서나 사물 인터넷(IoT) 등 낮은 대역폭과 리소스가 제한된 환경에서 안정적으로 통신할 수 있는 경량 메시징 프로토콜입니다. MQTT는 최소한의 리소스와 적은 전력을 소비하기 때문에 IoT와 같은 제한된 환경에서 사용하기 적합합니다. MQTT는 AMQP와 같이 발행-구독 패턴을 사용하며, 메시지 브로커가 필요합니다. MQTT에 대한 이론적인 내용은 MQTT 공식 레퍼런스에서 가이드 받을 수 있으며, HiveMQ에서 무료 e-book을 배포하고 있으니 활용하시면 될 것 같습니다. Spring Integration스프링에서 MQTT 통신을 하기 위해서는 먼저 Spring Integratio.. 2024. 10. 12.
[DevOps] 도커와 컨테이너 (Docker and Container) 도커란?도커는 컨테이너를 생성하고 관리하는 도구입니다. 도커를 사용하는 이유표준화된 실행 환경을 구축 도커를 사용하면 운영체제에 관계없이 표준화된 실행 환경을 구축할 수 있습니다. 이는 개발환경과 실제 서비스 환경을 동일하게 만들어 서비스 환경과 개발 환경의 차이로 인한 문제를 줄일 수 있습니다. 또한 여러 개발자가 협업할 때 개발 환경을 통일시키는 데 큰 도움이 되고, 여러 프로젝트를 동시에 진행할 때 각 프로젝트의 환경을 분리할 수 있습니다. 가상머신과 도커 컨테이너의 차이 가상머신은 하이퍼바이저를 통해 게스트 OS를 생성하고, 각 게스트 OS에 애플리케이션을 실행합니다. 반면 도커는 호스트 OS 위에 도커 엔진을 설치하고, 컨테이너를 생성하여 애플리케이션을 실행합니다. 가상머신을 사용해도 도커를 사.. 2024. 9. 18.
[임베디드] SSD1306 OLED 모듈 제어 - I2C I2C I2C(Inter-Integrated Circut)는 SPI와 마찬가지로 IC 간의 단거리 통신을 위해 고안된 프로토콜입니다. Clock 신호를 사용하여 동기 방식으로 통신하기 때문에 사전에 데이터 전송 속도 등을 맞추지 않아도 된다는 특징이 있습니다. I2C에서는 풀업 저항을 사용하여 기본적으로 HIGH 상태입니다. 또한 SPI와 다르게 오직 2개의 핀만 사용한다는 것이 특징입니다. SPI는 전이중 통신이 가능하지만, 슬레이브가 추가될 때마다 슬레이브 선택을 위한 핀이 추가로 필요합니다. 반면 I2C는 주소 체계를 사용하기 때문에 2개의 핀만으로 여러 장치와 반이중 통신이 가능합니다. 데이터 형식위 데이터 프레임 형식은 마스터에서 슬레이브에 데이터를 송신(Master write / Slave r.. 2024. 9. 2.
[42GG] LocalDateTime과 Timezone 이전 글 요약첫 번째 문제는 대회 스케쥴에 대한 Custom Validator에서 NullPointerException이 발생했습니다. @NotNull보다 Custom Validator가 먼저 실행되기 때문에 올바른 필드 값이 들어오지 않으면 null을 참조하게 되는 것이 원인이었습니다. 두 번쨰 문제는 Null Check하는 로직을 추가하면서 날짜 형식에 대한 Validation(@JsonFormat)을 추가했는데 해당 부분에서 데이터가 바인딩 되지 않는 문제가 추가로 발생했습니다. 프론트에서는 "yyyy-MM-dd'T'HH:mm" 패턴 형식으로 보내고, 백엔드에서는 "yyyy-MM-dd HH:mm" 형식으로 설정했기 때문이었습니다.  두 번째 문제를 해결하면서 Timezone과 관련된 문제점을 발견했.. 2024. 8. 30.
[임베디드] 74HC595D FND 모듈 제어 - SPI SPISPI(Serial Peripheral Interface)는 주변 장치와 직렬로 통신하기 위한 인터페이스 입니다. 주로 근거리에서 칩(IC)과 칩 사이에 통신을 위해서 사용합니다. 클럭SPI는 지난 글에서 GPIO를 이용하여 FND 모듈을 제어한 것과 같이 클럭 주기에 맞춰서 데이터를 송수신합니다. UART와는 다르게 통신 속도를 지정하지 않고, 클럭을 사용하기 때문에 속도 제한이 없습니다.SPI의 클럭 위상(CPHA, Clock Phase)은 1 Edge와 2 Edge로 나뉩니다. 클럭의 극성(CPOL, Clock Polarity)이 HIGH인 경우 1 Edge에서는 클럭이 하강하는 시점의 MOSI/MISO 상태를 확인하고, 2 Edge에서는 클럭이 상승하는 시점에 MOSI/MISO 상태를 확인합.. 2024. 8. 10.