annyeongha.log
로그인
annyeongha.log
로그인
[DB] SQL 안티패턴
안녕하
·
2023년 11월 15일
팔로우
0
SQL 안티패턴
db
데이터베이스
0
데이터베이스
목록 보기
8/21
SQL 쿼리와 데이터베이스 설계에서 발생하는 잘못된 패턴
성능 저하, 데이터 무결성 손상, 보안 취약점 야기
무단횡단
1개의 컬럼에 콤마
,
구분의 값을 넣는 것
검색이 어려워짐
문자열 컬럼의 문자 수 제한을 받음
validation을 걸기 어려움
해결
교차 테이블 생성
반올림 오류
소수점을 다룰 때 FLOAT 형 사용 금지
부동소수점 반올림으로 오차 발생
해결
NUMERIC, DECIMAL 사용
유령 파일
이미지 등 대용량 파일을 저장할 때, 데이터베이스에 링크만 저장하는 패턴
데이터를 삭제한다고 해도 실제 파일까지 삭제된다고 보장 X (외부 스토리지에 쓰레기 데이터로 남음)
ROLLBACK 불가
외부 파일은 SQL 접근 권한 영향을 받지 않음
해결
BLOB형 검토
NULL 값에 대한 두려움
NULL을 일반 값으로 다루거나 일반 값을 NULL로 다루는 패턴
NULL을 포함한 연산은 결과가 NULL이 된다
NULL은 비교 불가능
해결
NULL을 임의의 값으로 다룸
검색 시 IS NULL 사용
NOT NULL 제약 조건 -> 애플리케이션 코드에 의존하지 않고 DB에서 강제하기
LIKE와 정규표현식
LIKE와 정규표현식을 이용하는 패턴
인덱스의 효과가 사라지고 테이블을 스캔함
단순한 패턴 매치로 의도하지 않은 결과 발생
해결
전문 검색 엔진 이용
Sphinx나 Lucene 등 SQL과 독립된 검색 엔진 사용
전치 인덱스를 자체 제작
하나의 복잡한 쿼리
복잡한 문제를 하나의 SQL 쿼리로 해결하는 패턴
결합이나 서브 쿼리 등 복잡한 SQL 쿼리는 보통 간단한 쿼리에 비해 느림
해결
분할 통치
쿼리를 여러 개로 분할
사양 레벨에 따라 태스크를 분할하여 처리
SELECT *
SELECT *
사용 지양
테이블 구조가 변경되거나 컬럼이 추가, 삭제, 수정되면 예상치 못한 결과가 나올 수 있음
모든 컬럼을 조회하면 네트워크 부하 및 메모리 사용량 증가
해결
필요한 컬럼만 조회하기
다중 컬럼 속성
하나의 엔티티에 여러 개의 값을 컬럼으로 만드는 것
검색 시 원하는 정보가 어느 컬럼에 있는지 모두 확인해야 함
해결
종속 테이블 생성하여 사용
읽을 수 있는 패스워드
패스워드를 평문으롤 저장하는 것
보안 위험
해결
패스워드 해시를 저장
패스워드는 복구 대신 리셋하기
SQL 인젝션
동적으로 SQL 구축 시 사용자 입력을 코드로 실행하는 것
SQL 쿼리 인수, 테이블 삭제 및 조회 등을 이용할 수 있게 되어 보안 취약
SQL 인젝션
해결
prepared statement를 이용
사용자의 입력을 코드에서 격리
출처:
SQL AntiPatterns
안녕하
세요
팔로우
이전 포스트
[DB] DELETE, TRUNCATE, DROP 차이점
다음 포스트
[DB] 데이터베이스 시스템: 정의, 등장 배경, 구조
0개의 댓글
댓글 작성