#Day49

D0-$ANG ₩0N·2026년 1월 12일
post-thumbnail

실습 목표 (문서 기준)

pgvector가 포함된 PostgreSQL을 Docker로 실행해서AI 벡터 DB 실습 환경을 만든다

PostgreSQL + pgvector가 돌아가는 컨테이너 1개 띄우기

1.도커 설치

2.Dbeaver 설치

brew install --cask dbeaver-community

터미널 접속해서 다음과 같은 명령어을 입력하시오

docker run -p 5432:5432 -d \
-e POSTGRES_USER=edu \
-e POSTGRES_PASSWORD=1234 \
-e POSTGRES_DB=edudb \
-v vpg:/var/lib/postgresql/data \
--name edupgvector \
ankane/pgvector


명령어 해석

  • docker run
    (Docker로 컨테이너 실행)

  • -p 5432:5432
    (내 PC 5432 포트 ←→ 컨테이너 PostgreSQL 5432 포트)

  • Spring Boot

  • DBeaver

  • pgAdmin

전부 localhost:5432 로 접속 가능
🔹 -d
백그라운드에서 설명 실행

  • 터미널 안 막힘
  • 서버처럼 계속 켜져 있음

환경변수 3종 (PostgreSQL 계정 생성)
-e POSTGRES_USER=edu
-e POSTGRES_PASSWORD=1234
-e POSTGRES_DB=edudb

  • DB 이름:edudb
  • 유저:edu
  • 비밀번호:1234
  • -v vpg:/var/lib/postgresql/data
    DB 데이터 저장소 연결

    WHY?

컨테이너 삭제해도 DB 데이터는 남아있게하기위함
(실습 중 DB 날아가는 거 방지용)

  • --name edupgvector
    컨테이너 이름 지정

그래서 나중에:

  • docker stop edupgvector
  • docker start edupgvector

이렇게 관리 가능

  • ankane/pgvector

  • 실행할 이미지
    (PostgreSQL + pgvector 내장)



설치완료



Dbeaver로 edu 디비만듬



거리식 계산 <=> = 코사인 거리 계산

SELECT tpt.*, tpt.embedding <=> '[0.2, 0.3, 0.4]' AS cosine_distance
FROM tb_pg_test tpt


코사인 기반 inner product 계산

SELECT tpt.*, embedding <#> '[0.2, 0.3, 0.4]' AS inner_product
FROM tb_pg_test tpt

spring12번

리액트와 스프링을 연결해봄

apple@apples-MacBook-Air springai13 % chmod +x gradlew
apple@apples-MacBook-Air springai13 % ./gradlew bootRun

포트찾아 죽이기:lsof -i :8080


spirng 13번

리액트와 스프링을 연결해봄


Trouble Shooting


CORS 문제

왜 WebConfig를 만들어서 CORS 설정을 해야 하나?
1. 프론트와 백엔드는 “출처(origin)”가 다르다

프론트: http://localhost:5173

백엔드: http://localhost:8080

  • 브라우저 입장에서는 다른 사이트
  • 기본 정책상 요청 차단
  1. 브라우저는 서버보다 보안 우선

서버가 “와도 된다”고 명시하지 않으면

브라우저가 요청 자체를 보내지 않음

  • 이 허락장을 서버에서 써주는 게 CORS
  1. WebFlux + fetch = Preflight(OPTIONS) 요청 필수

브라우저가 먼저 묻는다

“이 요청 보내도 됨?”

서버가 OPTIONS 응답에
Access-Control-Allow-Origin 없으면

본 요청(GET/POST) 아예 안 감

  1. 그래서 WebConfig가 필요하다

WebConfig는 서버에게 이렇게 말하는 역할:

localhost:5173에서 오는 요청은
GET/POST/OPTIONS 전부 허용한다

  1. 왜 main 클래스가 아니라 WebConfig인가?

CORS는 웹 계층 설정

Spring은 웹 설정을
WebFluxConfigurer에서만 읽음

Springai13Application은
서버 시작용이라 설정 무시됨

한 줄 요약

WebConfig는 브라우저에게
이 서버는 저 출처의 요청을 신뢰한다라고 알려주는 설정이다.

profile
Change Up

0개의 댓글