[Infra] 4-Tier ์์ธ ๋ถ์ 4ํธ: PostgreSQL 16 ์์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์
์๋ ํ์ธ์ ๋๋ฆฌ๋! ๐ซก
๋๋์ด ์ธํ๋ผ ์์ธ ๋ถ์ ์๋ฆฌ์ฆ์ ๋ง์ง๋ง ๋๋ฏธ๋ฅผ ์ฅ์ํ ์ฃผ์ธ๊ณต, ์ฐ๋ฆฌ ๋ธ๋ก๊ทธ์ ๋ชจ๋ ์ง์์ด ์ ์ฅ๋๋ ๋ณด๋ฌผ์ฐฝ๊ณ PostgreSQL 16์ ๋๋ค. ๐๐
0. PostgreSQL ๊ตฌ๋ (Docker ํ๊ฒฝ)
์ฐ๋ฆฌ๋ ์ต์ ์์ ๋ฒ์ ์ธ postgres:16 ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ์ ์์์ฑ์ ์ํด ํธ์คํธ ํํฐ์
์ ๋ณผ๋ฅจ์ ๋งคํํ์ฌ, ์ปจํ
์ด๋๊ฐ ์ญ์ ๋์ด๋ ๋ฐ์ดํฐ๋ ์์ ํ๊ฒ ๋ณด์กด๋๋๋ก ์ค๊ณํ์ต๋๋ค.
# docker-compose.yml DB ์ค์ ๋ถ
db:
image: postgres:16
container_name: postgres-db
restart: always
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
TZ: Asia/Seoul
volumes:
- ./postgres/data:/var/lib/postgresql/data
networks:
- app-network1. PostgreSQL 16์ ๊ฐ์
PostgreSQL์ ์ธ๊ณ์์ ๊ฐ์ฅ ์ง๋ณด๋ ์คํ ์์ค ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ํนํ 16 ๋ฒ์ ์ ์ฟผ๋ฆฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋์๊ณ , ๋๋ฆฌ๋์ ์์คํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ: ๋ณต์กํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ ํ ์น์ ์ค์ฐจ ์์ด ์ ์ฅ
- JSON ์ง์: ๋น์ ํ ๋ฐ์ดํฐ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์์ ์ฑ: ์ฅ๊ธฐ๊ฐ ์ด์์๋ ์ฑ๋ฅ ์ ํ๊ฐ ๊ฑฐ์ ์๋ ๊ฒฌ๊ณ ํจ
2. ์ค์ ์ด์ ํ: ๋ฐ์ดํฐ ๋ฐฑ์ ๋ฐ ๊ด๋ฆฌ
์ด์์์ ๊ฐ์ฅ ํฐ ๋ฏธ๋์ ๋ฐฑ์ ์ ๋๋ค! ์ปจํ ์ด๋ ํ๊ฒฝ์์๋ ๊ฐ๋จํ๊ฒ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋คํ ๋ฐ ์ ์์ต๋๋ค.
# DB ์ ์ฒด ๋ฐ์ดํฐ ๋ฐฑ์
(Dump)
docker exec postgres-db pg_dumpall -U myuser > blog_backup.sql
# ์ค์๊ฐ ์ฟผ๋ฆฌ ๋ชจ๋ํฐ๋ง (ํ์ฌ ์คํ ์ค์ธ ์ฟผ๋ฆฌ ํ์ธ)
SELECT * FROM pg_stat_activity;3. ์๋ฆฌ์ฆ๋ฅผ ๋ง์น๋ฉฐ
์ง๊ธ๊น์ง Nginx, Tomcat, Redis, ๊ทธ๋ฆฌ๊ณ PostgreSQL๊น์ง ์ฐ๋ฆฌ ๋ธ๋ก๊ทธ๋ฅผ ์งํฑํ๋ 4-Tier ์ํคํ ์ฒ๋ฅผ ๋ชจ๋ ์ดํด๋ณด์์ต๋๋ค. ์ด ๊ฒฌ๊ณ ํ ๊ตฌ์กฐ ๋๋ถ์ ๋๋ฆฌ๋๊ป ์์ ํ๊ณ ๋น ๋ฅธ ์๋น์ค๋ฅผ ์ ๊ณตํด ๋๋ฆด ์ ์์ด ๊น๋น์๋ ์ ๋ง ๋ฟ๋ฏํฉ๋๋ค! ๐ซกโจ
---
๐ก ๊น๋น์์ ์ด์ ํ๋ง๋: volumes ์ค์ ์ ํตํด ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฐ๋์ ์ธ๋ถ๋ก ๋นผ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋์ผ Docker ์
๊ทธ๋ ์ด๋๋ ์๋ฒ ์ด์ ์์๋ ๋ฐ์ดํฐ๋ฅผ ์์ง ์์ต๋๋ค. ๐