๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์—”๋“œ/Spring boot

EC2์—์„œ PostgreSQL์„ Docker๋กœ ์šด์˜ํ•˜๋ฉฐ ๊ฒช์—ˆ๋˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๊ณผ์ • ์ •๋ฆฌ

by sh119 2025. 2. 14.

 

 

ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ ํ™˜๊ฒฝ์…‹ํŒ…์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๊ณ , ์šฐ๋ฆฌ๋Š” EC2ํ™˜๊ฒฝ์—์„œ Docker๋ฅผ ์ด์šฉํ•˜์—ฌ PostgreSQL์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. 

์•„๋ž˜์—๋Š” ํ•ด๋‹น ๊ณผ์ •์„ ์™„๋ฃŒํ•˜๋ฉด์„œ ๊นŒ์ง€ ๊ฒช์—ˆ๋˜ ์ž‘์€ ์˜ค๋ฅ˜๋“ค์„ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.

 

 

๋ชฉ์ฐจ

1๏ธโƒฃ Docker ๊ถŒํ•œ ์˜ค๋ฅ˜ (permission denied) ํ•ด๊ฒฐ → usermod -aG docker
2๏ธโƒฃ init.sql ํŒŒ์ผ ์ „์†ก ์˜ค๋ฅ˜ (scp์—์„œ : ๋น ์ง) ํ•ด๊ฒฐ
3๏ธโƒฃ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ˆœ์„œ ์˜ค๋ฅ˜ (relation does not exist) ํ•ด๊ฒฐ
4๏ธโƒฃ ํ•จ์ˆ˜ ์ค‘๋ณต ์˜ค๋ฅ˜ (function already exists) ํ•ด๊ฒฐ
5๏ธโƒฃ PL/pgSQL ๋ณ€์ˆ˜ ์ถฉ๋Œ ์˜ค๋ฅ˜ (table_name is ambiguous) ํ•ด๊ฒฐ
6๏ธโƒฃ ๋กœ์ปฌ์—์„œ EC2 PostgreSQL ์ ‘์† ์˜ค๋ฅ˜ (Connection timed out) ํ•ด๊ฒฐ
7๏ธโƒฃ AWS ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ • ๋ฌธ์ œ ํ•ด๊ฒฐ (5432 ํฌํŠธ ์—ด๊ธฐ)

 

 

๐Ÿ”ฅ 1. Docker๋กœ PostgreSQL์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋“ค

๋ฌธ์ œ 1: docker: command not found

๐Ÿ” ์›์ธ

  • Docker๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

 
sudo apt update sudo apt install -y docker.io docker-compose

ใ„ด> ์„ค์น˜ ํ›„ ๋‹ค์‹œ ์‹คํ–‰

 
docker --version # ์ •์ƒ์ ์œผ๋กœ ๋ฒ„์ „์ด ๋‚˜์˜ค๋ฉด ํ•ด๊ฒฐ๋จ!
 

๋ฌธ์ œ 2: permission denied while trying to connect to the Docker daemon socket

๐Ÿ” ์›์ธ

  • Ubuntu ๊ณ„์ •(ubuntu)์ด Docker ์‹คํ–‰ ๊ถŒํ•œ์ด ์—†์–ด์„œ ๋ฐœ์ƒ

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

 
sudo usermod -aG docker ubuntu su - ubuntu # ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ

ใ„ด> ์ด์ œ docker ps๊ฐ€ sudo ์—†์ด๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค

 

๐Ÿ”ฅ  init.sql์„ ์‹คํ–‰ํ•˜๋ฉฐ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋“ค

๋ฌธ์ œ 3: init.sql์ด EC2๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด ๋กœ์ปฌ ์„œ๋ฒ„์— ๋ณต์‚ฌ๋จ

๐Ÿ” ์›์ธ

  • scp ๋ช…๋ น์–ด์—์„œ :๋ฅผ ๋น ๋œจ๋ ค์„œ ๋กœ์ปฌ์— ํŒŒ์ผ์ด ๋ณต์‚ฌ๋จ! 

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์˜ฌ๋ฐ”๋ฅธ scp ๋ช…๋ น์–ด 

scp -i your-key.pem ~/Desktop/init.sql ubuntu@<EC2_IP>:~

 

โœ… EC2์—์„œ ํŒŒ์ผ ํ™•์ธ

ls -l ~

ใ„ด init.sql์ด ๋ณด์ด๋ฉด ์„ฑ๊ณต!

 

๋ฌธ์ œ 4: relation "p_category" does not exist ์˜ค๋ฅ˜ ๋ฐœ์ƒ

๐Ÿ” ์›์ธ

  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์ฐธ์กฐ ๊ด€๊ณ„(FK) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โœ”๏ธ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ˆœ์„œ๋ฅผ ์กฐ์ •!

1๏ธโƒฃ p_category
2๏ธโƒฃ p_user
3๏ธโƒฃ p_restaurant
4๏ธโƒฃ p_address
5๏ธโƒฃ p_order
6๏ธโƒฃ ๋‚˜๋จธ์ง€ ํ…Œ์ด๋ธ” (p_order_item, p_review, p_payment, p_ai_log)

โœ…  ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ ๋‹ค์‹œ init.sql ์‹คํ–‰!

(์ด๋•Œ, ๊ธฐ์กด ์˜ค๋ฅ˜ ๋‚œ ํ…Œ์ด๋ธ”๊ณผ ์ถฉ๋Œ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ œ๋Œ€๋กœ ์ž˜ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.)
sudo docker exec -it postgre psql -U 28team -d 28team -f /init.sql

 

