๋ฐ˜์‘ํ˜•

 

 

Supabase ์‚ฌ์šฉ๋ฒ•์„ ๋งํ•˜๊ธฐ์— ์•ž์„œ

 

 

ํ˜„์žฌ ๊ฐœ๋ฐœ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝํ•˜๋ฉด ๋ณด์ด์ŠคํŒฉ์„ ๊ฑฐ๋ž˜ํ•˜๊ณ  ๊ตฌ๋งคํ•œ ๋ณด์ด์ŠคํŒฉ์„ ํ”Œ๋žซํผ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒํ•ด์ฃผ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.

 

์–ด๋–ค DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์„ ํƒ์ผ๊นŒ..?

 

์šฐ์„  ํฌ๊ฒŒ 3๊ฐ€์ง€๋ฅผ ๊ณ ๋ฏผํ•ด๋ณด์•˜๋‹ค

 

1. ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ณด์žฅ & ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ

 

1. NoSQL์€ RDBMS์— ๋น„ํ•ด ํŠธ๋žœ์žญ์…˜ ์ง€์›์ด ์–ด๋ ต๊ณ  ์ œํ•œ์ ์ž„

=> NoSQL์—์„œ ์—ฌ๋Ÿฌ ๋ฌธ์„œ์— ๋Œ€ํ•œ ํŠธ๋žœ์žญ์…˜์€ ๋” ๋ณต์žก

2. ๊ฒฐ์ œ ์‹œ์Šคํ…œ์˜ ํŠน์„ฑ์ƒ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ •ํ™•ํ•ด์•ผํ•จ

=> RDBMS๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

 

(์ผ๋ถ€ NoSQL์—์„œ๋Š” ์ตœ์ข…์  ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ธด ํ•˜์ง€๋งŒ ์ด๋กœ ์ธํ•ด ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ)


3. ํ…Œ์ด๋ธ”๊ฐ„ ์กฐ์ธ์ด ๋น„ํšจ์œจ์ ์ž„

=> ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Œ

 

 

๋ณด์ด์ŠคํŒฉ ๊ฑฐ๋ž˜ ๊ธฐ๋Šฅ์— ๊ด€๋ จํ•ด์„œ๋Š” ๊ฒฐ์ œ ์‹œ์Šคํ…œ๊ณผ ์†Œ์œ ๊ถŒ ๋“ฑ๋ก์ด ํ•ต์‹ฌ์ด๋ฏ€๋กœ ํŠธ๋žœ์žญ์…˜(ACID)์ด ๊ฐ•๋ ฅํ•œ RDBMS๊ฐ€ ์ ํ•ฉํ•˜๋‹ค๊ณ  ๋Š๋‚Œ

 

RDBMS๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋ฌด์กฐ๊ฑด Scale-up๋งŒ์„ ์ง€์›ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ํ˜„์žฌ๋Š” ํ™•์žฅ๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ ์•ˆ์ •์„ฑ์„ ๊ณ ๋ คํ•˜๋Š”๊ฒŒ ์šฐ์„ ์‹œ ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐ

 

 

2. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•Œ๋ฆผ ์‹œ์Šคํ…œ & ๋ฐ์ดํ„ฐ ํŠธ๋ฆฌ๊ฑฐ

 

๋ฉ”์ธ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์ด์ŠคํŒฉ ๋ณ€ํ™˜ ์™„๋ฃŒ ํ›„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์ผ ํ•„์š”ํ•œ ์ƒํ™ฉ์ž„

=> ์•Œ๋ฆผ๊ณผ ๊ด€๋ จํ•ด์„œ PostgreSQL๊ธฐ๋ฐ˜์˜ Supabase๋ฅผ ๋ฐœ๊ฒฌํ•จ

 

Supbase๋Š” ๋ฐ์ดํ„ฐ ํŠธ๋ฆฌ๊ฑฐ์™€ Webhook์„ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๊ณ , ๋ณด์ด์ŠคํŒฉ ๋ณ€ํ™˜ ์™„๋ฃŒ์‹œ ์ž๋™์œผ๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ

(๋ฆฌ์–ผํƒ€์ž„ ๊ฐ€๋Šฅ)

 

3. Serverless ํ™˜๊ฒฝ๊ณผ์˜ ์กฐํ•ฉ

 

