기존 PostgreSQL에서 ServBay로 데이터 가져오기
ServBay는 개발자를 위해 설계된 강력한 로컬 웹 개발 환경으로, 다양한 언어 환경과 웹 서버, 데이터베이스 시스템을 통합 제공하며 PostgreSQL도 기본 포함되어 있습니다. 만약 ServBay 외부에서 운영 중인 PostgreSQL 데이터베이스가 있고, 그 데이터를 ServBay에 내장된 PostgreSQL 인스턴스로 이전하고 싶다면, 이 안내서를 따라 쉽게 마이그레이션할 수 있습니다.
이 문서는 표준 PostgreSQL 도구인 pg_dump
와 pg_restore
를 사용하여 ServBay PostgreSQL의 socket 파일 경로를 지정함으로써 데이터 이전 과정의 상세 절차를 다룹니다. 관련 호환성 문제와 해결법도 함께 안내합니다.
개요
기존의 PostgreSQL 데이터베이스를 ServBay로 이전하려면 일반적으로 다음과 같은 주요 절차를 따릅니다:
- 원본 PostgreSQL 데이터베이스에서 데이터를 내보내기(export)
- ServBay의 PostgreSQL에 대상 데이터베이스 생성
- 내보낸 데이터를 ServBay의 데이터베이스로 가져오기(import)
- 데이터 이전이 올바르게 되었는지 검증
각 절차를 자세하게 설명하며, ServBay만의 특이점인 소켓 파일을 통한 연결 방식도 다룹니다.
응용 시나리오
- 운영 환경 또는 테스트 환경의 PostgreSQL 데이터를 로컬 ServBay 환경으로 복제해 개발/디버깅
- 단독 PostgreSQL 설치환경에서 ServBay로 데이터 이동하여 집중 관리
- 외부 데이터베이스와 동일한 구조/데이터를 가진 ServBay 내 로컬 개발용 복제본 생성
준비 사항
데이터 가져오기를 시작하기 전에 다음 사항을 확인하세요:
- ServBay 설치 및 실행: macOS에 ServBay가 설치되어 실행 중이어야 합니다. ServBay는 기본적으로 PostgreSQL을 포함합니다.
- ServBay 내장 PostgreSQL 실행 확인: ServBay 컨트롤 패널에서 PostgreSQL 패키지가 실행 중임을 확인하세요.
- 원본 PostgreSQL 접근 가능: 운영 중인 원본 PostgreSQL 데이터베이스 인스턴스에 접근할 수 있어야 합니다.
- PostgreSQL 클라이언트 도구 설치:
pg_dump
,pg_restore
등 CLI 도구가 설치되어 있어야 합니다. 보통 PostgreSQL 서버 또는 클라이언트 패키지에 포함됩니다. - 데이터베이스 권한: 원본 PostgreSQL에서 데이터를 내보낼 권한과, ServBay 내 PostgreSQL에 데이터베이스 생성/데이터 가져올 권한(일반적으로 superuser인
postgres
사용자 권한)이 필요합니다.
1단계: 원본 PostgreSQL에서 데이터 내보내기
먼저 원본 데이터베이스의 데이터를 파일로 추출해야 합니다. pg_dump
를 권장합니다.
터미널 실행: 터미널 앱을 엽니다.
내보내기 명령 실행:
pg_dump
명령으로 원본 데이터베이스와 연결, 원하는 파일로 내용을 내보냅니다.bashpg_dump -U your_source_username -d your_source_database_name -F c -b -v -f mydatabase_source.dump
1-U your_source_username
: 원본 PostgreSQL 데이터베이스에 접속할 사용자명으로 변경-d your_source_database_name
: 내보낼 데이터베이스명으로 변경-F c
: 출력 포맷을 커스텀 아카이브 형식으로 지정.pg_restore
와 호환성 및 유연성(부분 복구 등)을 위해 권장-b
: 대용량 객체(blobs) 포함-v
: 상세 모드로 진행 상황 표시-f mydatabase_source.dump
: 내보낸 파일 이름 및 경로 지정(예시:/path/to/your/directory/mydatabase_source.dump
)
원본 데이터베이스가 기본 포트(5432)가 아니라면, 호스트(
-h
)나 포트(-p
) 옵션도 함께 지정해야 할 수 있습니다. 예:bashpg_dump -U your_source_username -d your_source_database_name -h localhost -p 5433 -F c -b -v -f mydatabase_source.dump
1실행 시 원본 DB 사용자의 비밀번호 입력을 요구할 수도 있습니다.
2단계: ServBay에서 대상 데이터베이스 준비
데이터를 가져오기 전에 ServBay 내장 PostgreSQL에 빈 데이터베이스를 생성해야 합니다.
ServBay PostgreSQL 연결: ServBay PostgreSQL은 기본적으로 socket 파일을 통한 로컬 연결을 사용하며 socket 파일은
/Applications/ServBay/tmp
에 있습니다.psql
로 연결합니다.bashpsql -U postgres -h /Applications/ServBay/tmp postgres
1-U postgres
: PostgreSQL의 기본 superuser-h /Applications/ServBay/tmp
: ServBay PostgreSQL 연결의 핵심. 해당 디렉터리의 socket 파일을 통해 연결postgres
: 기본 접속용 데이터베이스명
커맨드 실행 시
postgres
사용자의 패스워드를 입력해야 할 수 있습니다. 패스워드가 기억나지 않다면 ServBay 패널 또는 문서에서 확인하거나 재설정하세요. 정상적으로 연결되면psql
프롬프트가 나타납니다.대상 데이터베이스 생성:
psql
프롬프트에서 SQL로 데이터를 받을 새 데이터베이스를 생성합니다. 원본과 동일한 이름을 쓰면 관리가 편리합니다. 예시:mydatabase_servbay
sqlCREATE DATABASE mydatabase_servbay;
1mydatabase_servbay
를 원하는 데이터베이스명으로 바꿔주세요. 생성 후\q
로psql
종료.
3단계: 데이터를 ServBay PostgreSQL로 가져오기
이제 이전 단계에서 생성한 .dump
파일을 pg_restore
로 ServBay의 대상 DB로 가져올 차례입니다.
터미널 실행: 이전 단계에서 종료했다면 다시 엽니다.
가져오기 명령 실행:
pg_restore
로 ServBay PostgreSQL에 연결한 후 데이터 가져오기(restore)를 진행합니다.bashpg_restore -U postgres -d mydatabase_servbay -v mydatabase_source.dump -h /Applications/ServBay/tmp
1-U postgres
: ServBay PostgreSQL superuser-d mydatabase_servbay
: 2단계에서 생성한 DB명으로 변경-v
: 상세 모드로 진행 및 에러 등 표시mydatabase_source.dump
: 1단계에서 내보낸 파일 경로 및 이름으로 변경-h /Applications/ServBay/tmp
: socket 파일을 통한 연결 지정
실행 시 ServBay PostgreSQL
postgres
사용자 패스워드 입력을 요구할 수 있습니다. 데이터 크기 및 복잡성에 따라 가져오기 시간은 달라집니다.
4단계: 데이터 이전 검증
가져오기 완료 후, ServBay 대상 DB에 접속하여 데이터가 정확히 들어갔는지 꼭 확인하세요.
ServBay 대상 DB에 접속:
bashpsql -U postgres -h /Applications/ServBay/tmp mydatabase_servbay
1mydatabase_servbay
를 대상 DB명으로 교체. 패스워드 입력 후 연결됩니다.확인 쿼리 실행:
psql
프롬프트에서 SQL로 데이터 확인합니다.- 모든 테이블 목록:
\dt
- 특정 테이블에서 일부 데이터 확인:sql여기서
SELECT * FROM your_table_name LIMIT 10;
1your_table_name
을 실제 테이블명으로 바꿔 실행 - 행 수 확인:sql
SELECT COUNT(*) FROM your_table_name;
1
위 쿼리들로 테이블 구조, 데이터, 행 수 등이 기대와 일치하는지 간단 검증할 수 있습니다.
- 모든 테이블 목록:
호환성 문제 대응법
PostgreSQL 버전에 따라 대부분 호환성이 매우 좋으나, 버전 차이 또는 특수 설정 등으로 문제가 생길 수 있습니다.
- 버전 차이: 원본과 대상 DB의 PostgreSQL 버전 차이가 크면 일부 기능, 문법, 시스템 카탈로그가 달라질 수 있습니다.
- 해결법: PostgreSQL 공식 문서에서 두 버전 간 변화사항 확인. 필요시 내보낸 SQL이나, 가져오기에 사용될 마이그레이션 스크립트 수정 필요
- 확장/모듈 호환 또는 미설치: 원본에서 쓰던 확장(예:
uuid-ossp
,pgcrypto
) 혹은 사용자 함수가 ServBay PostgreSQL에 없거나 호환되지 않을 수 있습니다.- 해결법: 데이터 가져오기에 앞서 혹은 후에, ServBay DB에 직접 확장을 설치합니다. 예:sql확장 버전이 맞지 않는 경우 대체 솔루션을 찾거나 ServBay PostgreSQL을 최신으로 업데이트 필요(ServBay에서 지원하는 경우)
CREATE EXTENSION IF NOT EXISTS your_extension_name;
1
- 해결법: 데이터 가져오기에 앞서 혹은 후에, ServBay DB에 직접 확장을 설치합니다. 예:
- 사용자 및 권한:
pg_dump
는 기본적으로 사용자, 롤(role), 권한 정보까지 내보내지만, ServBay 환경에서 해당 객체는 직접 생성/조정이 필요할 수 있습니다(특히 원본 사용자와 ServBay의 기본 사용자가 다를 때).- 해결법: 데이터 가져온 후, ServBay PostgreSQL에 직접 사용자/롤 생성 및 권한 부여sql또한,
CREATE USER your_source_username WITH PASSWORD 'your_password'; GRANT ALL PRIVILEGES ON DATABASE mydatabase_servbay TO your_source_username; -- 필요에 따라 세부 권한 추가 부여
1
2
3pg_dump
시--no-owner
와--no-acl
옵션으로 소유자/권한 정보를 제외하고 가져온 뒤, 가져오기 후 직접 설정하는 방법도 있습니다.
- 해결법: 데이터 가져온 후, ServBay PostgreSQL에 직접 사용자/롤 생성 및 권한 부여
- 문자 인코딩 또는 로케일(locale) 문제: 원본과 대상 DB의 문자 인코딩이나 로케일 설정 불일치 시 데이터가 깨지거나 오류가 발생할 수 있습니다.
- 해결법: ServBay 대상 DB 생성 시 원본과 동일 인코딩 및 로케일 옵션을 명시. 예:sql원본 DB 설정에 맞게 값 수정하세요.
CREATE DATABASE mydatabase_servbay ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
1
- 해결법: ServBay 대상 DB 생성 시 원본과 동일 인코딩 및 로케일 옵션을 명시. 예:
문제가 생길 경우, 반드시 -v
옵션으로 pg_restore
의 상세 로그를 참고하면 원인 확인에 도움됩니다.
유의 사항
- ServBay socket 경로: ServBay PostgreSQL은 socket 파일(
/Applications/ServBay/tmp
)을 통해 연결합니다. 모든 커맨드(psql
,pg_dump
,pg_restore
)에서 반드시-h /Applications/ServBay/tmp
로 경로를 지정해야 합니다. - 권한: 명령 실행 사용자가 내보내는 파일을 읽고 쓰는 권한, 그리고 PostgreSQL 접속자인
postgres
가 DB 생성/데이터 가져오기 권한을 충분히 가져야 합니다. - 파일 크기: 대용량 DB의 경우 내보내기/가져오기 시간이 오래 걸리고 디스크 공간도 많이 소모됩니다. 시스템 자원을 충분히 확보하세요.
- 비밀번호 관리: ServBay PostgreSQL에 연결할 때 필요한
postgres
사용자의 비밀번호는 안전하게 관리해야 합니다.
자주 묻는 질문 (FAQ)
Q1: ServBay PostgreSQL의 postgres
사용자 비밀번호를 잊으면 어떻게 하나요?
A1: ServBay 컨트롤 패널 또는 ServBay 공식 문서를 참고하여 PostgreSQL의 root(postgres
) 사용자 비밀번호를 확인하거나 재설정할 수 있습니다.
Q2: 왜 localhost
나 127.0.0.1
로 ServBay PostgreSQL에 연결할 수 없나요?
A2: ServBay PostgreSQL은 기본적으로 소켓 파일만으로 로컬 연결을 허용해 보안성을 높입니다. TCP/IP 연결이 필요하다면 ServBay PostgreSQL 설정 파일을 직접 수정해야 하며(로컬 개발에서는 비추천), 표준적으로는 -h /Applications/ServBay/tmp
로 연결해야 합니다.
Q3: 가져오기 중 오류가 발생하면 어떻게 확인합니까?
A3: 반드시 pg_restore
명령에 -v
옵션을 넣어 상세 출력을 확인하세요. 오류 메시지가 구체적 원인을 제시하며, 이 안내서의 "호환성 문제 대응법" 챕터를 참고해 해결하세요.
Q4: ServBay의 그래픽 데이터베이스 툴(pgAdmin 등)로도 가져오기가 가능한가요?
A4: 가능합니다. pgAdmin 같은 GUI 데이터베이스 관리 툴 사용 시, 연결 설정에서 Host/socket 경로에 /Applications/ServBay/tmp
를 지정합니다(호스트명/IP 입력이 아님). 툴의 import/restore 기능으로 .dump
파일을 가져올 수 있습니다.
요약
기존 PostgreSQL 데이터베이스를 ServBay에 내장된 PostgreSQL로 가져가는 작업은 매우 흔하며, 표준 도구인 pg_dump
, pg_restore
와 ServBay의 socket 경로(-h /Applications/ServBay/tmp
) 지정만 올바르게 활용하면 손쉽게 데이터 마이그레이션을 완료할 수 있습니다. 본 안내서의 절차대로 따라가면서 호환성 이슈에도 유의하면, 외부 DB와 동일한 환경을 ServBay의 로컬 개발 환경에서 간편하게 구축할 수 있습니다. ServBay는 개발자가 효율적으로 데이터베이스를 관리하고 이전할 수 있는 통합 환경을 제공합니다.