전체 글

데이터엔지니어 / Data Engineer
Operating System/Computer

[Computer] CPU가 바라보는 메모리

CPU가 바라보는 메모리CPU가 메모리 공간을 바라보는 방식에 대해 설명하기 위해서는 CPU의 기본 구조와 메모리 계층, 그리고 어떻게 이 두 요소가 상호 작용하는지 이해하는 것이 중요함. CPU와 메모리의 관계CPU는 컴퓨터의 뇌라고 할 수 있음.모든 계산과 명령 처리를 담당함.메모리는 이러한 계산에 필요한 데이터와 명령어를 저장하는 장소임.CPU는 필요한 데이터와 명령어를 메모리에서 불러와서 처리하고, 결과를 다시 메모리에 저장함. 메모리 계층 구조메모리 시스템은 여러 계층으로 구성됨.각 계층은 속도와 크기에서 차이가 있음.1. 레지스터CPU 내부에 위치하며, 가장 빠른 접근 속도를 제공함.매우 제한된 공간이지만, 현재 CPU가 처리하고 있는 작업에 직접적으로 관련된 데이터를 보관함. 2. 캐시 ..

Database/Redis

[Redis] brew install redis 설치 방법

설치 명령어brew install redis Redis 실행brew services start redis Redis 정지brew services stop redis Redis 재실행brew services restart redis

Database/Redis

[Redis] 정의, 인메모리 데이터베이스

RedisRedis는 고성능 키-값 저장소임.메모리 내 데이터 구조 저장소로서 주로 사용됨.Redis는 다양한 데이터 구조를 지원하며, 네트워크를 통해 데이터에 빠르게 접근할 수 있게 설계되어 있음.주로 캐시, 메시지 브로커, 큐, 세션 스토어 등으로 사용됨. Redis의 주요 특징1. 메모리 기반Redis는 모든 데이터를 메모리에 저장하고 접근함.이는 디스크 기반의 데이터베이스보다 훨씬 빠른 읽기 및 쓰기 속도를 가능하게 함. 2. 데이터 구조Redis는 단순한 키-값 쌍 이상을 지원함.리스트, 세트, 해시, 정렬된 세트, 비트맵, 하이퍼로그로그, 지오스페이셜 인덱스 등 다양한 데이터 구조를 내장함. 3. 지속성Redis는 두 가지 방법(RDB, AOF)을 통해 메모리 내 데이터를 디스크에 지속적으로 ..

Database/SQL

[MySQL] Auto Increment, 컬럼 생성 옵션 종류

MySQL Auto IncrementMySQL에서 Auto Increment 속성은 주로 테이블의 기본 키를 위해 사용됨.새로운 레코드가 추가될 때마다 자동으로 고유한 숫자를 생성하고 할당함.이 기능은 주로 식별자 필드에서 사용되어 데이터베이스 내 각 행의 고유성을 보장함. MySQL Auto Increment 기능 및 용도1. 자동 고유 번호 생성Auto Increment 필드는 새로운 행이 추가될 때마다 자동으로 값을 증가시킴.이는 사용자가 직접 각 행에 고유 번호를 할당하지 않아도 되도록 하여 데이터 삽입 과정을 단순화함. 2. 기본 키와의 통합 사용일반적으로 Auto Increment 속성은 기본 키와 함께 사용됨.이렇게 함으로써, 각 행은 자동으로 생성된 고유한 ID를 갖게 되어, 데이터를 보다..

Database/SQL

[MySQL] 외래키, 복합키

