본문 바로가기

DB28

[MySQL] com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure Step 0. 상황 아래와 같이 데이터베이스 정보를 설정했는데 jdbc communication 예외가 발생했다. spring: datasource: driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy url: jdbc:log4jdbc:mysql://[HOST]:[PORT]/[데이터베이스명] username: [USERNAME] password: [PASSWORD] com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver.. 2023. 3. 31.
[MySQL] SQL state [HY000]; error code [1366]; Incorrect string value Step 0. 상황 회원 가입 기능을 구현하기 위해서 필요한 정보들을 입력하고 요청을 전송했는데 아래와 같은 에러가 발생했다. SQL state [HY000]; error code [1366]; Incorrect string value: '\xEA\xB9\x80\xEC\xBD\x94' ... Step 1. 원인 테이블을 생성할 때 인코딩 설정을 해주지 않아서 발생한 문제였다. 데이터베이스 인코딩 확인 SELECT default_character_set_name, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE schema_name = '[데이터베이스명]'; 테이블 인코딩 확인 SELECT TABLE_COLLATION FROM INFORMATI.. 2023. 3. 31.
[MyBatis] MyBatis 설정과 log4jdbc-log4j2 적용기 들어가기 전에 이번에 프로젝트를 본격적으로 시작하면서 MyBatis 설정을 끝냈는데 혹시나 다음 번에 설정해야 할 일이 있을 때 내가 정리한 문서를 참고하기 위해서 기록해 보기로 했다. log4jdbc-log4j2도 처음 알게 된 라이브러리인데 도움이 될 것 같아서 같이 정리하려고 한다. log4jdbc-log4j2 Log4jdbc-log4j2 This project was imported from https://code.google.com/archive/p/log4jdbc-log4j2/ Original License: Apache License 2.0 log4jdbc-log4j2 is a modification of log4jdbc to natively use Log4j 2 (or SLF4J as us.. 2023. 3. 31.
[DB] JOIN 알고리즘과 성능에 대하여 들어가기 전에 우리는 결합의 결과를 도출해 내기 위해 간단히 JOIN 연산을 사용했다. 그렇다면 DBMS 내부에서는 어떻게 이 JOIN 연산을 처리하게 되는 것일까? JOIN 연산을 수행할 때 내부적으로 선택되는 알고리즘에 대해 알아보자. Nested Loops Join Hash Join Sort Merge Join 위의 세 가지 알고리즘은 옵티마이저가 선택 가능한 알고리즘들인데 모든 DBMS가 지원하는 것은 아니다. MySQL의 경우에는 8.0.18 버전 이전에는 Nested Loops와 이를 변형한 알고리즘들만을 지원했는데 8.0.18 버전 이후부터는 Hash Join을 지원하기 시작했다. Prior to MySQL 8.0.18, this algorithm was applied for equi-joi.. 2023. 3. 15.
[DB] JOIN의 종류 들어가기 전에 앞서 정규화에 대해 알아봤는데 정규화로 재정의된 테이블들의 정보를 모두 가져오기 위해서는 JOIN을 활용해야 한다. 하지만 JOIN을 사용하기 때문에 성능이 안 좋아진다는 단점이 있어 반정규화(=역정규화)를 수행하기도 한다는 이야기를 했었다. 그렇다면 이 JOIN은 항상 좋지 않은 결과만을 가져오는 것일까? SQL BOOSTER의 글을 인용해 보겠다. 조인을 사용하면 안 된다고 주장하는 사람도 있다. 아래와 같은 이유다. '조인하면 결과가 무조건 맞지 않아! 다 틀려.' 조인을 정확히 사용하면, 설계가 잘못되지 않는 이상 부정확한 결과가 나올 일은 없다. 조인을 다시 익힐 필요가 있다. '조인하면 성능이 안 좋아. 너무 느려.' SQL 성능에는 다양한 원인이 있다. 조인 때문에 성능이 나쁘.. 2023. 3. 15.
[DB] 인덱스(5) - 인덱스로 생성할 컬럼을 선택하는 기준 들어가기 전에 인덱스로 성능을 개선함에 있어서 가장 중요한 것은 테이블 풀 스캔 횟수를 줄이는 것이다. 그렇다면 도대체 어떤 기준으로 인덱스를 생성할 컬럼을 정해야 할까? 인덱스를 작성하는 필드 집합의 조건은 다음과 같은 두 가지 지표로 판단합니다. 첫 번째는 카디널리티가 높을 것, 즉 값이 평균치에서 많이 흩어져있을수록 좋은 인덱스 후보입니다. 두 번째는 선택률이 낮을 것, 즉 한 번의 선택으로 레코드가 조금만 선택되는 것이 좋은 후보라는 뜻입니다. 출처 : SQL 레벨업 카디널리티는 값의 균형을 나타내는 개념이다. 만약 모든 레코드에 같은 값이 들어가 있다면 카디널리티가 낮은 필드라고 하고 모든 레코드에 다른 값들이 들어가 있으면 높은 필드라고 말할 수 있다. 선택률은 특정 필드값을 지정했을 때 테이.. 2023. 3. 15.