본문 바로가기

전체 글124

[Database] N + 1 1. N + 1 Database에서 Query 1번으로 N건의 자료를 가져오고 각 건에 대하여 데이터를 조회하려고 할 때, 각 건마다 Query가 추가로 발생하는 현상 이는, 주로 Lazy Loading의 특성을 가진 ORM에서 많이 발생하고 아래 예시를 통해 보게 되면, * Lazy Loading : ORM의 객체를 통해 데이터가 처리되는 순간 Query가 발생 Ex : 과일 테이블에서 가격이 1만원 미만인 과일의 이름들의 배열을 얻고자 할 때, SQL문을 이용하면 Query 1회로 데이터를 얻을 수 있다. 하지만 ORM을 통하면 Code에 for문이 필요하고, 그로 인하여 N + 1 현상이 발생한다. 이는 DB에 불필요한 Query를 많이 발생시켜, 성능을 저하시키는 큰 요인이 된다. 하지만 대부분의.. 2023. 4. 12.
[Database] 이상 / 정규화 / 반정규화 DB를 이용할 때, 특정 조건을 충족하면 여러 문제를 야기할 수 있다. 이를 이상이라고 하며, 아래 내용을 통해 그 종류를 알 수 있다. 1. 이상 (Anomaly) 이상이란 DB에서 중복된 데이터 구조로 인하여 예기치 못하게 발생하게 되는 현상이다. 이상의 종류에는 3가지가 있다. 삽입 이상 : 데이터를 DB에 Insert 할 때, 의도하지 않은 값들이 같이 입력이 되는 현상 - Ex : 특정 속성의 값만 추가하고자 할 때, 다른 속성 값이 비게 되며 부분이 Null 값으로 입력되거나 데이터의 삽입이 실패하는 현상을 볼 수 있다. 삭제 이상 : 하나의 튜플을 삭제할 때, 의도하지 않은 값들과 함께 삭제되는 현상 - Ex : 특정 속성 값을 기준으로 튜플을 삭제하면 다른 속성들과 함께 삭제가 돼버리는 현.. 2023. 4. 11.
[ELK] Logstash - Postgresql 연결 실패 (Docker Network) 도커를 이용하여 PostgreSQL을 Build 후 해당 DB의 데이터를Logstash를 이용하여 Elasticsearch와 연동하는 과정에서 생긴 에러이다. [ERROR][logstash.inputs.jdbc ][main][01b8fcd4a63cf0b14c82113572d5c31371649609a57c0007cc38eb353a2e434e] Unable to connect to database. Tried 1 times {:error_message=>"Java::OrgPostgresqlUtil::PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the pos.. 2023. 2. 24.
[Docker] docker 명령어 시 Linux(Ubuntu) 권한 문제 해결 # docker 명령어 실행 $ docker compose up Got permission denied while trying to connect to the Dockerdaemonsocket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied EC2 상에서 docker를 설치 후 권한이 없어서 실행이 불가할 때 아래의 방법을 통해 해결을 할 수 있다. 1. 그룹 확인 : $ groups - 그룹 확인 후 docker가 없을 때 그룹에 추가 $ sudo groupadd docker 2. .. 2023. 2. 21.
[Database] Index Index : 데이터베이스는 관련 레코드를 찾기 위해 전체 테이블을 스캔해야 하고, 이는 특히 테이블이 매우 큰 경우 매우 느리고 비효율적일 수 있기에 Index를 사용하게 된다. Index는 테이블의 특정 Column 또는 Field를 기반의 데이터를 빠르게 검색할 수 있는 데이터 구조이며, 일반적으로 B tree(Balance Tree) Algorithm에 의하여 Index가 생성이 된다. [Index 생성에 기반이 되는 알고리즘이 다수 존재] 페이지의 내용을 기반으로 특정 페이지를 빠르게 찾을 수 있는 책의 색인과 유사하다. 인덱스가 효율적인 이유는 대수확장성을 들 수 있으며, 이는 트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 것을 말한다. [깊이가 증가할 때마다 최대 인덱스 항목의 수는.. 2023. 2. 12.
[Database] Transaction(트랜잭션) 트랜잭션(Transaction) : 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한번에 모두 수행되어야 할 일련의 연산들을 의미한다. 특징 : 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위 하나의 트랜잭션은 Commit 또는 Rollback 성질 (ACID) : 1. Atomicity(원자성) : 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트.. 2023. 2. 11.