인프라 엔지니어가 갖춰야 할 것

도큐먼트 읽는 힘 기르기

새로운 하드웨어와 소프트웨어를 도입할 때마다 도큐먼트를 읽어야 함

업그레이드를 할 때 구 버전과 신 버전을 비교해야 함

치명적인 버그가 있어서 최신 버전이 공개되었다면 도큐먼트를 읽은 후 도입을 검토해야 함

 

카탈로그 읽는 힘 기르기

하드웨어와 소프트웨어를 선택할 때 카탈로그를 참고함

각 전문 용어의 의미를 이해하고, 각각 기기에 어느 정도의 성능이 있는지 파악해야 함

자신이 담당하는 서브에 어느 기종이 가장 적절한지 판단해야 함

 

 

 

소규모 인프라와 대규모 인프라

소규모 인프라

  • IT 인프라의 모든 것을 적은 인원이 다룸
  • 기획, 설계, 장비 구입, 구축, 운영까지 모두 경험할 수 있음
  • 비용 대비 효과를 위한 장비 튜닝 기회

 

대규모 인프라

  • IT 인프라를 많은 인원이 분담해서 구축, 관리함
  • 개인의 업무 범위가 한정된 만큼 특정 분야에 대한 고급 스킬이 필요함
  • 외부 업체와 외주업자를 최대한 활용하고, 어떤 수단을 쓰더라도 시스템이 정지하지 않도록 안정적인 운영 필요
  • 소규모 인프라에서 다루지 않는 하드웨어나 솔루션 사용
  • 영업과 오퍼레이터 등에 대한 지시 경험을 해볼 수 있음

 

 

 

인프라 엔지니어 육성

기술적 호기심이 높은 사람

  • 새로운 주제를 계속 던져주면 호기심을 연결되어 기술력이 향상됨
  • 자신의 성장과 비교해서 주위의 성장이 더딘 것에 불만을 가질 수 있음
  • 지도자로서 주위 사람의 기술 수준을 끌어 올리는 역할을 담당하게 하거나, 주위에 신경 쓰지 않고 더욱 기술력 향상을 목표로 삼도록 하기

 

기술적 호기심이 낮은 사람

  • 기술을 업무를 위한 수단으로 보기 때문에 어디까지나 업무의 일환으로 기술을 습득하도록 하는 게 효과적
  • 다양한 일을 경험하게 한 다음 이론 강의나 자격시험처럼 체계적인 지식 학습 하기

 

일반론

  • 사람은 어떤 일을 잘할 수 있게 되면 그 일이 점점 더 좋아짐
  • 다양한 일을 시켜보고 적성에 맞는 중신으로 교육하면 동기 부여가 잘 된 엔지니어로 성장할 수 있음

 

솔루션

여러 장비를 효율적으로 관리하기 위해서 감시 솔루션을 이용

 

감시 솔루션

형태는 2가지로 나뉜다.

  • SNMP(Simple Network Management Protocol)를 이용하는 형태
  • 각 서버에 에이전트 프로그램을 설치해서 그 자료를 수집하는 형태

 

종류

  • 오픈 소스
  • 상용 소프트웨어

 

나기오스 Nagios

2002년 에탄 갈스타드를 중심으로 개발되어 역사가 오래되고 국내에 많은 사용자가 있음

신뢰도가 높고 자유로운 커스터마이징 가능

 

  • 웹 설정 화면이 없고, 설정을 텍스트 파일로 저장
  • 장애 발생 이력을 텍스트 파일로 저장
  • 감시 설정은 플러그인으로 추가함. 플러그인은 직접 만들 수도 있고, 전용 커뮤니티에 공개되어 있음

https://www.nagios.org/

 

Nagios - The Industry Standard In IT Infrastructure Monitoring

Nagios provides enterprise-class Open Source IT monitoring, network monitoring, server and applications monitoring. Download Nagios Today!

www.nagios.org

 

자빅스 Zabbix

2001년 공개된 라트비아 공화국의 자빅스 SIA사가 개발하는 성능 감시 솔루션

다른 감시 시스템에는 없는 고급 감시, 경고, 가시화 기능을 가지고 잇음

 

  • 서버 및 네트워크 디바이스의 오토 디스커버리
  • 로우 레벨 디스커버리
  • 중앙 웹 관리 인터페이스로부터의 분산 감시
  • 폴링과 트래핑 지원
  • 서버 운영체제로는 리눅스, 솔라리스, HP-UX, AIX, FreeBSD, OpenBSD, OS X 지원
  • 고성능 전용 에이전트
  • 에이전트 없는 감시
  • 암호화로 보호된 사용자 인증
  • 유연한 사용자 퍼미션 관리
  • 웹 인터페이스
  • 사전 정의된 이벤트를 메일 기반의 유연한 경고 기능으로 통지
  • 감시 대상 리소스의 고급 표시 기능
  • 감사 로그

