MySQL (8) 썸네일형 리스트형 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자 정도 이내에서 사용할 데이터.. [ SpringBoot ] 장르 기반 간단한 영화 추천 API 설계하기 #2 안녕하세요. https://chanho0912.tistory.com/93 [ SpringBoot ] 장르 기반 간단한 영화 추천 API 설계하기 #1 안녕하세요. 이번에는 간단한 토이 프로젝트를 소개해드리겠습니다. 간단하게 영화 추천 API를 설계해보려 합니다. 전체 코드는 https://github.com/KimChanHoLeeJunSung/MovieRecommendationApplication GitHub -.. chanho0912.tistory.com 저번 포스팅에 이어 이번 포스팅에서는 Spring data JPA와 QueryDSL을 사용하여 여러 API를 만들어보겠습니다. Controller package com._chanho.movie_recommendation.movie; import com.. [SpringBoot] 블로그 프로젝트 #2 JPA 설정 및 Entity 생성 저번 포스팅에 https://chanho0912.tistory.com/23 [SpringBoot] 블로그 프로젝트 #1 JSP 설정 본 포스팅은 https://chanho0912.tistory.com/19?category=866707 [SpringBoot] 블로그 프로젝트 #0 Github 연동하기 본 포스팅은 https://chanho0912.tistory.com/18 [SpringBoot] SpringBoot와 Mysql 연동 기본.. chanho0912.tistory.com JSP 설정을 마쳤습니다. 이번에는 JPA 기본 설정 및 Entity class를 한번 작성해볼게요! 우선 이번 포스팅에 필요한 JPA dependency를 추가해주겠습니다. build.gradle buildscript{ ext.. [SpringBoot] SpringBoot와 Mysql 연동 기본적인 세팅을 완료했으면 Mysql연동을 진행해 볼게요. https://chanho0912.tistory.com/4 [Spring/SpringBoot] IntelliJ 소개 및 Gradle 프로젝트 설정 필자는 SpringBoot 개발 환경으로 보통 IntelliJ를 사용한다. 아직 개발에 대한 경험이 깊지 않아 eclipse와 다양한 관점에서 비교는 어려울 수 있으나, 필자가 확실하게 느낀 IntelliJ의 강점은 다음과 같 chanho0912.tistory.com 여기까지 완료하신 분이라면 group = 'com.StudyProject' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } depen.. 이전 1 다음