세로형
Recent Posts
Recent Comments
Link
01-03 04:57
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

PostgreSQL PGVector 설치 및 사용하기(Feat. 벡터 데이터베이스(Vector Database) 구축) 본문

LLM&RAG

PostgreSQL PGVector 설치 및 사용하기(Feat. 벡터 데이터베이스(Vector Database) 구축)

이수진의 블로그 2024. 12. 9. 15:52
반응형
728x170

포스팅 개요

이번 포스팅은 검색 증강 생성(Retrieval Augmented Generation, RAG)에서 많이 활용되는 벡터 데이터베이스 중 PostgreSQL의 PGVector에 대해서 작성하는 포스팅입니다. 이번 포스팅은 그 중, PostgreSQL 설치와 extension인 PGVector를 설치하고 실제 SQL query를 실행시켜 동작되는 것까지 작성하며 다음 글에서 실제 RAG 형식으로 동작되는 예제를 작성하겠습니다.

본 포스팅을 작성하면서 참고했던 사이트는 아래와 같습니다.

 

 

GitHub - pgvector/pgvector: Open-source vector similarity search for Postgres

Open-source vector similarity search for Postgres. Contribute to pgvector/pgvector development by creating an account on GitHub.

github.com


포스팅 본문

포스팅 개요에서도 언급하였듯, 이번 포스팅은 벡터 데이터베이스(Vector Database)로 많이 활용하는 PGVector에 대해서 알아보는 포스팅입니다. 이를 위해서는 PostgreSQL을 설치하고 그 확장자(extension)으로 PGvector를 설치해야하는데요. 이번 글은 PostgreSQL을 설치하고 PGVector extension을 설치한 뒤 SQL로 실행하는 예시를 작성하는 포스팅입니다.

그럼, 단계별로 하나씩 정리해보겠습니다.

 

참고사항 : 제가 설치를 진행한 환경은 아래와 같습니다.

- MacOS(MacBook Pro, 2019)
- PostgreSQL version : PostgreSQL@16
- PGVector version : pgvector 0.8.0

 

PostgreSQL 설치

PGVector를 설치하기에 앞서, PostgreSQL을 설치해야합니다. PostgreSQL이란 오픈 소스 데이터베이스로 20년도 더 넘은 데이터베이스입니다. MySQL이나 MariaDB, Oracle과 마찬가지로 많이 사용하는 데이터베이스 중 하나이죠. 

저는 Mac 환경이기 때문에 Mac에서 PostgreSQL을 설치했습니다. 설치 방법은 포스팅 개요에 올려둔 posgresql download 페이지를 참고하시면 되는데요. 방법은 어렵지 않습니다. Mac에서는 아래와 같은 명령어로 쉽게 설치할 수 있습니다.

 

brew install postgresql@16

 

커맨드 창에 brew를 활용해 설치하면 쉽게 설치될 수 있으며, 원하는 버전이 있다면 @을 활용해 버전을 명시해주시면 됩니다. 저는 PostgreSQL 16 버전을 설치하기 위해서 brew install postgresql@16이라고 명시하였습니다.

설치가 완료된 PostgreSQL을 실행시키기 위해서는 brew services 명령어를 활용해 실행하면 됩니다.

brew services start postgresql@16

 

PostgreSQL이 잘 실행이 되었으면 sucessfully started postgresql 이라는 명령어가 나오게 될 것입니다. 그럼 실제로 잘 동작되는지 확인을 해봐야겠죠? 간단한 명령어로 실제 실행이 되는지 확인할 수 있습니다.

psql -v

 


참고사항 : psql command not found 에러가 나온다면

psql 명령어를 실행하는데 psql command not found라는 에러가 나올 수도 있습니다. 만약 해당 에러가 나온다면 path가 제대로 설정이 안되었을 가능성이 매우 높습니다.

먼저, postgresql이 어디에 설치되었는지 확인을 해봐야겠죠?

 

저는 postgresql이 /usr/local/opt/postgresql@16에 설치되었음을 확인할 수 있었는데요. 

아래와 같은 명령어를 통해 psql command not found 에러를 해결하였습니다.

 

