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

리오의 개발일지

github: @dldydtjs2965

  • 분류 전체보기
    • 프로젝트
    • 데이터베이스
      • Redis
      • Elasticsearch
    • JAVA
    • Python
      • Flask
    • Javascript
      • Node.js
      • React
      • Nest.js
    • Git
    • 인공지능
      • Claude
    • CS
      • 알고리즘
    • 일상
    • 도서
    • devops
      • aws
    • spring
      • SpringBoot
      • Spring Security
      • JPA
  • 홈
  • 태그
  • 방명록

백엔드에서 동시성 이슈를 제어하는 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
  • · 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
  • · 2025. 6. 29.
[컴퓨터 밑바닥의 비밀] 프로그래밍 개념 파헤치기

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

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

  • format_list_bulleted CS
  • · 2025. 6. 1.
[컴퓨터 밑바닥의 비밀 스터디] 링커에 대하여

[컴퓨터 밑바닥의 비밀 스터디] 링커에 대하여

링커란링커는 컴파일러가 생성한 여러 개의 오브젝트 파일과 라이브러리를 하나로 묶어주는 프로그램입니다. 마치 음식에서 여러 명의 쉐프들이 여러 개의 요리를 만들면 그걸 하나의 접시에 담아 확인하는 헤드쉐프라고 볼 수 있습니다. 링커의 동작 과정심벌 해석: 링커가 여러 개의 오브젝트 파일을 연결할 때 각 심벌의 참조를 정확히 하나의 심벌로 연결하는 과정입니다. 주요 대상은 전역 심벌과 외부 심벌입니다. 심벌 수집: 오브젝트 파일에 정의된 심벌 테이블에서 전역 변수와 외부 변수를 수집합니다.심벌 매칭: 각 심벌 참조(예: extern 변수, 다른 파일의 함수 호출)를 해당 정의와 연결합니다. 정의가 없는 참조는 링커 오류를 발생시킨다.중복 심벌 처리: 동일한 이름의 심벌이 여러 파일에 정의된 경우, 링커는 s..

  • format_list_bulleted CS
  • · 2025. 5. 27.
[컴퓨터 밑바닥의 비밀] 소스 코드의 역사

[컴퓨터 밑바닥의 비밀] 소스 코드의 역사

1. 매우 빠른 스위치 CPU위의 사진은 삼체에 한장면 중 하나입니다. 장면에 대해 간단하게 설명드리자면 3개의 태양으로 인해 발생하는 운동 원칙을 계산하기 위해 사람들을 일렬로 쭉 세워놓고 수많은 사람들이 깃발을 오르락 내리락하면서 마치 하나의 회로판처럼 움직이는데 이건 마치 CPU가 동작하는 모습을 떠올리게 합니다. 삼체에 한 장면처럼 CPU는 매우 많은 스위치를 가지고 있고 전기 신호를 통해 동작하기 때문에 각각의 스위치는 사람이 깃발을 올리고 내리는 속도보다 훨씬 더 빠르게 동작합니다. 그 덕에 사람들은 주판, 계산기보다 훨씬 빠른 연산장치를 가질 수 있게 되었습니다. 하지만 초기의 컴퓨터는 CPU가 이해할 수 있는 언어가 0, 1 뿐이라 천공 카드(paunched card)에 하나하나 구멍을 ..

  • format_list_bulleted CS
  • · 2025. 5. 11.
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 6
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기
    • 프로젝트
    • 데이터베이스
      • Redis
      • Elasticsearch
    • JAVA
    • Python
      • Flask
    • Javascript
      • Node.js
      • React
      • Nest.js
    • Git
    • 인공지능
      • Claude
    • CS
      • 알고리즘
    • 일상
    • 도서
    • devops
      • aws
    • spring
      • SpringBoot
      • Spring Security
      • JPA
인기 글
전체 방문자
오늘
어제
Copyright © ri5 모든 권리 보유.
SKIN: Copyright © 쭈미로운 생활 All rights reserved. Designed by JJuum.
and Current skin "dev-roo" is modified by Jin.

티스토리툴바