[Test] Testcontainers를 사용한 DB 테스트
·
Test
1. TestContainers란?예전에 프로젝트를 할 때 멱등성 있는 테스트를 구성하기 위해 테스트 DB를 따로 띄워 테스트를 실행했던 적이 있습니다. 그 때는 Testcontainers의 존재를 몰랐기에 Docker Compose로 테스트 DB를 띄워 테스트를 실행해줬습니다. 테스트 DB 컨테이너를 계속 띄워 놓기엔 때문에 컴퓨터 리소스 낭비도 심했기 때문에 통합 테스트를 실행해야할 때마다 테스트 DB 컨테이너를 띄워주고 테스트가 종료되면 컨테이너를 내리는 식으로 진행되었는데 정말 귀찮은 작업이었습니다. 이런 작업을 자동화해주는 Testcontainers입니다. 똑같이 Docker 환경을 사용하며 테스트가 실행될 때 실제 DB와 같이 돌아가는 DB 컨테이너를 띄워주고, 테스트가 종료되면 자동으로 컨테..
데이터베이스 인덱스
·
CS/데이터베이스
인덱스를 사용해야하는 근본적인 이유인덱스를 사용하는 이유는 무엇일까? 효율적으로 조회하기 위해서 일 것이다. 그럼 왜 풀텍스트 스캔을 하면 시간이 오래 걸리고, 인덱스를 사용하는 것이 더 효율적일까?데이터베이스의 스토리지 엔진은 컴퓨터와 마찬가지로 하드디스크에 정보를 저장하고 읽어온다. 디스크는 아래 그림과 같이 구성되어 있다. 여기서 섹터는 하드 드라이브의 최소 기억 단위로 트랙의 일부이다. 만약 정보를 읽으라는 명령이 떨어지면 헤드와 암을 열심히 움직여 섹터를 탐색한다. 내용을 읽으려면 암과 헤드가 원하는 track으로 이동해야하고 (빙글빙글 돌고 있는 플래터의) 타이밍이 맞아 헤드와 섹터가 맞닿아야 한다. 이 과정 자체가 굉장히 느리기 때문에 효율적으로 디스크를 조회하려면 최소한의 섹터 범위 안에서..
[Real MySQL] MySQL 역사와 버전 비교 (MySQL 8.0 vs 5.7)
·
MySQL/Real MySQL
MySQL MySQL의 역사 1979년 스웨덴의 TcX라는 회사의 터미널 인터페이스 라이브러리인 UNIREG로부터 시작되었다. UNIREG는 1994년 웹 시스템의 데이터베이스로 사용하기 시작하면서 MySQL 1.0이 완성되었고, TcX 사내에서만 사용되다가, 1996년에 오픈소스로 공개됐다. 2000년 몬티와 데이빗이 MySQL AB라는 회사로 독립함과 동시에 FPL(Free Public License) 라이선스 정책으로 바뀌고 2006년 최종적으로 현재와 같은 두 가지 라이선스 정책(엔터프라이즈 에디션, 커뮤티니 에디션)을 취하게 되었다. 이후 썬마이크로시스템즈에 인수되었고, 현재는 오라클에 인수되었지만 특별한 라이선스 정책의 변화는 없었다고 한다. 5.x 버전과 8.x 버전 MySQL 5.5 ~ 5..
DISTINCT, GROUP BY 로 중복 제거 하기 [MySQL]
·
MySQL/기초
1. DISTINCT와 GROUP BY 이 키워드들은 주로 SELECT와 함께 사용된다. MySQL 에서는 중복된 내용을 단 한 번만 출력하고 싶다면 DISTINCT 중복된 내용끼리 묶고 싶다면 GROUP BY 를 사용하면 된다! 그렇다면 예시를 통해 이 두 키워드를 알아가보자. 2. 오늘의 예시 오늘의 테이블은 물품판매기록서이다. - 테이블 생성 CREATE TABLE selling( sequence INT AUTO_INCREMENT PRIMARY KEY, # 판매 순서 product VARCHAR(20), # 품목 price INT, # 가격(원 단위) customer VARCHAR(20), # 고객 이름 numOfSales INT # 판매 개수 ); - 내용 삽입 INSERT INTO selling..
MySQL 문자열 함수 [MySQL]
·
MySQL/기초
1. MySQL 문자열 함수의 종류 많이 사용하는 문자열 함수의 종류는 아래와 같다. 함수 이름 설명 CONCAT(문자열, 문자열) 문자열을 합쳐준다. SUBSTRING(문자열, 시작, 끝) 문자열을 기준에 따라 나눠준다. REPLACE(문자열, target, replace) 문자열 중의 target에 해당하는 부분을 replace로 바꾼다. REVERSE(문자열) 문자열을 거꾸로 뒤집는다. CHAR_LENGTH(문자열) 문자열의 길이를 반환한다.(공백도 포함) UPPER(문자열) 문자열을 대문자로 전부 변환하여 반환한다. LOWER(문자열) 문자열을 소문자로 전부 변환하여 반환한다. 이제 예시를 통해 하나씩 알아가보도록 하자. 2. 예시로 알아보는 MySQL 문자열 - 오늘의 예시 테이블: school..
DBMS의 기본?! MySQL CRUD [MySQL]
·
MySQL/기초
1. CRUD란? 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create, Read, Update, Delete의 앞글자를 따서 CRUD라고 한다. 사용자 인터페이스가 기본적으로 가지고 있어야하는 기능을 의미하기도 한다. MySQL을 사용하려면 CRUD를 실행할 수 있는 기본적인 명령어를 알아야한다. CRUD 명칭 기능 설명 SQL Create 만들기, 생성 INSERT Read 읽기 SELECT Update 업데이트, 변경 UPDATE .. SET Delete 삭제 DELETE 그렇다면 차근차근 알아가보도록하자! - 기본 전제 저번 포스트에서 만들었던 테이블인 student로 실습하겠다. 만약 테이블이 없거나 삭제된 상태라면 아래의 코드를 그대로 입력해주면 되겠다. CREATE T..