MySQL 외래키MySQL에서 외래키는 두 테이블 간의 관계를 정의하고, 참조 무결성을 유지하는 데 사용됨.외래키는 한 테이블의 열이 되며, 이 열은 다른 테이블의 기본키를 참조함.이를 통해 테이블 간의 데이터가 서로 일관성을 유지하도록 보장함. MySQL 외래키의 역할과 기능1. 데이터 무결성1.1 참조 무결성외래키는 참조 무결성을 보장하여 참조된 테이블의 기본키 없는 값이 참조하는 테이블에 입력되는 것을 방지함.이는 데이터베이스의 논리적 일관성을 유지하는 데 중요함. 2. 관계의 정의2.1 테이블 간 관계 설정외래키를 사용하여 테이블 간의 관계를 명확하게 정의할 수 있음.이 관계는 일대일, 일대다, 다대다 등이 될 수 있음.3. 캐스케이딩 작업3.1 캐스케이드 업데이트와 삭제외래키 관계에서 주 테이블..

Database/SQL

[MySQL] 인덱스, 기본키

MySQL 인덱스MySQL에서 인덱스는 데이터베이스 테이블의 데이터 검색 속도를 향상시키기 위해 사용되는 자료구조임.인덱스는 검색 엔진의 색인과 유사하게, 데이터베이스 내에서 데이터를 빠르게 찾을 수 있도록 도움.인덱스를 사용하면 테이블의 모든 행을 차례대로 검사하는 대신, 효율적인 방법으로 특정 데이터 위치를 빠르게 찾아갈 수 있음. MySQL 인덱스 종류1. 기본 인덱스 (Primary Index)기본키 인덱스는 테이블의 주요 검색 기준이 되는 열에 자동으로 생성됨.각 행은 고유한 기본 키를 가지며, 이는 데이터의 무결성을 보장하는 데 중요한 역할을 함. 2. 보조 인덱스 (Secondary Index)보조 키 인덱스는 기본 키 이외의 열에 생성될 수 있음.이 인덱스는 보조 검색 경로를 제공하여 기본..

Programming Language/Python

[Python] 너비 우선 탐색

너비 우선 탐색 (Breadth-First Search, BFS)너비 우선 탐색은 그래프와 트리 구조에서 사용되는 탐색 알고리즘임.시작 정점으로부터 가까운 정점을 탐색하면서 점차 더 멀리 떨어진 정점으로 나아가는 방식으로 동작함.BFS는 레벨별로 탐색을 진행하며, 큐 자료구조를 이용하여 구현됨.이 알고리즘은 경로 탐색, 최단 경로 찾기 등 다양한 분야에서 활용됨. BFS의 기본 원리와 과정1. 초기화탐색을 시작할 첫 번째 노드를 큐에 삽입하고 방문했다고 표시함. 2. 반복 작업큐에서 노드를 하나 꺼냄.해당 노드와 인접한 노드들을 확인함.방문하지 않은 인접 노드를 모든 큐에 삽입하고 방문했다고 표시함. 3. 종료 조건큐가 빌 때까지 위 과정을 반복함. BFS의 특징1. 완전성모든 노드를 방문하므로 완전한 ..

Operating System/Docker

[Docker] 도커와 도커의 네트워크

도커도커는 애플리케이션을 컨테이너화하여 개발, 배포 및 실행을 간소화하는 오픈 소스 플랫폼임.컨테이너는 소프트웨어를 실행하는 데 필요한 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정을 포함하는 표준화된 유닛임.도커를 사용함으로써 개발자는 애플리케이션이 다양한 환경에서도 일관되게 동작할 것임을 확신할 수 있음. 도커의 주요 구성 요소1. 도커 엔진1.1 설명도커의 핵심 소프트웨어로서, 도커 이미지를 실행하여 도커 컨테이너를 생성하는 역할을 함.1.2 구성서버(도커 데몬), REST API, 클라이언트(CLI 인터페이스)로 구성됨 2. 도커 이미지2.1 설명읽기 전용 템플릿으로서, 컨테이너를 생성하는 데 사용됨.2.2 특징이미지는 여러 계층으로 구성되며, 각 계층은 이전 계층의 변경 사항만을 저장..

Database/SQL

[DB] 데이터 모델링, NoSQL

