본문 바로가기
프로그램 (PHP,Python)

PostgreSQL 스키마를 기반으로 PostgREST 통해 API 자동화 생성

by 날으는물고기 2024. 1. 9.

PostgreSQL 스키마를 기반으로 PostgREST 통해 API 자동화 생성

PostgREST가 무엇인지 먼저 생각해 봅시다. 현대의 데이터베이스 애플리케이션은 일반적으로 직접 데이터베이스에 연결하여 임의의 SQL 명령을 내리지 않습니다. 일반적으로 그 사이에 어떤 추상화 계층이 항상 존재합니다. 이 계층은 Hibernate 코드 또는 어떤 종류의 API가 될 수 있습니다.

 

문제는 API를 수작업으로 작성하는 것이 많은 작업이며 귀찮다는 것입니다. 일반적으로 데이터베이스에는 이미 대부분의 정보가 있습니다(필드, 데이터 유형 등). 그러나 수동으로 API를 작성하면 본질적으로 데이터베이스가 이미 알고 있는 것을 중복하게 됩니다. PostgREST는 전혀 다른 접근 방식입니다. 이는 데이터베이스 시스템 카탈로그를 검사하고 데이터베이스에서 API를 자동으로 생성합니다. 충분한 권한이 있다면 테이블, 뷰 및 함수는 API 엔드포인트로 표시됩니다. 실제로 완전하고 버그가 없는 API를 만들기 위해 필요한 작업은 거의 없습니다.

PostgREST 설치하기

PostgREST를 설치하는 것은 비교적 쉽습니다. Mac OS X를 기반으로 설명하지만, 대부분의 플랫폼에서 작동합니다.

 

Mac OS X에서 설치하려면 간단히 "brew install"을 사용할 수 있습니다. 몇 초 만에 시작할 수 있는 가장 쉬운 방법입니다.

brew install postgrest

Linux에서는 프로세스가 매우 간단합니다. 필요한 것은 패키지를 다운로드하고 파일을 풀기만 하면 됩니다.

tar Jxf postgrest-[version]-[platform].tar.xz

설치가 완료된 후 사용 가능한 옵션을 확인하려면 다음 명령을 사용할 수 있습니다.

postgrest --help

이제 구성 파일을 만들기만 하면 됩니다. 정말로 간단하고 직관적입니다.

샘플 데이터 생성 및 PostgREST 시작하기

PostgREST를 시작하는 것은 쉽지만 먼저 몇 가지 데모 데이터를 만들어 보겠습니다. 실제로 PostgREST에 노출될 데이터가 있어야 합니다. 간단한 레코드를 포함하는 테이블이 있는 것이 충분합니다.

CREATE TABLE t_demo (id int, name text);
INSERT INTO t_demo VALUES (1, 'hans'), (2, 'paul');
SELECT * FROM t_demo;

이제 구성 파일을 만들어야 합니다.

아래에서 볼 수 있듯이 이 파일은 연결 문자열과 기본 사용자 정보 외에는 거의 아무것도 포함하지 않습니다.

cat tmp/postgrest.conf

이제 실행해 봅시다.

postgrest ./tmp/postgrest.conf

PostgREST는 정보를 캐시하고 API를 노출합니다. API에 액세스하려면 명령 줄 도구를 사용하거나 선택한 프로그래밍 언어의 라이브러리를 사용하여 동일한 작업을 수행할 수 있습니다.

curl localhost:80 | jq

여기서 처음으로 볼 수 있는 것은 PostgREST가 웹 서비스를 호출할 때 이미 많은 정보를 노출한다는 것입니다. 엔드포인트, 버전 및 기타 많은 정보를 포함한 긴 JSON 문서를 받게 됩니다.

API 호출을 사용하여 테이블에 액세스하기

도구를 성공적으로 시작한 후 데모 데이터베이스의 테이블에 액세스해 보세요. 다시 말하면 API 엔드포인트가 이미 사용 가능합니다. JSON 문서를 가져와 "jq"를 사용하여 원하는 형식으로 변환합니다.

curl localhost:80/t_demo | jq

