전체 글 311

ABA 문제와 사례

ABA 문제란?어떤 스레드가 변수의 값을 A라고 확인하고, 나중에 그 값이 여전히 A라서 안전하다고 착각해 연산을 진행했는데…사실은 그 사이에 다른 스레드가 A → B → A로 바꿔치기한 경우 발생하는 문제.즉, 값은 다시 A라서 “겉보기엔 변화 없음”처럼 보이지만, 실제로는 상태가 바뀌었고 의도하지 않은 결과가 생김. Lock-Free Stack (스택 pop/push)struct Node { int data; Node* next;};std::atomic head; Thread T1 (Pop)head를 읽음 → Node A 가리킴A->next를 확인 → Node BCAS로 head를 A에서 B로 바꾸려 함Thread T2 (Pop+Push)T1이 CAS하기 전에 실행A를 pop → head는..

대표적인 락/동기화 도구 : Event, Semaphore, Condition Variable, Interlocked 함수, Spin Lock, Slim Tools

Event (이벤트 객체)설명: 특정 조건이 충족될 때까지 스레드들을 대기시키거나, 시그널을 보내서 깨어나게 하는 도구.특징:CreateEvent, SetEvent, ResetEvent, WaitForSingleObject 등 사용Manual-reset / Auto-reset 방식 제공활용 예시:"리소스 로딩 끝날 때까지 기다려!" 같은 상황Producer-Consumer 패턴에서 유용Semaphore (세마포어)설명: 동시에 접근 가능한 스레드 개수를 제한하는 도구.특징:카운터 기반 → 0이면 대기, 양수면 접근 허용CreateSemaphore, ReleaseSemaphore 등 사용활용 예시:동시에 5개의 스레드만 DB 연결 풀을 사용할 수 있도록 제한Condition Variable (조건 변수)설..

SRWLock / Critical Section / Mutex 장단점 비교

SRWLOCK (Slim Reader/Writer Lock)장점가볍고 빠름: 유저 모드에서 동작, 커널 전환 최소화읽기/쓰기 모드 지원:여러 스레드가 동시에 읽기 가능 (Shared)쓰기는 한 스레드만 (Exclusive)조건 변수와 함께 사용 가능: SleepConditionVariableSRW 지원자동 초기화: 별도 Initialize 필요 없음 (구조체 초기화만으로 사용 가능)단점재진입 불가: 같은 스레드가 같은 락을 다시 획득하면 교착 상태 발생프로세스 내부 전용: 다른 프로세스와 공유 불가Windows Vista 이후에서만 지원 → 호환성 제한Mutex장점프로세스 간 동기화 가능: OS 커널 오브젝트 기반 → 여러 프로세스에서 공유 가능재진입 가능 (Reentrant): 같은 스레드가 여러 번 ..

Epoch-based Reclamation (EBR, 시기 기반 메모리 회수)

멀티스레드 환경에서 lock-free 자료구조를 쓰면, 메모리 해제가 큰 문제가 됩니다.어떤 스레드가 노드를 제거했다고 해도, 다른 스레드가 여전히 그 노드를 참조 중일 수 있습니다. 이때 free()를 즉시 해버리면, 참조 중인 스레드가 잘못된 메모리에 접근(Use-After-Free)해서 프로그램이 망가집니다.이를 해결하기 위해 EBR(Epoch-based Reclamation)은 모든 스레드가 특정 "안전 시점(Epoch)"을 지나야 메모리를 해제할 수 있도록 관리합니다. 시스템 전체에 Epoch(시기)라는 전역 카운터를 둡니다.각 스레드는 자신이 현재 어떤 Epoch에서 작업 중인지 기록합니다.메모리를 해제할 때 즉시 free하지 않고, “현재 Epoch에 묶어서” Retire List에 넣어둡니..

위험 포인터(Hazard Pointer)

Hazard Pointer(위험 포인터)는 Lock-free 자료구조에서 안전한 메모리 회수(memory reclamation)를 위해 고안된 기법입니다. 문제의 배경은 ABA 문제와 연결됩니다:어떤 스레드가 노드를 참조 중일 때, 다른 스레드가 그 노드를 해제하고 재활용하면, 첫 번째 스레드는 더 이상 유효하지 않은 메모리를 건드리게 됩니다(Use-After-Free).Hazard Pointer는 각 스레드가 내가 지금 참조하고 있는, 아직 해제되면 안 되는 노드의 주소를 표시하는 방식입니다.동작 방식각 스레드마다 Hazard Pointer 배열(혹은 슬롯)을 둡니다. 어떤 스레드가 lock-free 구조에서 노드를 읽을 때:노드 포인터를 읽기 전에 Hazard Pointer에 등록(= 보호 마킹).이..

