Sam Baek, The Dev's Corner

๐Ÿ˜ Postgre๋ฅผ ํ†ตํ•ด ๋ณธ AWS ์„ค์ •ํ•˜๊ธฐ

27 Jul 2023

Postgre VPC ์„ค์ •ํ•˜๊ธฐ


Express๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ ๋‚œ ํ›„ AWS๋ฅผ ํ™œ์šฉํ•˜๊ณ ,
DB๋ฅผ ์—ฐ๋™ํ•˜๋‹ค๋ณด๋‹ˆ ๋‚œ์žกํ•˜๊ฒŒ ์ •๋ฆฌ๋˜๋Š” ๊ธฐ๋ถ„์ด์ง€๋งŒโ€ฆ
ํ›‘์€ ๋’ค ๋‹ค์‹œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

์ด์ „์—” MySQL์„ AWS์—์„œ ์‚ฌ์šฉํ•ด ์ž‘์—…ํ–ˆ์ง€๋งŒ
์ด๋ฒˆ์—” Postgre๋ฅผ ์‚ฌ์šฉํ•ด ์ž‘์—…ํ•ด๋ณด๊ณ ์žํ•œ๋‹ค.
๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด MySQL๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ
RDS๋ฅผ ๋งŒ๋“ค์–ด์„œ ์—ฐ๋™ํ•ด์•ผํ•œ๋‹ค

๋ฐฉ๋ฒ•์€ ๋™์ผํ•˜๋‹ค.
mysql ๋•Œ ์ฒ˜๋Ÿผ vpc ๋จผ์ € ์ƒ์„ฑํ•œ๋‹ค.
์ดํ›„ ์„œ๋ธŒ๋„ท์— ๋“ค์–ด๊ฐ€ public์— ํ•ด๋‹นํ•˜๋Š” ์„œ๋ธŒ๋„ท ์ด๋ฆ„์„ ํ™•์ธํ•œ๋‹ค.

Postgre Subnet Group ์„ค์ •ํ•˜๊ธฐ


mySQL๊ณผ ๊ฐ™์€ ๊ณผ์ •์˜ ๋ฐ˜๋ณต์ด๋‹ค.
VPC๋ฅผ ์ƒ์„ฑํ–ˆ๊ณ  ์„œ๋ธŒ๋„ท ์ด๋ฆ„๋„ ํ™•์ธํ–ˆ๋‹ค๋ฉด
๋‹ค์Œ์€ ์„œ๋ธŒ๋„ท ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์„œ๋ธŒ๋„ท ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•ด ๋งŒ๋“ค์–ด๋‘” vpc๋กœ ์„ค์ •ํ•˜๊ณ 
ํ™•์ธํ•ด๋‘” ์„œ๋ธŒ๋„ท์„ ํ• ๋‹นํ•œ๋‹ค.
a์™€ c ๋˜ํ•œ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ์žŠ์ง€๋ง์ž.
์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์„œ๋ธŒ๋„ท ๊ทธ๋ฃน ์ƒ์„ฑ๊นŒ์ง€ ๋๋‚œ๋‹ค.

Postgre RDS ์„ค์ •ํ•˜๊ธฐ


VPC ์ƒ์„ฑ, ์„œ๋ธŒ๋„ท ์ด๋ฆ„ ํ™•์ธ, ์„œ๋ธŒ๋„ท ๊ทธ๋ฃน ์ƒ์„ฑ๊นŒ์ง€ ๋๋‚ฌ๋‹ค๋ฉด
๋‹ค์Œ์€ RDS๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
RDS ๋Œ€์‹œ๋ณด๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋“ค์–ด๊ฐ€ ์ƒ์„ฑ์„ ์„ ํƒํ•œ๋‹ค.
MySQL๊ณผ ๋‹ค๋ฅธ ์ ์€ PostgreSQL์„ ์—”์ง„์œผ๋กœ ์„ ํƒํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋งˆ์Šคํ„ฐ ์‚ฌ์šฉ์ž ์ด๋ฆ„, DBํด๋Ÿฌ์Šคํ„ฐ ์‹๋ณ„์ž, ์•”ํ˜ธ, ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์–ตํ•œ๋‹ค.
์ฐธ๊ณ ๋กœ MySQL์˜ ํฌํŠธ๋ฒˆํ˜ธ๋Š” 3306์ด์—ˆ๋Š”๋ฐ, PostgreSQL์€ 5432๋ฒˆ์ด๋‹ค.
ํ”„๋ฆฌํ‹ฐ์–ด๋กœ ์š”๊ธˆ ๊ณผ๊ธˆ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์˜คํ† ์Šค์ผ€์ผ๋ง๊ณผ
์˜คํ†  ๋ฐฑ์—…, ๋งˆ์ด๋„ˆ ์—…๊ทธ๋ ˆ์ด๋“œ๋Š” ์ œ์™ธํ•˜๋„๋กํ•œ๋‹ค.

RDS Inbound rule ์„ค์ •


DB๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋‚˜๋ฉด ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ์„ค์ •ํ•œ๋‹ค.
๋ณด์•ˆ์˜ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์— ๋“ค์–ด๊ฐ€
All trafic, AnywhereIpV4๋ฅผ ์„ค์ •ํ•œ๋‹ค.
์ด์ œ PostgreSQL์„ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค.

express pg ์„ค์น˜ํ•˜๊ธฐ


PostgreSQL์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด
ํ”„๋กœ์ ํŠธ์˜ ํ„ฐ๋ฏธ๋„์—์„œ pg library๋ฅผ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

npm install pg

PostgreSQL๊ณผ RDS ์—ฐ๋™ํ•˜๊ธฐ


pg๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜จ๋‹ค.
์•„ npm ์‚ฌ์ดํŠธ์˜ pg ํŒจํ‚ค์ง€๋ฅผ ๋“ค์–ด๊ฐ€๋ฉด ์ฐธ๊ณ ํ•  ์š”์†Œ๊ฐ€ ๋งŽ๋‹ค.

pg pool ์„ค์ •

import pkg from 'pg';
const { Pool } = pkg;

RDS ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์„ค์ •

const pool = new Pool({
    host: 'RDS์—”๋“œํฌ์ธํŠธ',
    user: 'DB์œ ์ €๋„ค์ž„',
    port: 5432,
    password: 'DB๋น„๋ฐ€๋ฒˆํ˜ธ'
});

connect, release ์„ค์ •

const client = await pool.connect()
await client.query('SELECT NOW()')
client.release()