https://www.zabbix.com/

 

Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution

Zabbix is a mature and effortless enterprise-class open source monitoring solution for network monitoring and application monitoring of millions of metrics.

www.zabbix.com

 

캑타이 Cacti

2001년 이안 베리가 공개하고, 현재는 The Cacti Group이 관리하는 감시 솔루션

오픈 소스 웹 기반 네트워크 모니터링 및 그래프 도구 

MTRG라고 불리는 감시 솔루션의 대체 도구로 유명함

 

캑타이를 사용하려면 다음과 같은 오픈 소스 필요

  • Cacti
  • RRDTool
  • NET-SNMP
  • APM(Apache, PHP, MySQL)

https://www.cacti.net/

 

Cacti® - The Complete RRDTool-based Graphing Solution

About Cacti Cacti provides a robust and extensible operational monitoring and fault management framework for users around the world. Is also a complete network graphing solution designed to harness the power of RRDTool's data storage and graphing functiona

www.cacti.net

 

자산 관리 도구

회사 조건에 맞는 도구를 사용

자체 개발하거나 불편함을 감수하고 엑셀이나 액세스를 통해 관리하기도 함

 

 

배포 시스템

여러 서버에 동시에 같은 소스 코드와 설정 파일 등을 배포할 때 사용

배포 자체는 리눅스에서는 rsync 명령 윈도우에서는 robocopy 명령 사용

배포 이력 관리를 위해 배포 시스템을 만들거나 배포 기능에 특화된 오픈 소스를 이용할 수 있음 (Saltstack 같은)

 

 

보안

서버 단위 보안 대책 : 백신 등의 소프트웨어를 서버에 설치

IT 인프라 전체에서 하는 대책 : LAN 내에 방화벽이나 IDS(Intrusion Detection System, 침입 감시 시스템)를 설치

 

 

퍼실리티 관리 시스템

데이터 센터의 물리적 환경을 감시하는 시스템

서버 랙의 온도와 각 랙의 전기 사용량, 다양한 세서를 실시간으로 감시하고 관리

 

 

스토리지 관리 시스템

스토리지를 집중적으로 관리하는 시스템

각 스토리지의 가동 상황이나 사용 상황을 감시

가상 스토리지를 동적으로 생성하고 용량을 확장/축소, 삭제

 

 

 

보안

전체적인 관점에서

인프라 전체의 보안 수준을 항상 파악하여 취약성을 발견하는 즉시 대책 세우기

실시간으로 컴퓨터 바이러스, 부정 침입, 외부로부터의 공격 감지하기

 

기업의 보안 대책은 직접적인 이익을 낳는 것이 아니므로 투자 대비 효과 계산이 어려움

보험과 같은 개념

완벽한 상태란 없음

 

기업이 지키고자 하는 것이 무엇인지 명확히 해야함

 

일반적으로 지켜야 할 정보

  • 고객 데이터 전반
  • 매출 정보
  • 각종 문서
  • 각종 소스 코드
  • 직원 데이터 전반

 

보안 방법

  • 보안 담당자와 서버 담당자의 연계
  • 외부 보안 업체 활용
  • 데이터 해시화 암호화

3장. 운영체제

 

리눅스

  • 레드햇 계열 : RHEL, CentOS, Fedora, Vine Linux, Scientific Linux, Oracle Linux 등
  • 데비안 계열 : Debian, Ubuntu, KNOPPIX, Linux Mine 등

윈도우 서버

  • 윈도우 서버에서 실행되는 소프트웨어를 사용할 때
  • 닷넷(.NET) 프레임워크를 사용할 때
  • 액티브 디렉터리 환경을 사용할 때

유닉스

  • 대부분 엔터프라이즈 서버용으로 사용
  • AIX, Solaris, HP-UX

6장. SQL 문의 기본

SELECT 문의 이해
  1. SELECT
  2. INSERT, UPDATE, DELETE
  3. VIEW
  4. SUBQUERY
  5. JOIN
  6. 체크포인트

 

🧐 SQL을 왜 사용할까?

