본문 바로가기

기타32

[SQL] Cardinality vs Selectivity (카디널리티와 선택도) 차이점 및 구하는 쿼리 데이터베이스나 빅데이터 분야에서 '카디널리티(Cardinality)'와 '선택도(Selectivity)'는 자주 언급되는 용어다. 이 용어의 차이점을 정확히 알고 있어야 가지고 있는 데이터의 특성을 잘 파악할 수 있다. 카디널리티와 선택도는 절대적인 수치가 아닌 두 개의 데이터 집합의 특성을 비교하는 상대적인 개념으로 사용해야한다. 카디널리티(Cardinality) 카디널리티는 특정 데이터 집합에서 유니크한 값의 개수를 의미한다. 예를 들어 데이터베이스의 테이블의 '성별' 컬럼의 경우 생물학적인 성별을 고려할 때 '남자'와 '여자'로 구성된다. 성별 컬럼의 카디널리티는 2라고 할 수 있다. 반대로 주민등록 번호 같이 PK 혹은 CandidateKey는 테이블에 존재하는 모든 레코드들에 유니크할 수 있다... 2021. 8. 3.
[MySQL] 오라클(Oracle) Merge into 구문 따라하기 - 중복키 (Duplicate key) 처리 오라클을 사용하면 'Merge into' 구문이라는 편리한 DML 구문을 사용할 수 있다. PK 혹은 Unique Index가 생성되어 있는 테이블에 데이터를 입력할 때, PK나 Unique Key에 해당하는 값이 이미 테이블에 존재하면 "Error Code: 1062. Duplicate entry '??' for key PRIMARY" 같은 에러가 발생한다. 이 경우 Insert 구문 대신 update 구문을 사용해서 기존에 있는 데이터를 업데이트해야한다. 이 때, 테이블에 데이터가 존재하는지 조회하고 없으면 insert, 있으면 update로 동작하도록 해야한다. 하지만 동시성 이슈로 select 해서 존재유무를 판단하고 insert 혹은 update 하는 사이에 다른 세션에서 새로운 값을 inser.. 2021. 8. 2.
[MySQL] 반올림과 버림 함수 - ROUND(), TRUNCATE() 숫자 데이터를 다룰 때 은근히 반올림과 버림을 많이 사용한다. MySQL에서는 반올림과 버림 기능을 제공하기 위해 ROUND() 함수와 TRUCATE() 함수를 제공한다. 반올림 (ROUND) MySQL의 쿼리에서 ROUND() 함수를 사용하면 반올림을 사용할 수 있다. ROUND() 함수는 2개의 인자를 받는데 "ROUND(숫자, 반올림할 자릿수)" 형태로 사용하면 된다. 예를들어 다음 쿼리들은 주석처리한 결과를 출력한다. SELECT ROUND(1234.56789) FROM DUAL -- 1235 SELECT ROUND(1234.56789 ,1) FROM DUAL -- 1234.6 SELECT ROUND(1234.56789 ,4) FROM DUAL -- 1234.5679 SELECT ROUND(123.. 2021. 8. 1.
[MySQL] 랭크(Rank)와 백분위(Percentile) 구하는 쿼리 예제 오라클을 사용하다가 MySQL을 사용하는 환경으로 옮겼을 때 여러가지 어려움을 만나게 된다. 오라클에서 지원하는 기능을 MySQL에서 지원하지 않는 경우인데 그 중 하나가 랭크(Rank)와 백분위(Percentile)를 구해야하는 경우다. MySQL 랭크 쿼리 오라클의 경우 테이블에 다음과 같은 데이터가 들어있을 때 create table t1(a number); insert into t1 values(3); insert into t1 values(6); insert into t1 values(9); insert into t1 values(2); insert into t1 values(5); insert into t1 values(8); insert into t1 values(1); insert into.. 2021. 7. 31.
[보안] XML External Entity Injection Attack (XXE Injection 공격) 데이터를 XML에 담아서 저장할 때, 문자열 형태의 XML을 파싱하기 위해 XML 파서를 이용하는 경우 XXE Injection Attack(XML External Entity Injection 공격)'을 주의해야한다. XXE Injection 공격은 OWASP Top 10 - 2017에도 선정된 웹 애플리케이션의 대표적인 취약점이다. (OWASP는 The Open Web Application Security Project의 약자로 웹 애플리케이션에서 흔히 발생할 수 있는 대표적인 취약점을 모아서 4년마다 발표하는 프로젝트다.) XML Entity XXE Injection은 XML의 엔티티(Entity)를 이용한 공격방법이다. XML 엔티티는 반복적으로 나오는 문자열이나 특별처리가 필요한 특수 문자를 X.. 2021. 7. 5.