How to Dev

RESTful API를 이용하여 PostgreSQL 연계

거울나라 2021. 12. 14. 13:17

PostgREST

PostgreSQL

- The PostgreSQL Global Development Group에서 개발하는 오픈 소스 ORDBMS. 1996년에 첫 출시되었다. 처음에는 BSD 라이선스였으나 언제부터인가 MIT 라이선스 비스무리한 독자적 라이선스[1]를 따르기 시작했다. 발음은 '포스트그레스큐엘'이라고 한다[나무위키 : https://namu.wiki/w/PostgreSQL]

REST API

- Rest 기반으로 컴퓨터 프로그램간의 상호 작용을 가능하게 하고 정보를 교환하게 구현한 어플리케이션

 

PostgreSQL과 REST API 구현

- 좀더 쉽게 REST API를 구현하기 위해 오픈소스를 참고
1. PostgREST(18000 star), https://github.com/PostgREST
2. pREST(3008 star), https://github.com/prest

 

prest

pREST (PostgreSQL REST), low-code, simplify and accelerate development, ⚡ instant, realtime, high-performance on any Postgres application, existing or new - prest

github.com

 

PostgREST

PostgREST has 3 repositories available. Follow their code on GitHub.

github.com

준비 사항

- ubuntu
- docker
- postgresql docker image

 

PostgreSQL 및 PostgREST 설치

# PostgreSQL 설치
sudo docker run --name tutorial -p 5433:5432 \
                -e POSTGRES_PASSWORD=mysecretpassword \
                -d postgres
                
# postgREST 다운로드 및 설치
# download from https://github.com/PostgREST/postgrest/releases/latest
wget https://github.com/PostgREST/postgrest/releases/download/v9.0.0/postgrest-v9.0.0-linux-static-x64.tar.xz
tar xJf postgrest-v9.0.0-linux-static-x64.tar.xz
./postgrest

PostgreSQL 이미지 다운로드 및 실행
PostgREST 설치 확인

API용 데이터 베이스 생성

-- psql (9.6.3)
-- Type "help" for help.
-- 명령 프롬프트 생성
-- postgres=#
-- 스키마 생성
create schema api;

-- todo 테이블 생성
create table api.todos (
  id serial primary key,
  done boolean not null default false,
  task text not null,
  due timestamptz
);

insert into api.todos (task) values
  ('finish tutorial 0'), ('pat self on back');


-- 익명 웹 요청 사용 역할 생성
create role web_anon nologin;

grant usage on schema api to web_anon;
grant select on api.todos to web_anon;

-- postgres 대신 데이터베이스 연결을 위한 전용 역할 생성
create role authenticator noinherit login password 'mysecretpassword';
grant web_anon to authenticator;

-- 종료
-- \q

테이블 생성 및 권한 부여

PostgREST 실행

# 환경 설정 파일 생성
touch tutorial.conf
vi tutorial.conf

# 파일 안에는 접속 정보
db-uri = "postgres://authenticator:mysecretpassword@localhost:5433/postgres"
db-schema = "api"
db-anon-role = "web_anon"

# 실행
./postgrest tutorial.conf

테스트

#  get 요청 테스트
curl http://localhost:3000/todos

#  post 요청 테스트
#  권한 없음이 나와야 정상임
curl http://localhost:3000/todos -X POST \
     -H "Content-Type: application/json" \
     -d '{"task": "do bad thing"}'

REST API 테스트