Backend/Database (7) 썸네일형 리스트형 MySQL의 잠금(Lock) 안녕하세요, 오늘은 MySQL의 Lock에 대해 살펴보겠습니다. 잠금(Lock)이란 동시성을 제어하는 기능입니다. 예를 들어 여러 커넥션에서 하나의 레코드를 수정할 수 있게 되면 그 결과를 예측하기 어려울 것입니다. 잠금은 여러 커넥션에서 변경을 시도할 경우 특정한 단위 (레코드, 테이블)에 대해 하나의 커넥션만 변경할 수 있게끔 만들어 주는 역할을 합니다. Lock을 이해하려면 트랜잭션에 관해서도 이해가 필요합니다. Lock은 위에 서술하였듯 동시성을 제어하는 기능이고, 트랜잭션은 하나의 논리적인 작업 단위 안에서 데이터 정합성을 보장해 주는 역할을 합니다. 트랜잭션의 격리 수준에 따라서 여러 트랜잭션의 작업 내용을 어떻게 공유하고, 차단할지 Lock이 결정하게 됩니다. 트랜잭션MySQL에서 트랜잭션.. NoOffset 방식을 통한 MySQL 페이징 쿼리 튜닝 안녕하세요, 이번 글에서는 MySQL의 offset 기반 페이징 방식의 문제점과 이를 개선하는 방법에 대해 적어보도록 하겠습니다. 페이징 쿼리란?페이징 쿼리란 원하는 전체 데이터에 대해 부분적으로 나누어 데이터를 조회 및 처리하는 방법을 말합니다. 이렇게 되면 한 번에 처리할 데이터 양이 적어지게 되고 DB 및 애플리케이션 서버의 리소스 사용 효율을 높일 수 있습니다. 이를 통해 결과적으로 서비스 이용자들에게 더 빠른 응답 시간과 더 나은 서비스 경험을 제공할 수 있게 됩니다. 1-1. Limit & Offset보통 페이징 쿼리를 작성하면 DB에서 제공하는 Limit & Offset 구문을 사용하는 경우가 많습니다. 사실 저 역시도 실무에서 이 방식을 많이 사용하는데요. 쿼리로는 다음과 같이 작성할 수 .. B+-Tree의 구조 이해를 통한 효율적인 Index 사용 법 정리. 안녕하세요, 이번 글에서는 MySQL index가 사용하는 B+-Tree 자료구조의 동작방식을 살펴보고 그를 통해 index를 조금 더 이해하는 글을 적어보려 합니다. SQL 튜닝이란, 인덱스를 통해 접근할 페이지의 개수를 줄여 성능을 높이는 과정이라 생각합니다. 그러니 인덱스를 잘 이해하고 있다면 인덱스를 잘 활용할 수 있는 SQL을 작성할 수 있을 것이고, 훨씬 더 성능 좋은 애플리케이션을 만들 수 있을 것입니다. 1. B+-TreeB+-Tree 는 아래의 조건을 만족시키는 Rooted Tree 구조를 말합니다.루트로부터 모든 leaf 노드로의 길이는 동일하다 (Balanced Tree)루트, 리프 노드가 아닌 모든 노드는 n/2 ~ n개의 자식 노드를 가질 수 있다.모든 리프 노드는 (n-1)/2 .. MySQL의 문자열 데이터 타입 비교 2. VARCHAR vs TEXT 저번 글에 이어 MySQL의 VARCHAR 타입과 TEXT 타입을 정리해 보도록 하겠습니다. 일반적으로 RDBMS에서 TEXT나 BLOB과 같은 대용량 데이터를 지정하는 컬럼 타입을 LOB 타입이라 합니다. 저번 글에서 CHAR 타입과 VARCHAR 타입에 대해 이야기 했었는데요. 문자열 타입 중에 매우 긴 타입을 저장할 때는 CHAR 타입을 사용할 수 없습니다. (255자까지밖에 저장할 수 없음). 따라서 VARCHAR 타입과 TEXT 타입 중 선택을 해야 합니다. VARCHAR 타입은 만능일까?VARCHAR 타입을 CHAR타입과 비교하여 설명하는 많은 글을 읽어보면, 가장 강조하는 부분이 데이터를 저장할 때 필요한 공간만큼만 할당하여 사용한다입니다. 이렇게만 읽으면 varchar 타입은 항상 필요한 .. MySQL의 문자열 데이터 타입 비교 1. CHAR vs VARCHAR MySQL을 사용하다 보면, 문자열 데이터 타입을 어떤 것을 사용하여 저장할지 항상 고민이 많이 됩니다. 보통은 저장되는 데이터의 길이를 정확히 제한하기 어렵기 때문에 varchar 타입을 관습적으로 많이 사용하게 되는 것 같습니다. 오늘은 이러한 습관을 좀 없애보고자 정확히 각 타입의 장단점을 비교하고 언제 char 타입을 사용하는 것이 유리한 지, 언제 varchar타입을 사용하는 것이 유리한 지 정리해보려 합니다.char vs varchar통상 일반적인 문자열을 저장할 때 CHAR 혹은 VARCHAR 중 하나의 타입을 선택하게 됩니다. 추후에 TEXT와 VARCHAR을 비교하는 글도 작성하겠지만, TEXT의 경우 매우 긴 문자열을 저장할 때 고민할 요소이지, 255자 정도 이내에서 사용할 데이터.. [Database] PostgreSql이란? PostgreSql 설치 안녕하세요. 이번 포스팅에서는 간단히 PostgreSql이란 무엇이며 Windows 기준 PostgreSql 설치에 대해 알아보겠습니다. 1. PostgreSql 가장 유명한 오픈 소스 데이터베이스는 Mysql일 것입니다. 백엔드를 개발하는 사람이라면 한 번은 사용해 보았을 것이고, Sql진영을 떠올리면 가장 먼저 떠오르는 데이터베이스 소프트웨어일 것입니다. 하지만 PostgreSql은 실제 기업에서 Mysql만큼 많이 사용되고 있습니다. 이 둘을 고민하시는 분이라면, Rdbms를 사용할 것인데, 어느 데이터베이스 소프트웨어가 더 적합하냐를 고민하실 수 있습니다. Rdbms란 결국 데이터를 테이블의 형태로 저장하고 관리한다는 뜻입니다. PostgreSql은 객체의 형태로 관계형 데이터베이스를 관리합니다... [Database] 예제로 보는 데이터베이스 정규화 안녕하세요. 오늘 포스팅에서는 데이터베이스의 정규화에 대해 알아보겠습니다. 우선 본 포스팅에 앞서 사용한 자료는 이 링크에서 참조하였으며, 유튜브 생활코딩님의 강의를 기반으로 합니다. 1. 정규화란? 우선 기본적인 정규화의 의미를 살펴보면, 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라 합니다. 즉 데이터베이스가 크고 구조화되지 않은 상태라면, 이를 작고 잘 구조화시켜서 저희가 원하는 비즈니스 로직을 수행하는 데에 있어 이상이 없고 효율적으로 처리할 수 있는 데이터베이스 설계를 구축하는 것에 그 목적이 있습니다. 여기서 말하는 이상(문제)란 다음과 같습니다. 갱신 이상 ( Modification Anomaly ) 중복된 데이터 중 일부를 갱신할 때 의도치 않은 데.. 이전 1 다음