[이전 포스트] EC2 에서 RDS 에 접속하기
포스트 목적
저번 시간 까지 EC2 에서 RDS 에 접속하는 과정까지 정리해 보았습니다. 이번 포스트는 Window 10 환경인 저의 로컬 컴퓨터에 있는 postgres 의 데이터베이스를 백업(pg_dump)하여 RDS 에 올리는 과정 까지 정리해볼 것입니다. 참고로 postgres 가 설치되어 있다는 것을 가정하에 진행함으로 해당 포스트를 참고하시는 분들은 사전에 준비하고 따라와 주시면 좋을 것 같습니다.
[참고] pgadmin 을 사용하고 있다면, 해당 도구를 사용해서 백업하는게 가장 빠르고 효율적입니다. 또한 WSL 의 우분투를 사용하지 않아도 WIndow 로컬에서도 동일한 pg_dump 를 psql 명령어를 사용하여 적용할 수 있습니다. 현재 포스트는 개인적인 공부를 목적으로 지름길을 두고 괜히 어려운 길로 돌아가는 그런 느낌 입니다. |
WSL 설치
pgadmin 을 사용해서 데이터베이스를 GUI 기반으로 백업하거나 psql 에서 덤프를 통해 시도할 수도 있겠지만, 이번에는 처음 접하는 방법으로 백업을 해보고자 한다.
보통 리눅스 커맨드 환경에서는 우분투나 아마존 리눅스 같은 운영체제를 사용하기 때문에 각각의 환경에 따라서 기본이 되는 CLI 도 달라진다. 본인의 경우에는 윈도우에서 리눅스 환경을 사용할 수 있게 도와주는 WSL 을 설치하고, 기본으로 깔려있는 우분투를 최신버전으로 업데이트 한 뒤 데이터베이스 백업을 진행할 예정이다.
자세한 wsl 가상머신 셋팅은 해당 블로그에서 (https://learn.microsoft.com/ko-kr/windows/wsl/install) 를 타고 들어가면 볼 수 있는데, 현 포스트 보다 간략하게 핵심만 보고자 한다면 해당 글을 참고하면 좋을 듯 하다.
설치 후에는 기본적으로 WSL2 버전으로 우분투의 경우 22 버전대가 설치된다고 한다(2024년 3월 18일 기준). 그러나 해당 버전에서의 postgresql 의 버전은 14버전대가 최대이기 때문에, 현재 로컬에 설치된 postgresql의 버전인 15 과 불일치 하므로, 백업이 불가능하다. 따라서 우분투의 버전을 23 버전대 이상으로 맞출 필요가 있다.
즉, wsl 에서 바로 설치할 수 있는 리눅스 운영체제(가상머신)은 22.04 LTS 가 최대 이므로, 별도로 배포판을 가져와서(import) 원격으로 설치하는 방식으로 진행할 것이다.
wsl 의 리눅스 운영체제(with 우분투) 최신 버전 설치
사용자 등록
wsl 설치 직후의 기본 우분투 버전을 사용한다고 가정하고 wsl 을 키게 되면, 해당 운영체제로 접속하기 위해 최초 사용자 등록 및 비밀번호 등록을 안내 하는 메시지가 뜬다. 이 때, 그냥 지시대로 순서대로 입력하여 등록하면 된다.
이 부분은 들어가면 바로 알 수 있는 부분이라 별도의 설명 없이 넘어갈 것이다(현재 목적은 사용자 등록이 아니라 최신버전의 우분투를 설치해서 postgres 15 버전대를 설치하는 것).
최신 우분투 버전 설치
psql cli 사용할 수 있도록 하기 위해서 postgresql 의 클라이언트를 설치해야 하는데,
문제는 현재 버전의 우분투(22버전 대 기준) 로 설치하는 경우 postgresql 의 버전은 14버전대가 최대일 것이다.
즉, 우분투의 버전을 23 버전대로 높일 필요가 있다.
해당 과정은 이 블로그(https://www.lainyzine.com/ko/article/how-to-use-latest-ubuntu-on-wsl/) 를 보고 따라하는 것을 추천한다. |
.gz 파일 다운로드 하기
본인의 경우에는 2024년 3월 18일 기준으로 2024년 1월 24일을 최신으로 하는 우분트 23.04 LTS 버전을 설치하고자 했다. 따라서 window powershell 에 다음 명령어를 입력했다. 참고로 wget 은 원격으로 네트워크에서 파일을 다운로드하는 명령어 패키지로 기본으로 깔려 있다.
-- powershell 관리자 모드
wget https://cloud-images.ubuntu.com/wsl/lunar/20240124/ubuntu-lunar-wsl-amd64-wsl.rootfs.tar.gz
위 명령어를 입력하면, 다음과 같이 웹 응답을 읽는 중... 이 뜨면서 설치가 되는 것이 나온다면 정상적으로 설치가 되고 있다는 의미이며, 설치 시간이 꽤 오래 걸린다.
기다린 후 설치가 완료되면 200 번대 응답 코드가 뜨면 다음 단계로 넘어가자
설치한 .gz 으로 부터 우분투 최신버전 압축풀기
앞서 설치한 파일은 보이지 않는 어딘가에 설치가 되어 있기 때문에 다음 명령어를 입력하면 압축풀기가 시작된다.
wsl --import [가상머신명] [가상하드디스크 경로] [.gz파일경로] --version [설치 wsl 버전] |
wsl --import ubuntu2041 "\HOME\wsl\ubuntu2401" ".\ubuntu-lunar-wsl-amd64-wsl.rootfs.tar.gz" --version 2
만일, 설치가 안 된다면, 여기서(https://cloud-images.ubuntu.com/wsl/lunar/20240124/) 직접 설치한 후 powershell 이 실행되고 있는 경로에 해당 파일을 옮긴 후 다시 시도 해보자. 버전을 다르게 하고 싶다면 wsl 경로에서 디렉토리를 살펴보면 된다.
정상적으로 설치가 시작되면 가져오기가 진행 중입니다... 문구가 뜬다 1분 이내에 보통 다운로드가 완료된다.
설치 완료후 wsl -l -v 을(혹은 wise --list --version) 입력해 보거나 리눅스 폴더에 직접 들어가보면 아래와 같이 새로 생성된 우분투(가상머신 운영체제)를 확인할 수 있다. 다만 현재 실행(* 으로 표시)되고 있는 우분트는 기본으로 설치되어 있던 과거 우분투 이므로 나중에 이를 바꿔줄 것이다.
그 다음에는 HOME/wsl/ubuntu2401 폴더로 가보면 ext4.vhdx 라는 파일이 생긴 것을 볼 수 있는데, 앞서 우리가 설치한 가상머신(운영체제) 인 ubuntu2041 의 파일들을 실질적으로 보관하고 있는 가상 하드디스크이다.
우분투 실행해보기
실제 제대로 동작하는지 확인해보자. wsl -d 가상머신폴더이름 형식으로 입력하여 실행해보면 정상적으로 버전업 된 우분투가 실행되는 것을 볼 수 있다.
wsl -d [가상머신폴더이름]
설치한 우분투를 최신 버전으로 변경하기
이번에는 설치 이전에 사용했던 우분투 에서 새로 설치한 우분투를 기본값으로 설정할 것이다. 아래 형식에 맞춰 명령어를 입력하면 바로 변경 가능하다.
wsl --set default [가상머신이름]
설치한 우분투 계정 생성하기
우분투 가상머신에 접속하고 나면, 아래 처럼 root 계정이 기본으로 설정되어 있다
root 는 관리자 계정으로 보안상 해당 계정을 사용하지 않고, 관리자 권한을 부여한 별도의 사용자 계정을 생성하여 사용하는 것이 관습적, 보안상 좋은 방식이기 때문에 새로운 사용자 계정을 생성한다.
# 사용자 생성
useradd -m -s /bin/bash 사용자명
# 비밀번호 설정: 입력시 해당 사용자에 대한 비밀번호 설정 프롬포트가 추가로 뜬다.
sudo passwd 사용자명
# 사용자를 sudo 그룹에 추가(usermod: 사용자계정 수정, -a:추가, -G:사용자그룹)
usermod -aG sudo 사용자명
생성 이후 가상머신의 home 디렉토리를 보면 추가한 유저가 보이는 것을 확인할 수 있다.
설치한 우분투 접속 및 계정 변경하기
우분투 접속
윈도우10 환경에서 wsl 을 이용해 우분투에 접속하려면 여러 방법이 있겠지만 그 중에서 powershell 을 사용해서 접속하는 방법을 공유한다(사실 이전에 wsl -d 가상머신이름 형태로 접속 했었다. 이 부분은 실행하는 다른 방식을 설명하는 것)
윈도우 powershell 에서 wsl.exe 을 입력하면, 앞서 기본값으로 설정한 가상머신으로 접속된다.
# powershell.exe
wsl.exe
그 후 cat /etc/passwd 를 입력하면 wsl 와 연관된 가상머신에 설정된 모든 사용자 계정 목록이 뜨는데, 아래로 내리다 보면 앞서 생성한 사용자 계정을 발견할 수 있다.
사용자 계정 변경
사용자 계정을 확인했다면, 이제 그 계정으로 접속한다. 그 전에 cd ~ 을 입력하면 해당 가상머신(여기서는 우분투)의 루트 디렉토리로 이동 하는데, 여기서 다음 명령어를 입력한다.
sudo su - 사용자이름
정상적으로 접속되었다면 환영한다는 메시지를 볼 수 있다.
PostgreSQL 설치하기
모든 환경설정이 끝났으므로 이제는 해당 포스트의 목적인 postgres 설치를 시작한다.
설치 가능 버전 확인
우선 현재 우분투 버전에서 설치가능한 postgresql 의 버전을 확인해본다.
apt show postgresql
현재 사용하고 있는 데이터베이스 버전대와 일치하는 것을 확인 하였다.
postgresql 설치하기
다음 명령어를 차례대로 입력해준다. apt update 는 현재 unbuntu 를 구성하는 패키지를 최신 버전으로 업데이트 하는 명령어이다. 참고로 apt 는 우분투나 데비안과 같은 데비안 계열의 리눅스 배포판에서 사용하는 표준 패키지 관리 도구를 지칭한다.
# 우분투 종속성 업데이트
sudo apt update
# psql 클라이언트 접속용 설치
sudo apt install postgresql-client postgresql-contrib
설치 완료 후 다음 명령어를 입력하면 현재 설치된 postgresql 의 버전을 확인할 수 있다.
psql --version
보통 설치 직후에 바로 실행이 자동으로 되기 때문에 다음 명령어를 통해서 실행유무를 확인할 수 있다.
# 특정 서비스의 실행 유무 파악(여기서는 postgersql)
sudo service postgresql status
# 모든 서비스의 실행유무 파악하려면
sudo service --status-all
만일 :down 으로 되어 있다면 종료되어 있다는 의미이므로 status 부분을 start로 바꿔서 실행시켜 준다.
현재 프로젝트의 postgresql 데이터베이스 접속 및 백업
이제 프로젝트의 데이터베이스에 접근해서 데이터베이스 백업을 시도할 것이다. 가상환경이기는 하지만, 서로 다른 IP 주소 를 가지고 있기 때문에, window 의 로컬 프로젝트에 접근하려면 window 에 설치된 postgresql 의 기본 설정(.conf)을 바꿔주어야 한다.
따라서 다음 단계를 따라서 기본 구성 파일을 수정한다.
C:\Program Files\PostgreSQL\<version>\data 경로의 postgresql.conf 구성 편집
해당 경로로 따라들어가면 아마 아래 처럼 파일이 나열되어 있는데 .conf 파일의 경우 연결 프로그램이 메모장이 아닐 것이다. 이 부분을 설정하려면 해당 파일에서 [마우스 우 클릭] 후 [연결 프로그램] 을 클릭하고, 그 중에서 메모장을 찾아서 설정하면 된다.
아마 기본적으로는 아래와 같이 지정되어 있을 것 같긴 하지만, 만일 제한되어 있거나 주석처리가 되어 있다면 아래와 같이 변경해주도록 하자. 이렇게 되면 모든 아이피 주소에서 5432 포트로만 접근할 수 있게 된다.
동일 경로의 pg_hba.conf 수정하기
해당 파일은 어떤 클라이언트가 현재 데이터베이스 시스템에 접근할 수 있는지 해당 사용자의 유형, 접근 가능한 데이터베이스, 접근 가능한 아이피 주소의 범위 등등을 지정한다.
해당 파일을 아래로 스크롤 하다보면, 아래와 같은 형식을 가진 테이블을 확인할 수 있는데, 그 밑에 추가로 아래 정보를 추가해준다. 이렇게 되면, 외부 호스트에서 윈도우의 postgresql 에 제한없이 접근할 수 있게 된다(보안을 생각한다면 권장되는 방식은 아니지만, 가상환경인 리눅스에서 데이터베이스를 관리할 게 아니므로, 그리고 방화벽을 뚫지 못하면 접근하지도 못한다.).
host all all 0.0.0.0/0 scram-sha-256
윈도우 postgres 재부팅하기
앞서 변경사항을 반영하기 위해서는 윈도우에서도 postgresql 를 재부팅해주어야 한다.
CMD > services.msc
재부팅 하기 위해서는 해당 서비스가 실행되고 있는지 확인할 필요가 있다. 따라서 아래 명령어를 입력하자.
# 윈도우 cmd 창에서
services.msc
postgresql x64.. 찾아서 재시작하기
명령어 실행결과, 다음 화면을 볼 수 있다. 이 중에서 posgresql 를 찾아서 [마우스 우 클릭] 을 하면 [다시시도] 항목이 있는데 이를 클릭하여 프로그램을 재시작한다.
방화벽 설정하기
위와 같이 했어도, 우분투에서 윈도우에 있는 데이터베이스에 접근할 수 없다. 이는 보안상의 문제로 일부 포트를 제외하고는 포트를 모두 차단해두었기 때문인데, 특정 포트의 경우만 해당 방화벽을 통과할 수 있도록 설정을 약간 추가해주어야 한다.
윈도우 디팬더 찾아서 들어가기
윈도우 검색창에서 windows defender 를 검색하면 방화벽 파일을 찾을 수 있다. 이를 클릭해서 들어간다.
고급 설정 - 인바운드 규칙 들어가기
그 다음에 레이아웃은 조금 씩 다르 겠지만, 고급 설정이 보이면 이를 클릭하고 들어간다.
그러면 아래와 유사한 화면이 뜰 텐데 여기서 인바운드 규칙을 클릭한다.
새규칙 추가하기
우측 상단에 보면 [새 규칙] 이 보이는데 이를 클릭한다.
규칙 유형은 포트를 선택합니다.
허용하는 포트는 postgres 의 기본 포트인 5432 를 입력.
연결 허용을 클릭.
기본 셋팅된 값으로 그대로 두고 넘어가기.
마지막에 규칙 이름과 설명을 간략하게 적어두고 마침을 클릭.
여기 까지 하면, 이제 5432 포트로 WSL 우분투에서 접근할 수 있게 된다. 다만, 이 방식은 보안상 매우 위험하기 때문에, 백업을 위해 임시적으로 사용하고 닫는게 좋다.
데이터베이스 백업하기
이제 WSL 우분투에서 윈도우의 로컬 데이터베이스에 접속함과 동시에 백업을 시도할 것이다. 아래 명령어 형식에 맞춰서 입력한다. (-h : 호스트 약자, -U : 유저 약자, -d : 데이터베이스 약자)
sudo pg_dump -h 윈도우아이피주소 -U 접속DB유저이름 -d 접속DB이름 > 백업파일이름.sql
참고로 윈도우 IP 주소는 cmd 창에서 ipconfig 를 입력하면 보이는 IPv4 를 의미한다.
입력하면 아래와 같이 password 요구가 뜨는데, 해당 비밀번호는 실제 window 로컬에서 사용중인 posgresql 의 사용자 비밀번호를 입력한다. 입력 후 별도의 안내 없이 아래 화면이 그대로 보이는데, 이는 성공적으로 처리된 것이므로 넘어가면 된다.
백업이 정상적으로 되었는지 다음과 같은 방법을 사용해서 확인할 수 있다.
[중요] 마무리 | 인바운드 규칙 닫기
앞서 생성했던 인바운드 규칙을 더 이상 사용하지 않는다면 아래와 같이 사용 안 함 처리를 해두는 것을 권장한다.