코딩테스트를 프로그래밍언어나 SQL 구현 문제로 가끔씩 출제 되는 아래의 거리 측정 방법에 대해 알아보자.맨허튼 거리(Manhattan Distance)는 2차원 평면 공간에서 두 점 A와 B 사이의 거리를. 측정하는 방법 중 하나로, 두 점 사이의 수평 및 수직 이동
MySQL에서 like 연산자는 regexp 연산자 보다 단순하며 인덱스를 이용해 데이터를 조회할 수 있다.다들아시다 시피 like 연산자는 정규식을 사용하지않고 %과 \_ 와일드 카드를 사용해서 특정한 상수 문자열이 있는지 조회하는 연산자이다.우선 위에서 언급한 2
ngrok는 로컬 컴퓨터에서 실행되는 웹 서버를 외부에서 접근할 수 있게 해주는 터널링 프로그램이다. 일반적으로 로컬 컴퓨터에서 애플리케이션을 개발하고, 이를 외부에서 접근하기 위해서는 웹 서버를 구축해야 한다. 하지만, 로컬 컴퓨터에서 실행하는 웹 서버를 mgrok
H2는 자바로 작성된 관계형 데이터베이스 시스템이다. 이 데이터베이스는 인메모리, 임베디드, 서버 모드 총 3가지 작동 모드를 제공한다. 나는 주로 스터디용으로 인메모리나 임베디드용으로 하기때문에 각 모드에 대해 간락하게 알아본 다음 인메모리 모드용으로 설정까지 해보자
문득 전 회사 레거시 코드를 생각하다가 @AllArgsConstructor, @NoArgsConstructor 등 여러 어노테이션이 한클래스에 같이 작성되어있는 것을 본적이있다.Lombok은 불필요한 코드와 작업을 줄여주는 좋은 라이브러리지만, 무분별하게 사용하면 코드
MySQL 에서 COUNT() 함수는 주어진 조건에 해당하는 레코드의 수를 반환하는 함수다. COUNT() 함수는 아래와같이 사용할수있다. 별표(\*)컬럼명 숫자차이점이라면 별표(\*)와 숫자를 넣을경우 결과는 모든 행을 반환 하기 때문에 결과는 같다. 또한, 성능차이
최근 간단한 사이드 프로젝트를 하면서 오랜만에 도커를 사용하여 서버를 올렸지만, 원하던 시간에 로그가 찍히질않아 확인하던중 Linux System은 기본적으로 UTC를 사용한다는걸 잊고 있었다.그래서 Command 명령어로 UTC 로 설정된 기본 시간을 KST 로 변경
CI(Connecting Information) 연계정보라 한다. CI는 특정 개인의 식별을 위한 고유한 범용 Key값이다. 주민번호 기반으로 생성되기 때문에 유일성이 보장되고, 일방향 암호화를 이용하기때문에 복호화가 불가능하다. 즉, A, B, C 라는 각각 다른 사
트랜잭션의 격리 수준(Isolation Level)이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다.격리 수준은 크게 READ UNCOMMITTED, READ COMMITT
InnoDB는 일관성과 동시성을 보장하기 위해 레코드(Row) 수준의 잠금 방식을 사용하는 MySQL의 스토리지 엔진중 하나이다.InnoDB의 레코드 잠금 유형은 크게 공유 잠금(Shared Lock)과 배타적 잠금(Exclusive Lock)으로 나뉠 수 있다.공유
데이터 암호화는 MySQL 5.7 버전부터 지원하며, MySQL 8.0 버전 부터는 리두 로그, 언두 로그, 복제를 위한 바이터리 로그 등도 모두 암호화 기능을 지원한다.MySQL 암호화 기능은 데이터베이스 서버와 디스크 사이의 데이터를 읽고 쓰기 지점에서 암호화 또는
보통 서비스의 규모가 작은 경우에 한개의 DataBase 에서 Read 와 Write 작업을 모두 수행 하도록 구현된다. 하지만, 점차 서비스 규모가 커짐에 따라 한 곳에서 모든 작업을 처리하기엔 병목 현상이 발생할 위험이 높아진다.이를 예방하기 위해 Replicati
최근 회사에서 코드 리팩토링을 하는 도중 의아 했던 적이 있었다.한 사용자의 올해 누적 송금액을 가져오는 부분이었는데 현재 송금 진행 중인건과, 송금 완료된 건의 각각 SELECT 구문을 UNION 으로 합쳐서 가져오고 있었다.기본적으로 이러한 방법은 생각하기 쉽게 쿼
5년전 대학생 때 자료구족 과목을 수강하면서 정렬기법에 대하여 공부한적이 있다. 그때 공부했던 내용을 다시 되새기며 이 블로그에 기록하고자 한다.선택정렬(Selection Sort)은 기준이되는 원소를 정한 후 전체 원소중 가장 작은 원소를 찾아 자리를 교환하는 방식이
Duplicate Weedout 은 세미 조인 서브 쿼리를 일반적인 INNER JOIN 쿼리로 바꿔서 실행하고 마지막에 중복된 레코드를 제거하는 방법으로 처리되는 최적화 알고리즘이다.아래의 salaries 테이블의 Parimary key 가 (emp_no + from_
MIN() 또는 MAX() 만 SELECT 절에 사용되거나 또는 GROUP BY 로 MIN(), MAX()를 조회하는 쿼리가 적절한 인덱스를 사용할 수 없을때 인덱스를 오름차순 또는 내림차순으로 1건만 읽는 형태의 최적화이다.paimary key(emp_no)paima
MySQL 또는 MaraiDB 엔진이 스토리지 엔진으로부터 받은 레코드를 정렬하거나 그룹핑할 때는 내부적인 임시테이블을 사용하게 된다.일반 적으로 MariaDB 엔진이 사용하는 임시 테이블은 처음에는 메모리에 생성됐다가 테이블의 크기가 커지만 디스크로 옮겨진다.ORDE
쿼리에 ORDER BY를 사용하면 다음의 3가지 처리 방식중 하나로 정렬된다.인덱스 정렬ORDER BY에 명시된 컬럼이 제일 먼저 읽은 테이블(드라이빙)에 속하고 ORDER BY 순서대로 생성된 인덱스가 있어야 한다. 또한 WHERE절에 첫 번째 읽은 테이블의 컬럼에
MySQL과 MariaDB 에서는 ORDER BY 절을 가진 쿼리가 인덱스를 사용하지 못할때, 실시간 정렬(Using filesort)를 수행한다.이때에는 조건절에 일치하는 모든 레코드를 가져와서 퀵(Quick sort) 알고리즘을 수행한다.정렬할 레코드 건이 많을 경