그림으로 배우는 데이터베이스 Chapter 7

prana·2022년 12월 30일
0

database

목록 보기
30/38

Chapter 7 데이터베이스를 지키기

😈 오타발견 : 인덱스 p203 그림 7-14

  • 검색 및 정렬(sort) 조건 등에 이용되는 컬럼에 인텍스(인덱스)를 이용한다.

7-1 물리적 위협

  • 시스템에 악영향을 끼치는 문제 ① : 물리적 위협 사례와 대책

1. 물리적 위기로 고장을 일으킬 위험

  • 지진, 홍수, 낙뢰 등의 자연재해
    • 내진대책, 백업, UPS(무전원 전원장치), 자가발전 장비 등 설치
       
  • 불법 침입에 의해 기기 도난/파손되는 위험
    • 시건장치, 입/퇴실 방범 대책 필요
       
  • 장비의 노후화로 인한 기기가 고장나는 위험
    • 데이터 백업/예비 장치를 설치하여 이중화로 운용

7-2 기술적 위협

  • 시스템에 악영향을 끼치는 문제 ② : 기술적 위협 사례와 대책

1. 프로그램의 취약점을 이용한 공격

  • 기술적 위협 : 시스템에 문제를 일으키는 요인 중 프로그램이나 네트워크를 통해 이루어지는 공격
  • 대응책 : 바이러스 소프트웨어 도입, OS나 소프트웨어 버전 업그레이드, 접속 제어나 인증 설정, 데이터 암호화 등

⭐2. 기술적 위협 사례

  • 부정한 접속 : 접근할 권한이 없는 사람이 네트워크를 통해 부정하게 서버나 시스템에 침입하는 행위

  • 컴퓨터 바이러스

  • DoS 공격

    • 대량으로 데이터를 송신함으로써 서버에 부하를 주는 공격
    • 접속이 집중되어 사이트로 연결되지 않을 수 있는데, 이런 상황을 의도적으로 만들어내어 공격하는 방법
  • 도청

    • 네트워크에 흘러 다니는 정보를 부정하게 훔쳐낼 수 있는 도청은 정보 누설로 연결될 우려가 있다.


    7-3 인적 위협

  • 시스템에 악영향을 끼치는 문제 ③

    1. 사람에 의한 실수는 막기 어렵다

  • 인적 위협 : 인간에 의한 실수나 부정행위로 인하여 손실을 일으키는 요인

인적 위협 사례

1) 오조작

  • 지식이나 확인이 부족하여 조작을 잘못함
  • ex) 외부의 수신처에 사내의 기밀 정보를 보내거나
  • 중요한 정보 삭제
  • 소프트웨어 설정을 잘못하여 예상 밖의 동작

2) 분실, 두고 내리기

3) 소셜 엔지니어링

  • 소셜 엔지니어링: 사람의 심리나 행동의 틈을 타서 중요한 정보를 입수하는 수단
    -ex) 전화로 관계자인척 위장하여 패스워드를 물어보기 등


    7-4 에러 로그

  • 발생한 에러의 이력

    1. 에러의 이력을 확인한다

  • 에러로그 : 에러 문장이 기록된 파일로,
    데이터베이스에서 에러가 일어날 때마다 하나씩 새롭게 추가됨

  • DB를 운용하면서 발생한 중요한 경고, 이상 상황 등을 전달하는 메시지가 기록

    2. 에러 로그 예시

  • 에러가 발생한 날짜, 에러 코드, 에러 메시지, 에러 레벨 등


    7-5 문법 에러, 자원 부족

  • 에러의 종류와 대책

    1. 여러 가지 에러의 종류

  • SQL 문법 에러 : 데이터베이스에서 실행되는 SQL에 오타가 있으면 에러

    • ex) 존재하지 않는 테이블명, 컬럼명 지정 등
  • 자원(resource) 부족: 메모리나 디스크 용량 부족

  • 데이터베이스와 접속할 수 없는 데드락(dead lock) 발생, 타임아웃 등

    2. 에러의 해결 방법

  • 에러 로그 또는 감시하고 있는 정보 등을 살펴보면서 대응할 필요 있음

  • 영어로 쓰인 에러 메시지는 번역을 한다.

  • ex) 디스크 용량 부족인 경우, 디스크에 빈 공간이 만들어지도록 필요없는 파일을 삭제하거나 디스크 용량을 늘리거나 한다.

  • 공식 자료 조사 및 팀 내 과거에 같은 사례 발견 시 그 때의 대응 방법 참고