요즘은 ORM으로 작업을 많이 하니까 SQL.. 자세히 몰라도 되는거 아닐까? SQL을 알아야 하는 이유는 무엇일까?

❗️ ORM은 SQL을 쉽게 사용하기 위하여, 접근성을 위해 만들어진 하나의 도구

  • ORM이 왜 나오게 되었는지
  • SQL 동작원리는 어떻게 된건지
  • ORM이 없을 때는 어떻게 해야하는지

제일 중요한 것은 가장 기본적인 것, DB에 직접 접근해서 데이터를 열람하거나 필터링 할 수 있어야 합니다.


SELECT 문

  • MySQL CLI를 실행하여 로그인을 한 후
  • MySQL 서버에 있는 데이터베이스 목록 표시
mysql> show databases;
  • 데이터베이스 사용
mysql> use DB명;
  • 해당 데이터베이스의 테이블 목록 표시
mysql> show tables;

 

연산자 우선순위(MySQL)

연산자 우선순위
INTERVAL 높음
BINARY, COLLATE  
-(단항 감산), ~(단항 비트 반전)  
^  
*, /, DIV, %, MOD  
-, +  
&  
|  
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN  
BETWEEN, CASE, WHEN, THEN, ELSE  
NOT  
&&, AND  
XOR  
||, OR  
=(대입 등호), := 낮음

 

SQL의 기초적인 기술 규칙

  • SQL 문의 마지막에 딜리미터를 붙인다 (대부분 세미콜론)
  • 키워드는 case-sensitive 하지 않다 (select와 SELECT는 같다)
  • 정수는 그대로 쓴다. 문자열, 날짜 및 시각은 작은 따옴표로 감싼다
  • 단어는 반각 스페이스나 개행으로 구별한다

 

DISTINCT

선택한 행에서 중복된 값이 있고 이를 없애려고 하는 경우

SELECT DISTINCT 컬럼명 FROM 테이블명 WHERE 조건;

 

ORDER BY

SELECT ~ FROM 테이블명 ORDER BY 정렬키1[, 정렬키2, ... DESC/ASC];
  • 행의 순서를 확실히 같게 하려면 행의 정렬키를 unique하게 정해야 함
    • 정렬키가 같은 값의 행이 복수 개 존재한다면 그 행들의 순서는 일정하지 않기 때문
  • 기본값 : ASC(오름차순)

 

집약함수

기본적으로 NULL을 제외하고 집계

COUNT 함수만은 'COUNT(*)'로 표기(NULL을 포함한 전체 행 집계)

 

  • COUNT 테이블 행수
  • SUM 테이블 수치 데이터 합계
  • AVG 테이블 수치 데이터 평균
  • MAX 테이블 임의열 데이터 중 최대값
  • MIN 테이블 임의열 데이터 최소값
  • (MySQL only) GROUP_CONCAT 문자열 결합, 콤마로 구분
# GROUP_CONCAT과 DISTINCT로 중복 회피
# 중복이 없어지고 행정구역이 1회만 조회
mysql> SELECT GROUP_CONCAT(DISTINCT district) FROM CITY WHERE COUNTRYCODE='KOR';

 

GROUP BY

데이터를 몇 개의 그룹으로 나눠서 집약하는 것

SELECT ~ FROM 테이블명 GROUP BY 컬럼명1 [, 컬럼명2, ...];
  • GROUP BY로 지정한 열 : 집약 키, 그룹화 키
  • 복수 열을 콤마로 구분해 지정

 

HAVING

그룹마다 집약한 값을 조건으로 선택하는 것

SELECT ~ FROM GROUP BY ~ HAVING 그룹의 값에 대한 조건;

 

작성 순서

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY

 

실행 순서

  1. FROM
  2. ON, WHERE
  3. JOIN, GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. LIMIT (MySQL) / ROWNUM (Oracle)

UPDATE, INSERT, DELETE 문

UPDATE

UPDATE 테이블명 SET 컬럼명1=값1[,컬럼명2=값2,...] WHERE 조건;
  • 갱신하는 열에 디폴트 값이 있는 경우 : 값 대신 'DEFAULT'  키워드를 지정하면 기본값으로 갱신됨

 

INSERT

  • INSERT는 행 단위로 수행되므로 테이블 정의를 정확히 확인 후 실행되어야 함
    • \G는 ; 대신에 사용할 수 있는 딜리미터로 결과를 세로로 보기 쉽게 함