export PATH="/usr/local/opt/postgresql@16/bin:$PATH" >> ~/.zshrc
source ~/.zshrc


# 만약, 위 명령어로도 안되면 아래 명령어로 실행해보세요.

echo 'export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

 


 

PostgreSQL 연결 테스트(Feat. DBeaver와 PostgreSQL 연결)

PostgreSQL이 제대로 설치된 것을 확인하였으면 실제로 연결이 되는지 테스트를 해봐야겠죠?

가장 먼저 DBeaver 툴을 활용해서 방금 설치한 PostgreSQL과 연결을 진행해보겠습니다. 

 

DBeaver의 connect to database를 클릭하면, PostgreSQL이 있는 것을 알 수 있을겁니다. 해당 DB를 선택하고 넘어갑니다. 

 

 

여기서 PostgreSQL의 Host와 database 그리고 username을 설정하면 되는데요. Host는 저는 개인 PC에 설치했기 때문에 localhost로 지정하였고, database는 PostgreSQL을 설치하면 기본 DB가 postgres이기에 postgres로 설정하였습니다. 여기서 username을 잘 설정해줘야 하는데요. 만약, 여러분들이 username을 등록하시거나 postgres 계정에 비밀번호를 셋팅해두셨으면 해당 계정으로 접속하시면 됩니다. 저는 제 PC이름에 따라 leesoojin이라는 계정으로 생성되어서 이 계정을 활용하였습니다.

만약, 생성된 계정을 알고 싶으시다면, psql postgres라는 명령어를 입력한 후 PostgreSQL 콘솔로 접속한 뒤 \du 명령어를 입력하셔서 확인하시면 됩니다. 

 

 

반응형

 

DBeaver에 정상적으로 접속된 것을 확인할 수 있습니다.

사실, PostgreSQL에 접속하는 방법은 콘솔로 접속하는 방법이 가장 빠릅니다. psql 명령어가 정상적으로 실행되신다면 아래와 같은 명령어로 PostgreSQL 콘솔로 접속할 수 있습니다.

 

psql postgres

 

그러면 위와 같이 콘솔로 접속할 수 있게 되며, 저의 계정 등을 확인할 수 있습니다. 계정을 확인하는 방법은 위에서도 잠시 언급하였듯 \du 명령어를 입력하면 됩니다.

 

 

PGVector extension 설치 - brew를 활용한 설치

다음으로 PostgreSQL에서 벡터(Vector)를 저장하고 이 벡터를 통해 코사인 유사도(Cosine Similarity), L2 거리(L2 Distance) 등의 연산을 수행할 수 있는 PosgreSQL의 extension인 PGVector를 설치하겠습니다. 

설치하는 방법은 간단합니다. PostgreSQL이 정상적으로 설치 및 실행이 되었으면, 아래 명령어로 쉽게 설치할 수 있습니다.

brew install pgvector

 

