tech 27

[mysql] 업데이트시 innodb buffer pool, redo log, disk io 동작에 관하여

InnoDB에서 UPDATE의 내부 동작 순서UPDATE 실행 시 해당 row가 속한 페이지를 Buffer Pool로 로딩페이지 단위(기본 16KB)작은 컬럼 하나만 바꿔도, 그 row가 있는 페이지 전체가 메모리로 올라옴변경 적용 (메모리 내에서)실제 데이터를 수정하고해당 페이지는 "Dirty Page" 로 표시됨Redo Log에 변경 내용 기록 (WAL - Write Ahead Logging)변경 직후 Redo Log에 먼저 기록됨이건 충돌 시 복구용이때 디스크에는 아직 안 씀Undo Log에도 기록 (MVCC / Rollback용)Checkpoint 또는 flush 조건 만족 시 디스크에 기록일정 시간이나 페이지 수, Redo Log 크기 초과 등 조건에 따라Dirty Page를 디스크로 flush..

tech/database 2025.03.26

[architecture] ASP.NET Core 서버의 Event Loop 동작

회사에서 서비스 트래픽은 대부분 ASP.NET Core 로 작성한 API 서버로 받아서 처리한다. ASP.NET Core 서버는 내부적으로 Kestrel 이라는 웹서버를 이용하여 여러 소켓으로 들어오는 요청들을 동시에 처리해 응답하는데, 오늘은 해당 서버들의 내부 Event Loop 작동방식에 대해 정리해보려 한다. ASP.NET Core의 이벤트 루프(Event Loop) 개념ASP.NET Core는 전통적인 블로킹 방식의 스레드 기반 모델이 아니라, 비동기 I/O를 적극 활용하여 이벤트 기반(Event-driven) 비동기 방식으로 동작한다. 하지만 Node.js처럼 단일 이벤트 루프 모델을 사용하는 것은 아니며, 대신 비동기 태스크 기반의 스레드 풀(Thread Pool)과 이벤트 루프(Event ..

tech/architecture 2025.02.06

[리눅스] 리눅스에서 소켓을 다루는 방식

현재 회사에서 운영하고 있는 모든 API 서버를 linux 에서 운영하여 트래픽을 받고 있다. 오늘은 Linux 에서 클라이언트 연결 소켓을 처리하는 방식에 대해서 정리해보려 한다. 그동안 Linux에서 소켓 입출력 데이터를 파일 입출력으로 관리한다는 사실은 알고 있었지만, 관련된 용어나 개념을 어느정도 정리해보고 싶었다ㅎㅎ 파일 디스크립터(File Descriptor, FD)란?파일 디스크립터(File Descriptor, FD)는 리눅스에서 파일을 식별하는 정수형 값이다. 리눅스에서는 모든 것을 파일로 취급하므로, 파일, 소켓, 파이프, 터미널 등 모든 입출력 자원을 파일 디스크립터(FD) 를 통해 관리한다.파일 디스크립터 예시FD 값설명0표준 입력 (stdin)1표준 출력 (stdout)2표준 에러..

tech/리눅스 2025.02.04

gRPC 프로토콜

현재 회사에서 구축한 서버의 네트워크 프로토콜로 gRPC 를 사용하고 있다. 오늘은 gRPC와 관련된 기술의 여러측면을 정리해보려 한다. 서버 통신프로토콜로 gRPC를 채택한 이유우선 회사에서 gRPC를 통신프로토콜로 채택한 이유는 대표적으로 아래와 같다.1. 어떤 클라이언트 언어를 사용하더라도 protoc 로 간단하게 요청/응답/API호출메소드 등을 코드로 생성할 수 있다. 이렇게 되면 서버와 통신하는 모든 코드를 type safety 한 방식으로 작성할 수 있기 때문에(당연히 모든 객체, 필드들 자동완성까지 함께) 개발 생산성이 올라간다.2. protobuf 파일만 공개하면 어떤 클라이언트에서도 해당서버와 자유롭게 연결할 수 있다.3. 요청/응답의 단방향 통신에 더하여 클라이언트 스트리밍, 서버 스트..

tech/network 2024.10.24

[redis] aws elasticache network throttling 현상에 관하여

- micro burst 현상aws elasticache metric에서 network in/out 그래프를 볼 수 있는데, 가끔 인스턴스의 network bandwidth 안쪽으로만 계속 쓰고 있는것으로 나오는데도 network bandwidth exceed 현상이 발생하는것을 볼 수 있다. 아래 글에서 원인중 하나가 나오는데, 요약하자면 metric에서 확인할 수 있는 network in/out 은 측정단위가 분 이고 실제 network bandwidth exceed 판단은 초단위이기 때문이라는 것이다. 만약 분단위로는 bandwidth 를 초과하지 않는것 같다 하더라도 초단위로 측정했을때 특정 순간에서 bandwidth 가 초과되는 micro burst현상이 발생한다면 exceed 로 판단되어 pa..

tech/database 2024.10.20

[redis] 레디스 내부 동작 이해 : sorted set

오늘은 레디스의 sorted set 의 내부 작동원리에 대해 이해한것을 정리해보려 한다. 아래 내용이 포함된다.1. sorted set 지원 기능 정리2. sorted set 내부 동작원리3. skip list 자료구조의 주요 기능(탐색, 삽입, 삭제..)들이 왜 O(log N)인지에 대한 수학적 분석4. sorted set은 왜 내부적으로 BST를 쓰지 않았을까?(이건 TMI지만 개인적인 호기심ㅎ)5. hash table 자료구조 동작원리 Overviewsorted set은 고유한 요소(멤버)와 실수형 점수를 쌍으로 저장하며, 점수를 기준으로 항상 정렬된 상태를 유지하는 데이터 구조이다. 시간복잡도 측면에서 당연하겠지만 모든기능은 O(log N)이다(시간복잡도란 해당기능이 수행되는데 걸리는 시간을 데이..

tech/database 2024.10.03

[Kafka] 카프카 프로듀서

Kafka는 대용량 데이터의 실시간 처리를 위한 분산 스트리밍 플랫폼이다. 오늘은 Kafka 프로듀서가 메시지를 브로커의 토픽 파티션에 적재하는 과정과 메시지 전송의 신뢰성을 높이기 위한 주요 설정값들에 대해 정리한다.1. 프로듀서에서 브로커의 토픽 파티션으로 메시지 전송 과정Kafka 프로듀서는 애플리케이션에서 생성된 메시지를 브로커의 특정 토픽 파티션에 안전하게 전달하는 역할을 수행한다. 이 과정에서 메시지가 파티셔너를 거쳐 브로커에 적재되고 응답을 받기까지의 구체적인 흐름을 단계별로 설명한다.1. 메시지 생성 및 전송 요청프로듀서는 애플리케이션으로부터 전송할 데이터(record)를 생성한다. 이 데이터는 키(key)와 값(value), 그리고 선택적인 헤더(headers)로 구성된다. 프로듀서는 이..

tech/database 2024.09.21

[카프카] Simple Authentication and Security Layer(SASL)

오늘은 카프카의 보안프로토콜에 사용되는 Simple Authentication and Security Layer(SASL)에 관하여 정리해보려 한다. SASL 에 관하여 이야기하려면 카프카의 보안프로토콜에 대해 먼저 설명이 필요하다. 카프카는 2개의 보안관련 표준기술인 Transport Layer Security(TLS)와 Simple Authentication and Security Layer(SASL) 을 사용해서 4개의 보안프로토콜을 지원한다. 4개의 보안 프로토콜은 전송계층보안(SSL, PlainText 중 택1), 인증계층보안(SASL, SSL 택1) 을 조합하여 정의된다.  SASL은 클라이언트와 서버 간의 인증을 위한 프레임워크다. 다양한 인증 메커니즘을 지원하며, 애플리케이션 프로토콜과 독..

tech/database 2024.09.18

Two-Phase Commit(2PC)와 SAGA 패턴에 관하여

두 개의 분산 트랜잭션 처리 기법인 Two-Phase Commit(2PC)과 Saga 패턴의 컨셉 정도만 가볍게 정리한다. Two-Phase Commit(2PC)과 Saga 패턴 은 분산 시스템에서 데이터 일관성을 유지하기 위한 여러 방법들중 대표적인 2가지 이다. 먼저, Two-Phase Commit은 분산 트랜잭션을 원자적으로 처리하기 위한 프로토콜로, 트랜잭션이 성공적으로 완료되었는지 여부를 모든 관련 노드가 합의하는 절차를 가진다. 2PC는 두 가지 단계로 나뉜다. 첫 번째 단계에서는 모든 노드가 트랜잭션을 커밋할 준비가 되었는지 확인하고, 두 번째 단계에서는 준비가 된 경우 트랜잭션을 실제로 커밋하거나 실패한 경우 롤백을 진행한다. 이 방식은 일관성을 보장하지만, 장애 발생 시 시스템이 오랫동안..

tech/architecture 2024.09.18

[MySQL] 트랜잭션 및 잠금

MySQL에서 Row락에 대한 개념은 특별히 상세하게 알아야 할 필요가 있다. MySQL에서는 특별하게 Row Lock을 잡을때 Index의 record를 잠그기 때문에 여러 이상현상이 나타날 수 있기도 하고, Transaction Isolation Level 에 따라 Lock 의 기본설정이 다르기도 하여 여러모로 중요하다!  아무튼 오늘은 MySQL의 트랜잭션(Transaction)과 잠금(Locking)에 대한 주제로 관련 지식을 정리한다.1. 트랜잭션(Transaction)트랜잭션은 일련의 작업을 하나의 단위로 묶어 실행하는 것을 의미한다. 이 작업들은 모두 성공하거나, 모두 실패해야 한다. 이를 위해 트랜잭션은 네 가지 ACID 특성을 준수한다.ACID 특성Atomicity (원자성): 트랜잭션 ..

tech/database 2024.09.16