Skip to content

πŸ’» [BE] DB 섀계 및 ꡬ좕 (μž‘μ„±μΌ: 2024 11 07)

Hyein Jeong edited this page Nov 7, 2024 · 1 revision

1. ERD μž‘μ„±

erd cloud μ‚¬μ΄νŠΈμ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ 섀계

λ°μ΄ν„°λ² μ΄μŠ€ κ΅¬μ‘°λŠ” κΈ°νšμ„ ν•  λ•ŒλΆ€ν„° μ–΄λŠ 정도 κ΅¬μƒν•΄λ‘μ—ˆκΈ° λ•Œλ¬Έμ—, 큰 어렀움 없이 μž‘μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ λ°°μ—΄μ΄λ‚˜ Object ν˜•μ‹μœΌλ‘œ μ €μž₯ν•˜λŠ” 게 νŽΈν–ˆκΈ° λ•Œλ¬Έμ—, json νƒ€μž…μ„ μ§€μ›ν•˜λŠ” db둜 κ²°μ •ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

image

2. λ°μ΄ν„°λ² μ΄μŠ€ μŠ€νƒ κ²°μ •

PostgreSQL μ‚¬μš©

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ λŒ€λ‘œ JSON 데이터 νƒ€μž…μ„ μ§€μ›ν•˜μ—¬ λ³΅μž‘ν•œ ꡬ쑰의 데이터λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜κΈ°μ— μ ν•©ν–ˆκ³ , λ‹€λ₯Έ DB보닀 κ°„νŽΈν•˜κ³  νŽΈλ¦¬ν•˜λ‹€λŠ” νŠΉμ„± λ•Œλ¬Έμ— PostgreSQL둜 κ²°μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

3. μ„œλ²„ 및 λ°μ΄ν„°λ² μ΄μŠ€ ꡬ좕

넀이버 ν΄λΌμš°λ“œ ν”Œλž«νΌ(NCP)을 μ‚¬μš©ν•œ DB μ„œλ²„ ꡬ좕

ν¬λ ˆλ”§μ΄ μžˆμ—ˆκΈ° λ•Œλ¬Έμ— μ΅œλŒ€ν•œ 이 μ„œλΉ„μŠ€λ₯Ό ν™œμš©ν•˜λ©΄ μ’‹κ² λ‹€λŠ” 생각과 μ‹€μ œ 넀이버 ν΄λΌμš°λ“œ ν”Œλž«νΌμ—μ„œ Cloud DB for PostgreSQL μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ— 비ꡐ적 κ°„νŽΈν•˜κ²Œ μ„œλ²„λ₯Ό ꡬ좕할 수 μžˆκ² λ‹€λŠ” 생각 λ•Œλ¬Έμ— NCPλ₯Ό ν™œμš©ν•˜κΈ°λ‘œ κ²°μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μžμ„Έν•œ μ„€μ • λ‚΄μš©μ€ μ•„λž˜μ— μΆ”κ°€λ‘œ μž‘μ„±ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

(ν•˜μ§€λ§Œ 생각보닀 κ°„λ‹¨ν•˜μ§€ μ•Šμ•˜κ³ , 였히렀 처음 ν™œμš©ν•΄λ³΄μ•˜κΈ° λ•Œλ¬Έμ— dockerλ₯Ό ν™œμš©ν•˜λŠ” 게 더 λΉ¨λžμ„ μˆ˜λ„ μžˆκ² λ‹€λŠ” 생각이 λ“­λ‹ˆλ‹€β€¦)

VPC 및 μ„œλΈŒλ„· μ„€μ •

처음 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ„€μ •ν•˜λ©΄μ„œ PostgreSQL μ„œλ²„κ°€ μ•ˆμ „ν•˜κ²Œ μž‘λ™ν•˜λ„λ‘ λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