이 경우 필터 없이 데이터를 검색했습니다. 그러나 "jq"를 사용하여 JSON 문서를 가져와 더 나은 모양으로 변환합니다. 이 필터는 결과 집합을 원하는대로 줄일 것입니다. PostgREST는 데이터 필터링 및 정렬에 대한 다양한 연산자를 제공하며 이는 공식 PostgREST 문서에서 설명되어 있습니다.

PostgreSQL에서 스키마 변경 다루기

PostgREST는 앞서 언급한 대로 PostgreSQL 시스템 카탈로그에서 가져온 정보를 캐시합니다. 이것은 모든 API 호출에 대해 PostgreSQL 카탈로그를 조사하는 것은 너무 느리기 때문에 성능 상의 이유로 수행됩니다. 따라서 캐시는 데이터베이스의 기본 데이터 구조가 변경된 경우 새로 고쳐져야 합니다.

killall -SIGUSR1 postgrest

PostgREST에게 캐시를 새로 고침하도록 신호를 보내기만 하면 됩니다. 몇 줄의 로그가 캐시가 실제로 새로 고쳐졌음을 알려줄 것입니다.

추가 기능

PostgREST는 풍부한 기능 세트를 제공합니다. 이는 API 및 보안 측면 모두에서 사실입니다. 일반적으로 PostgREST는 데이터베이스에서 찾을 수 있는 권한 집합을 모방하려고 할 것이며 이를 일관되게 외부 세계에 노출시킵니다. API는 따라서 데이터 구조와 동일한 보안 정책을 갖게 됩니다. 수동으로 변경할 필요가 없습니다. 테이블 뿐만 아니라 뷰, 저장 프로시저 등에도 액세스할 수 있습니다. 엔드포인트는 자동으로 제공됩니다.

 

HTTP 또는 HTTPS를 통해 API에 액세스하기 위해 풍부한 클라이언트 라이브러리 세트를 사용할 수 있습니다. 거의 알려진 제한 사항이 거의 없습니다.

 

정리하자면, PostgREST는 RESTful API를 PostgreSQL 데이터베이스로 자동 변환하는 도구입니다. 이를 활용함으로써 여러 장점과 응용 가능한 유형이 있습니다.

장점

  1. 빠른 API 개발: PostgREST는 데이터베이스 스키마를 기반으로 자동으로 RESTful API를 생성합니다. 이는 개발 시간을 단축시키고 복잡한 백엔드 로직 개발의 필요성을 줄입니다.
  2. 간결성: 복잡한 SQL 쿼리를 작성할 필요 없이, 간단한 HTTP 요청으로 데이터베이스와 상호작용할 수 있습니다. 이는 코드의 간결성을 유지하며, 유지보수를 용이하게 합니다.
  3. 보안: PostgREST는 PostgreSQL의 강력한 보안 기능을 활용합니다. 사용자의 권한과 역할에 따라 데이터 접근을 제어할 수 있어 보안성이 뛰어납니다.
  4. 확장성: 대규모 트래픽과 데이터에도 적합하며, PostgreSQL의 확장 기능과 결합하여 고성능을 유지할 수 있습니다.
  5. 호환성: 다양한 프론트엔드 프레임워크와 쉽게 통합할 수 있으며, RESTful API의 표준을 따르기 때문에 다양한 클라이언트와 호환됩니다.

응용 가능한 유형

  1. CRUD 애플리케이션: 기본적인 Create, Read, Update, Delete 기능이 필요한 웹이나 모바일 애플리케이션에 적합합니다.
  2. 데이터 대시보드: 다양한 데이터 소스에서 정보를 추출, 변환 및 로드(ETL)하여 대시보드를 구축할 때 유용합니다.
  3. 데이터 분석 및 보고: PostgreSQL의 강력한 분석 기능을 활용하여 복잡한 데이터 분석 및 보고 요구사항을 충족할 수 있습니다.
  4. 마이크로서비스 아키텍처: 각 마이크로서비스가 자체 데이터베이스를 가질 때, PostgREST를 사용하여 빠르게 독립적인 API를 구축할 수 있습니다.
  5. 서드파티 통합: 다른 서비스나 애플리케이션과의 데이터 통합을 위한 API로 사용될 수 있습니다.

PostgREST는 이러한 장점들을 통해 다양한 유형의 프로젝트에 유연하게 적용될 수 있으며, 개발 과정을 단순화하고 가속화하는 데 큰 도움이 됩니다.

728x90

댓글