๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ(62)
-
ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ
ํ๋ก์ธ์ค? ํ๋ก์ธ์ค๋ User mode์์ ์๋ํ๋ ํ๋์ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค. (ex. ํฌ๋กฌ, ์นด์นด์คํก, ๋์ค์ฝ๋ ๋ฑ) ๊ฐ ํ๋ก์ธ์ค๋ค์ CPU์ ๋ฉ๋ชจ๋ฆฌ ์์์ ์์กดํ์ฌ ์๋๋๋ฉฐ User mode ์์ค์์ ์๋ํ๊ธฐ ๋๋ฌธ์ ํ์ผ ์ ์ถ๋ ฅ, ๋คํธ์ํฌ ํต์ ๋ฑ์ ์ง์ ์ํํ์ง๋ ๋ชปํ๊ณ ํธ๋ฉ์ ํตํด ๋ค์ํ ์์คํ ์ฝ์ ํธ์ถํ์ฌ ์ด๋ฅผ Kernel mode(์ด์ ์ฒด์ )์ ์์ฒญํ๊ฒ ๋๋ค. ๊ฐ ํ๋ก์ธ์ค๋ค์ ๋์๋ค๋ฐ์ ์ผ๋ก ์๋ํ ์ ์๋๋ฐ, ์ด๋ ์ด์์ฒด์ ์ ๋ฆฌ์์ค ๊ฐ์ํ๋ฅผ ํตํด์ ์ด๋ฃจ์ด์ง๋ค. ํน์ PC์ CPU์ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ๊ฐ ํ๋๋ฟ์ผ์ง๋ผ๋ ์ด์์ฒด์ ๊ฐ ์ด๋ค์ ๋ง์น ๊ฐ ํ๋ก์ธ์ค๋ค๋ง์ ์ํ CPU, ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒ์ฒ๋ผ ์ชผ๊ฐ๊ณ ์ค์ผ์ค๋งํ๋ค. CPU ๊ฐ์ํ๋ ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋งค์ฐ ์งง์ ์๊ฐ ๋์๋ง์ CPU๋ฅผ ์ ์ ํ๋๋ก ํ์ฌ ๊ณ์..
2023.03.01 -
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