Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

PostgreSQL / PPAS 데이터베이스 구조 본문

PostgreSQL/아키텍처 및 내부 구조

PostgreSQL / PPAS 데이터베이스 구조

`O` 2021. 6. 11. 03:10
728x90
반응형

해당 페이지에서는 PostgreSQL / PPAS 의 데이터베이스 구조에 대해서 다룬다.

 

참조페이지

 

http://www.gurubee.net/lecture/2942 

 

https://postgresql.kr/docs/9.6/user-manag.html

 

 

 

 

유저, Tablespace, Database 구조도

 

PostgreSQL / PPAS 의 기본 구조도는 아래와 같다.

 

그림출처 : http://www.gurubee.net/lecture/2942  

 

가장 최상위 단위는 클러스라 불린다. 그림과 같이 유저 및 그 유저들을 포함하는 그룹을 포괄한다.

 

-- User / Group

 

말그대로 DB 를 사용하는 사용자들을 말하는 것이다. 뒤에 Group 은 유저들을 설정된 권한 묶음으로 포함 시킬때 사용하는 단어다. 여기서 PostgreSQL 에는 타 DB 와 다르게 특이한 점이 있는데 구조도에는 user, group 이 분리 되어있고 ORACLE 에서 사용하는 Role 이 안보이는데 실제로 유저 생성, 그룹 생성, 권한 부여등은 전부다 role 기반으로 되어 있다. 즉, role 이 user, group 를 모두 포괄하는 개념이라 각 상황에 맞춰서 분류하여 쓸 수 있다. (PostgreSQL 8.1 이후부터 통합)

 

실무로 예를 들자면, 유저 그룹을 만들때는 role 로 한개의 사용자를 만들고, 여기에 접속권한을 회수하고 dml 이나 특정 명령어만 사용하게 권한을 넣는다. 그후 다른 role 을 만들어 앞의 role 에 종속되게 만들면 user 가 group 에 종속되게 하는 것 처럼 권한 구조를 만드는 것이다.

 

명령어는 \du 혹은 \du+ 를 사용한다.

 

 

user 생성 및 group 부여는 아래와 같은 예시를 따른다.

 

 

-- Database

 

테이블등의 오브젝트들을 포괄하는 상위 오브젝트 집합 구조다. 마찬가지로 타 DB 와 다른 점이 하나가 있는데 바로 Database 가 Schema 와 엄격히 구분되어 있다. 이는 User 가 곧 Schema 인 ORACLE 과 Schema 를 Database 와 동일시하는 MySQL 과 확연히 차별화 되어 있다. 그렇기에 PostgreSQL 를 사용하기 위해서는 사용할 DB -> Schema 순서로 접속해서 그 Schema  안에 있는 DB 구성을 사용 해야 한다는 것이다.

 

또한 이에 따라 매우 중요하게 생각해야 하는 것이 있는데 실무적으로 위의 Role 과 결합하여 권한을 부여 할 때, 각 사용자 및 그룹이 사용할 대상을 반드시 DB -> Schema -> Table 등의 구성 요소 순서로 부여 해 줘야한다.

실제로 실무에서 이를 명확히 인지 못해서 Schema 만 사용권한을 줬는데 DB 를 주지 않아서 결국엔 Schema 에 있는 테이블 조회를 하지 못한다는 등의 이슈를 겪을 수 있다. 또한 단순 사용자 이외에도, 데이터 추출 및 배치작업등을 설정 할 때도 사용할 테이블들의 소속을 명확히 주지 않으면 100% 문제가 발생하기에 이에 대한 고려가 매우 중요하다.

 

DB 조회 명령어는 \l 혹은 \l+ 를 사용한다.

 

 

Schema 는 위의 사용 할 DB 를 \c 명령어로 접속 후, \dn 혹은 \dn+ 를 사용하여 조회한다.

 

 

-- Tablespace (테이블스페이스)

 

유저와 테이블스페이스는 데이터베이스와 분리가 되어 있으며 여기서 ORACLE 과 비슷하면서도 PostgreSQL 이 가지는 차이점이 하나가 있는데 바로 테이블스페이스가 데이터베이스 하위에 있는 오브젝트들과 독립 관계라는 것이다. ORACLE 은 종속관계로 되어 있어서 오브젝트를 생성할때, 이를 보관할 테이블스페이스를 스키마 (ORACLE 에서는 유저와 동일 개념) 테이블스페이스를 따로 만들어서 이에 보관해야하는 실무 과정을 고려해야 하는 것 과는 달리 PostgreSQL 에서는 이를 고민 할 필요가 없다. PostgreSQL 에서는 데이터 보관공간을 DB 기동시 데이터 디렉토리 전체를 지정해서 기동하고 그 디렉토리에 모든 오브젝트 데이터들을 보관하기 때문이다. (정확히는 데이터 디렉토리에 base 디렉토리를 만들고, 거기에 각 오브젝트마다 고유 ID 를 부여하여 보관한다.)

 

그래서 아에 쓸모가 없는 걸로 생각 할 수도 있으나 ORACLE 과 유사하게 운영중인 데이터 보관 영역이외에 다른 디렉토리영역에 사용자가 데이터 보관을 원한다거나 기타 디스크 이슈등의 내부적인 이유로 다른 디렉토리에 데이터를 보관해야 할 필요도 있을 것이다. 이 때, 테이블스페이스를 만들어서 사용하면 데이터 디렉토리 이외에 영역도 DB 의 일부로 활용 할 수가 있다. 

 

아래와 같이 명령어는 \db 혹은 \db+ 로 사용하여 기본 설치를 하면 두개의 테이블스페이스가 있다.

 

 

 

 

반응형
Comments