SpecKit, 스펙 기반 개발 툴킷

SpecKit, the spec-driven coding tool announced by Github Spec-driven development with AI: Get started with a new open source toolkitDevelopers can use their AI tool of choice for spec-driven development with this open source toolkit.github.blog Github이 발표한 SpecKit 은 AI 코딩 에이전트(예: Copilot, Claude Code, Gemini CLI)와 함께 사용하는 오픈소스 스펙 기반 개발 툴킷이에요.기존 AI 코딩 방식은 "목표를 설명 → 코드 생성"이지만, 실제로는 코드가 의도와 다르거나, 일..

AI 2025.09.11

분산 시스템의 CAP 이론

CAP 이론은 분산 시스템에서 세 가지 특성 중 최대 두 가지만 동시에 보장할 수 있다는 이론입니다.CAP의 세 가지 특성C (Consistency) - 일관성모든 서버가 항상 같은 데이터를 가지고 있어야 함어느 서버에 접속해도 동일한 정보를 받을 수 있음예시: 은행 계좌 잔액이 모든 ATM에서 동일하게 표시A (Availability) - 가용성시스템이 항상 응답할 수 있어야 함일부 서버에 문제가 있어도 서비스가 계속 동작예시: 24시간 언제든지 웹사이트에 접속 가능P (Partition Tolerance) - 분할 허용성서버 간 네트워크 연결이 끊어져도 시스템이 동작해야 함물리적으로 떨어진 서버들 사이의 통신 장애를 견딜 수 있음예시: 서울-부산 간 네트워크가 끊어져도 각 지역에서 서비스 이용 가능현..

AI 그리고 뉴럴 네트워크(AI and Neural Network)

https://www.youtube.com/watch?v=nHt7BHyJGko https://www.youtube.com/watch?v=lIKSQgy7M2s https://www.youtube.com/watch?v=ZMgax46Rd3g뉴런우리가 인공 지능에게 바라는 것은 추론 하기 입니다.InputOutput집이 얼마나 큰가?가격을 추론한다얼마나 공부를 많이 했는가?시험 점수를 추론한다학창시절 생물이나 과학시간에 신경망을 이루는 뉴런에 대해서 배운 기억이 있을 것입니다. 신경망의 많은 수의 뉴런 그러니까 신경 세포들이 연결되어 만들어 진다.우리 두뇌속에는 대략 1000억개의 뉴런들이 복잡하게 연결되어 있습니다.뉴런이 하는 일은 수상돌기(덴드라이트)를 통해 여러 개의 이웃 뉴런들로 부터 전기 신호를 입력받..

AI 2025.08.27

딥러닝 첫걸음

[무료] 딥러닝 첫걸음 (홍랩 AI 시리즈)https://www.youtube.com/watch?v=iWEi8IKs4-U&t=777s0 개요전체 인공 지능 분야에서 머신러닝이 있고 그 중에 딥러닝이라는 분야가 있습니다. 머신러닝은 사람이 하나 하나 프로그래밍 하는 것이 아니라 머신 그러니까 컴퓨터가 배우는 것입니다. 무엇으로부터 배우는 가? 바로 데이터로부터 배웁니다. 데이터 과학이 상당부분 영역이 겹쳐 있는 것을 보실 수 있습니다.왜 데이터로부터 배우는 방식을 사용하는가? 인류가 지금까지 시도해온 어떠한 방법 보다 데이터로 접근하는 방법이 가장 좋다라고 확인 되었기 때문입니다. 전통적인 방법으로 아무리 열심히 프로그래밍을 해도 이 머신러닝 방식을 따라 잡을 수 없더라입니다. 머신러닝 분야안에서 많은 다..

AI 2025.08.26

Slack Bolt의 AsyncSocketModeHandler

AsyncSocketModeHandler는 Slack Socket Mode를 asyncio 기반으로 돌려주는 핸들러입니다. Slack 서버와 WebSocket으로 연결하여 이벤트를 비동기 핸들러로 처리 가능 하도록합니다.Slack Bolt란?Slack이 제공하는 공식 Python SDK.봇/앱을 만들 때 이벤트, 액션, 명령어 등을 간단히 처리할 수 있도록 도와줍니다.크게 두 가지 연결 방식이 있음:HTTP 방식 (이벤트를 Slack 서버에서 HTTP 요청으로 전달 → Flask/FastAPI 등 웹서버 필요)Socket Mode 방식 (웹소켓을 통해 Slack 서버와 직접 연결 → 방화벽/공인 도메인 불필요)예를 들어,from slack_bolt.adapter.socket_mode.async_handl..

AI/Slack Bot 2025.08.18
반응형