본문 바로가기

전체 글361

[DB 9편] MySQL 인덱스 성능 관련 정리 (Auto increment, UUID) 목차는 DB 목차 에 있습니다. [DB 9편] MySQL 인덱스 성능 관련 정리 (Auto increment, UUID) PK Auto increment, UUID 관련 정리 PK 에 Auto increment 와 UUID 를 사용했을 때 차이는 다음과 같습니다. Auto Increment 를 사용했을 때, 인덱스 데이터 사이즈가 UUID 보다 작습니다. Auto Increment 를 사용했을 때, INSERT 속도가 더 빠릅니다. 왜 Auto increment 가 INSERT 속도와 인덱스 데이터 사이즈가 작은가? PK 로 Auto increment 를 사용할 경우 클러스터드 인덱스는 1,2,3,4,5 순으로 차례대로 저장이 될 것 입니다. 클러스터드 인덱스 특성상 데이터는 인접하게 저장이 될 것이고,.. 2022. 10. 15.
[DB 6편] MySQL 인덱스 성능 관련 정리 (prefix, 복합인덱스) 목차는 DB 목차 에 있습니다. [DB 6편] MySQL 인덱스 성능 관련 정리 (prefix, 복합인덱스) 인덱스 Prefix MySQL 에서는 인덱스를 설정할 때, 컬럼의 prefix 일부를 인덱스로 설정하는 기능을 제공하고 있습니다. prefix 일부를 사용한다는건 인덱스의 길이가 줄어든다는 의미이며, 인덱스의 길이가 줄어든다는건 인덱스 데이터에 접근할 때, 빠르게 접근이 가능할 확률을 높인다는 의미입니다. 저장하는 공간도 줄어듭니다. 예를 들면 다음과 같습니다. Alter table test add key (index_test_column(3)); test 테이블의 index_test_column 컬럼의 앞의 3글자만 인덱스로 설정합니다. 인덱스 prefix 주의사항 컬럼 전체를 인덱스로 사용하지.. 2022. 10. 13.
[DB 5편] MySQL 데이터 유형 관련 정리 목차는 DB 목차 에 있습니다. [DB 5편] MySQL 데이터 유형 관련 정리 Null 을 사용하지 않는 것이 좋습니다. Application 개발을 할 때와 마찬가지로 null 을 사용하지 않는 것이 좋습니다. MySQL 내부에서 인덱스, 비교 등의 계산을 할 때, null 이 들어가면 resource 소모가 있거나 측정하기 어려우며, 이는 성능 최적화가 어렵습니다. 그러므로 개발을 할 때는, null 을 사용하지 않는 것이 좋으며, 기존 테이블에 null 이 있는 것을 강제로 not null 로 바꿀려고 하는 것은 운영 중인 서비스에 영향을 줄 수 있으므로 심사숙고해야합니다. 또한, null --> not null 로 바꾼다고 성능이 그렇게 향상되는 것은 아닙니다. 문자열 유형 INNO DB 를 기.. 2022. 10. 10.
[시스템디자인 2편] 안정 해시 목차는 시스템 디자인 목차 에 있습니다. 추후 내용을 더 정리할 예정입니다. 간단하게 정리했습니다. [시스템디자인 2편] 안정 해시 안정 해시란? 해시 함수를 적용해서 값을 얻습니다. 0~최대 값의 범위를 얻을 수 있으며, 이를 n 개씩 나눈다면 size 는 최대 값 / n 이 될 것 입니다. 이러한 방식을 안정 해시라 합니다. 안정 해시 원리 데이터가 들어왔을 때, 해당 데이터를 hash 함수를 적용시킨 후, 얻은 값을 가지고 0~최대 값 중 어떤 범위에 속하는지 계산합니다. 예를 들면, 0최대 값 (=10) 이라 가정하고 n 은 2라고 가정하겠습니다. 01 이 1구역, 2~3 이 2구역 , xxxx 이런식으로 구역이 나눠진다고 했을 때, 해시함수로 얻은 값이 0이라면 1구역에 저장되는 것입니다. 안정.. 2022. 10. 7.
[Querydsl 5편] querydsl 조회 시 영속성 컨텍스트 이슈, JPA 벌크 연산 이슈 source 는 Github 에 있습니다. 목차는 Querydsl 목차 에 있습니다. [Querydsl 5편] querydsl 조회 시 영속성 컨텍스트 이슈, JPA 벌크 연산 이슈 Querydsl 이란? querydsl 이란 JPQL 을 만들어주는 builder 입니다. 최종적으로는 JPQL 로 변환됩니다. 즉, 코드로 JPQL 을 작성할 수 있으며, 코드 작성 단계에서 문법적 에러를 확인할 수 있습니다. JPQL 이란? Java Persistence Query Language 약자입니다. SQL을 추상화한 객체지향쿼리 언어입니다. JPQL은 엔티티 객체를 대상으로 쿼리를 작성합니다. 최종적으로 JPQL 또한 SQL 로 변환이 됩니다. JPQL은 SQL을 추상화하기 때문에 특정 데이터베이스 SQL에 의.. 2022. 10. 5.
[MSA 5편] API Gateway Service 정리 목차는 MSA 에 있습니다. 나중에 찾아보기 위해 정리했습니다. 내용을 계속해서 추가할 예정입니다. [MSA 5편] API Gateway Service 정리 API Gateway 란? 모든 클라이언트의 요청에 대한 엔드포인트를 받아주는 서버 입니다. 왜 이런 구조가 나왔을까요? Client 에는 다양한 것들이 있습니다. 핸드폰, PC 등 다양한 Client 들이 직접적으로 MSA 서비스들을 호출한다면 시스템 간의 결합성이 강해집니다. 이렇게 된다면 MSA 서비스가 변경되는 순간 연결돼있는 Client 단말들은 전부 변경해야할 수도 있습니다. 시스템간 결합을 끊기 위해 API Gateway 가 나왔으며, 이외에도 공통적인 기능을(인증, 전문 변환 등) 처리할 수 있는 역할을 담당하고 있습니다. Zuul s.. 2022. 9. 21.