다만, brew로 설치하는 것은 제가 글을 쓰는 24년 12월 초 기준, 아래와 같이 명시되어 있습니다. (https://github.com/pgvector/pgvector?tab=readme-ov-file#homebrew)

Note: This only adds it to the postgresql@17 and postgresql@14 formulas

 

즉, PostgreSQL 17과 14에만 적용되므로, 저와 같이 PostgreSQL 16버전을 설치할 경우 동작이 안될 수 있습니다.

이럴 때는 아래와 같이 github을 활용해 설치해주면 간단하게 설치할 수 있습니다.

 

PGVector extension 설치 - git clone을 활용한 설치

PGVector 공식 github을 보시면, 아래 사진과 같이 installation 설명의 Linux and Mac 부분에서 아래와 같이 설치하라고 명시해주고 있습니다.

 

 

즉, git을 clone하고 make 및 make install을 활용해 설치하면 되는 것이죠. 

저는 위에서 명시해준대로 /tmp 디렉토리에 들어가서 해당 경로에 설치를 진행했습니다. 똑같이 명령어를 입력했습니다.

cd /tmp
git clone --branch v0.8.0 https://github.com/pgvector/pgvector.git
cd pgvector
make
make install # may need sudo

 

 

이후 위와 같이 순서대로 make install까지 진행하면 정상적으로 설치가 완료될 것입니다.

자! 그러면 이제 pgvector가 실제로 동작되는지 테스트를 해봐야겠죠? 과연 벡터 데이터베이스로 활용할 수 있게 벡터 연산까지 수행할 수 있을까요?

 

저는 이를 위해서 먼저, test라는 데이터베이스를 만들고 여기에 vector extension을 추가해 활용하겠습니다. 아래와 같은 명령어를 입력해주시면 됩니다. 커맨드 명령어에 먼저 postgresql에 접속한 뒤 데이터베이스를 만들고 연결하면 됩니다.

psql postgres # postgresql 접속
create database test;
\connect test;

 

300x250

 

그러면 위 사진과 같이 접속정보 데이터베이스 test 사용자 leesoojin이 나올 것입니다.

이후 해당 데이터베이스에서 extension을 만들어주는데요. 이때 extension이 벡터(vector)가 됩니다. 

 

CREATE EXTENSION vector;

 

정상적으로 생성이 되었따면 create extension이 출력될겁니다. 이후 postgresql에서 \dx 명령어를 통해 extension에서 vector가 설치된 것을 확인할 수 있고 dbeaver의 extension 탭에서도 vector가 추가된 것을 확인할 수 있습니다.

 

PGVector 실행 테스트

이제 PostgreSQL을 벡터 데이터베이스(Vector database)로 활용할 수 있도록 vector extension 설치 및 extension 등록까지 완성했습니다. 그럼, 임의의 데이터를 임시로 넣어서 실제로 벡터 연산(유사도 계산 등)이 가능한지 확인해보겠습니다.

저는 아래와 같이 테이블을 생성하고, 임의로 데이터를 삽입했습니다.

 

CREATE TABLE tb_sj_test ( id SERIAL PRIMARY KEY, name TEXT, embed VECTOR(3) );

INSERT INTO tb_sj_test (name, embed) VALUES  ('이수진', '[0.1, 0.2, 0.3]'), ('leesoojin', '[0.5, 0.6, 0.1]');

 

그 다음, SQL query를 날려서 실제 쿼리가 동작하는지 살펴보겠습니다. 먼저, 가장 기본적인 전체 데이터 조회입니다.

 

정상적으로 조회가 되는 것을 확인할 수 있습니다.

그러면, 벡터 연산은 잘 될까요? 공식 github에 벡터 연산 방법에 대해서 아래와 같이 명시되어 있습니다.

 

<-> : L2 distance (L2 거리, 유클리드 거리)
<#> : (negative) inner product ( 내적 )
<=> : cosine distance ( 코사인유사도 )
<+> : L1 distance (added in 0.7.0) ( L1 거리, 맨하탄 거리 )
<~> : Hamming distance (binary vectors, added in 0.7.0)( 해밍 거리 )
<%> : Jaccard distance (binary vectors, added in 0.7.0) (자카드 거리)

 

자세한 것은 공식 github을 확인하시면 됩니다.

위 설명을 기반으로, 제가 구성한 데이터를 기반으로 벡터 유사도를 계산해보겠습니다. 

 

select * from tb_sj_test where id < 5 order by embed <=> '[0.2, 0.3, 0.4]' limit 1

 

 

<=> 기호를 사용했기 때문에 코사인 유사도를 활용했고 limit 1개만 노출되도록 했습니다. 가장 가까운 데이터 1개가 나온 것을 확인할 수 있습니다.

 


마무리

본 포스팅은 벡터 데이터베이스 활용을 위해 PGVector를 설치하기 위한 과정을 정리한 포스팅입니다. 이를 위해서 PostgreSQL에 대해서 알아보고 설치를 진행하였습니다. 이후 Vector를 사용할 수 있게 PGVector를 설치하여 extension을 생성하는 과정을 정리하였고 예시 쿼리로 실제 동작되는 과정을 알아보았습니다.

다음 포스팅에서는 PGVector를 활용하여 실제 파이썬(Python) 코드 레벨에서 활용할 수 있는지, RAG를 어떻게 구축할 수 있는지 알아보도록 하겠습니다. 

긴 글 읽어주셔서 감사합니다.

반응형
그리드형
Comments