SHOW CREATE TABLE 테이블명\G
# 테이블 정의 자체가 아닌 단순히 열 정보 조회용 (Oracle 호환)
DESC 테이블명;

 

  • INSERT문
# 기본
INSERT INTO 테이블명(컬럼1[,컬럼2,...]) VALUES (값1[,값2,...]);
# Multi row insert (MySQL)
INSERT INTO city (name, code, district) VALUES ('Gimpo', 'KOR', 'Kyonggi'), 
('Seongnam', 'KOR', 'Kyonggi'), ('Hwaseong', 'KOR', 'Kyonggi');
# 자주 사용되는 구문
INSERT INTO 테이블1 SELECT FROM 테이블2; # SELECT문의 결과 값을 레코드로 입력

 

DELETE

DELETE FROM 테이블명 WHERE 조건;

VIEW

가상의 테이블, 접근이 허용된 데이터만 보여줄 수 있음(테이블과 동일하지만 테이블과 같은 데이터는 가지고 있지 않음)

 

VIEW 언제 쓸까? VIEW의 이점

설계를 변경할 수 없을 때 뷰로 데이터를 간소화하자!

  1. 편리성 : 복잡한 SELECT 문을 일일이 매번 기술할 필요가 없다. 데이터 저장 없이(기억장치의 용량을 사용하지 않고) 실현할 수 있다.
  2. 보안성 : 필요한 열과 행만 사용자에게 보여줄 수 있다. 민감한 컬럼은 마스킹하기
  3. 독립성 : 기존 테이블 구조가 변경되면 뷰도 함께 변경, 갱신 시에도 뷰 정의에 따른 갱신으로 한정할 수 있다. 뷰를 제거(DROP VIEW)해도 참조하는 테이블은 영향을 받지 않는다.

 

VIEW 작성

CREATE VIEW 뷰이름(열명1[, 열명2, ...]) AS SELECT문;

 

VIEW 입력, 갱신 제한

  • 갱신 불가
    • 어떤 행이 대응하는지 모르거나 어떤 값을 넣으면 좋을지 모르는 경우
  • 삽입 불가
    • 2가지 이상 테이블을 조합해 작성한 뷰를 갱신할 때 어느 테이블을 갱신하면 좋을지 알 수 없는 경우
    • 선택된 열 이외의 열에 기본값도 없고 NULL도 허용되지 않는 상황 (해당 열에 넣을 수 있는 값이 없는 경우)

SUBQUERY

하나의 SQL 문에 포함되어 있는 또 다른 SQL 문

 

주의사항

  1. 괄호로 감싸서 사용할 것
  2. ORDER BY를 사용하지 못한다
  3. 단일 행 또는 복수 행 비교 연산자와 함께 사용할 수 있다
SELECT		-- 스칼라 서브쿼리
FROM		-- 인라인 뷰
WHERE		-- 중첩 서브쿼리 등
HAVING		-- 중첩 서브쿼리 등
ORDER BY	-- 스칼라 서브쿼리


-- 테이블2의 정보를 뽑아서 그 데이터를 테이블1에 넣어준다.
-- value()들어갈 자리를 서브쿼리로 대체 했다.
INSERT INTO table1 (SELECT * FROM table2);


-- 인턴의 정보를 구해와서 삭제한다. 
DELETE FROM employee 
WHERE id = (SELECT id FROM employee where office_worker = '인턴' );


-- 인턴에 정보를 구해와서 급여를 10만원 인상한다.
UPDATE employee SET salary=(salary+100000)
WHERE id = (SELECT id FROM employee where office_worker = '인턴' );
  • 스칼라 서브쿼리 : 한 행만 반환
  • 인라인 뷰 : SQL문이 실행될 때만 생성되는 뷰이기 때문에 DB에 저장되지 않음 (동적, 임시적)
  • 단일 행 서브쿼리 : =, <, <=, >, >=, <> 연산자로 얻은 서브쿼리 결과 1개 이하 행을 반환
  • 복수 행(중첩) 서브쿼리 : IN, ANY, ALL, EXISTS 등의 연산자로 얻은 서브쿼리 결과 여러개 행을 반환

JOIN

2개 이상의 테이블을 결합하여 쿼리를 실행하는 것

ON 을 이용해서 결합조건을 지정해주어야 함

 

INNER JOIN

ON 으로 지정한 결합 조건에 일치하는 행만을 2개의 테이블로부터 가져오는 것

SELECT 선택할 열 목록 FROM 테이블1 INNER JOIN 테이블2 ON 결합조건;

 

OUTER JOIN

