๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€106

[ํฌ์ผ“๋ฒ ์ด์Šค(PocketBase)] ๋ฐฑ์—”๋“œ ์ž๋™ ๊ตฌ์ถ• ์„œ๋น„์Šค ํฌ์ผ“๋ฒ ์ด์Šค ์†Œ๊ฐœ ์ตœ๊ทผ ํฌ์ผ“๋ฒ ์ด์Šค(PocketBase)๊ฐ€ ๋ฒ ํƒ€๋ฒ„์ „(v0.8)์œผ๋กœ ์ถœ์‹œ๋์Šต๋‹ˆ๋‹ค. ํฌ์ผ“๋ฒ ์ด์Šค๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋œ ์ž‘์€ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ณต์žกํ•œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค(DB๊ด€๋ฆฌ, ์›น์„œ๋ฒ„, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, API ๋“ฑ)์„ ์Šค์Šค๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ํฌ์ผ“๋ฒ ์ด์Šค๋Š” ๊ธฐ์กด์˜ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋กœ ์ž˜ ์•Œ๋ ค์ง„ ํŒŒ์ด์–ด๋ฒ ์ด์Šค, ์Šˆํผ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ๋Œ€์ฒด์žฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ์‹ฌํ”Œํ•˜๋‹ค๋ณด๋‹ˆ ๋น ๋ฅด๋ฉด์„œ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํฌ์ผ“๋ฒ ์ด์Šค๋Š” ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. Go๋กœ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ ํŒŒ์ผ DB์ธ SqliteDB๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํฐ ๊ทœ๋ชจ๋Š” ์•„๋‹ˆ์—ฌ๋„ ์ ๋‹นํ•œ ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค๋Š” ์ด์ œ ํฌ์ผ“๋ฒ ์ด์Šค ๋งŒ์œผ๋กœ ๋ฐฑ์—”๋“œ ๊ณผ์ •์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ํด๋ผ์ด์–ธํŠธ ๋ถ€๋ถ„๋„ React, VueJ.. 2024. 1. 25.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค isolation level(๊ฒฉ๋ฆฌ ์ˆ˜์ค€) isolation level(๊ฒฉ๋ฆฌ ์ˆ˜์ค€) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค isolation level(๊ฒฉ๋ฆฌ ์ˆ˜์ค€)์€ ํŠธ๋žœ์žญ์…˜ ๊ฐ„์— ์–ผ๋งˆ๋‚˜ ๊ฒฉ๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ข… ๋ฌธ์ œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ACID(์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๊ณ ๋ฆฝ์„ฑ, ์ง€์†์„ฑ) ํŠน์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, '์ฒ ์ˆ˜๊ฐ€ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ๋Š” ์ค‘์— ์˜ํฌ๊ฐ€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€'์— ๋Œ€ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ๋„ค ๊ฐ€์ง€ ํ‘œ์ค€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1. Read Uncommitted (๋ฏธ์™„๋ฃŒ ์ฝ๊ธฐ) - ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ฉฐ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ์ด๋กœ ์ธํ•ด Dirty Read(๋”ํ‹ฐ ๋ฆฌ๋“œ), Non-Repe.. 2024. 1. 5.
๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์„ฑ์š”์†Œ ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ๋ชจ๋ธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ์ •๋ณด ๊ธฐ์ˆ  ๋ฐ ์ปดํ“จํ„ฐ ๊ณผํ•™ ๋ถ„์•ผ์—์„œ ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. 1. ๋ฐ์ดํ„ฐ(Data) ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์‹ค์ด๋‚˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์น˜, ๋ฌธ์ž, ๊ธฐํ˜ธ ๋“ฑ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ˆซ์ž, ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ์Œ์„ฑ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ดํŽด๋ณด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋Œ€๋ถ€๋ถ„ ์ˆ˜์น˜, ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ํ•™์ƒ์˜ ์ด๋ฆ„๊ณผ ํ•™๋ฒˆ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋ธ์—์„œ๋Š” ์ด๋ฆ„์€ ๋ฌธ์ž, ํ•™๋ฒˆ์€ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•˜์ฃ . ๋ฐ์ดํ„ฐ๋Š” ์ •ํ˜• ๋ฐ์ดํ„ฐ(Structured Data), ๋ฐ˜์ •ํ˜• ๋ฐ์ดํ„ฐ(Semi-structured Data), ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ(Unstructured Data)๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. ์ •ํ˜• ๋ฐ์ดํ„ฐ๋Š” ํ‘œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋กœ ์˜ˆ์ปจ๋Œ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์ด ์ด์— ํ•ด๋‹นํ•˜๋ฉฐ, ๋ฐ˜์ •ํ˜• ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ถ€ ๊ตฌ์กฐ.. 2024. 1. 4.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์ž‘ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€? ๋“ค์–ด๊ฐ€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ํŠน์ง•์ด ์žˆ๋Š”์ง€ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์ œ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” '๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด์ž ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌถ์Œ'์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” DBMS(DataBase Management System)์™€ SQL(Structured Query Language)๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์†์‰ฝ๊ฒŒ ์กฐํšŒํ•˜๊ฑฐ๋‚˜, ์‚ฝ์ž…/์‚ญ์ œ/์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ด๋ฏธ ์ธํ„ฐ๋„ท์— ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ๋‚˜์™€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถœ์ฒ˜๋ฅผ ๋ฐํžˆ๊ณ  ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Database)๋Š” ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ํšจ์œจ์ ์ธ ์ €์žฅ, ๊ฒ€์ƒ‰, ๊ฐฑ์‹ , ์‚ญ์ œ ๋“ฑ์„ ์ง€์›ํ•˜์—ฌ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž.. 2023. 12. 27.
ํŒŒ์ด์ฌ ํŒจํ‚น(packing)๊ณผ ์–ธํŒจํ‚น(unpacking)์˜ ๋ชจ๋“  ๊ฒƒ ์˜ค๋Š˜ ์†Œ๊ฐœํ•˜๋Š” ํŒจํ‚น๊ณผ ์–ธํŒจํ‚น์€ ๋ฐ์ดํ„ฐ๋ณด๋‹ค๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์ธ์ž(Arguments) ์ค‘์‹ฌ์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚น(Packing) printํ•จ์ˆ˜๋Š” ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ์ธ์ž๊ฐ€ ๋ช‡ ๊ฐœ๋“  ๊ฐ„์— ์ƒ๊ด€ํ•˜์ง€ ์•Š๊ณ  ์ถœ๋ ฅํ•ด ์ค๋‹ˆ๋‹ค. print("Hello") print("He", "llo") print("He", "ll", "o") # Hello # Hello # Hello ํ•จ์ˆ˜๊ฐ€ ๋ฐ›์„ ์ธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•ด๋†“์ง€ ์•Š์•˜์„ ๋•Œ(๊ฐ€๋ณ€ ์ธ์ž), ์ž…๋ ฅ๋ฐ›์€ ์ธ์ž๋“ค์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ์š”? ๋ฐ”๋กœ packing์ด๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ๊ด€๋ฆฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํŒจํ‚น์€ ์ธ์ž๋กœ ๋ฐ›์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ํ•ฉ์ณ์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋ณ€์ธ์ž ํŒจํ‚น์€ *ํ•œ ๊ฐœ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ ์•ž์— ๋ถ™์ž„์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. def func(*args): print(args) pri.. 2023. 12. 17.
ํŒŒ์ด์ฌ map, filter ํ•จ์ˆ˜(with. iterator) iterator(๋ฐ˜๋ณต์ž) ํŒŒ์ด์ฌ์—์„œ iterator(๋ฐ˜๋ณต์ž)๋Š” ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. Iterator๋Š” __iter__์™€ __next__ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋กœ, __iter__๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , __next__๋Š” ๋‹ค์Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋” ์ด์ƒ ๋ฐ˜ํ™˜ํ•  ๊ฐ’์ด ์—†์„ ๋•Œ StopIteration ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์ˆœํšŒ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ„๋‹จํ•œ iterator๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค class MyIterator: def __init__(self, start, end): self.start = start self.end = end def __iter__(self): return self def __next__(self): if self.start >= self.end: rai.. 2023. 12. 17.