mysql

이전 노션 블로그의 SQL Tutorial (2021.01.17)로부터 마이그레이션된 글입니다. Where SQL WHERE | Basic SQL - Mode Analytics SQL WHERE 절 SELECT 과 FROM 을 사용하여 어떻게 데이터를 조회하는지 안다면, 다음은 WHERE 을 이용하여 데이터를 필터링하는 것 입니다. SELECT * FROM tutorial.us_hosting_units WHERE month = 1 📌 이 절은 언제나 SELECT , FROM , WHERE 순서여야만 합니다. WHERE은 어떻게 작동할까? SQL WHERE 절은 영어 문장 해석하듯이 작동합니다. 위의 쿼리는 month column이 1의 값을 가진 row 만 포함한다는 점만 빼면, SELECT * FROM..
이전 Velog의 대용량 데이터베이스의 조회 성능을 개선해보자 (2) : 인덱스 튜닝 (2023.11.12) 로부터 마이그레이션된 글입니다. Github main repo / Github server repo 동기 1편의 카테고리별 리뷰 조회를 시작으로 500ms가 넘어가는 요청들을 위주로 Cardinality/Selectivity를 고려하여 인덱스를 생성했다. 하지만 1편까지는 진짜 대용량 데이터베이스는 아니였다. 2편부터 여기어때컴퍼니 벤처 프로젝트인만큼 여기어때 홍보자료에 있는 데이터 규모에서 성능을 측정해보고 필요하다면 개선까지 진행해보자. 기존 테스트 데이터 스케일 여행상품: 30 (각 카테고리 10개씩, 숙소, 식당, 렌터카) 예약: 540,000 (카테고리 별 180,000) - 여행상품 마..
이전 Velog의 대용량 데이터베이스의 조회 성능을 개선해보자 (1) : 인덱스 적용 (2023.10.27) 로부터 마이그레이션된 글입니다. Github main repo / Github server repo 동기 지난 번에 다양한 JPA 문제를 해결하고 비효율적으로 생성되는 쿼리를 최적화해 전체적인 서버 성능이 대폭 향상되었다. 하지만 리뷰 조회 API의 일부 요청의 경우 대폭 향상되었음에도 만족스러운 쿼리 처리 시간에 도달하지 못했다. 다양한 정렬과 필터링을 지원하는 조회 쿼리인만큼 대량의 데이터를 조건절, 정렬 적용하는데 많은 비용이 들고, 특히 리뷰의 분석 결과 중 '청결' 속성이 포함된 리뷰들이나 리뷰의 분석 결과 중 '청결' 속성의 '먼지' 키워드가 포함된 리뷰들과 같이 review 테이블과..
디프만 14기에서 참여 중인 프로젝트에서 백엔드 리드 분이 엔티티의 id를 UUID, ULID로 설정한 것을 보았다. 늘 IDENTITY로 설정하여 MySQL이 AUTO_INCREMENT로 관리하도록 위임했기 때문에 기존 방식과 대비해서 어떤 장점이 있길래 사용하는지 알아보았다. AUTO_INCREMENT 전략의 단점 외부에서 예측하기 쉬운 PK PK가 선형적으로 증가하는 정수이기 때문에, 특정 데이터의 PK를 예측하기 쉬워진다. 실제로 request들의 파라미터를 테스트할 때 종종 느꼈던 것이다. 현재 유저의 id 2000이면 1 ~ 1999까지의 id를 가진 유저가 존재할 확률도 높은 것이다. 이는 단순히 노출된다의 문제를 넘어 SQL Injection 공격에도 취약해진다. DB에 의존적인 PK 개발..
sckwon770
'mysql' 태그의 글 목록