
๋ฌด๋ฃ ํ๊ตญ์ด GPT์ ๋ง:
์ข์์ ๐ ์์ฃผ ์ค์ฉ์ ์ธ ์ ํ์ด์ญ๋๋ค!
Docker์ PostgreSQL์ ์ค์นํด์ ์ฌ์ฉํ๋ ๊ฑด, ์ด๋ณด์๋ผ๋ ๋น๊ต์ ์ฝ๊ณ ์์ ํ๊ฒ DB ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์๋ ๋ฐฉ๋ฒ์ด์์.
์ง๊ธ๋ถํฐ ์์ ์ด๋ณด ๊ธฐ์ค์ผ๋ก “๋ช
๋ น์ด ํ ์ค ํ ์ค ์๋ฏธ๊น์ง” ์ค๋ช
๋๋ฆด๊ฒ์.
๐งฉ ์ค๋น ๋จ๊ณ
โ 1. Docker ์ค์น ํ์ธ
๋จผ์ Docker๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
ํฐ๋ฏธ๋(๋๋ ๋ช
๋ น ํ๋กฌํํธ)์ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ธ์.
- ๋ง์ฝ ๋ฒ์ ์ด ์ถ๋ ฅ๋๋ฉด OK.
- ๋ง์ฝ “๋ช
๋ น์ด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค” ๋ผ๋ฉด https://www.docker.com ์์ OS์ ๋ง๋ Docker Desktop์ ์ค์นํ์ธ์.
์ค์น ํ ๋ฐ๋์ Docker Desktop์ ์คํํด๋ก๋๋ค.
๐ PostgreSQL ์ค์น ๋ฐ ์คํ (Docker ๋ฐฉ์)
โ 2. PostgreSQL ์ปจํ ์ด๋ ์คํ
ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ด๋ฅผ ๊ทธ๋๋ก ์ ๋ ฅํ์ธ์ ๐
๐ง ๋ช ๋ น์ด ํด์
| --name seed-postgres | ์ปจํ ์ด๋ ์ด๋ฆ์ ‘seed-postgres’๋ก ์ง์ |
| -e POSTGRES_USER=seeduser | DB ์ฌ์ฉ์ ์ด๋ฆ ์ค์ |
| -e POSTGRES_PASSWORD=seedpass | ๋น๋ฐ๋ฒํธ ์ค์ |
| -e POSTGRES_DB=seed_db | ์ด๊ธฐ ์์ฑํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ |
| -p 5432:5432 | ๋ก์ปฌํฌํธ 5432๋ฅผ ์ปจํ ์ด๋์ 5432ํฌํธ์ ์ฐ๊ฒฐ |
| -d postgres | ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ, ๊ณต์ PostgreSQL ์ด๋ฏธ์ง ์ฌ์ฉ |
โ 3. ์ปจํ ์ด๋๊ฐ ์ ๋ด๋์ง ํ์ธ
๊ฒฐ๊ณผ ์์ ๐
์ด๋ ๊ฒ ๋์ค๋ฉด ์ ์ ์๋ ์ค์ ๋๋ค ๐
๐งญ 4. PostgreSQL ์ ์ํ๊ธฐ
๋ฐฉ๋ฒ โ : Docker ์์์ ์ง์ ์ ์
- -it : ํฐ๋ฏธ๋ ๋ชจ๋๋ก ์ ์
- -U seeduser : ์ฌ์ฉ์ ์ด๋ฆ
- -d seed_db : ์ ์ํ DB ์ด๋ฆ
์ ์ ํ ๋์ค๋ ํ๋กฌํํธ ์์ ๐
๊ฐ๋จํ ๋ช ๋ น์ด ์์
๐ฅ๏ธ 5. GUI๋ก ์ ์ํ๊ณ ์ถ๋ค๋ฉด (์ ํ)
์ด๋ณด์๋ถ๋ค์ด๋ผ๋ฉด pgAdmin 4๋ฅผ ์ถ์ฒ๋๋ ค์.
- ์ค์น: https://www.pgadmin.org/download/
- ์คํ ํ → Add New Server ํด๋ฆญ
- Host name/address: localhost
- Port: 5432
- Username: seeduser
- Password: seedpass
์ด์ GUI ํ๊ฒฝ์์ DB๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค ๐
๐ 6. ์์ฃผ ์ฐ๋ Docker ๋ช ๋ น์ด ๋ชจ์
| docker ps | ์คํ ์ค์ธ ์ปจํ ์ด๋ ํ์ธ |
| docker stop seed-postgres | ์ปจํ ์ด๋ ์ ์ง |
| docker start seed-postgres | ์ปจํ ์ด๋ ์ฌ์์ |
| docker logs seed-postgres | ๋ก๊ทธ ๋ณด๊ธฐ |
| docker rm -f seed-postgres | ์ปจํ ์ด๋ ์์ ์ญ์ |
๐ฆ 7. (์ ํ) Docker Compose๋ก ์๋ํํ๊ธฐ
๋งค๋ฒ ๋ช ๋ น์ด๋ฅผ ์น๊ธฐ ๋ฒ๊ฑฐ๋กญ๋ค๋ฉด, docker-compose.yml ํ์ผ์ ๋ง๋ค์ด ์๋ํํ ์ ์์ต๋๋ค ๐
๊ทธ๋ฆฌ๊ณ ์๋ ๋ช ๋ น์ด๋ก ์คํํฉ๋๋ค:
๐ ์ด๋ ๊ฒ ํ๋ฉด ์ปจํ ์ด๋๋ฅผ ๊ป๋ค ์ผ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋ฉ๋๋ค (./pgdata ํด๋์ ์ ์ฅ).
โ ์์ฝ
| ์ค์น ๋ช ๋ น | docker run -e POSTGRES_USER=... -d postgres |
| ๊ธฐ๋ณธ ํฌํธ | 5432 |
| ๊ธฐ๋ณธ ์ ์ | docker exec -it ์ปจํ ์ด๋๋ช psql -U ์ฌ์ฉ์๋ช -d DB๋ช |
| GUI ๊ด๋ฆฌ | pgAdmin 4 |
| ์ ์ง ๋ฐฉ์ | volume ๋ง์ดํธ๋ก ๋ฐ์ดํฐ ์๊ตฌ ์ ์ฅ |
์ํ์ ๋ค๋ฉด,
๐ ๋ค์ ๋จ๊ณ๋ก Spring Boot + ์ด PostgreSQL ๋์ปค๋ฅผ ์ฐ๊ฒฐํ๋ ์ค์ (application.yml ์์ ํฌํจ) ๋ ๋ฐ๋ก ์๋ดํด๋๋ฆด ์ ์์ต๋๋ค.




