Spring Boot/DB
-
MySQL 관련해 신경쓰면 좋은 것 (feat. 성능)Spring Boot/DB 2024. 11. 13. 21:48
1. mysql 5.7.20 → mysql 8.0 아키텍처 변경Query cache가 MySQL 5.7.20부터 depreciated 되고, 8.0을 기점으로 삭제(https://dev.mysql.com/doc/refman/5.7/en/query-cache-configuration.html)트래픽 많아지면서 발생하는 DBMS의 Query cache 업데이트 비용과, 운영중 발생하는 캐시 stale 문제가 Query cache 기능을 제공하는 이점 보다 심각하다 판단하여 삭제mysql 버전을 올렸는데 더 느려진 경우가 있는데 Query cache가 없어졌기 때문. 캐시는 애플리케이션 단에 직접 구현해야한다. 2. mysql 5.7.20 → mysql 8.0 Storage 엔진query 실행하는 구현체 엔..
-
MySQL - 외래키(Foreign Key)를 써야할까?Spring Boot/DB 2024. 8. 14. 01:46
배경첫회사에서는 외래키가 DB의 성능 저하, 확장을 어렵게 만들고, 유연성을 잃게 만든다고 배웠다.이직한 회사에서는 외래키가 제공하는 정합성, 무결성 유지 편익이 외래키가 없는 것 보다 크다고 배웠다.외래키 없이 1년, 외래키 사용하며 1년을 보내며 느낀점을 남겨본다.외래키를 쓰지 않는 이유 관계형 DB에 관계가 단순할때는 문제가 없지만, 복잡한 관계를 맺으면 문제가 생긴다. 기본적으로 FK는 인덱스이다. UPDATE, DELETET시 외래키로 인해 성능 저하가 생긴다.부모테이블, 자식테이블 모두 해당 컬럼 인덱스 생성이 필요하고, 변경 시 부모/자식 테이블 데이터 체크 과정이 필요하여 잠금이 발생한다.데드락의 원인이 된다. (참고 : https://martin-son.github.io/Martin-IT..
-
Kafka 기본개념 정리Spring Boot/DB 2024. 4. 16. 01:29
1. Kafka 기본 용어 Producer의 messge 저장 대상 Broker는 기본 라운드로빈 방식으로 결정됨 Key를 지정해서 원하는 Broker에만 저장하는 방식도 제공 2. Kafka란? 링크드인에서 2010년 아래와 같은 문제 해결하기위해 개발, 2011년 아파치 오픈소스로 공개 실시간 데이터 처리 문제 데이터 파이프라인 구축 및 확장 문제 다양한 시스템과의 연동 분산 이벤트 스트리밍 플랫폼이라고 공식 페이지에서 소개하고 있음 포츈 100대 기업 80% 이상이 사용 중 (제조업, 은행, 보험, 통신사 . . . 광범위한 산업군) 3. Kafka 특징/사용용도 카프카 핵심 특징 빠른 데이터 전송, 높은 처리량, 낮은 지연 시간 파티션 파일 OS 페이지 캐시 사용 Zero Copy (디스크 버퍼 ..
-
DB Replication이란? 사용 이유Spring Boot/DB 2024. 3. 19. 19:44
1. 배경 사내 프로젝트는 단일 RDS를 Database로 사용중 RDS 장애 발생시 모든 서비스가 멈춘다. (가용성이 낮다) 부하, 트래픽 증가로 DB의 자원이 부족할때 확장이 어렵다. 단일 RDS 사용시 수직확장 수직 확장은 가격 대비 성능 비율이 선형적이지 못하다. 수직 확장이나, DB 업데이트를 위해서는 서비스를 중단해야한다. DB의 쓰기와 읽기 요청은 비대칭 적이다. 대부분 읽기가 더 많다. 2. Replication 도입 Replication이란? DB 백업이나, 성능 향상을 위해 DB를 여러대의 서버로 복제하는 행위 Replication을 도입하면 확장하기 쉽고 고가용성의 DB 구조를 구성할 수 있다. 데이터 저장소의 읽기와 쓰기로 분리 부하 분산 → DB 성능 향상 쓰기 속도 향상, 읽기 ..
-
[DB] UUID를 고유 값이나 Key로 사용하면 안되는 이유Spring Boot/DB 2023. 6. 30. 12:00
1. UUID를 고유 값으로 쓰면 안되는 이유 RDB 기준 사용시 성능 이슈 + 충돌 가능성이 있기 때문이다. (https://velog.io/@injoon2019/UUID-vs-ULID) 인덱스는 기본적으로 B-tree 인덱스를 사용하는데, 무작위 렌덤의 uuid를 사용하면 sort를 사용할 수 없다. int, bigint를 사용하는 것에 비해 uuid를 pk로 사용하면 상대적으로 성능이 낮다. uuid 단독으로 사용하면 생성시 충돌 가능성이 있다. 128비트의 공간을 지속적으로 차지하는 단점 (uuid를 사용하면 DB 마이그레이션이 편한 이점 있음) 2. 해결책 [결제 고유 번호 uuid + 날짜_회원정보] 이런식으로 저장해야한다. (스노플레이크 접근이라고 한다. https://thalals.tist..
-
[DB] ACID란? Transaction이란?Spring Boot/DB 2023. 6. 28. 11:22
ACID는 DB 트랜잭션의 안정성 보장을 위해 필요한 성질을 정리한 것. 원자성, 고립, 일관성, 영구성으로 트랜잭션을 제어하기 위해서 알아야한다. 0. Transaction은 무엇인가 One unit of work에서의 쿼리 집합이다. 즉 서버로 치면 connection을 기준으로 하나의 트랜잭션으로 구분한다. 쿼리 1개로 비즈니스 로직을 수행하지 못한다. 하여 쿼리 집합이 필요하고 집합을 트랜잭션으로 구분한다. ex) 예금 이체 (SELECT, UPDATE, UPDATE 3개가 필요) 트랜젝션의 Life span Transaction BEGIN Transaction COMMIT Transaction ROLLBACK 트랜젝션의 2가지 성격 변경, 수정을 위한 트랜잭션 readonly 트랜잭션 트랜잭션은..
-
[M1 Mac] Mysql 명령어 정리 (+ docker로 설치)Spring Boot/DB 2023. 6. 27. 14:05
00. Workbench 단축키 cmd + t 탭 생성 cmd + w 탭 삭제 cmd + shift + enter : 전체 쿼리 실행 cmd + / : 주석 01. 도커로 mysql 설치 docker mysql 실행 명령어 docker pull mysql docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql docker ps docker exec -it mysql bash # mysql 콘솔 mysql -u root -p SHOW DATABASE; CREATE DATABASE {name}; DROP DATABASE {name}; USE {name}; // 데이터베이스 변경 SELECT database(); // 현재 사용 데이..
-
[SQL] Or 와 In 조건 뭐가 더 좋을까? SELECT OR vs IN, which is better performance.Spring Boot/DB 2022. 7. 15. 00:29
의제 SQL에서 아래 2개의 차이는 무엇이고 Performance는 어떤 것이 좋을까. WHERE foo IN ('a', 'b', 'c') WHERE foo = 'a' OR foo = 'b' OR foo = 'c' 새로 입사한 신입 개발자 분의 질문으로 짧은 토론(?)이 있었다. 10년차 시니어님 : 아.. 이거 real my sql에서 본건데... 책 어디갔어요..! (내가 집에 모셔두었다...) 5년차 개발자 친구 : in() 이 더 빠르지 않니? 검색해이쉬. 3년차 개발자 동료 : or 가 더 빠르지 않을까요? in 은 전부 스캔하는 느낌이고, or는 하나라도 맞으면 결과 낼꺼 같은데. 즉.. 명확하게 어떤 것이 좋다 나오지 않아서 검색해 보았다. 결론 12년 전에는… from stackOverfl..