데이터 모델링데이터 모델링은 데이터를 효과적으로 구조화, 조직화 및 정의하는 과정임.데이터가 저장, 관리, 검색되는 방식을 결정하는 데 중요한 역할을 함. 데이터 모델링의 기본 개념1. 개념적 데이터 모델1.1 목적데이터와 비즈니스 요구 사항 간의 관계를 이해하고 시각화해야함.1.2 구성요소엔터티, 속성, 관계 및 제약 조건1.3 도구ER 다이어그램, UML 2. 논리적 데이터 모델2.1 목적구체적 데이터 구조를 설계하고 시스템 내의 데이터 흐름을 정의해야 함.2.2 구성요소정규화된 테이블, 키, 인덱스2.3 도구관계 데이터베이스 스키마, NoSQL 데이터 모델 등. 3. 물리적 데이터 모델3.1 목적실제 데이터베이스에 데이터를 어떻게 저장할지를 결정해야 함.3.2 구성요소테이블 스페이스, 파티셔닝, 인..

Database/ElasticSearch

[ES] 엘라스틱서치의 인덱스, 인덱스 수명주기 관리 (ILM)

엘라스틱서치의 인덱스엘라스틱서치의 인덱스는 중심적인 데이터 구조로서, 전체 데이터를 저장하고 관리하는 데 사용됨.인덱스는 매우 유연하며, 다양한 종류의 검색 작업에 최적화되어 있음. 1. 인덱스의 개념 및 정의1.1 인덱스 구조엘라스틱서치의 인덱스는 아파치 루씬을 기반으로 한 역 인덱스 구조를 사용함.이 구조는 데이터를 효율적으로 검색할 수 있도록 설계된 것으로, 각 단어와 그 단어가 포함된 문서의 목록을 매핑함. 1.2 인덱스 생성사용자는 JSON 형식의 문서를 엘라스틱서치에 제출함.이 문서들은 자동으로 색인화되어 인덱스에 저장됨.인덱스는 검색 쿼리에 응답하기 위해 필요한 모든 정보를 포함함. 2. 매핑2.1 매핑 정의매핑은 인덱스에 포함된 문서들의 구조를 정의함.각 필드의 데이터 타입, 인덱스 방법,..

Database/ElasticSearch

[ES] 엘라스틱서치의 구조 및 색인

엘라스틱서치의 구조엘라스틱서치는 아파치 루씬을 기반으로 하는 분산 검색 엔진임.이 구조는 매우 유연하고 확장 가능하며, 실시간 데이터 검색과 분석을 위한 강력한 기능을 제공함. 1. 노드와 클러스터1.1 노드엘라스틱서치에서 하나의 서버 인스턴스를 노드라고 부름.각 노드는 클러스터의 일부로서 데이터를 저장하고 클러스터의 색인 생성, 검색 기능을 처리함. 1.2 클러스터여러 노드가 모여 하나의 클러스터를 형성함.클러스터는 전체 데이터를 저장하고, 모든 색인 및 검색 기능을 관리함.클러스터는 하나 이상의 노드로 구성될 수 있으며, 하나의 노드만으로도 클러스터를 형성할 수 있음. 2. 인덱스엘라스틱서치의 인덱스는 유사한 특성을 가진 문서들의 집합임.인덱스는 관계형 데이터베이스의 데이터베이스와 비슷한 개념으로 이..

Database/SQL

[MySQL] MySQL 및 MariaDB 차이

MySQL과 MariaDB의 차이MySQL과 MariaDB는 모두 인기 있는 관계형 데이터베이스 관리 시스템임.둘 다 동일한 원본 코드를 공유하는 역사를 가지고 있지만, MariaDB는 MySQL의 포크임.MySQL이 오라클에 인수된 이후 2009년에 만들어짐.이러한 분기 이후, 두 데이터베이스는 서로 다른 기능 개발과 성능 향상에 중점을 두면서 점차적으로 차별화됨. 기원과 배경1. MySQLMySQL AB에 의해 개발됨.2008년에 Sun Microsystems에 의해 인수된 후 2010년에 오라클에 의해 인수됨. 2. MariaDBMySQL의 원 개발자 중 한 명인 몬티 와이드니어스가 주도하여 시작됨.MariaDB는 MySQL과 완전히 호환되는 목표를 가지고 시작됨.기능과 성능 개선에 중점을 둠. 라..