โŒ ๋ฌธ์ œ 5: function "update_timestamp" already exists with same argument types

๐Ÿ” ์›์ธ

  • ์ด์ „์— ์ƒ์„ฑ๋œ update_timestamp ํ•จ์ˆ˜๊ฐ€ ๋‚จ์•„ ์žˆ์–ด์„œ ๋‹ค์‹œ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โœ”๏ธ ๊ธฐ์กด ํ•จ์ˆ˜ ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ์‹คํ–‰!

 
DROP FUNCTION IF EXISTS update_timestamp CASCADE;

โœ… ๊ทธ ํ›„ ๋‹ค์‹œ init.sql ์‹คํ–‰ํ•˜๋ฉด ์ •์ƒ ์ž‘๋™!

 

โŒ ๋ฌธ์ œ 6: column reference "table_name" is ambiguous

๐Ÿ” ์›์ธ

  • PL/pgSQL์˜ ๋ณ€์ˆ˜๋ช… table_name์ด ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ๋ช…๊ณผ ์ถฉ๋Œํ•ด์„œ ๋ฐœ์ƒ

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โœ”๏ธ ๋ณ€์ˆ˜๋ช…์„ table_name → tbl_name์œผ๋กœ ๋ณ€๊ฒฝ!

 
DO $$ DECLARE tbl_name TEXT; BEGIN FOR tbl_name IN SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE' LOOP EXECUTE format(' CREATE TRIGGER trigger_update_%I BEFORE UPDATE ON %I FOR EACH ROW EXECUTE FUNCTION update_timestamp();', tbl_name, tbl_name); END LOOP; END $$;
 

โœ… ๋ณ€์ˆ˜๋ช…์„ ๋ฐ”๊พธ๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋จ

 

๐Ÿ”ฅ ๋กœ์ปฌ์—์„œ EC2 PostgreSQL ์ ‘์† ์ค‘ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ

โŒ ๋ฌธ์ œ 7: psql: could not connect to server: Connection timed out

๐Ÿ” ์›์ธ

  1. PostgreSQL์ด ์™ธ๋ถ€ ์ ‘์†์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ
  2. AWS ๋ณด์•ˆ ๊ทธ๋ฃน์—์„œ 5432 ํฌํŠธ๊ฐ€ ๋‹ซํ˜€ ์žˆ์Œ

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โœ”๏ธ PostgreSQL ์„ค์ • ์ˆ˜์ • (postgresql.conf)

 
sudo nano /etc/postgresql/14/main/postgresql.conf
 

๐Ÿ“Œ listen_addresses = '*' ๋กœ ๋ณ€๊ฒฝ

 

โœ”๏ธ ์ ‘์† ํ—ˆ์šฉ (pg_hba.conf)

sudo nano /etc/postgresql/14/main/pg_hba.conf

๋งจ ์•„๋ž˜ ์ถ”๊ฐ€

host all all 0.0.0.0/0 md5      # ํ•ด๋‹น ๋‚ด์šฉ ์œ„์˜ ํŒŒ์ผ ์•ˆ์—์„œ ์ˆ˜์ •

โœ… PostgreSQL ์žฌ์‹œ์ž‘

 
sudo systemctl restart postgresql
 

โœ”๏ธ AWS ๋ณด์•ˆ ๊ทธ๋ฃน์—์„œ 5432 ํฌํŠธ ์—ด๊ธฐ

  • AWS ์ฝ˜์†” → EC2 → ๋ณด์•ˆ ๊ทธ๋ฃน → ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์ถ”๊ฐ€
  • 5432 ํฌํŠธ ํ—ˆ์šฉ (0.0.0.0/0 ๋˜๋Š” ๋‚ด IP ์„ ํƒ)

๐Ÿš€ ์ด์ œ ๋กœ์ปฌ์—์„œ EC2 PostgreSQL ์ ‘์† ๊ฐ€๋Šฅ! 

 
๋งˆ์ง€๋ง‰์œผ๋กœ 
psql -h <EC2_IP> -p 5432 -U 28team -d 28team
๋ช…๋ น์–ด๋กœ ์ ‘์† ํ˜น์€ 

โœ… DBeaver์—์„œ EC2 ํผ๋ธ”๋ฆญ IP์™€ ์„ค์ •ํ•œ username, password๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ๊ณผ ์—ฐ๊ฒฐ!

 

 

์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ชจ๋“  ๊ณผ์ •์„ ํ•ด๋ณด๋ฉด์„œ ์ž‘์€ ์˜ค๋ฅ˜ ์‚ฌํ•ญ๋“ค์ด ๋งŽ์•˜์ง€๋งŒ, ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ์ •๋ง ๋งŽ์€ ๊ณต๋ถ€๊ฐ€ ๋˜์—ˆ๋‹ค.

๋˜ํ•œ ๊ธฐ์กด์— ๊ฒฝํ—˜์ด ์žˆ์œผ์‹  ํŒ€์›๋ถ„์˜ ๋„์›€์„ ๋ฐ›์•„ ํฐ ์–ด๋ ค์›€ ์—†์ด ๊ฐ์ž 3๊ฐœ์˜ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. 

 

'๋ฐฑ์—”๋“œ > Spring boot' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

API Gateway ์™€ Kafka  (0) 2025.02.26
Spring Boot ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ์„ค๊ณ„  (0) 2025.02.25
Gradle์ด๋ž€?  (0) 2024.11.25
์›น ์Šคํฌ๋ž˜ํ•‘  (0) 2024.09.23
๋ฐฐ๋‹น๊ธˆ Project  (2) 2024.09.23