๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ(61)
-
RDB vs NoSQL
๋ค์ด๊ฐ๊ธฐ ์์ ํด๋น ์ง๋ฌธ์ ์ธ์ ๊ฐ ๋ฉด์ ์์ ์ง์ ์์ฒญ ๋ฐ์๋ ์ง๋ฌธ์ด๊ธฐ๋ ํ๊ณ , ๊ตฌ๊ธ๋ง์ ํด๋ณด์๋ ์ผ์ข ์ ๋ฉด์ ๋จ๊ณจ ์ง๋ฌธ์ผ๋ก ๋ถ๋ฆฐ๋ค. ๋ง์นจ ์คํฐ๋์ ์ฃผ์ ๊ฐ ๋๊ธฐ๋ ํ๊ณ , ์์ผ๋ก๋ ์ด์ ๋ํด ๊ณ ๋ฏผํ๊ณ ๋ ๋๋ตํ ์ผ์ด ๋ง๋ค๊ณ ์ฌ๊ฒจ ์ด๋ฅผ ์ ๋ฆฌํ๋ค. RDB RDB๋ ์ ํต์ ์ธ ํํ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋ฏธํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฐ์ด๋ MySQL, PostgreSQL ๋ฑ์ด ์ด์ ํด๋นํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ 2์ฐจ์ ํ๋ ฌ(ํ ์ด๋ธ) ํํ๋ก ๊ด๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ์ ํ์์ ์ผ์ ํ๊ฒ ์ ์งํ๊ธฐ ์ํ ์คํค๋ง๊ฐ ์กด์ฌํ๋ค. ๋ฐ์ดํฐ์ ์กฐํ, ์ฝ์ , ์์ , ์ญ์ ์ SQL์ ์ด์ฉํ๋๋ฐ, ์ด๋ค DB๋ฅผ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ์ธ๋ถ์ ์ธ ํจ์์ ์ฌ์ฉ๋ฒ ๋ฑ์ด ๋ฌ๋ผ์ง ์๋ ์์ง๋ง ํฐ ํ์ ์๋ก ๋์ผํ๋ค. DB์ ์ํ์ ํ์ฅ์ด ์ด๋ ค์ด ํธ์ธ๋ฐ, ์ด๋ RDB..
2023.02.18 -
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ด๋? DB์์ ํธ๋์ญ์ ์ด๋ ํน์ ์์ ์ ์ํ DB ์ฐ์ฐ๋ค์ ๋ชจ์์ผ๋ก, ํ๋์ ์์ ๋จ์์ด๋ค. ํธ๋์ญ์ ์ ACID๋ก ๋ถ๋ฆฌ๋ 4๊ฐ์ง ํน์ง์ ๊ฐ๋๋ค. ๋ค๋ง ์ด๋ฅผ ์๋ฒฝํ๊ฒ ์งํค๊ธฐ ์ํด์๋ ํธ๋์ญ์ ๋ค์ด ์์ ํ ๊ฒฉ๋ฆฌ๋์ด์ผ ํ๋๋ฐ, ์ด ๊ณผ์ ์์ DB์ ๋์์ฑ์ด ๊ณผ๋ํ๊ฒ ํฌ์๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ ํ๋ก ์ด์ด์ง ์ ์๋ค. ๊ทธ๋ ๋ค๊ณ ํธ๋์ญ์ ๊ฐ ๊ฒฉ๋ฆฌ๋ฅผ ํฌ๊ธฐํด๋ฒ๋ฆฌ๋ฉด DB์ ๋ฌด๊ฒฐ์ฑ, ์ผ๊ด์ฑ ์ธก๋ฉด์์ ๋ง์ ๋ฌธ์ ๋ค์ด ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์, DB์ ์ผ๊ด์ฑ๊ณผ ์ฑ๋ฅ์ ๋ชจ๋ ๊ณ ๋ คํ์ฌ ํธ๋์ญ์ ๊ฐ ๊ฒฉ๋ฆฌ๋๋ ์ ๋๋ฅผ ์ ์ ํ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ด๋ฅผ ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation Level)์ด๋ผ๊ณ ํ๋ค. ๊ฒฉ๋ฆฌ ์์ค์ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ๋ฐ์ํ๋ ๋ฌธ์ 1. Dirty Read Dirty Read๋ ํธ๋์ญ์ ์ด ์์ง..
2023.02.17 -
SQL Injection ๊ณต๊ฒฉ๊ณผ ๋์
์ด์ ์ NodeJS Express์ MySql2๋ฅผ ์ฐ๋ํ์ฌ ํ ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์ด ์๋ค. ๊ทธ๋ ์ฌ์ฉ์์ ์ด๋ฉ์ผ์ ๊ฐ์ง๊ณ ํด๋น ์ด๋ฉ์ผ์ ๊ฐ๋ ๊ณ์ ์ด ์กด์ฌํ๋์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ํจ์๋ฅผ ์์ฑํ ์ผ์ด ์๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ๋ค. ๋น์ ์๋ก ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํด์ฃผ๋ ๊ทธ๋ฃน์ด ์์๋๋ฐ, ํ๋ถ๊ป์ ์ ์ฝ๋๋ฅผ ๋ณด์๊ณ ๋ "SQL Injection ๊ณต๊ฒฉ์ ์ทจ์ฝํด ๋ณด์ธ๋ค"๋ผ๊ณ ํผ๋๋ฐฑ์ ํด์ฃผ์ ๊ธฐ์ต์ด ์๋ค. ์ง๊ธ์ด์ผ ์ ๋ฐ ์์ผ๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ํํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๋น์์๋ ์๋ ๊ฒ์ด ๋ณ๋ก ์์๊ธฐ ๋๋ฌธ์ SQL Injection์ ๋ฐ๋ก ๊ณต๋ถํ๋ ๊ธฐ์ต์ด ์๋ค. SQL Injection ์ด๋? SQL Injection์ ํด์ปค๊ฐ ํ๋ก๊ทธ๋๋จธ์ ์๋์ ๋ฒ์ด๋ ๋ฐฉ๋ฒ์ ํตํด SQL๋ฌธ์ ์ฌ๊ตฌ์ฑ, DB์ ์ง์ํ์ฌ ์ฌ์ฉ์์..
2023.02.11 -
์๋ฃ๊ตฌ์กฐ in DB ์ธ๋ฑ์ค
RDBMS์ ์ธ๋ฑ์ค๋? ์ธ๋ฑ์ค๋ DB ํ ์ด๋ธ์์ ํน์ ๋ฐ์ดํฐ์ ๋ํ ๊ฒ์ ์์ ์ ์ํํ ๋, ๊ฒ์ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋๊ตฌ์ด๋ค. ๋ง์ฝ ๋ฐ์ดํฐ N๊ฐ๊ฐ ์กด์ฌํ๋ ํ ์ด๋ธ์์ ํน์ ์นผ๋ผ์ ๊ฐ์ด X์ธ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด์๋, ์ ์ฒด ํ ์ด๋ธ์ ๋ชจ๋ ํ์ธํด์ผ ํ๋ฉฐ O(N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค. ์ด๋ฅผ Full table scan์ด๋ผ๊ณ ํ๋๋ฐ, ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ํด ๋งค๋ฒ O(N)์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ ์๋นํ ๋นํจ์จ์ ์ด๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ์ด ๋ฐ๋ก ์ธ๋ฑ์ค์ด๋ค. ์ฃผ๋ก ์ฐ์ด๋ B+Tree ์๋ฃ๊ตฌ์กฐ๋ฅผ ํตํ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉ ์ ์์ ๋์ผํ ์กฐ๊ฑด์์ O(logN)์ ํฅ์๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค. ์ธ๋ฑ์ค์ ์ด์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ 1. Hash Table ํด์ ํ ์ด๋ธ์ Key - Value ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋ฐ๋ผ์ ํน์ ๋ฐ์ดํฐ์ ..
2023.02.11 -
Husky, Lint-staged๋ฅผ ์ด์ฉํ Pre-commit Hook ๊ตฌํ
Eslint๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ ์ ์ค์ ํ๋๋ก ํ๋ก์ ํธ ๋ด ์ฝ๋ ์คํ์ผ์ ๊ฐ์ ํด์ฃผ์ด ์ฝ๋์ ์ผ๊ด์ฑ์ด ์๊ธฐ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ํ๋ก์ ํธ ๋ด ์ฝ๋ ํ์ง์ด ํฅ์๋๋ค. ์ด๋ ํนํ ํ์ ํ๊ฒฝ์์ ๋์ฑ ๋๋๋ผ์ง๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์ํํ์ฌ ์ฝ๋ ์คํ์ผ์ ๋ํ ๊ฒ์ฌ๋ฅผ ์ํํ๋ค. # --fix ์ต์ ์ Eslint๊ฐ ์๋ฐ์ ์ผ๋ก ์์ ํ ์ ์๋ ์์ค์ ์คํ์ผ ์ค๋ฅ์ ๋ํด์๋ # ์๋์ผ๋ก ์์ ์ ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. eslint --fix ๋ณดํต, ํ์ ์์๋ ํ๋ก์ ํธ ์ ์ฅ์์ ์ ์ฝ์ ๋์ด Merge ์ Lint ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์ํํ๊ณ ํ ์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ ์ ์ฝ๋๊ฐ Merge๋์ง ์๋๋ก ์ค์ ํ๋๋ฐ, ์ด์ ๋ฐ๋ผ ๋ก์ปฌ์์ ์์ฑํ ์ฝ๋๋ฅผ ์๊ฒฉ ์ ์ฅ์๋ก pushํ ๋ Lint ํ ์คํธ๋ฅผ ๊ณ์ํด์ ์ํํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ ๋ฌผ๋ก ..
2023.01.18 -
NestJS Request Lifecycle (5) - Exception Filter
์ด์ ๊ธ 2022.12.22 - [Backend/NestJS] - NestJS Request Lifecycle (0) - ๊ฐ์ 2022.12.22 - [Backend/NestJS] - NestJS Request Lifecycle (1) - Middleware 2022.12.23 - [Backend/NestJS] - NestJS Request Lifecycle (2) - Guard 2022.12.26 - [Backend/NestJS] - NestJS Request Lifecycle (3) - Interceptor 2022.12.29 - [Backend/NestJS] - NestJS Request Lifecycle (4) - Pipe ์์ธ ํํฐ NestJS์์ ์์ธ ํํฐ๋ ๋น์ฆ๋์ค ๋ก์ง ๋ ๋ฒจ์์ ์ฒ๋ฆฌ๋์ง ์..
2023.01.13