1- docker pull postgres:15
2-
docker run -d `
--name pg `
--restart unless-stopped `
-e POSTGRES_USER=app `
-e POSTGRES_PASSWORD=app1234 `
-e POSTGRES_DB=appdb `
-p 5432:5432 `
-v pgdata:/var/lib/postgresql/data `
--health-cmd="pg_isready -U app" `
--health-interval=10s --health-timeout=5s --health-retries=5 `
postgres:15
-ํ์ค์ง๋ฆฌ ๋ฒ์
docker run -d --name labzang --restart unless-stopped -e POSTGRES_USER=labzang -e POSTGRES_PASSWORD=labzang88 -e POSTGRES_DB=labzangdb -p 5432:5432 -v pgdata:/var/lib/postgresql/data --health-cmd="pg_isready -U app" --health-interval=10s --health-timeout=5s --health-retries=5 postgres:15
3- docker ps

4-
docker exec -it esgseed bash
*์ค์ ํ ์ด๋ฆ์ผ๋ก ๊ฒ์
5-
root@4da107a874d3:/# psql -U labzang -d labzangdb
6- ์ด ํ๋ฉด์ด ๋์ค๋ฉด db ์ ์๊น์ง ์์ฑ์
๋๋ค.
labzangdb=#
1-
docker pull postgres:15
2-
docker run -d --name esgseed --restart unless-stopped -e POSTGRES_USER=esgseed -e POSTGRES_PASSWORD=esgseed1234 -e POSTGRES_DB=esgseeddb -p 5432:5432 -v pgdata:/var/lib/postgresql/data --health-cmd="pg_isready -U app" --health-interval=10s --health-timeout=5s --health-retries=5 postgres:15
3-
docker ps
docker exec -it esgseed bash
5-
root@4da107a874d3:/# psql -U esgseed -d esgseeddb
6- ์ด ํ๋ฉด์ด ๋์ค๋ฉด db ์ ์๊น์ง ์์ฑ์
๋๋ค.
esgseeddb=#

