๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํŠธ๋ Œ๋“œ&์ด์Šˆ

[ํฌ์ผ“๋ฒ ์ด์Šค(PocketBase)] ๋ฐฑ์—”๋“œ ์ž๋™ ๊ตฌ์ถ• ์„œ๋น„์Šค

by ์„œ์•„๋ž‘๐Ÿ˜ 2024. 1. 25.

 

 

ํฌ์ผ“๋ฒ ์ด์Šค ์†Œ๊ฐœ

์ตœ๊ทผ ํฌ์ผ“๋ฒ ์ด์Šค(PocketBase)๊ฐ€ ๋ฒ ํƒ€๋ฒ„์ „(v0.8)์œผ๋กœ ์ถœ์‹œ๋์Šต๋‹ˆ๋‹ค. ํฌ์ผ“๋ฒ ์ด์Šค๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋œ ์ž‘์€ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ณต์žกํ•œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค(DB๊ด€๋ฆฌ, ์›น์„œ๋ฒ„, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, API ๋“ฑ)์„ ์Šค์Šค๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ํฌ์ผ“๋ฒ ์ด์Šค๋Š” ๊ธฐ์กด์˜ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋กœ ์ž˜ ์•Œ๋ ค์ง„ ํŒŒ์ด์–ด๋ฒ ์ด์Šค, ์Šˆํผ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ๋Œ€์ฒด์žฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ์‹ฌํ”Œํ•˜๋‹ค๋ณด๋‹ˆ ๋น ๋ฅด๋ฉด์„œ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํฌ์ผ“๋ฒ ์ด์Šค๋Š” ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. Go๋กœ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ ํŒŒ์ผ DB์ธ SqliteDB๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํฐ ๊ทœ๋ชจ๋Š” ์•„๋‹ˆ์—ฌ๋„ ์ ๋‹นํ•œ ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค๋Š” ์ด์ œ ํฌ์ผ“๋ฒ ์ด์Šค ๋งŒ์œผ๋กœ ๋ฐฑ์—”๋“œ ๊ณผ์ •์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

API ํด๋ผ์ด์–ธํŠธ ๋ถ€๋ถ„๋„ React, VueJS SDK๋ฅผ ์ง€์›ํ•˜๋ฉฐ, Dart๋„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์•„ ๋ฐ์Šคํฌํ†ฑ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์›น์•ฑ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์„ค์น˜ ๋ฐ ์ ์šฉ

ํฌ์ผ“๋ฒ ์ด์Šค ์„ค์น˜ ๊ณผ์ •๋„ ๋งค์šฐ ์‹ฌํ”Œํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€(https://pocketbase.io/)์— ์ ‘์†ํ•ด์„œ ์šด์˜์ฒด์ œ์— ๋งž๋Š” ์„ค์น˜ํŒŒ์ผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. Linux, Windows, Mac์„ ์ง€์›ํ•˜๋ฉฐ ์ €๋Š” Linux ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. zipํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์€ ํ›„ unzip์œผ๋กœ ์••์ถ•์„ ํ•ด์ œํ•ด์ค๋‹ˆ๋‹ค.

unzip pocketbase_0.20.7_linux_amd64.zip

 

์ดํ›„ ์„ค์น˜ ๊ฒฝ๋กœ์— ๋“ค์–ด๊ฐ€์„œ ์‹คํ–‰ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.

./pocketbase serve

๊ทธ๋Ÿฌ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ localhost์— API์šฉ url๊ณผ Admin UI์šฉ url์„ ํ‘œ์‹œํ•ด์ค๋‹ˆ๋‹ค. Admin UI์— ์ ‘์†ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

์ด๋ฉ”์ผ๊ณผ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋กœ๊ทธ์ธํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ปฌ๋ ‰์…˜์ด DB ํ…Œ์ด๋ธ”๊ณผ ๋งค์นญ๋˜๋ฉฐ Field๊ฐ€ ํ…Œ์ด๋ธ” ๋‚ด ์ปฌ๋Ÿผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ ˆ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ์ฃ . ์ฆ‰, ๋ฐฑ์—”๋“œ์—์„œ ๊ตฌํ˜„ํ•ด์•ผํ•  DB ๊ตฌ์กฐ๋“ค์„ ์ปฌ๋ ‰์…˜๊ณผ ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ/์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž๋™์œผ๋กœ API๊นŒ์ง€ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์˜ ํ•„๋“œ ๋ฆฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ํ•„๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Relation์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜(ํ…Œ์ด๋ธ”)๊ณผ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ API์ž…๋‹ˆ๋‹ค. API ๋ฌธ์„œ์™€ ์‚ฌ์šฉ ์˜ˆ์‹œ๊นŒ์ง€ ์ œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

๋งŒ๋“ค์–ด์ง„ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋กœ๊ทธ์™€ ํ™˜๊ฒฝ์„ค์ •๊นŒ์ง€ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—…๋กœ๋“œํ•œ ํŒŒ์ผ์ด๋‚˜ DB ๋ฐ์ดํ„ฐ๋“ค์€ S3์— ๋ฐฑ์—…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ด€๋ฆฌ์ž์— ๋Œ€ํ•œ ์„ค์ •๊นŒ์ง€ ๋””ํ…Œ์ผํ•˜๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒ ํƒ€๋ฒ„์ „์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •์‹ ๋ฒ„์ „ ๋ฆด๋ฆฌ์ฆˆ์‹œ ๋” ์ž์„ธํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

๋งˆ๋ฌด๋ฆฌ

์ด์ œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋„ ํ•„์š” ์—†๋Š” ์‹œ๋Œ€๊ฐ€ ์˜จ๊ฑด๊ฐ€ ์ƒ๊ฐ์ด ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœ CRUD๋Š” ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์‹œ๋Œ€๊ฐ€ ๋๋„ค์š”. ํŒŒ์ด์–ด๋ฒ ์ด์Šค์™€ ๋‹ค๋ฅด๊ฒŒ ํฌ์ผ“๋ฒ ์ด์Šค๋Š” ์กฐ๊ธˆ ๋” ์‹ฌํ”Œํ•œ ๊ตฌ์กฐ์˜ ์„œ๋น„์Šค์— ์ ์šฉํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €๋„ ๊ธฐํšŒ๊ฐ€ Admin ํŽ˜์ด์ง€ ์ •๋„๋Š” ํฌ์ผ“๋ฒ ์ด์Šค๋กœ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ๋„ค์š”. ํฌ์ผ“๋ฒ ์ด์Šค์˜ ์ •์‹ ๋ฆด๋ฆฌ์ฆˆ๊ฐ€ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค :)

 

 

 

 

๋Œ“๊ธ€