넀이버 ν΄λΌμš°λ“œ ν”Œλž«νΌμ—μ„œλŠ” κΈ°λ³Έ VPC와 μ„œλΈŒλ„·μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ—, IP μ£Όμ†Œλ₯Ό ν¬ν•¨ν•œ 프라이빗 λ„€νŠΈμ›Œν¬ 섀정을 μΆ”κ°€λ‘œ λ§Œλ“€μ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό 톡해 μ™ΈλΆ€μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” IPλ₯Ό μ œμ–΄ν•˜κ³  λ³΄μ•ˆ 섀정을 κ°•ν™”ν–ˆμŠ΅λ‹ˆλ‹€.

  1. VPC μ„€μ •: IP μ£Όμ†Œ λ²”μœ„λ₯Ό 프라이빗 IP λŒ€μ—­(예: 10.0.0.0/16)으둜 μ„€μ •ν•˜μ—¬ λ³΄μ•ˆμ„ μœ μ§€ν–ˆμŠ΅λ‹ˆλ‹€.
  2. μ„œλΈŒλ„· μ„€μ •: 각 μ„œλΈŒλ„·μ„ ꡬ뢄해 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ™€ 같은 λ¦¬μ†ŒμŠ€λ₯Ό λ‚΄λΆ€μ μœΌλ‘œ λΆ„λ¦¬λœ λ„€νŠΈμ›Œν¬ 내에 λ‘μ—ˆμŠ΅λ‹ˆλ‹€.

PostgreSQL μΈμŠ€ν„΄μŠ€ 생성 및 μ„€μ •

넀이버 ν΄λΌμš°λ“œ ν”Œλž«νΌμ˜ Cloud DB for PostgreSQL μ„œλΉ„μŠ€λ₯Ό 톡해 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μ΄λ•Œ κΈ°λ³Έ public μŠ€ν‚€λ§ˆμ— μ ‘κ·Όν•˜λ €λ©΄ κΆŒν•œ 섀정이 ν•„μš”ν–ˆμœΌλ‚˜, 넀이버 ν΄λΌμš°λ“œλŠ” μŠˆνΌμœ μ € κΆŒν•œμ„ μ œκ³΅ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, μ‚¬μš©μž κΆŒν•œ λ‚΄μ—μ„œ λ³„λ„μ˜ μŠ€ν‚€λ§ˆ(main)λ₯Ό μƒμ„±ν•˜μ—¬ ν…Œμ΄λΈ”μ„ μΆ”κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  1. μƒˆλ‘œμš΄ μŠ€ν‚€λ§ˆ 생성: public λŒ€μ‹  main μŠ€ν‚€λ§ˆλ₯Ό μƒμ„±ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰λ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  2. ν…Œμ΄λΈ” 생성: μ„€κ³„ν–ˆλ˜ λŒ€λ‘œ mainμŠ€ν‚€λ§ˆμ— channel, user, guest ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜μ˜€κ³ , 이 ν…Œμ΄λΈ” κ°„ 관계 섀정을 μœ„ν•΄ μ„€κ³„ν•œ λŒ€λ‘œ μ™Έλž˜ ν‚€λ₯Ό μ„€μ •ν•˜μ—¬ 데이터 κ°„μ˜ 무결성을 보μž₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

5. λ°μ΄ν„°λ² μ΄μŠ€ 초기 μ„€μ • 및 ν…ŒμŠ€νŠΈ

λ°μ΄ν„°λ² μ΄μŠ€ 연결을 μœ„ν•œ 초기 ν…ŒμŠ€νŠΈλ₯Ό IntelliJμ—μ„œ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

μ—°κ²° μ‹œ λ°œμƒν•˜λŠ” λ‹€μ–‘ν•œ 문제λ₯Ό ν•΄κ²°ν•˜μ˜€κ³ , 특히 κΆŒν•œ 문제(예: permission denied for schema public)λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μƒˆλ‘œ μƒμ„±ν•œ μŠ€ν‚€λ§ˆμ— μ ‘κ·Όν•˜λ„λ‘ μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

이 κ³Όμ •μ—μ„œ 각 ν…Œμ΄λΈ” κ°„μ˜ μ°Έμ‘° 무결성을 ν™•μΈν•˜κ³  초기 데이터 μ‚½μž… 및 쑰회 ν…ŒμŠ€νŠΈλ₯Ό μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€κ°€ 잘 μž‘λ™ν•˜λŠ”μ§€ κ²€μ¦ν–ˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜λŠ” μƒμ„±λœ dbλ₯Ό intellijμ—μ„œ ν™•μΈν–ˆμ„ λ•Œ λ‹€μ΄μ–΄κ·Έλž¨ λͺ¨μŠ΅μž…λ‹ˆλ‹€.

image

Clone this wiki locally