리오의 개발일지
close
프로필 사진

리오의 개발일지

github: @dldydtjs2965

  • 분류 전체보기
    • 프로젝트
    • 데이터베이스
      • Redis
      • Elasticsearch
      • RDB · SQL
    • CS
      • 알고리즘
      • 설계 · 아키텍처
      • 컴퓨터구조 · OS
      • 네트워크
    • 인공지능
      • Claude
    • Language
      • Java · JVM
      • Python
      • JavaScript · TypeScript
    • 커리어 · 일상
      • 회고
      • 이직 · 커리어
      • 세미나 · 커뮤니티
    • devops
      • aws
      • Docker · K8s · 배포
    • Spring
      • SpringBoot
      • JPA
      • 토비의 스프링 시리즈
  • 홈
  • 태그
  • 방명록
MQTT로 기기를 제어하고 있지만, 사실 잘 몰랐습니다

MQTT로 기기를 제어하고 있지만, 사실 잘 몰랐습니다

들어가며지금 운영 중인 서비스에서 AWS IoT Core를 통해 MQTT로 기기를 제어하고 있다. 명령을 publish 하면 기기의 내판과 외판이 동작하고, 기기의 상태가 변경되면 서버가 받아서 반영한다. 외적으로는 잘 돌아가지만 문제는 왜 잘 돌아가는지 깊게 설명할 수 없었다는 것이다.QoS란 무엇인지, 기기가 오프라인일 때 보낸 명령은 어떻게 되는지, 연결이 끊긴 기기를 서버는 어떻게 알아채는지 잘 설명할 수 없었다. 장애가 나기 전에 이해해두자는 마음으로, MQTT의 내부 동작을 표준 스펙과 AWS IoT Core의 실제 구현을 오가며 정리해봤다.미리 말해두면, AWS IoT Core는 표준 MQTT 브로커가 아니다. 표준과 다르게 동작하는 지점이 꽤 많고, 그 차이를 제대로 이해하지 못하면 실제 ..

  • format_list_bulleted CS/네트워크
  • · 2026. 7. 19.

사가패턴을 통해 데이터 정합성을 보장하기