๋ณด์ด์ŠคํŒฉ ๋ณ€ํ™˜ ๋ชจ๋ธ์ด GCP Cloud Run(์„œ๋ฒ„๋ฆฌ์Šค)์—์„œ ๋™์ž‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, DB๋„ ์ด๋Ÿฐ ์„œ๋ฒ„๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜์™€ ์ž˜ ๋งž์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Œ

 

=> Supabase์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„๋ฆฌ์Šค DB๋กœ์„œ ์™„์ „ ๊ด€๋ฆฌํ˜• ์ž๋™ ๋ฐฑ์—…, ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๊ณ  GCP Cloud Run ๋“ฑ๊ณผ ์‰ฝ๊ฒŒ ์—ฐ๋™์ด ๊ฐ€๋Šฅํ•จ
(์šด์˜ ๋ถ€๋‹ด์ด ์—†์Œ)

Supabase๋Š” ์˜คํ”ˆ์†Œ์Šค์˜ Backend-as-a-Service(BaaS) ๋ชจ๋ธ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ API๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•˜๋ฏ€๋กœ Serverless ํ•จ์ˆ˜์—์„œ HTTP ์š”์ฒญ์„ ํ†ตํ•ด Supabase์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Œ

=> ๋น„์Šทํ•˜๊ฒŒ firebase๊ฐ€ ์žˆ์ง€๋งŒ ์ด๋Š” NoSQL๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ ๋ฐฐ์ œํ•˜์˜€์Œ

 

๊ฒฐ๋ก ์€

 

 

์ถ”ํ›„ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ง€๋งŒ ์ผ๋‹จ 

 

  • RDBMS๊ฐ€ ์ ํ•ฉ

  • DB์ธํ”„๋ผ ์‹ ๊ฒฝ ์“ธ ํ•„์š” ์—†์Œ

  • ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฆฌ์–ผํƒ€์ž„์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Œ

  • ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ํŠธ๋ฆฌ๊ฑฐ์™€ Webhook ๊ธฐ๋Šฅ ์ง€์›

  • OAuth, JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

  • API๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•  ํ•„์š”์—†์ด Cloud Run๊ณผ ๊ฐ™์€ ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜์—์„œ API์š”์ฒญ์œผ๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ
    (RESTful API ์ž๋™ ์ƒ์„ฑํ•ด์คŒ)

 

๋“ฑ์˜ ์ด์œ ๋กœ BaaS์ธ Supabase(PostgreSQL ๊ธฐ๋ฐ˜)๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ•จ!

 


Supabase๋ž€?

 

BaaS(Backend as a Service)๋Š” ๋ฐฑ์—”๋“œ ์ธํ”„๋ผ๋ฅผ ์ง์ ‘ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๊ณ ๋„ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

(ex. Firebase, Supabase)

 

Supabase๋Š” PostgreSQL์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์˜คํ”ˆ ์†Œ์Šค BaaS ํ”Œ๋žซํผ์ž„

 

PostgreSQL์€ ACID ํŠธ๋žœ์žญ์…˜์„์ง€์›ํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ Supabase๋Š” ์ด๋Ÿฌํ•œ PostgreSQL์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ธ์ฆ, ์Šคํ† ๋ฆฌ์ง€, ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์คŒ

 

Supabase์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์œผ๋กœ๋Š”

 

  • ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์ง€์›

    => PostgreSQL์˜ Logical Replication ๊ธฐ๋Šฅ์„ ํ™œ์šฉ

  • ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณต

    => OAuth, JWT ๋“ฑ์˜ ํ‘œ์ค€ ์ธ์ฆ ๋ฐฉ์‹์„ ์ง€์›ํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๋†’์ž„
    (๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ)

  • ์Šคํ† ๋ฆฌ์ง€ ๊ธฐ๋Šฅ ์ œ๊ณต

    => S3ํ˜ธํ™˜ API๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ธฐ์กด S3 ๋ฒ„ํ‚ท๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•จ

  • ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜ ๊ธฐ๋Šฅ ์ œ๊ณต

    => ๋ฐฑ์—”๋“œ ๋กœ์ง์„ ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์„œ๋ฒ„ ๊ด€๋ฆฌ์˜ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

 

๋ฐ˜์‘ํ˜•