Taking baby-developer steps

DB와 스토리지 - 외부 스토리지와 DB 소프트웨어를 연결하는 방법 본문

CS 지식/서버 구축

DB와 스토리지 - 외부 스토리지와 DB 소프트웨어를 연결하는 방법

Surin Lee 2023. 11. 24. 00:33

데이터베이스(DB)

 구조화된 데이터를 저장하고 관리하는 시스템.

논리적인 데이터 구조 및 데이저 조작을 담당한다. 효율적인 데이터 조작을 위한 쿼리 언어(SQL 등)를 지원하며, 데이터의 무결성을 유지하고 보안을 제공하는 등의 기능을 수행한다.

ex> MySQL, PostgreSQL, Oracle 등

저장소(스토리지)

 데이터의 물리적인 저장 공간.

데이터베이스에서 사용되는 실제 데이터 파일, 로그 파일 등을 저장하는 데 사용된다. 데이터베이스는 저장소를 효과적으로 활용해 데이터를 읽고 쓰고 관리한다.

ex> 하드 디스크 드라이브(HDD), SSD, 클라우드 스토리지 등

 

 현업에서는 데이터베이스 서버의 스토리지를 따로 두는 경우가 흔하다는 말을 들었다. 순간 DB와 스토리지의 차이를 내가 명확하게 알고 있지 않음을 깨달았다.

 웹 서비스 개발 환경을 구축 할때, 도커를 활용해 웹서버, WAS서버, DB를 각 컨테이너로 분리하는 3tier 구조를 버릇처럼 따르곤 했었다. 그러나 DB 소프트웨어를 통해 실제 데이터가 "어디에 저장되는지"에 크게 신경을 쓰지 않았고, 필요에 따라 로컬 스토리지와 컨테이너의 볼륨을 바인드 마운트해 쓰곤했다.

 데이터 베이스 서버의 스토리지를 따로 둠으로서 성능 최적화, 관리 용이성, 백업 및 회복 계획등에 이점이 있다고 한다.

다음 내용들은 직접 경험한 바는 아니다. 검색 및 생성형 AI를 통해 DB 소프트웨어와 스토리지에 대해 궁금한 부분들을 알아보고 정리한 내용이다.

DB 소프트웨어에서 스토리지를 지정하는 방법 

데이터베이스 시스템에 따라 다르다.

테이블 스페이스(Tablespace) 설정

 테이블 스페이스를 사용해 데이터 파일을 지정할 수 있다. 다음은 오라클 및 PostgreSQL에서 테이블 스페이스를 생성한 예시이다.

*테이블 스페이스란? -> 물리적 데이터 파일을 관리하는 논리적 개념

#오라클
CREATE TABLESPACE my_tablespace
DATAFILE '/path/to/datafile/my_tablespace01.dbf' SIZE 100M;

#PostgreSQL
CREATE TABLESPACE my_tablespace
LOCATION '/path/to/my_tablespace';

파일 그룹(Filegroup) 설정

 Microsoft SQL Server에서는 파일 그룹을 사용하여 데이터 파일을 지정한다. 파일 그룹을 만들고 해당 그룹에 데이터 파일을 추가한다.

ALTER DATABASE [DatabaseName]
ADD FILEGROUP my_filegroup;

ALTER DATABASE [DatabaseName]
ADD FILE
(NAME = my_file,
FILENAME = '/path/to/datafile/my_file.ndf',
SIZE = 100MB);

데이터 디렉토리 설정

 MySQL, MariaDB에서는 데이터테이블 생성시 데이터베이스의 데렉토리를 설정해 데이터 파일의 위치를 지정한다.

CREATE DATABASE my_database
DATA DIRECTORY '/path/to/datafile/';

기타 설정

 다양한 다른 설정 옵션들을 통해 지정 가능하다. 시스템의 고급 구성이나 설정 파일을 통해 지정한다.

 

 

 위에서 알아본 내용의 예시를 살펴보면, 같은 로컬내의 디렉토리에 경로를 지정한것을 알 수 있다. 그러나, 엔터프라이즈 애플리케이션을 위한 서버에서는 DB 서버와 스토리지가 물리적으로 다른 서버 내에 존재할 일이 더 많을 것이다. 

스토리지가 로컬이 아닌 다른 하드웨어(LAN 상의 다른 하드웨어 등)에 위치한 경우 어떻게 데이터베이스와 스토리지 간의 연결을 설정할지가 궁금해졌다. 

 

