본문 바로가기

프로그래밍/PotsgreSQL

Amazon EC2 Linux 2에 Postgresql 설치

기념할만한 첫 글이다.

프리티어가 끝나서, 가장 낮은 등급의 인스턴스를 사용함에도 하루 약 1달러라는 높은 비용이 드는 RDS를 대체하기 위하여 EC2에 직접 DB를 설치해서 사용하기 위해 작업한 과정을 남긴다.

EC2 위에 Postgresql을 올리는 작업이지만 기본적으로 EC2를 세팅하는 작업은 생략한다.

개발환경은 아래와 같다.

 

AMI : Amazon Linux 2 AMI (HVM)
인스턴스 유형 : t3a.nano
DB : Postgresql10 (10.4)

 

생성된 인스턴스에 ssh로 접근하고 아래 코드를 입력해서 필요한 패키지들을 설치한다.

sudo amazon-linux-extras install postgresql10 epel -y
sudo yum install postgresql-server postgresql-devel -y

 

설치가 완료됐다면 제대로 설치가 되었는지 postgresql의 버전을 확인한다.

/usr/bin/postgres --version
postgres (PostgreSQL) 10.4

의도한 버전이 잘 설치됐다. 이제 db를 실행한다.

sudo /usr/bin/postgresql-setup --initdb
sudo systemctl enable postgresql
sudo systemctl start postgresql

여기까지 이상 없이 진행됐다면 postgresql 설치는 완료됐다. 이제 db에 접근해 쿼리를 입력하겠다.

 

 

 

postgresql를 설치하면 기본적으로 postgres라는 유저가 생성된다. 이 유저로 db에 접근한다.

sudo su - postgres

유저가 변경되면 psql을 이용해서 postgresql을 사용할 수 있다.

psql

psql도 이상 없이 실행됐다면, 실제 쿼리를 실행해 볼 수 있다.

SELECT 1;

쿼리를 실행하고 그 결과를 확인했다.

 

쿼리가 정상적으로 작동했다. 이제 postgresql을 사용하여 애플리케이션을 구성할 수 있게 되었다.

그러나 아직 완벽하지 않다.

지금은 ssh로 연결한 터미널 환경이고, 사용하고 있는 db의 이름은 postgres이다. 사용 중인 유저의 이름도  postgres이다. 단순히 쿼리를 입력하고 결과를 보고자 한다면 지금 그대로도 충분하다. 하지만 실제 상용 db를 구성하거나, 서비스를 올릴 때에 postgres라는 db와 유저의 이름이 postgres라면 조금 이상하다. 쿼리를 실행할 때도 터미널이 아닌 DateGrip 같은 외부 툴을 사용할 것이기 때문에 지금의 환경은 개발에 적합하지 않다고 할 수 있다.

 

 

피어(Peer) 인증

postgresql은 로컬 연결에 기본적으로 피어 인증을 지원한다.
피어는 운영체제의 사용자 이름을 커널에서 가져오고, 그 이름이 db의 사용자 이름과 일치해야 db에 접근할 수 있는 방식이다. 그렇기 때문에 위에서 psql 명령어를 입력했을 때 비밀번호 없이 db에 접근할 수 있었다.

 

내 컴퓨터에서 EC2에 설치한 db에 접근하기 위해서는 일단 피어 인증을 비밀번호 인증으로 변경할 필요가 있다.

또한 그에 앞서 postgres 유저에 비밀번호를 설정하고 새롭게 사용할 db와 유저를 생성해야 한다.

 

유저와 db는 쿼리를 사용해 생성해본다.

CREATE USER devegoist PASSWORD 'password' SUPERUSER;
CREATE DATABASE devegoist OWNER devegoist;

유저와 db의 생성이 완료됐다면 이제 postgresql의 설정을 변경해 외부 환경에서 접근할 수 있게 해야 한다.

변경해야 할 파일은 둘.

/var/lib/pgsql/data/postgresql.conf
/var/lib/pgsql/data/pg_hba.conf

각각의 파일을 vi나 vim 등으로 수정한다.

vim data/postgresql.conf

postgreql.conf는 아래 내용을 추가한다.

listen_addresses = '*'

vim data/pg_hba.conf

pg_hba.conf는 아래 내용을 추가한다.

host	all		all		0.0.0.0/0		md5

가장 아래 줄에 추가한 내용이 보인다.

이 내용까지 추가하고 postgresql을 재시작한다.

sudo systemctl restart postgresql

지금까지 작업한 내용에 틀림이 없다면 새로 추가한 유저와 db정보를 이용해서 각자의 pc의 db 툴에서도  db에 접근할 수 있어야 한다.

하지만 이 상태에서 접근을 시도한다면 오류가 출력된다.

AWS 보안 그룹 인바운드를 열어줘야 하는 단계가 남았기 때문이다.

보안 그룹에서 postgreql의 5432 포트를 오픈해줘야 한다. 보안상으로는 특정 ip주소에 대하여 오픈하는 방식이 좋겠지만 일단은 모든 ip주소를 대상으로 인바운드를 열어준다.

이 작업까지 완료된다면 비로소 모든 작업이 종료된다.

 

 

최근 몇 년 사이에는 장마철이라고 해도 비가 많이 오지 않았다. 그런데 유별나게 2020년 올해는 장마가 계속되고 있다. 일기예보는 온통 비 소식뿐이다. (물론 예보의 정확도는 많이 떨어진다) 베란다가 없는 방이라 빗물이 들어올까 창문을 열지 못해 많이 답답했었는데 오늘은 모처럼 날이 맑고 8월 한여름인데도 시원한 바람이 불어 모처럼 창문을 열었다.

 

앞으로도 지금같은 상쾌한 기분으로 블로그 글을 작성해나가고 싶다. 주 내용은 아마 본업인 개발에 대한 정보가 되겠지만 취미인 사진도 많이 올릴 생각이다. 그래서 블로그 제목이 사진찍는 개발자인데 아직 좋은 이름이 생각나지 않아서 결정하게 된 감이 있다.

 

첫 술에 배 부를 수 없고, 완벽할 수 없다고 생각한다. 개인이나 그룹 프로젝트를 경험하면서 느낀 공통점이 있다. 시작부터 너무 완벽하고자 하면 그 프로젝트는 결국에는 흐지부지 된다는 점이다. 그래서 이 블로그에 앞으로 올라올 글들이 모두 정확한 정보만 있는것은 아닐거라고 말하고 싶다. 물론 가능한 한 옳고 바른 정보를 제공하고싶고 그렇게 하기 위해 노력하겠지만 말이다.