Database/ElasticSearch

[ES] 엘라스틱서치의 장점

엘라스틱서치의 장점엘라스틱서치는 아파치 루씬 기반의 오픈 소스 검색 엔진임.전문 검색, 구조화된 검색, 분석 기능을 제공함.데이터를 실시간으로 검색하고 분석하는 데 매우 유용하며, 다양한 장점을 통해 많은 기업에서 널리 사용됨. 1. 분산 처리 시스템엘라스틱서치는 데이터를 자동으로 여러 노드에 분산하여 저장함.이를 통해 높은 가용성과 확장성을 보장함.사용자는 각 검색 요청이 다수의 노드에서 동시에 처리되도록 구성할 수 있으며, 이로 인해 대규모 데이터셋도 빠르게 처리할 수 있음. 2. 실시간 검색과 분석엘라스틱서치는 거의 실시간으로 데이터를 색인화하고 검색 결과를 반환할 수 있음.새로운 데이터가 엘라스틱서치 클러스터에 추가되면, 이는 즉시 검색 가능한 상태가 됨.이는 온라인 쇼핑, 로그 분석, 실시간 모..

Database/SQL

[MySQL] 테이블 종류, 표준 SQL

MySQL의 테이블의 종류MySQL에서 사용하는 테이블의 종류에는 크게 세 가지 주요 유형이 있음. (MyISAM, InnoDB, Memory)이 테이블 스토리지 엔진들은 각기 다른 성능 특성과 기능을 가지고 있음.사용하는 어플리케이션의 요구 사항에 따라 적절한 엔진을 선택할 수 있음. 1. MyISAM1.1 구조MyISAM은 MySQL의 기본 테이블 유형 중 하나였음.특히 읽기 위주의 작업에서 높은 성능을 제공함.각 MyISAM 테이블은 세 개의 파일로 구성되어 있음.데이터 파일, 인덱스 파일, 그리고 테이블 메타데이터를 저장하는 프라그먼트 파일임. 1.2 특징테이블 단위의 락을 사용함.즉, 하나의 쿼리가 테이블을 사용 중이면 다른 쓰기 작업은 대기 상태가 됨.트랜잭션을 지원하지 않음.외래 키를 지원하..

Database/SQL

[MySQL] Transactional Outbox Pattern, 비동기 통신

Transactional Outbox PatternTransactional Outbox 패턴은 분산 시스템에서 일관성을 유지하며 메시지를 안전하게 처리하고 전달하는 방법을 제공함.이 패턴은 특히 마이크로서비스 아키텍처에서 자주 사용됨.서비스 간의 이벤트 기반 통신을 위해 설계됨.이 패턴의 주요 목적은 데이터베이스 트랜잭션과 메시지 발송을 원자적으로 연결하여 데이터 일관성과 메시지 전달을 보장하는 것임. Transactional Outbox Pattern 개념1. 기본 개념어플리케이션은 데이터베이스에 데이터를 변경하는 동시에, 같은 데이터베이스 트랜잭션 내에서 outbox 테이블에 메시지를 저장함.이 테이블은 메시지 큐 또는 다른 서비스로 전달될 이벤트를 임시 저장하는 역할을 함. 2. 작동 방식데이터베이..

Database/SQL

[MySQL] 인덱스 유형 종류

