DB · PostgreSQL

PostgreSQL

데이터를 표(테이블) 형태로 저장하고 SQL로 다루는 오픈소스 관계형 데이터베이스입니다. 기능이 풍부하고 표준을 잘 따르며, 이 학습 프로젝트가 실제로 사용하는 DB예요.

한 줄로

PostgreSQL? 은 데이터를 행과 열로 정리해 저장하고, SQL? 이라는 공통 언어로 조회·추가·수정·삭제를 처리하는 오픈소스 RDBMS입니다. 무료로 쓸 수 있으면서 JSONB·배열 같은 고급 기능까지 갖춰 폭넓게 쓰여요.

테이블은 잘 정리된 "엑셀 시트", SQL은 "그 시트에 묻는 질문지". 단, 수백만 줄이 들어가도 빠르게 찾고, 여러 사람이 동시에 안전하게 쓸 수 있다는 점이 다릅니다.
왜 / 어디에 쓰나
  • 구조가 분명한 데이터 — 사용자·주문·메뉴처럼 형태가 정해진 데이터를 표로 저장
  • 무결성·관계 — 외래키로 표 사이 관계를 강제하고, 잘못된 데이터를 막음
  • 동시성·안정성 — 여러 요청이 동시에 와도 트랜잭션? 으로 안전하게 처리
  • 오픈소스 — 라이선스 비용 없이 작은 프로젝트부터 대규모까지

핵심 개념

개념설명
테이블(Table)데이터를 담는 표. 열(컬럼)과 행(로우)으로 구성.
스키마(Schema)테이블을 묶는 폴더 같은 단위. 이 프로젝트는 lds 스키마를 씀.
기본키(Primary Key)각 행을 유일하게 구분하는 열(예: id).
외래키(Foreign Key)다른 테이블의 행을 가리켜 관계를 맺는 열.
인덱스(Index)특정 열로 빠르게 찾도록 만든 색인. 책 뒤의 찾아보기와 비슷.

기본 SQL

관계형 DB는 종류가 달라도 SQL 기본은 공통입니다. 다음 네 가지가 핵심이에요.

-- 조회: 조건에 맞는 사용자 이름
SELECT id, userid, name
FROM lds.tb_user
WHERE name LIKE '%han%'
ORDER BY name;

-- 추가
INSERT INTO lds.tb_user (userid, name)
VALUES ('hanks', '경수');

-- 수정
UPDATE lds.tb_user
SET name = '한경수'
WHERE userid = 'hanks';

-- 삭제
DELETE FROM lds.tb_user
WHERE userid = 'hanks';

JOIN — 여러 표를 엮어 조회

-- 사용자와 그 사용자의 역할을 함께 조회
SELECT u.name, r.role_name
FROM lds.tb_user u
JOIN lds.tb_user_role ur ON ur.user_id = u.id
JOIN lds.tb_role r       ON r.id = ur.role_id
WHERE u.userid = 'admin';

PostgreSQL다운 기능

-- JSONB: 한 컬럼에 JSON을 넣고 키로 조회
SELECT data->>'email' AS email
FROM lds.tb_profile
WHERE data->>'active' = 'true';

-- 배열 타입
SELECT * FROM lds.tb_post
WHERE 'spring' = ANY(tags);

psql — 터미널에서 직접 접속

psql -U postgres -d studydb     # studydb에 접속
\dt lds.*                        # lds 스키마의 테이블 목록
이 프로젝트와의 관계

이 프로젝트의 백엔드는 PostgreSQL을 DB로 씁니다(데이터베이스 studydb, 스키마 lds). 테이블 구조는 Liquibase? 로 코드로 관리하고, 자바 코드에서는 SQL을 직접 쓰는 대신 JPA?QueryDSL? 이 SQL을 만들어 실행합니다. 더 깊은 내용은 DB 연동JPA 문서를 보세요.

다음 단계