한 쪽 테이블을 기준으로 전체 행을 표시하고 다른 테이블은 조건에 맞는 행이 있으면 표시하는 것

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

  • 특별한 이유(쿼리 자동 생성으로 테이블1, 테이블2의 쿼리에서 순서를 변경할 수 없는 경우 등)가 아니면 LEFT OUTER JOIN 사용
SELECT 선택할 열 목록 FROM 테이블1 LEFT OUTER JOIN 테이블2 ON 결합조건;
SELECT 선택할 열 목록 FROM 테이블1 RIGHT OUTER JOIN 테이블2 ON 결합조건;

체크포인트 (SQL 코딩의 기술 참조)

데이터 필터링과 검색

  • LIKE 제대로 쓰기
    • LIKE '%keyword%'처럼 전후방 모두 와일드카드를 사용하면 인덱스를 사용할 수 없다.
    • LIKE는 최대한 자세하게
  • 일치하거나 누락된 레코드를 찾아낼 때
    • 이론적으로는 EXISTS가 NOT IN보다 빠름
    • 또는 LEFT JOIN을 사용하고 WHERE에서 NULL값을 찾는 Frustrated JOIN 사용하기

 

GROUP BY

  1. GROUP BY 절의 작동 원리를 이해하자
    • 집계 함수를 하나도 사용하지 않을 때 GROUP BY 절은 SELECT DISTINCT와 동일하게 수행된다
    • 집계 수행 전 WHERE 절이 적용된다
    • GROUP BY 절은 필터링된 데이터 집합을 집계한다
    • HAVING 절은 집계된 데이터를 다시 필터링한다
    • ORDER BY 절은 변형된 데이터 집합을 정렬한다
    • SELECT 절에서 집계 함수나 집계 계산에 포함되지 않은 컬럼은 GROUP BY 절에 명시해야 한다
  1. GROUP BY 절은 간단하게 만들자
    • HAVING 절의 진정한 힘은 한 그룹의 집계 결과를 다른 집계 값과 비교하는 능력에 있다.
    • 별칭으로 SELECT 절에서 계산을 수행하거나, HAVING 절에 사용할 수 없다. 해당 표현식을 그대로 재사용해야 한다. (?)
  2. 복잡한 문제를 해결하려면 GROUP BY나 HAVING 절을 사용하자
SELECT SUM(col) AS total
GROUP BY ...
HAVING SUM(col) ...;
  1. GROUP BY 절 없이 최댓값, 최솟값을 찾자

 

서브쿼리

  1. 서브쿼리를 어디에 사용할 수 있는지 알아두자
    • 일반적으로 테이블 이름을 쓸 수 있는 곳이라면 어디에나 서브 쿼리를 이용할 수 있다. 
    • 테이블 서브쿼리: FROM, JOIN 등에 사용
    • 단일 컬럼 서브쿼리: IN, NOT IN 조건에 사용
    • 스칼라 서브쿼리
  1. 연관성 있는 서브쿼리와 연관성 없는 서브쿼리의 차이점을 파악하자
  2. 서브쿼리 대신 조인을 사용해 더 효율적인 쿼리를 작성하자
SELECT NAME
FROM BEERSTYLE
WHERE CountryFK IN (
    SELECT CountryID
    FROM Countries
    WHERE CountryNm = "Belgium"
);

SELECT S.NAME
FROM STYLE AS S
INNER JOIN Countries AS c
    ON S.CountryFK = C.CountryID
WHERE C.CountryNm = "Belgium";

 

조인

  1. LEFT JOIN의 오른쪽 데이터를 올바르게 걸러내자
  1. OUTER JOIN에서는 잘못된 결과를 내는 COUNT(*) 함수를 사용하지 말자 
    • '*'를 사용해 COUNT를 하면 row 자체를 카운트한다. 즉 모든 컬럼의 값이 NULL로 채워져 있어도 카운트가 이루어진다. 반면에 컬럼명을 사용해 COUNT를 하면 해당 컬럼의 값이 NULL이면 카운트하지 않는다. 
    • NULL 값이 있는 로우를 포함해 모든 로우의 개수를 세기 : COUNT(*)
    • 컬럼 값이 NULL이 아닌 로우의 개수만 세기 : COUNT(컬럼명)
  • EXPLAIN, STRAIGHT JOIN(왼쪽 테이블부터 읽는 조인), SEMI JOIN(메인 쿼리 테이블과 서브쿼리 결과를 조인)
  • 조인되어야 할 각 집합의 처리범위와 순서에 따라 영향을 받는다.
    • 가장 좁은 범위를 먼저 처리할수록 조인 효율은 증가

 

 

 

 

 

 

 

