[DB] MySQL 및 InnoDB의 DB Lock 알아보기
·
DB
MySQL에서 사용되는 락은 다음과 같은 2가지 종류로 나뉩니다. MySQL 엔진의 락 스토리지 엔진(InnoDB)의 락 MySQL 엔진의 락, 스토리지 엔진 중 현재 MySQL의 기본 스토리지 엔진인 InnoDB의 락을 알아보도록 하겠습니다. 0. 테스트 환경 구성 도커에서 MySQL 사용 다음과 같은 coupon 테이블, member 테이블에서 진행 1. MySQL 엔진의 락 MySQL 엔진은 MySQL 아키텍쳐에서 스토리지 엔진 위의 계층에 속하기 때문에 MySQL 엔진의 락은 모든 스토리지 엔진에 영향을 미치게 됩니다. MySQL 엔진의 락은 다음과 같은 3종류를 제공합니다. 글로벌 락 (Global Lock) 메타데이터 락 (Metadata Lock) 네임드 락 (Named Lock) 1-1. ..
[DB] MySQL InnoDB의 인덱스(feat. 클러스터링 인덱스, 세컨더리 인덱스, 인덱스 스캔 종류, 다중 컬럼 인덱스)
·
DB
이전에 전반적인 DB 인덱스에 대해 살펴봤었습니다. https://ksh-coding.tistory.com/122 [DB] DB 인덱스(Index)란? 0. 인덱스란? 인덱스는 ‘색인’이라는 뜻입니다. 색인은 책의 맨 앞 또는 맨 끝에 있는 ‘찾아보기’로 비유되곤 합니다. 요리 레시피 책을 볼 때 제가 관심있는 요리는 오직 ‘김치볶음밥’이 ksh-coding.tistory.com 이번에는 MySQL의 InnoDB에서는 인덱스를 어떻게 구현했는지 살펴보도록 하겠습니다. 1. B-Tree 인덱스를 사용하여 구현 B-Tree는 DB 인덱싱 알고리즘 중 가장 일반적으로 사용되고, 가장 먼저 도입된 알고리즘입니다. MySQL의 InnoDB는 B-Tree 알고리즘을 사용하여 인덱스를 구현하고 있습니다. 그렇다면 B..
[DB] DB 인덱스(Index)란?
·
DB
0. 인덱스란? 인덱스는 ‘색인’이라는 뜻입니다. 색인은 책의 맨 앞 또는 맨 끝에 있는 ‘찾아보기’로 비유되곤 합니다. 요리 레시피 책을 볼 때 제가 관심있는 요리는 오직 ‘김치볶음밥’이라고 해봅시다. 이때 책의 색인(index)이 존재하지 않는다면 저는 김치볶음밥이 몇 페이지에 존재하는지 모르므로 하나 하나 책의 페이지를 넘기며 김치볶음밥 페이지를 찾아야 할 것입니다. 만약 저자가 이를 배려하여 색인(index)을 ‘김치볶음밥’ - 64p 이런 식으로 기록해놨다면 저는 1p 부터 하나씩 넘기면서 김치볶음밥을 찾지 않고 64p로 바로 찾아갈 것입니다. DB의 인덱스의 목적도 원하는 데이터를 찾아가는 검색 속도를 향상시키기 위함입니다. DB의 인덱스는 다음과 같이 정의할 수 있습니다. DB 데이터의 검색..
[DB] DB Lock이란? (feat. Lock 종류, 블로킹, 데드락)
·
DB
0. 락(Lock)이란? 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 하나의 커넥션만 변경할 수 있게 해주는 기능 동시성을 제어하기 위한 기능 저는 처음에 DB 락을 접했을 때, 락을 이해할 때 ‘락을 획득한다’라는 의미를 ‘외부에서 잠금을 건다.’ 라는 의미로 이해해서 조금 힘들었습니다. 외부에서 잠금을 거는 것이 아니라, ‘내가 화장실 칸을 사용하기 위해 화장실 칸을 직접 들어가서 내가 잠그는 것’의 관점으로 이해하니 더 쉽게 이해할 수 있었습니다. 1. 락의 종류 락의 종류는 크게 다음과 같은 2가지 종류로 나뉩니다. 공유 Lock (Shared Lock, Read Lock, S-Lock) 배타 Lock (Exclusive Lock, Write Lock, X-Lock) 1-1. 공유 ..
팀바팀 무중단 배포 구현기 (feat. 무중단 배포 3가지 방식)
·
우아한테크코스 5기 팀바팀 Project/설계
0. 들어가기 전 팀바팀 서비스 요구사항 중에 다음과 같은 요구사항이 존재했습니다. 서비스를 배포하는 중간에도 사용자는 서비스를 계속해서 사용할 수 있어야 한다. 이러한 요구사항을 구현하기 위해서는 서비스 배포 시에 무중단 배포를 구현해야 했습니다. 그래서 기존 팀바팀 서비스의 배포 시 문제 상황과 무중단 배포 방식들을 살펴보고 팀바팀에는 어떤 무중단 배포 방식을 사용했는지 기록하고자 합니다. 1. 팀바팀 서비스의 배포 시 문제 상황 기존 팀바팀 서비스의 배포 시에는 '다운 타임'이라는 시간이 존재했습니다. 다운 타임 : 서비스가 중단되는 시간 이처럼 다운 타임 시 사용자들은 정상적인 서비스 이용이 불가능하게 됩니다. 팀바팀 서비스의 다운 타임을 측정해본 결과, 약 15초 정도의 다운 타임이 발생했습니다..
[DB] 트랜잭션 격리 수준 알아보기
·
DB
1. Transaction 격리 수준 (isolation level) 트랜잭션의 격리 수준이란, 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. - Real MySql 8.0 트랜잭션 격리 수준의 정의는 위와 같습니다. 그렇다면 해당 트랜잭션 격리 수준을 어떠한 기준으로, 무엇을 설정해야 할까요? 결론부터 말하면, 트랜잭션 격리 수준과 관련된 키워드는 '동시성'과 '데이터 정합성'입니다. 따라서 격리 수준을 어떻게 설정하는지에 따라서 동시성과 데이터 정합성이 달라지기 때문에 DB의 트랜잭션 격리 수준을 설정할 때 서비스의 동시성과 데이터 정합성 중 무엇이 중요한지, 얼마나 중요한지를 판단해보고 설정하는 것이 중..
[Spring] 팀바팀 회원 탈퇴 기능 Trouble Shooting (feat. 스프링 이벤트)
·
우아한테크코스 5기 팀바팀 Project/Trouble Shooting
0. 문제 상황 팀바팀에서는 회원을 나타내는 'Member' 엔티티와 RefreshToken을 나타내는 'Token' 엔티티가 존재했습니다. 엔티티 설계를 진행할 때, Member와 Token 엔티티는 1:1 관계로 설계를 진행했습니다. Member가 생성될 때 Token이 생성되고, Member가 삭제될 때 Token도 삭제되므로 생명주기도 비슷해서 직접 참조를 하는 것으로 설계를 진행했습니다. 이때, Member라는 엔티티에서 Token을 직접 참조하면 편하긴 하겠지만, 닉네임, 이메일 등 회원 정보가 담겨있는 Member 테이블에 인증 정보인 Token 정보가 담긴다는 것이 조금 이상했습니다. 이후에 Token만 만료시킬 상황에도 Member에서 참조를 하게 된다면 token_id를 null로 처리..
[Spring] SpringBoot의 Tomcat 설정 알아보기 (feat. Thread, Thread Pool)
·
Spring
0. Spring Boot의 Tomcat 설정 Spring Boot에는 내장 서블릿 컨테이너인 Tomcat이 존재합니다. Tomcat의 설정과 관련된 설정 키워드는 다음과 같습니다. accept-count max-connections threads.max threads.min-spare 해당 설정들이 어떤 의미인지 알아보기 전에, 이해해야 할 개념들을 살펴봅시다. 1. Thread? 스레드의 개념은 다음과 같습니다. 실행중인 한 프로그램(프로세스) 내에서 구분지어진 실행 단위 하나의 프로세스에서 작업을 처리하기 위한 단위로 생각하면 될 것 같습니다. 실생활 예를 들면, 은행은 은행이라는 프로세스 내에서 여러 고객의 동시 거래 요청 작업을 처리해야합니다. 이때 은행이 병렬적으로 동시 거래 요청 작업을 처리..
[설계] 팀바팀 이미지 업로드 설계 (1) - 이미지 Storage, 업로드 주체 결정
·
우아한테크코스 5기 팀바팀 Project/설계
0. 들어가기 전 현재 팀바팀 서비스에서는 사용자들이 소통을 하는 '피드' 도메인이 다음과 같이 존재합니다. 현재 피드를 작성할 때는 시간 상의 문제로 이미지 없이 텍스트로만 작성이 가능하도록 구현했었습니다. 이후 기능 개선 회의에서 피드에 이미지가 필요할 것 같다는 의견이 나왔고, 해당 의견이 반영되어 '피드에 이미지를 업로드 할 수 있다.'라는 요구사항이 도출되었습니다. 추가적으로, 아래의 슬랙처럼 '이미지를 피드 등록 창에 업로드했을 때, 이미지 미리보기를 할 수 있다.'라는 요구사항도 있었습니다. 해당 요구사항을 구현하기 위해 어떠한 고민을 거쳤는지 기록해보고자 합니다! 👍🏻👍🏻👍🏻 1. 이미지 Storage : 서버 내부 Stroage or S3 결과적으로 이미지 Storage로는 AWS의 S3..
구글 로그인 Trouble Shooting (feat. Base64 / Base64Url)
·
우아한테크코스 5기 팀바팀 Project/Trouble Shooting
❌ 0. 문제 상황 서비스를 배포하고 나서 피드백을 받을 때, 일부 사용자의 구글 로그인이 정상적으로 작동하지 않는 문제가 발생했습니다. 서버의 로그를 확인해보니, 다음과 같은 에러가 발생하고 있었습니다. 구글 로그인에 관한 에러인데 왜 Base 64 에러가 뜨는지 상당히 궁금했었습니다. 그래서 구글링을 거쳐 'Base64와 Base64Url의 차이'라는 키워드를 알게 되었고, 위의 키워드가 문제 원인 & 해결 방법을 제시해주고 있었습니다. 📘 1. Base64와 Base64Url의 차이 Base64와 Base64Url의 차이를 알아보기 전에, Base64와 Base64Url이 무엇인지 간단하게 살펴봅시다. ✅ 1-1. Base64 Base64는 8비트 이진 데이터를 텍스트(ASCII 문자)로 인코딩하는..
BE_성하