잘못된 설계가 만드는 오차운영 환경에서 잘못된 설계 탓에 어긋난 데이터는 원인을 추적하기가 쉽지 않다. 실제 사용자가 서비스를 쓰고 여러 시스템이 맞물려 돌아가다 보니 버그를 재현하기 어렵고, 문제 자체도 불규칙하고 간헐적으로 나타나기 때문이다.그렇다면 이렇게 어긋난 데이터를 막는 것은 불가능할까? 그렇지 않다. 로그를 심어 사후에 추적하는 방법도 있지만, 더 근본적인 해결은 설계 단계에서부터 트랜잭션의 경계와 예외 발생 시 로직의 흐름을 명확히 정의하는 데서 출발한다.실제 주문 로직을 통해 알아보기@Transactionalpublic PaymentResponse requestPayment(Long memberId, Long orderId) { Order order = orderRepository...

  • format_list_bulleted CS/설계 · 아키텍처
  • · 2026. 6. 16.

백엔드에서 동시성 이슈를 제어하는 6가지 방법

트래픽이 별로 없는 서비스에서는 동시성 문제를 마주칠 일이 거의 없다. 그래서 몇 년을 개발하면서 한 번도 안 터뜨려본 사람도 많다. 나도 동시성 이슈를 해결한 경험이 많지는 않다. 하지만 트래픽이 적다고 안 터지는 건 아니다. 클라이언트의 더블 클릭, 네트워크 재시도, 비동기로 동작하는 컴포넌트. 이런 것만으로도 같은 요청이 거의 동시에 도착한다. 그 순간 데이터 정합성은 깨진다.그래서 결국 알아야 한다. 언젠가는 마주칠 문제이고 이런 설계 미스로 인해 서비스 신뢰도와 매출의 하락이 발생할 수 있기 때문이다.이 글에서는 가장 흔한 동시성 문제인 갱신 분실(lost update)을 재고 차감 시나리오로 재현하고, 이걸 막는 다섯 가지 방법을 비교해보려고 한다. Redis 분산락, DB 격리수준 + Un..

  • format_list_bulleted CS/설계 · 아키텍처
  • · 2026. 5. 31.
[컴퓨터 밑바닥의 비밀] 메모리 장벽과 잠금 프로그래밍

[컴퓨터 밑바닥의 비밀] 메모리 장벽과 잠금 프로그래밍

컴파일러와 POoECPU는 프로그래머가 코드를 작성한 순서대로 명령어를 실행하지 않음 (성능을 높이기 위함)비순차적 실행 단계기계 명령어를 생성하는 단계: 컴파일 중 명령어 정렬CPU가 명령어를 실행하는 단계: 실행 중 명령어가 비순차적으로 실행컴파일러가 명령어 순서를 변경하는 과정코드 예시int a = 1;int b = 2;int c = a + 5; // a에 의존int d = b + 3; // b에 의존 최적화된 어셈블리어; 최적화된 어셈블리 코드mov eax, 1 ; a = 1mov ebx, 2 ; b = 2add ebx, 3 ; d = b + 3 (먼저 계산)add eax, 5 ; c = a + 5 (나중에 계산) 아래와 같은 명령어로 정렬을 못하게 지시 가..

  • format_list_bulleted CS/컴퓨터구조 · OS
  • · 2025. 7. 13.
[컴퓨터 밑바닥의 비밀] CPU 진화론

[컴퓨터 밑바닥의 비밀] CPU 진화론

CPU의 진화CPU 관점의 프로그램포토샵, 크롬, helloWorld 출력 등 cpu 입장에서는 기계 명령어일 뿐이다. 명령어의 양이 다를 뿐기계어는 실행 파일에 저장된다. 프로그램이 실행되면 실행 파일에 있는 명령어들을 메모리에 적재하고 CPU가 실행한다.프로그래머 관점에서 CPU의 역활은 아주 단순하다고 생각해볼 수 있습니다.CPU에게 명령어 집합이란?CPU에게 명령어 집합(ISA: Instruction Set Architecture)은 CPU가 이해하고 실행할 수 있는 모든 기본 명령어들의 목록입니다. 요리사에게 레시피북이 있듯이, CPU에게는 수행 가능한 모든 동작이 정의된 명령어 집합이 있습니다.예를 들어, CPU는 다음과 같은 기본 명령어들을 가지고 있습니다:ADD: 두 숫자를 더하기MOV: ..

  • format_list_bulleted CS/컴퓨터구조 · OS
  • · 2025. 6. 29.
[컴퓨터 밑바닥의 비밀] 프로그래밍 개념 파헤치기

[컴퓨터 밑바닥의 비밀] 프로그래밍 개념 파헤치기

프로그래밍의 기본 동기와 비동기프로그래밍을 시작하면서 가장 많이 듣는 개념 중 하나인 동기와 비동기에 대해 알아봅시다. 동기 개념은 일상 속에서도 쉽게 접할 수 있습니다. 여러분이 건강검진을 하면서 엑스레이와 의사와 상담을 받아야 된다고 가정해봅시다. 여러분은 엑스레이를 촬영 후 엑스레이 결과가 나올 때까지 기다릴 것입니다. 엑스레이 결과가 나오고 나서야 여러분은 의사에게 상담을 받으러 움직이게 될 것입니다. 이처럼 저희가 작업을 요청하고 완료할 때 까지 기다리는 시나리오를 동기라고 합니다.위의 그림은 비동기의 과정입니다. 여러분이 채혈 검사를 받고 검사지가 완성되는 것에 오래걸리기 때문에 따로 기다리지 않고 바로 시력검사를 받으러 갔습니다. 그 뒤에 검사지가 작성되어 전달 받았고 의사에게 상담을 받아 ..

  • format_list_bulleted CS/컴퓨터구조 · OS
  • · 2025. 6. 1.
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 8
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기
    • 프로젝트
    • 데이터베이스
      • Redis
      • Elasticsearch
      • RDB · SQL
    • CS
      • 알고리즘
      • 설계 · 아키텍처
      • 컴퓨터구조 · OS
      • 네트워크
    • 인공지능
      • Claude
    • Language
      • Java · JVM
      • Python
      • JavaScript · TypeScript
    • 커리어 · 일상
      • 회고
      • 이직 · 커리어
      • 세미나 · 커뮤니티
    • devops
      • aws
      • Docker · K8s · 배포
    • Spring
      • SpringBoot
      • JPA
      • 토비의 스프링 시리즈
인기 글
전체 방문자
오늘
어제
Copyright © ri5 모든 권리 보유.
SKIN: Copyright © 쭈미로운 생활 All rights reserved. Designed by JJuum.
and Current skin "dev-roo" is modified by Jin.

티스토리툴바