7-6 슬로우 쿼리(Slow Query)

  • 실행에 시간이 걸리는 SQL

1. 슬로우 쿼리를 집계한다

  • 👍: DB에는 대량의 데이터 중 빠르게 필요한 정보를 얻을 수 있다
  • 👎: 조회 방식이나 테이블 설계, 데이터 용량이 늘어나면서 시간이 걸리게 될 수도 있다
  • 슬로우 쿼리 : 실행에 시간이 걸리는 SQL 문장
  • SQL을 실행하여 결과가 되돌아올 때까지의 시간을 측정하는 것으로 파악

2. 슬로우 쿼리가 일으키는 문제

  • 데이터 집계에 시간이 걸림
  • 페이지 표시가 늦게 됨
  • 서버에 부하가 걸림

3. 슬로우 쿼리의 최적화

  • SQL 문장 수정
  • 쿼리를 수정하고 조회 방법을 바꿈으로써 빠른 결과 조회
  • 테이블에 인덱스를 사용
  • 현저하게 시간이 걸리는 것부터 최적화하고 서서히 초 수를 줄여 나가기

7-7 인덱스

  • 데이터 조회 시간을 단축

1. 데이터 조회 성능을 높이다

  • 인덱스를 사용

    ex) 책의 색인

    • 원하는 내용이 적힌 페이지를 찾고 싶을 때 색인을 참조하면, 원하는 페이지를 빨리 찾을 수 잇다.
  • DB의 경우 검색 조건에 자주 이용하는 컬럼에 인덱스를 생성해 두면 데이터를 조회하는 성능을 높일 수 있다.

2. 인덱스 이용이 적합한 사례

  • 검색 및 정렬 조건, 테이블 결합에 자주 사용되는 컬럼으로 설정하게 된다

    데이터 양이 많은데 그 안에서 한정된 데이터를 추출하거나 컬럼에 저장되어 있는 값의 종류가 많을수록 인덱스가 효과적으로 기능한다.

3. 인덱스의 단점

  • 👎: 인덱스를 적용하게 되면 데이터를 편집할 때 인덱스에 대한 갱신 처리도 이루어져, 데이터 편집 시 속도가 떨어진다는 단점

  • 많은 양의 데이터를 자주 등록하는 테이블에 인덱스를 적용할 경우 주의가 필요하다.

  • 👎: 데이터와는 별도로 인덱스 영역이 필요하므로, 디스크 용량을 필요로 한다.

    • 검색 및 정렬(sort) 조건 등에 이용되는 컬럼에 인덱스를 설정한다
    • 데이터가 많을수록 효과적
    • 값이 많은 컬럼 good
    • 값의 종류가 적은 컬럼은 그다지 효과가 없음

⭐ 7-8 스케일 업, 스케일 아웃

  • 부하를 분산시키다

1. 기계의 성능을 올리는 스케일 업(Scale up)

  • 현재의 시스템으로 처리가 진행되지 않게 되었을 때 시스템의 처리 능력을 높이는 수단으로 스케일 업과 스케일 아웃이 있다.

