목록CS/데이터베이스 (4)
백엔드 개발자
데이터베이스 인덱스란?인덱스는 책의 목차처럼 테이블에 저장된 데이터에 빠르게 접근하기 위해 사용되는 구조이다.인덱스에 사용되는 키를 기준으로, 데이터를 정렬된 방식으로 저장하여 데이터의 검색 속도를 크게 향상한다.그 대신 데이터를 추가, 수정, 삭제할 때 정렬 과정과, 추가적인 저장 공간을 차지하기 때문에 오버헤드를 유발할 수 있다.클러스터드 인덱스와 논클러스터드 인덱스인덱스는 클러스터드 인덱스와 논클러스터드 인덱스로 나뉜다.클러스터드 인덱스는 테이블의 데이터 자체가 인덱스에 의해 정렬이 된다. 물리적인 데이터 정렬을 의미하기 때문에 하나만 존재한다.논클러스터드 인덱스는 인덱스를 위한 별도의 테이블이 생성된다.클러스터드 인덱스 (Clustered Index):물리적 데이터 정렬: 테이블의 데이터 자체가 ..
1. 트랜잭션(Transaction)이란?트랜잭션은 데이터베이스에서 수행되는 하나의 작업 단위로, 데이터베이스의 상태를 일관성 있게 유지하고, 여러 작업을 하나의 원자적 작업으로 묶어 처리할 수 있도록 한다. 즉, 트랜잭션 내에서 여러 쿼리가 실행되며, 그 결과가 모두 성공적으로 처리되거나, 아무것도 처리되지 않은 상태로 롤백되어야 한다.하나의 논리적인 작업 단위라고 할 수 있다.A가 B에게 돈을 송금한다.라는 작업은 A의 계좌를 확인하고, 돈을 인출하고, B의 계좌를 확인하고, 돈을 더하는 작업으로 이루어질 수 있을 것이다.실제 작업과 다를 수 있지만 간단하게 나타내면 이렇게 표현할 수 있을 것이다.이런 트랜잭션은 다음과 같은 ACID 속성을 만족해야 한다:Atomicity (원자성): 트랜잭션은 모든..
프로젝트 성능 개선을 위해 부하테스트 툴인 JMeter를 활용했다.그리고 특정 API에 대해서만 오류 80% 정도로 아주 높게 측정되었고, 해당 api를 보니 외부 api를 호출하는데 매 요청마다 호출하고 있었다. 이건 그날의 뉴스 정보를 가져오는 api라 캐싱하여 사용하기 위해 Redis를 이용하였다.그런데 오히려 성능이 더 떨어지고 다른 api들까지 오류가 났다.Redis를 살펴보니 메모리 사용률이 80퍼 였다.... // 이 명령어로 메모리 정보를 확인할 수 있다. redis-cli info memory //대략 이런 정보들을 확인할 수 있다. _human이 붙은게 우리가 보기 쉬운 형태로 변환해 준 값이다. 기본은 바이트 단위이다. # Memory used_memory:..
JOIN 두 개의 테이블을 합치는 것을 JOIN이라고 한다. JOIN을 하는 방법은 크게 4가지 정도가 있다. 설명을 위해 두 개의 테이블이 있다고 가정하겠다. User 테이블 user_id name age item_id 1 홍길동 20 1 2 최세은 25 2 3 이가경 25 3 Item 테이블 item_id name price 1 부활 1000 2 시간증가 500 INNER JOIN 우선 가장 많이 사용되는 JOIN 방법이다. A와 B테이블의 공통된 부분만 가져오는 것이다. 그냥 JOIN 명령어를 사용하면 기본적으로 INNER JOIN 을 한다. SELECT * FROM User A INNER JOIN Item B ON A.item_id = B.item_id 결과는 두 테이블에 공통적으로 존재하는 것만..