MySQL(8)
-
CTE: 장점과 단점, 그리고 가독성 문제에 대한 고찰
💡 본 글은 회사에서 CTE(Common Table Expression) 를 처음보고, 이에 대해 조사해본 글입니다!💡 CTE 문법은 ANSI 표준 중 일부라, 대부분의 DBMS 에서 지원하지만, 내부적으로 동작을 하는 방식은 DBMS 마다 다르니, 참고하세요! (ex. Postgre 에서 CTE는 무조건 Using Temp 지만, MySQL 은 Execution Plan 에 따라 다릅니다! )CTE 의 기본 개념A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that st..
2024.07.16 -
손흥민 결승골 후 데이터 폭증: 해축갤에서의 3가지 인덱스 전략
배경 최근 이런 시나리오를 생각해봤습니다. 월드컵 결승에서 손흥민 선수의 골로 인해 극적인 승리를 한다면 해축갤에 무슨 일이 일어날까? (제발 이런 일이 일어났으면) 생각만 해도 달달하다. 이런 경우 아마 해축갤에 흥민찬양에 대한 주제로 글이 미어터질 것입니다. 이렇게 생성된 글들이 쌓이면, 이는 결국 대규모 데이터라고 불릴 만큼 늘어날 것입니다. 그리고 저는 늘어난 글의 갯수를 대략 1억개로 잡아봤습니다. 그래서 최근 데이터를 200만 개에서 1억 개로 늘리고 난 뒤 기존 API의 성능이 얼마나 나오는지 궁금해 쿼리를 한번 테스트해 봤습니다. 정신 나갔다,,, 쿼리 응답시간 4분 20초…? 해축갤은 제 자식과 같은 프로젝트이지만, 저라도 이 서비스는 사용하지 않을 거 같습니다 ㅠ 상황 현재 해축갤의 E..
2024.03.26 -
MySQL 인덱스 크기와 디스크 I/O 최적화: 데이터베이스 성능 향상 가이드
배경 해축갤 프로젝트를 하며 데이터가 200만개에서 1억개로 늘어났을 때 게시물 조회 성능이 급격히 안 좋아져 쿼리 개선, title, content 기준 인덱스를 이것저것 넣어보며 실험을 하고 있었습니다. 인덱스중 title, content 2개를 가지고 B-Tree 인덱스를 생성하려 했다가 문제가 발생했습니다. 구체적인 상황 (like DB, 코드 구조) 해축갤의 게시글 테이블의 구조는 다음과 같습니다. 주의해서 봐야 하는 부분은 content 가 varchar(1000) 라는 겁니다. 제가 사용하는 MySQL 버전은 8.0.36 이고 입력한 명령어는 다음과 같습니다. CREATE INDEX idx_title_content ON post (title(100), content(100)); 문제 위 쿼리..
2024.03.25 -
MySQL 데이터베이스 복구 실패: 실험에서 배운 교훈과 데이터베이스 관리 전략
? DB 가 죽어버렸다. 껐다 켜면 되겠지라는 생각으로 다음 명령어를 쳤는데 brew services restart mysql 여전히 안된다. 원인 분석 그래서 로그를 확인하기 위해 ‘/usr/local/mysql/data/mysqld.local.err’ 을 까보기로 마음을 먹었다. 근데 파일이 자그마치 12MB 나 되는 파일을 일일이 읽는다는 건 비효율적이 판단했다. ERROR 관련 키워드(ex. ‘ERROR’, “Assertion Failure’, ‘crash’) 만 따로 추출해 분석해 보기로 했다. # 로그 파일에서 특정 키워드를 포함하는 부분을 찾아냅니다. keywords = ["ERROR", "Assertion failure", "crash"] matching_lines = [] for line..
2024.01.23 -
H2 console, Access denied for user 'root'@'localhost' (using password: NO) 28000/1045
강의 중에 H2 console로 mariadb에 접속을 해야 하는 일이 있었다. 위와 같이 입력후 `Test Connection` 을 누르니 다음과 같은 에러가 났다. 비밀번호를 입력을 했음에도 불구하고 비밀번호가 틀린것도 아니고 using password: NO 라니 그래서 뭔가 하고 GPT 한테 두드렸더니 버전 문제가 있을수도 있다고 하는 걸 보고 내 build.gradle 파일을 확인해 봤더니 버전이 명시적으로 적혀져 있었다. 내 스프링 부트에 뒤떨어진 버전인가 하고 이렇게 바꾸고 나니, 스프링 부트가 3.1.4. 를 import 해왔고 다시 실행해 보니 아주 잘된다! 결론 비밀번호를 입력해도 값이 넘어가지 않으면 드라이버 버전 호환을 따져보자
2023.10.25 -
Day 12-2 : 솔직히 본인 테이블에 더미 데이터 1,000 개 넣어본 사람? 없으면 보자, 프로시저로 더미 데이터 생성하기
[Day 12-1] CSRF 와 CORS 는 매우 연관이 깊다?! Day 11 : 싸우자 해커야! CSRF, HttpOnly, CSP 대응하기 Day 10 : MySQL2 오류, "Client does not support authentication protocol requested by server" 해결 방법 Day 9 : 에러나면 손모가지 날라가붕께 더보기 Day 8 : 가상 DOM 생성 xpmxf4.tistory.com 위 글을 보고 오시는 것을 추천드립니다! 1. 오늘의 주제 하루에 하나만 했으면 참 좋았을 텐데 처음으로 하루에 2 개의 글을 써보네요... 각설하고 이번에 해야 할 일은 통계 API 만들기입니다! 2. 주제에 대한 간략한 설명 ISL의 가장 큰 핵심 기능은 나라에다가 개인이 법규..
2023.06.08 -
Day 8 : 가상 DOM 생성, 웹 스크래핑, 및 JSON 데이터 MySQL 저장 (후 많다 많아)
Day 7 : 왜 굳이 웹 서버 프레임워크를 사용해야 하나? 2023.05.24 - [Project ISL/프론트엔드] - Day 6 : 첫걸음은 '레이아웃 설계'로부터 Day 6 : 첫걸음은 '레이아웃 설계'로부터 2023.05.18 - [Project ISL/프론트엔드] - Day 5 : 세계지도 인터랙션, 국가별 호버 이벤트 xpmxf4.tistory.com 이전 글을 읽고 와주시면 감사하겠습니다 :) 오늘의 WORK 오늘은 3 가지의 작업을 완료했습니다. world-map.html 에 존재하는 나라들의 국가코드(ISO 3166-1 alpha-2)를 모으기 해당 국가코드들의 풀네임을 매핑한 json 생성 이렇게 생성한 json 파일을 JavaScript로 DB에 넣기 world-map.html 에서..
2023.05.29 -
Q. 로깅을 이용한 데이터베이스의 회복에 대해서 간략히 설명해주세요
위 질문에서 핵심 명사들을 먼저 한번 뜯어보자 로깅이란? In computing, logging is the act of keeping a log of events that occur in a computer system, such as problems, errors or just information on current operations. These events may occur in the operating system or in other software. A message or log entry is recorded for each such event. These log messages can then be used to monitor and understand the operation of t..
2023.03.09