๋ง๋ค์ด์ง db์ test.csv ํ์ผ์ test ํ ์ด๋ธ๋ก ์ ์ฅํ๊ณ ์ถ์ด. ํ์ฌ csvํ์ผ์ C:\Users\hi\Documents\project\api-server\src\main\resources\static\csv ์ด ๊ฒฝ๋ก์ ์์ด. ์ด ๊ฒฝ๋ก์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋์ปค์์ ์๋ ํฌ์คํธ๊ทธ๋ฆฌ๋ก ์ฎ๊ธฐ๊ณ ์ถ์ด. ๊ณผ์ ์ ์ค๋ช ํด์ค.
์ค๋น: CSV ํ์ผ ๋ณต์ฌ (์ด๋ฏธ ํ์ผ๋ฉด ์๋ต)
docker cp "C:\Users\hi\Documents\project\api-server\src\main\resources\static\csv\test.csv" esgseed:/tmp/test.csv
1๋จ๊ณ: ์ปจํ ์ด๋ bash๋ก ๋ค์ด๊ฐ๊ธฐ
docker exec -it esgseed bash
2๋จ๊ณ: psql๋ก DB ์ ์
์ปจํ ์ด๋ ์์์ ์ ๋ ฅ:
psql -U esgseed -d esgseeddb
3๋จ๊ณ: ํ ์ด๋ธ ์ญ์ (๊ธฐ์กด ํ ์ด๋ธ ์์ผ๋ฉด)
psql ์์์ ์ ๋ ฅ:
DROP TABLE IF EXISTS test;
2. ํ ์ด๋ธ ๋ค์ ์์ฑ (๋์ผ)
CREATE TABLE test (
๋์์ฐ๋ TEXT,
๊ธฐ๊ด๊ตฌ๋ถ TEXT,
๊ธฐ๊ด๋ช
TEXT,
"๊ธฐ์ค๋ฐฐ์ถ๋(tonCOโ-eq)" NUMERIC,
"์จ์ค๊ฐ์ค ์ ๋ฐฐ์ถ๋(tonCOโ-eq)" NUMERIC,
"์จ์ค๊ฐ์ค ์ด ๊ฐ์ถ๋(tonCOโ-eq)" NUMERIC,
"์จ์ค๊ฐ์ค ๊ฐ์ถ(%)" NUMERIC,
"๊ถ์ฅ๋ชฉํ ๋ฌ์ฑ์ ๋ฌด(13.2%)" TEXT,
๋น๊ณ TEXT
);
3. ๋ฐ์ดํฐ ๋ก๋ (ํต์ฌ: FORCE_NULL ์ถ๊ฐ!)
\copy test FROM '/tmp/test.csv' WITH (FORMAT csv, HEADER true, DELIMITER ',', FORCE_NULL ("๊ธฐ์ค๋ฐฐ์ถ๋(tonCOโ-eq)", "์จ์ค๊ฐ์ค ์ ๋ฐฐ์ถ๋(tonCOโ-eq)", "์จ์ค๊ฐ์ค ์ด ๊ฐ์ถ๋(tonCOโ-eq)", "์จ์ค๊ฐ์ค ๊ฐ์ถ(%)"), ENCODING 'UTF8');
4. ํ์ธ
SELECT COUNT(*) FROM test;
์์: 12
SELECT * FROM test LIMIT 3;
"" ์๋ ๊ณณ์ด NULL๋ก ๋ค์ด๊ฐ


ํ์ธ: ์ ์ฒด ๋ฐ์ดํฐ๋ ์ ๋ค์ด๊ฐ๋์?
์ด๊ฑธ ์ ๋ ฅํ๋ฉด ์ ์ฒด ํ ์๊ฐ ๋์์ ์: 12 → 12๊ฐ ํ์ด ๋ค ๋ค์ด๊ฐ ๊ฑฐ!
์ ์ฒด ๋ฐ์ดํฐ ๋ณด๊ธฐ (๋ชจ๋ ๋ค ๋ณด๊ธฐ)
๋ชจ๋ ํ์ด ์ถ๋ ฅ๋จ (12๊ฐ)
์ผ๋ถ๋ง ๋ณด๊ธฐ (์: ์ 5๊ฐ)
SELECT * FROM test LIMIT 5;

๊นํ๋ธ
๋์ปคํ๋ธ
**์ด ๊ฒฝ๋ก ์๋! ์ฐธ๊ณ ํ์ง ๋ง๊ฒ





5432
ํฐ๋ฏธ๋์ ๋ค์๊ฐ์ ๋ช ๋ น์ด ๋ฃ๊ธฐ
netstat -ano | findstr 5432 taskkill /PID 1552 /F
'Project ESG+AI > [์ผ์ KPMG]ESG ๋ฐ์ดํฐ ํ์ฉ ํ์คํ ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 15์ผ์ฐจ. SQL์ ๋ํด ์์๋ณด์ (1) | 2025.10.29 |
|---|---|
| 14์ผ์ฐจ. ๋์ปค, pgAdmin ์ค์นํ๊ธฐ(์ด๊ฒ ์ฐ) (0) | 2025.10.28 |
| 12์ผ์ฐจ. (1) | 2025.10.24 |
| 11์ผ์ฐจ. (0) | 2025.10.23 |
| 10์ผ์ฐจ. ํฐ๋ฏธ๋์ csv ํ์ผ ๋ด์ฉ์ด ๋ํ๋๊ฒ ํด์ค (0) | 2025.10.22 |