MySQL 인덱스 유형 종류MySQL은 데이터 검색 속도를 향상시키고 쿼리의 성능을 최적화하기 위해 여러 유형의 인덱스를 제공함.각 인덱스 유형은 특정 작업에 특화되어 있음.사용하는 스토리지 엔진에 따라 지원되는 인덱스 유형이 다를 수 있음. 1. B-Tree 인덱스가장 일반적인 인덱스 유형임.키 값이 트리 구조로 정렬되어 저장됨.B-Tree 인덱스는 등호 및 범위 쿼리에 효율적이며, InnoDB와 MyISAM 스토리지 엔진에서 사용할 수 있음.B-Tree는 순차적 검색 뿐만 아니라, 부분적인 값 매칭과 정렬된 데이터에 대한 빠른 접근을 제공함.2. HASH 인덱스Memory 스토리지 엔진에서 주로 사용되는 인덱스 유형임.해시 인덱스는 키 값을 해시 함수를 통해 해시로 변환하고, 이 해시를 사용하여 데이..

Database/SQL

[MySQL] 스토리지 엔진 종류, B-Tree 인덱스

MySQL 스토리지 엔진 종류MySQL은 다양한 스토리지 엔진을 제공하여 다른 요구 사항과 환경에 맞게 데이터 저장 방식을 선택할 수 있게 함.이러한 스토리지 엔진 각각은 특정 성능, 기능 및 사용 사례에 최적화되어 있음. 1. InnoDBInnoDB는 MySQL의 기본 스토리지 엔진으로, 트랜잭션을 지원하며 롤백과 복구 기능을 제공하여 신뢰성을 보장함.ACID(원자성, 일관성, 격리성, 지속성)을 완벽히 지원하며, 행 수준의 잠금과 외래 키 제약 조건을 지원함.대부분의 OLTP(온라인 트랜잭션 처리) 시스템에 적합한 엔진임. 2. MyISAM이전의 기본 스토리지 엔진이었던 MyISAM은 빠른 읽기 작업과 전체 테이블 잠금을 특징으로 함.MyISAM은 트랜잭션이나 외래 키를 지원하지 않으며, 주로 읽기가..

Database/SQL

[MySQL] Lock, 데드락

MySQL LockMySQL에서의 잠금(Lock)은 데이터베이스에서 동시성을 관리하고 데이터 무결성을 모장하기 위해 사용되는 매커니즘임.잠금은 여러 사용자가 동시에 같은 데이터에 액세스할 때 발생할 수 있는 충돌을 방지하고, 데이터를 안정적으로 읽고 쓸 수 있도록 도와줌.MySQL에서는 주로 두 가지 유형의 잠금이 사용됨.테이블 잠금과 행 잠금임. 1. 테이블 잠금 : Table Locks테이블 잠금은 데이터베이스 테이블 전체에 걸쳐 잠금을 적용함.이 잠금 방식은 간단하고 오버헤드가 적지만, 동시성 수준이 낮다는 단점이 있음.MySQL의 MyISAM 스토리지 엔진에서 주로 사용됨. 1.1 읽기 잠금다른 사용자들이 데이터를 읽는 것은 허용하지만, 쓰기는 차단함.1.2 쓰기 잠금다른 사용자들이 해당 테이블을..

Operating System/Linux

[Mac] ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.

라이브러리 설치시 다음 에러가 뜸pip install pysparkERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them. pyspark from https://files.pythonhosted.org/packages/73/e5/c9eb78cc982dafb7b5834bc5c368fe596216c8b9f7c4b4ffa104c4d2ab8f/pyspark-..

Operating System/Linux

[Mac] Error: Failed to upgrade Homebrew Portable Ruby!

brew로 openjdk@11 설치시 에러 발생brew install openjdk@11==> Downloading https://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/sha256:5c86a23e0e3caee1a4cfd958ed7d50a38e752ebaf2e7c5717e5c8eabaa6e9f12Already downloaded: /Users/mac/Library/Caches/Homebrew/portable-ruby-3.3.2.el_capitan.bottle.tar.gzError: Checksum mismatch.Expected: 5c86a23e0e3caee1a4cfd958ed7d50a38e752ebaf2e7c5717e5c8eabaa6e9f12 ..