본문 바로가기

CS19

Bitset 자료구조란 Bitset이란BitSet은 비트를 효율적으로 저장하고 조작할 수 있는 자료구조입니다.Bitset 사용 이유1. 메모리 효율boolean[]은 실제로는 한 요소당 1바이트 이상 사용되지만,BitSet은 64개의 비트를 long 1개에 담아 8바이트로 처리합니다.👉 즉, 대량의 true/false 값을 다룰 때 훨씬 가볍습니다.2. 성능비트 연산 (|, &, ^)을 통해 대량의 boolean 값을 한 번에 계산할 수 있어 빠릅니다.예: bitset1.and(bitset2) → 배열 전체를 순회하면서 동시에 AND 처리3. 개발자 실수 줄여줌Java는 정수 타입을 이용한 직접적인 비트 연산보다 BitSet을 사용할 때 더 읽기 쉽고 안전한 코드를 작성할 수 있게 해줍니다.컴파일러가 bitIndex 음수 체.. 2025. 4. 4.
[Real MySQL 9장] 옵티마이저와 힌트 1. 개요옵티마이저는 MYSQL에서 최적의 쿼리 실행계획을 수립하는 기능입니다.1.1 쿼리 실행 절차SQL파서: 사용자로부터 요청된 SQL 문장을 쪼개서 MYSQL 서버가 이해할 수있는 수준으로 분리(파스 트리)합니다.옵티마이저: 파싱 정보를 보면서 어떤 테이블부터 읽을지, 어떤 인덱스를 이용해 테이블을 이용해 읽을지 선택합니다.MYSQL 엔진, 스토리지 엔진: 두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져옵니다.1.2 옵티마이저의 종류옵티마이저는 테이터 베이스 서버에서 두뇌와 같은 역할을 담당합니다.규칙 기반 최적화(RBO, Rule-Based Optimizer)초기 버전에 많이 사용내장된 우선순위에 따라 실행 계획 수립통계 정보(테이블의 레코.. 2025. 1. 9.
[Real MYSQL 10장] 실행 계획 옵티마이저가 항상 좋은 실행 계획을 만들어낼 수 있는 것은 아닙니다.그렇기 때문에 DBMS 서버에서는 이를 보완할 수 있도록 EXPLAIN 명령으로 옵티마이저가 수립한 실행 계획을 확인할 수 있습니다.1. 통계 정보MySQL 5.7 까지는 테이블과 인덱스에 대한 정보를 가지고 실행 계획을 수립했습니다.MySQL 8.0 부터는 인덱스되지 않은 칼럼들에 대해서도 데이터 분포도를 수집해서 저장하는 히스토그램 정보가 도입됐습니다.1.1 테이블 및 인덱스 통계 정보MySQL 서버의 통계 정보 MySQL 5.5 버전 까지는 각 테이블의 통계 정보가 메모리에서만 관리되어서 서버 재시작시 모두 사라졌습니다.이후의 버전에서는 각 테이블의 통계 정보를 mysql 데이터베이스의 innodb_index_stats 테이블과 i.. 2025. 1. 3.
데이터베이스 시스템에서 동시성을 제어하는 방법? 대표적인 동시성 제어 방식으로 MVCC(Multi-Version Concurrency Control) 와 Lock-Based Concurrency Control이 있습니다.1. MVCC(Multi-Version Concurrency Control/ 잠금 없는 읽기)MVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식입니다. 각 트랜잭션은 자신만의 일관된 스냅샷(MySQL::언두 로그)을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않습니다.데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있습니다. 트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항을 보지 못합니다.또한 읽기 작업.. 2024. 12. 18.
사용자가 웹사이트에 처음 접근했을 때 발생하는 일련의 과정 예를들어 사용자가 www.google.com을 입력하면, 브라우저는 HTTP 프로토콜을 사용해 구글 웹 서버와 통신하려고 합니다. HTTP는 OSI 7계층 중 애플리케이션 계층에서 동작하는 프로토콜입니다.이때 브라우저는 요청한 도메인 이름(www.google.com)에 대한 IP 주소를 알아야 하기 때문에 DNS(Domain Name System) 서버에 질의합니다. 이 질의 과정 또한 애플리케이션 계층에서 이루어지며, DNS 서버는 해당 도메인에 대한 IP 주소(예를 들어, 142.250.190.78)를 응답합니다.IP 주소를 얻은 후, 브라우저는 구글 서버와 통신을 시작합니다. HTTP는 TCP/IP를 기반으로 작동하므로, 데이터를 주고받기 전에 TCP 3-Way Handshake 과정이 필요합니다... 2024. 12. 16.
동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애 조치 방법 외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API 응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면서 성능에 악영향을 줄 수 있습니다. 이를 해결하기 위한 가장 기본적인 방법은 타임아웃을 설정하는 것입니다. 크게 타임아웃에는 커넥션 타임아웃과 리드 타임아웃, HTTP 커넥션 풀 타임아웃을 설정해 볼 수 있습니다.다음과 같이 특정 서비스의 장애가 전체 서비스에 영향을 주는 경우는 어떻게 해결할 수 있을까요? 🤔이 경우는 벌크헤드 패턴을 적용해 볼 수 있습니다. 벌크헤드 패턴은 기능의 종류마다 자원 사용을 분리하는 것을 의미하는데요. 자원을 격리하여 서비스 일부에 장애가 발생해도 전체로 전파되지 않도록 보장해 주는 패턴입니다. 위 예시에서는 외부 서비스마다 다른 HTTP 커넥션 풀을 사.. 2024. 12. 11.
실생활 예시로 이해하는 동기/비동기 & 블로킹/논블로킹 동기 (Synchronous)패스트푸드점에서 햄버거를 주문하고 카운터 앞에서 기다리는 상황주문 접수 → 조리 → 완성 → 수령의 순서가 보장됨다른 손님의 주문이 중간에 끼어들 수 없음블로킹 (Blocking)식당에서 1시간 웨이팅을 하는 상황웨이팅 동안 자리에서 이탈할 수 없음 (다른 일 불가능)내 차례가 되기 전까지 계속 기다려야 함 🔍 핵심 차이점:동기: 작업의 순서와 결과에 초점 (A 작업 후 B 작업)블로킹: 다른 작업 수행 가능 여부에 초점 (다른 작업 불가능한 상태)비동기 (Asynchronous)배달 앱으로 음식을 주문하고 다른 일 하는 상황주문 후 배달되는 동안 다른 일을 할 수 있음여러 가게에 동시에 주문할 수 있음논블로킹 (Non-blocking)식당 웨이팅 등록 후 전화나 문자로 알.. 2024. 12. 10.
공유 락과 배타 락 공유 락(Shared Lock)은 무엇인가요? 😀공유 락은 읽기 락(Read Lock)이라고 부르며, 공유 락이 걸린 데이터는 읽기(SELECT)연산만 **가능**하며, 쓰기(UPDATE, DELETE)는 **불가능**합니다. 공유 락이 걸린 데이터에 대해서 **다른 트랜잭션에서도 공유 락을 획득**할 수 있지만, 배타 락은 획득할 수 없습니다. 즉, 공유 락을 사용하면 **트랜잭션 내에서 조회한 데이터가 변경되지 않는**다는 것을 보장합니다.SELECT * FROM table_name WHERE id = 1 FOR SHARE;배타 락(Exclusive Lock)은 무엇인가요? 🤔배타 락은 쓰기 락(Write Lock)이라고 부르며, 배타 락을 획득한 트랜잭션은 읽기, 쓰기 연산 모두 **가능**합니.. 2024. 12. 10.
MySQL 아키텍쳐 1. MySQL 아키텍쳐1-1. MySQL 구조 && 동작과정쿼리 파서(Parser) -> 전처리기(Preprocessor) -> 쿼리 옵티마이저(Query Optimizer) -> 쿼리 실행기(Query Execution) -> 핸들러(스토리지 엔진)MySQL Connectors에 요청이 도착합니다.사용자 스레드가 할당되고 요청이 MySQL 엔진에 전달됩니다.쿼리 파서가 SQL을 MySQL이 이해 가능한 최소 단위로 잘라내고, 문법 유효성을 검증합니다.쿼리 문장을 토큰(MySQL 이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 구조로 만드는 과정이며, 쿼리의 문법 오류가 이 단계에서 확인 되며, 문법 오류가 있을 경우 사용자에게 오류 메세지가 전달 됩니다.전처리기가 컬럼명, 테이블명 등이.. 2024. 11. 26.