악성 쿼리 오늘은 악성 쿼리문에 대해 알아보도록 하겠습니다. 악성 쿼리문이란 서버의 처리량을 많이 사용해서 결국 서버의 전반적인 성능을 나쁘게 하는 쿼리문을 뜻합니다. 비유를 하자면 많은 사람(쿼리문)이 음식을 주문하기 위해 줄 서 있는데, 어떤 사람(악성 쿼리문)이 계속 판매원에게 필요치 않은 질문을 던져서 뒤에 서 있는 다른 수많은 사람들이 음식을 주문하는데 시간이 오래 걸리는 것과 같습니다. SQL 초보자들은 결과만 나오면 잘 된 것처럼 느끼지만 실무에서는 얼마나 효과적으로 결과를 얻느냐가 중요한 이슈가 되기 때문에 잘못된 악성쿼리를 자꾸 만들지 않도록 신경을 써서 SQL문을 만들 필요가 있습니다.
일반 문자열 (CHAR, VARCHAR) 먼저 일반 문자열인 CHAR와 VARCHAR에 대해 알아보도록 하겠습니다. CHAR나 VARCHAR 앞에 'N'이 붙지 않은경우 일반 문자열입니다. 이 일반 문자열을 사용할 경우 데이터를 정의할 때, 바이트 수를 신경써주셔야 합니다. 일반적으로 영문 1바이트, 한글(유니코드)는 2바이트 입니다. CHAR => 고정 문자열 + 일반 문자열 EX) char(100)으로 지정하고, "abc"를 입력하면 항상 100byte의 영역을 확보합니다. (97바이트 낭비) VARCHAR => 가변문자열 + 일반 문자열 EX) varchar(100)으로 지정하고, "abc"를 입력하면 3byte의 영역을 확보합니다. (낭비 X) CHAR, VARCHAR의 경우 한글(2바이트) EX..
트리거(Trigger)란 무엇인가? 오늘은 트리거(Trigger)에 대해 알아보도록 하겠습니다. 저는 학교 DB 수업시간 때 다른 개체보다도 트리거에 대한 개념을 잡기가 조금 어려웠습니다. 문자그대로 '어떤 작업이 발생하면 실행하는 코드' 정도로만 외웠던 기억이 나네요..ㅎ 일단 트리거란 테이블에 부착되어서 INSERT나 UPDATE, DELETE 등의 작업이 발생하면 실행되는 코드를 말합니다. 이 트리거를 언제 사용하면 좋을까요? 개념을 정확히 이해하기 위해 적절한 예를 들어보겠습니다. 예를 들어 '오꽈'라는 학생이 학교에서 자퇴하는 경우를 생각해봅시다. 학생들의 정보가 저장되어있는 학생 테이블이 있다면 학생 테이블에서 오꽈의 정보를 삭제하면 됩니다. 그런데 나중에 자퇴한 오꽈가 학교에 찾아와서 자퇴하..
뷰(View)란 무엇인가? 오늘은 뷰에 대해 알아보도록 하겠습니다. 뷰란 가상의 테이블을 의미합니다. 즉, 사용자 입장에서는 테이블과 동일하게 보이지만, 뷰는 실제 데이터를 가지고 있지 않습니다. base table에 링크된 개념이라고 생각하면 됩니다. 그렇다면 이 뷰를 언제 사용할까요? 예를 들어, 학생 테이블에서 학생들의 주소를 대량으로 변경해주는 작업이 필요하다고 합시다. 그래서 새로운 아르바이트생을 고용해서 학생의 다른 정보는 그대로 놔두고 '주소'만 변경하는 일을 시키려고 하는데 만약 이 아르바이트생에게 학생 테이블을 사용할 권한을 준다면 학생의 주소 외에 주민번호, 연락처 등 중요한 개인정보를 열람할 수 있고 개인정보 유출이라는 심각한 상황이 발생할 수도 있습니다. 이러한 문제를 해결하기 위해..