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 문서를 보세요.