스케일 업

  • 대상 컴퓨터의 메모리나 디스크, CPU를 증설하거나, 보다 고성능 제품으로 대체함으로써 성능 향상을 도모하는 접근 방법
  • ex) 하나의 DB 안에서 높은 빈도로 갱신 처리가 발생하는 경우 등 특정 컴퓨터 내에서 처리가 빈번히 일어나는 경우 유효하다.

  • 👎: 가동 중인 시스템을 한 번 멈출 필요가 있다는 점, 기기의 성능에는 물리적인 한계(무한한 스케일 업x)

2. 기계 대수를 늘리는 스케일 아웃(Scale Out)

스케일 아웃

  • 컴퓨터의 개수를 늘려 처리를 분산함으로써 처리 성능을 올리는 접근법
  • 스케일 업과 같이 기기의 스펙 상한선에 묶이지 않고 시스템의 성능을 올릴 수 있다.
  • ex) 단순한 처리를 여러 대로 분산할 경우 유효
  • ex) 웹 시스템과 같은 대량의 접속에 대해 데이터의 리턴 처리를 여러 대로 분산하는 것은 비교적 쉽게 실현
  • 여러 대가 있기 때문에 1대가 고장 나도 시스템을 멈추지 않고, 수행할 수 있다는 장점도 있다.

  • 단, 여러 대를 어떻게 구성해서 접속할 것인지, 시스템 안으로 들어오는 처리들을 어떻게 분산시킬 것인지 등에 대한 고려가 필요하다.


7-9 리플리케이션(replication)

  • 데이터베이스를 복제하여 운용한다

1. 처리를 분산시켜 가용성을 높인다

  • 데이터베이스에서 스케일 아웃을 실현하는 기능으로서 리플리케이션

  • 리플리케이션에 의해 원천 데이터베이스로부터 동일한 내용의 데이터베이스를 복제하고 데이터를 동기화해서 사용할 수 있다.

  • 복제의 원천 데이터베이스 내용이 갱신되었을 경우, 그 내용을 복제한 데이터베이스에도 반영시킬 수 있다.

  • ex) 어느 한 쪽 데이터베이스에 장애가 발생한 경우에도 다른 쪽 정상적인 데이터베이스에 처리를 맡김으로써 시스템을 지속적으로 운용 가능

2. 리플리케이션 기능을 사용한 예

  • 원천 데이터베이스(마스터) 복제하여 리드 리플리카라고 불리는 데이터베이스를 생성

  • 리드 리플리카: 읽기전용 데이터베이스로, 데이터 갱신은 마스터 데이터베이스에서 실시하고 마스터 데이터베이스의 변경 내용이 리드 리플리카에 반영되는 흐름이다.

  • 데이터 읽기가 주가 되는 데이터베이스에서는 이렇게 구성함으로써 읽을 때의 부하를 분산시킬 수 있어 성능을 향상할 수 있다.

7-10 SQL 인젝션(Injection)

  • 외부에서 데이터베이스가 조작되는 문제

1. 정보 유출이나 페이지 조작의 대표적인 원인

  • SQL 인젝션 : 폼(form) 등 사용자가 임의로 입력할 수 있는 항목에 공격자가 부정한 SQL 문장을 입력함으로써 본래 열람할 수 없는 정보를 빼내거나 정보를 변경할 수 있는 취약점

  • 회원의 연락처나 신용카드 정보가 유출되는 사례 다수 발생

2. SQL 인젝션 구조

  • 일반적 : SELECT * FROM users WEHRE id = 123;
  • SQL 인젝션 문장 : 1 OR 1 = 1

    SELECT * FROM users WEHRE id = 1 or 1 = 1; 실행됨

    • 모든 사용자의 정보를 얻게 되는 SQL

SQL 인젝션에 대한 대책

  • 입력 값에 예외 처리를하는 것
  • 그대로 SQL로 이용하지 않고 문자열로 취급하는 형태로 변환 후에 SQL로 적용
  • WAF(Web Application Firewall) 방화벽을 도입해 부정한 접속을 차단

0개의 댓글

관련 채용 정보