DB와 스토리지가 로컬이 아닌 각각 다른 하드웨어에 위치할때 

장점

 1. 유연성 및 확장성 : 각 서버의 역할을 독립적으로 확장 할 수 있다. 데이터 증가 또는 성능 향상 필요시 스토리지 또는 DB 서버 각각 업그레이드 가능하다.

 2. 고가용성 : 한 쪽에서 장애가 발생해도 다른 쪽이 영향을 받지 않는다.

 3. 리소스 분리 : 각각의 시스템에서 리소스를 독립적으로 할당하고 관리한다. 이로 인해 성능 조절 및 유지보수가 더욱 효율적이다.

단점

 1. 네트워크 지연과 대역폭 부하 : DB 서버와 스토리지가 같은 로컬에 있을 때와는 달리 네트워크를 통한 통신으로 이루어진다. 데이터 전송에 따른 지연과 대역폭의 부하가 발생할 수 있다.

 2. 보안, 프라이버시 고려사항 : 민감한 데이터를 다룰 경우 물리적으로 분리된 서버 간 통신에서 보안 설정에 주의해야한다.

 3. 유지보수 어려움 : 물리적으로 같은 위치에 있을 때보다 유지보수 작업이 복잡하다. 특히 두 시스템 간의 동기화 및 일관성 유지가 중요하다.

 4. 비용 : 추가적 네트워크 인프라 및 보안 조치가 필요해 초기 비용이 증가한다.

 

다른 물리서버에 위치하는 DB와 스토리지를 연결하는 방법

 네트워크 파일 시스템(Network File System, NFS)나 스토리지 에이리어 네트워크(Storage Area Network, SAN)와 같은 기술을 활용해 데이터에 접근한다.

NFS를 이용한 설정 방법

 다른 서버의 파일 시스템에 네트워크를 통해 접근하는 방법이다.

장점 : 간편한 설정(비교적 쉽게 다른 하드웨어의 스토리지를 마운트 할 수 있다),  비용 효율적(비교적 저렴하게 구현 가능)

단점 : 성능 한계 (네트워크 지연, 대역폭 등에 의해 성능이 제한 될 수 있다.), SPOF(NFS 서버가 다운되면 해당 스토리지에 접근이 불가할 수 있다.)

1. 다른 하드웨어에 위치한 스토리지를 NFS 서버로 설정한다.

2. 데이터베이스 서버에서 해당 스토리지를 NFS 클라이언트로 마운트 한다.

mount -t nfs [NFS 서버 주소]:/원격/스토리지/경로 /로컬/마운트/포인트

 

3. 데이터베이스 설정에서 데이터 파일이나 테이블 스페이스의 위치를 마운트한 로컬 경로로 지정한다.

#SQL 
## 마운트한 경로로 설정
CREATE DATABASE my_database
DATA DIRECTORY '/로컬/또는/네트워크/마운트/포인트/';

## 혹은 네트워크 경로로 데이터 베이스 설정
CREATE DATABASE my_database
DATA DIRECTORY 'nfs://[NFS 서버 주소]/원격/스토리지/경로/';
###NFS 서버 주소는 IP 주소나 호스트 이름으로 나타낸다.

SAN을 이용한 설정 방법

 전용 네트워크를 통해 여러 서버가 공유하는 중앙 스토리지를 제공하는 방법이다.

장점 : 높은 성능 (대용량 및 높은 I/O 요청을 처리 할 수 있다), 고가용성(고가용성 및 백업 솔루션을 제공할 수 있다)

단점 : 고비용(SAN 구현 및 요지보수 비용이 높을 수 있다), 복잡한 구현(SAN 설정 및 관리는 복잡하다)

1. SAN 시스템에서 공유 스토리지를 설정한다.

2. 데이터베이스 서버에 SAN에 대한 클라이언트 소프트웨어나 드라이버를 설치한다.

3. 데이터베이스 설정에서 데이터 파일 혹은 테이블 스페이스의 위치를 SAN으로 설정한다.

상황별 비교 :

1.  높은 성능이 필요한 경우 -> SAN이나 로컬 스토리지를 고려

2. 가용성과 복구 -> 고가용성이 필요한 경우 SAN을 고려

3. 비용이 중요한 경우 -> NFS나 로컬 스토리지 고려

4. 복잡성 및 유지보수 -> 구현 및 유지 보수에 필요한 리소스 및 기술적 복장성을 고려. 설정이 비교적 쉬운 방법은 NFS.

Comments