참고

https://mozi.tistory.com/233

https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EC%A0%95%EB%A6%AC

5장. DBMS를 조작할 때 필요한 기본 지식

조작하기 전에 알아두어야 할 것

 

⬇️ MySQL 설치방법 ⬇️

2023.01.18 - [인프라/NHN Cloud] - NHN Cloud 인스턴스에 MySQL 설치하기 (1) - 압축파일 이용

2023.01.18 - [인프라/NHN Cloud] - NHN Cloud 인스턴스에 MySQL 설치하기 (2) - Yum 이용

2023.01.18 - [인프라/NHN Cloud] - NHN Cloud 인스턴스에 MySQL 설치하기 (3) - 설정

 

MySQL과 커넥션 만들기

로그인

로그인 성공 화면

로그인 성공: MySQL이라는 DBMS에 사용자가 로그인해서 조작할 수 있게 된 상태

mysql> : 프롬프트, 사용자 명령을 입력 받을 수 있는 상태

 

커넥션

로그인해서 프롬프트가 표시되었다는 것

→ 로그인 전과 로그인 후로 사용자와 MySQL의 관계가 변했다

→ 사용자와 MySQL이 접속되었다 (=연결되었다)

→ 커넥션 (Connection)

  • 커넥션이 유지된다 = 데이터베이스와 무언가 주고 받을 수 있다
  • 커넥션이 성립되었음을 표시하는 문장

  • connection id : MySQL이 커넥션에 붙인 번호
  • MySQL은 동시에 여러 개의 커넥션을 유지하는 것이 가능
  • 커넥션 번호로 사용자를 구분
  • 커넥션의 상태를 조사하는 명령
mysql> show status like 'Thread_connected';
  • Thread_connected : 커넥션(사용자)의 수

 

세션

커넥션 시작과 종료까지의 단위

생성 시점 : 커넥션이 확립된 뒤

커넥션과 세션은 1:1로 대응되고, 생성과 소멸 시점이 같기 때문에 잘 구분하지 않음

 

로그오프

  • 커넥션 종료
mysql> quit
Bye

 

SQL과 관리 명령의 차이

관리 명령

  • DBMS는 SQL문 이외에도 '관리 명령'이 있다
  • DBMS가 정상적으로 동작하는지 감시하거나 DBMS가 이상한 동작을 할 때 문제 해결을 위해 정보수집을 하는 등의 용도
  • 관리 명령의 종류나 문법을 DBMS에 따라 다르다 → DBMS 매뉴얼에 기재되어 있고, 레퍼런스도 있음
    • SQL문은 반드시 'SELECT, INSERT, DELETE, UPDATE' 중 하나의 단어로 시작
    • 이 외의 단어로 시작하면 관리 명령
  • MySQL 관리 명령 예시
# 가동된 시점부터의 경과시간(초)
mysql> show status like 'Uptime';

# 실행한 SQL 문의 수
mysql> show status like 'Queries';

 

관계형 데이터베이스의 계층

인스턴스

  • 물리적 개념, DBMS가 동작할 때의 단위
  • OS 입장에서는 프로세스 / DBMS 입장에서는 서버 프로세스 또는 서버로 부름
  • 인스턴스 아래에 복수 개의 데이터베이스 존재할 수 있음

 

데이터베이스

  • 데이터베이스를 관리하는 기능의 집합체 + 계층을 표시하는 의미
  • 데이터베이스 아래에는 복수의 스키마 존재

 

스키마

  • 폴더, 틀
  • 1개의 스키마 아래에 복수 개의 테이블 존재
  • 스키마 별로 용도별로 나누거나 권한 관리 수행 가능

 

오브젝트

  • 최하위 계층
  • 구성 : 테이블, 인덱스, 저장 프로시저(다양한 함수나 처리를 일괄로 다룸) 등

 

DBMS별 계층 구조

  • 3계층 : Oracle, MySQL
    • 데이터베이스와 스키마를 동일한 것으로 간주
    • Oracle은 4계층으로 되어 있지만, 인스턴스 아래에 한 개의 데이터베이스만 만들 수 있기 때문에 실질적으로 3계층
  • 4계층 : SQL Server, DB2, PostgreSQL
    • ANSI 표준 SQL
  • 구현 사양은 개발사의 의향에 따라 달라짐

+ Recent posts