๐CS/DB15 [DB] SQL Injection ํด์ปค์ ์ํด ์กฐ์๋ SQL ์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ทธ๋๋ก ์ ๋ฌ๋์ด ๋น์ ์์ ๋ช ๋ น์ ์คํ์ํค๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ 1. ๊ณต๊ฒฉ ๋ฐฉ๋ฒ 1.1. Error based SQL Injection ๋ณดํต ๋ก๊ทธ์ธ์ ํ ๋, ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ input ์ฐฝ์ ์ ๋ ฅํ๊ฒ ๋๋ค. ์์ ์ฌ์ง์์ ๋ณด์ด๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ก๊ทธ์ธ ์ ๋ง์ด ์ฌ์ฉ๋๋ SQL ๊ตฌ๋ฌธ์ด๋ค. ํด๋น ๊ตฌ๋ฌธ์์ ์ ๋ ฅ๊ฐ์ ๋ํ ๊ฒ์ฆ์ด ์์์ ํ์ธํ๊ณ , ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ์์์ SQL ๊ตฌ๋ฌธ์ ์ฃผ์ ํ๋ค. ์ฃผ์ ๋ ๋ด์ฉ์ ‘ OR 1=1 -- ๋ก WHERE ์ ์ ์๋ ์ฑ๊ธ์ฟผํฐ๋ฅผ ๋ซ์์ฃผ๊ธฐ ์ํ ์ฑ๊ธ์ฟผํฐ์ OR 1=1 ๋ผ๋ ๊ตฌ๋ฌธ์ ์ด์ฉํด WHERE ์ ์ ๋ชจ๋ ์ฐธ์ผ๋ก ๋ง๋ค๊ณ , -- ๋ฅผ ๋ฃ์ด์ค์ผ๋ก ๋ค์ ๊ตฌ๋ฌธ์ ๋ชจ๋ ์ฃผ์ ์ฒ๋ฆฌ ํ๋ค. ๋งค์ฐ ๊ฐ๋จํ ๊ตฌ๋ฌธ์ด์ง๋ง, ๊ฒฐ๋ก ์ ์ผ๋ก Users ํ ์ด๋ธ.. 2021. 10. 13. [DB] NoSQL NoSQL์ ์ด๊ณ ์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฑ ์ฑ๋ฅ์ ํนํ๋ ๋ชฉ์ ์ ์ํด, ๋น๊ด๊ณํ ๋ฐ์ดํฐ ์ ์ฅ์์, ๋น๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ถ์ฐ ์ ์ฅ ์์คํ ์ด๋ค. NoSQL NoSQL์ด ๋ฌด์์ ์ฝ์์ธ์ง๋ ์ฌ๋์ ๋ฐ๋ผ No SQL, Not Only SQL, Non-Relational Operational Database SQL๋ก ์๊ฐ๋ฆฌ๋ ์๊ฒฌ๋ค์ด ์์ง๋ง, ํ์ฌ Not Only SQL๋ก ํ์ด ์ค๋ช ํ๋ ๊ฒ์ด ๋ค์๋ฅผ ์ฐจ์งํ๊ณ ์๋ค. ์ด ๋ง์ ์๋ฏธ๋ฅผ ํ์ด๋ณด๋ฉด, ๋จ์ํ ๊ธฐ์กด ๊ด๊ณํ DBMS๊ฐ ๊ฐ๊ณ ์๋ ํน์ฑ๋ฟ๋ง ์๋๋ผ, ๋ค๋ฅธ ํน์ฑ๋ค์ ๋ถ๊ฐ์ ์ผ๋ก ์ง์ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฌ์ฉํด์ผ ํ๋ ์ด์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํ์ฌ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋น๋กฏํด ๊ณ ์ฑ๋ฅ์ ๋งค์ฐ ๊ธฐ๋ฅ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์๋ก ํ๋ .. 2021. 9. 9. [DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ฑ๋ฅ DBMS ํ์ ๋ฐฐ๊ฒฝ ํ์ผ ์์คํ ๊ฐ๋ฐ์๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์กด์ฌํ๊ธฐ ์ด์ ์ ํ์ผ ์์คํ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ์๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ์ ํ์ผ ๋จ์(๋ ์ฝ๋)๋ก ์ ์ฅํ๋ฉฐ ์ด๋ฌํ ์ผ๋ค์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ ๋ฆฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ ์ฐ๋์ด ๋์ด์ผ ํ๋๋ฐ, ํ์ผ ์์คํ ์์๋ ํ์ผ์ ์ ๊ทผํ๋ ๋ฐฉ์์ด ์์ฉ ํ๋ก๊ทธ๋จ ๋ด์ ํํ๋๋ฏ๋ก ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ ๊ฐ์ ์์กด๊ด๊ณ๊ฐ ์กด์ฌํ๊ฒ ๋์ด ๋ฐ์ดํฐ์ ๊ตฌ์กฐ, ์ ๊ทผ ๋ฐฉ๋ฒ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ธฐ์กด์ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ณ๊ฒฝํด์ผ ํ๋ค. ์ฆ, ๋ฐ์ดํฐ ์ ์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ดํฌ๋์ด ์๊ณ ํ๋ก๊ทธ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ณ ์กฐ์ํ๋ ๊ฒ ์ด์ธ์ ๋ณ๋์ ์ ์ด๊ฐ ์๋ค. ๋ฐ๋ผ์, ํ์ผ ๋จ์๋ก ์ ์ฅํ ๋, ๋ฐ์ดํฐ ์ข ์์ฑ ๋ฌธ์ ์ ์ค๋ณต์ฑ, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ ๋ฑ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ด๋ฆฌํ๊ธฐ ์์ํ๋ค.. 2021. 8. 4. [DB] ํธ๋์ญ์ ์ ํ ์ค์ ๊ฐ๋ Spring์์ ์ฌ์ฉํ๋ '@Transactional'์ ํด๋น ๋ฉ์๋๋ฅผ ํ๋์ ํธ๋์ญ์ ์์์ ์งํํ ์ ์๋๋ก ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํ๋ค. ์ด๋ ํธ๋์ญ์ ๋ด๋ถ์์ ํธ๋์ญ์ ์ ๋ ํธ์ถํ๋ค๋ฉด ์๋ก์ด ํธ๋์ญ์ ์ด ์์ฑ๋ ์๋ ์๊ณ , ์ด๋ฏธ ํธ๋์ญ์ ์ด ์๋ค๋ฉด ๋ถ๋ชจ ํธ๋์ญ์ ์ ํฉ๋ฅํ ์๋ ์๋ค. ์งํ๋๊ณ ์๋ ํธ๋์ญ์ ์์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํธ์ถ๋ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ์ ํ๋ ๊ฒ์ 'ํธ๋์ญ์ ์ ํ ์ค์ '์ด๋ผ ํ๋ค. ์ ํ ์ค์ ์ต์ ํธ๋์ญ์ ์ ์ ํ ์ค์ ์ '@Transactional'์ ์ต์ 'propagation'์ ํตํด ์ค์ ํ ์ ์๋ค. REQUIRED (๊ธฐ๋ณธ๊ฐ) ๋ถ๋ชจ ํธ๋์ญ์ ์ด ์กด์ฌํ๋ค๋ฉด ๋ถ๋ชจ ํธ๋์ญ์ ์ผ๋ก ํฉ๋ฅ ๋ถ๋ชจ ํธ๋์ญ์ ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ก์ด ํธ๋์ญ์ ์ ์์ฑ ์ค๊ฐ์ ๋กค๋ฐฑ์ด ๋ฐ์ํ๋ค๋ฉด ๋ชจ๋ ํ๋์ ํธ๋์ญ์ ์ด๊ธฐ.. 2021. 5. 2. [DB] ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค(Transaction Isolation Level) ๊ฐ๋ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค(isolation level)์ด๋ ๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ์ฒ๋ฆฌ๋ ๋, ํธ๋์ญ์ ๋ผ๋ฆฌ ์ผ๋ง๋ ์๋ก ๊ณ ๋ฆฝ๋์ด ์๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด๋ค. ์ฆ, ํน์ ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋๋ก ํ์ฉํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ACID ํน์ง๊ณผ ๊ฐ์ด ํธ๋์ญ์ ์ด ๋ ๋ฆฝ์ ์ธ ์ํ์ ํ๋๋ก Locking์ ํตํด, ํธ๋์ญ์ ์ด DB๋ฅผ ๋ค๋ฃจ๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ด์ฌํ์ง ๋ชปํ๋๋ก ๋ง๋ ๊ฒ์ด ํ์ํ๋ค. ํ์ง๋ง ๋ฌด์กฐ๊ฑด Locking์ผ๋ก ๋์์ ์ํ๋๋ ์๋ง์ ํธ๋์ญ์ ๋ค์ ์์๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฑ๋ฅ์ ๋จ์ด์ง๊ฒ ๋๋ค. ํ์ง๋ง, ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด Locking์ ๋ฒ์๋ฅผ ์ค์ธ๋ค๋ฉด, ์๋ชป๋ ๊ฐ์ด ์ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ต๋ํ ํจ์จ์ ์ธ Lock.. 2021. 4. 23. [DB] ํธ๋์ญ์ (Transaction) ๊ฐ๋ ํธ๋์ญ์ (Transaction)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๋ ํ๋์ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ ์์ ์ ๋จ์ ๋๋ ํ๊บผ๋ฒ์ ๋ชจ๋ ์ํ๋์ด์ผ ํ๋ ์ผ๋ จ์ ์ฐ์ฐ์ ์๋ฏธํ๋ค. ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ๋ณํ ์ ์ด ๋ฐ ํ๋ณต ์์ ์ ์ฒ๋ฆฌ๋๋ ์์ ์ ๋ ผ๋ฆฌ์ ๋จ์์ด๋ค. ์ฌ์ฉ์๊ฐ ์์คํ ์ ๋ํ ์๋น์ค ์๊ตฌ ์ ์์คํ ์ด ์๋ตํ๊ธฐ ์ํ ์ํ ๋ณํ ๊ณผ์ ์ ์์ ๋จ์์ด๋ค. ์ํ๋ณํ : SQL์ง์์ด(SELECT | INSERT | UPDATE | DELETE)๋ฅผ ํตํด DB์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๊ฐ ๋ณํํ๋ ๊ฒ ์์ ๋จ์ : ์ผ๋ จ์ ์ฐ์ฐ(SQL ๋ช ๋ น๋ฌธ ์งํฉ). ์ฌ๋์ด ์ ํ๋ ๊ธฐ์ค(ํ๋์ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ)์ ๋ฐ๋ผ ์ ์ํจ ํ๋์ ํธ๋์ญ์ ์ค๊ณ๋ฅผ ์ ๋ง๋๋ ๊ฒ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋ง์ ์ด์ ์ ๊ฐ์ ธ๋ค.. 2021. 4. 23. [DB] ์บ์, Redis ์บ์๋? ํ๋ฒ ์ฝ์(์ฒ๋ฆฌํ) ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํ๊ณ ํ์์ ๋ฐ๋ผ ์ ์ก,๊ฐฑ์ ,์ญ์ ํ๋ ๊ธฐ์ ๋ก ๋ณดํต์ ๋ฐ์ดํฐ์ ๋ณด๊ด์ฅ์๋ก ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋์คํฌ์์ ์ ๋ณด๋ฅผ ์ป์ด์ค๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ I/O์ฑ๋ฅ์ ์ป์ ์ ์์ผ๋ ์๋ฒ๊ฐ ๋ค์ด๋๊ฑฐ๋ ์ฌ๋ถํ ๋๋ ๊ฒฝ์ฐ ์ฌ๋ผ์ง๋ ์ฑ๊ฒฉ์ ํ๋ฐ์ฑ์ ๊ฐ์ง๊ณ ์์ด ์์์ ์ผ๋ก ๋ณด๊ดํ ์ ์๋, ๋ง ๊ทธ๋๋ก ์์์ ์ผ๋ก ๋ณด๊ดํ๊ณ ๋น ๋ฅด๊ฒ ๊ทธ ์ ๋ณด์ ์ ๊ทผํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉํด์ผ ํ๋ค. ๋ฌผ๋ก ์ ๋ณด์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋ณ๋์ ๋์คํฌ๋ฐฑ์ ๋ฐ TTL๋ฑ์ ์ค์ ์ผ๋ก ์๊ตฌ๋ณด๊ด์ด๋ ์ค๋๊ธฐ๊ฐ ์ ์ง๊ฐ ๊ฐ๋ฅํ๋ค. ๋จ ์ด๋ฐ ์ค์ ๋ค์ด ๊ผญ ํ์ํ๋ค๋ฉด Cache๋ฅผ ์ ์ฉํ๋๊ฒ ๋ง๋์ง ํ ๋ฒ๋ ํ๋น์ฑ์ ๊ฒํ ํด ๋ณด๋๊ฒ ์ข๊ฒ ๋ค. ๋ชฉ์ ์๋ฒ๊ฐ ๋ถํ์ํ ํธ๋ํฝ์ ์ค์ผ ์ ์๊ณ , ๊ทธ๋ก ์ธํด ์น์ดํ๋ฆฌ์ผ์ด์ .. 2021. 4. 18. [DB] Connection Pool ๊ฐ๋ DBCP(Database Connection Pool)์ ๋ค์์ HTTP ์์ฒญ์ ๋ํ Thread๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ์์ ๋งํ๋ค. (WAS์ DB ์๋ฒ๊ฐ ์ด์) Connection Pool์ ์ฌ์ฉํ์ง ์๊ณ WAS์์ DB์๋ฒ์ ์ ๊ทผ์ ์์ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋จ๊ณ DB ์๋ฒ ์ ์์ ์ํด JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ํ๋ค. DB ์ ์ ์ ๋ณด์ DriverManager.getConnection() Method๋ฅผ ํตํด DB Connection ๊ฐ์ฒด๋ฅผ ์ป๋๋ค. Connection ๊ฐ์ฒด๋ก ๋ถํฐ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ํ PreparedStatement ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค. executeQuery๋ฅผ ์ํํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ก ResultSet ๊ฐ์ฒด๋ฅผ ๋ฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด ์ฒ๋ฆฌ์ ์ฌ์ฉ๋ ๋ฆฌ์์ค๋ค์ c.. 2021. 4. 18. [DB] ์ ๊ทํ ์ด์ ํ์(anomaly) ํ ์ด๋ธ๋ด์ ๋ฐ์ดํฐ ์ค๋ณต์ฑ์ ์ํด์ ๋ฐ์๋๋ ๋ฐ์ดํฐ ๋ถ์ผ์น ํ์. = ์ ํธ๋ฆฌ๋ทฐํธ๋ค ๊ฐ์ ์กด์ฌํ๋ ์ฌ๋ฌ ์ข ์๊ด๊ณ๋ฅผ ํ๋์ ๋ฆด๋ ์ด์ ์ ํํํ๊ธฐ ๋๋ฌธ์ ๋ํ๋๋ ๋ฐ์ดํฐ ๋ถ์ผ์น ํ์ ๊ฐฑ์ ์ด์, ์ฝ์ ์ด์, ์ญ์ ์ด์์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐฑ์ ์ด์ (Modification Anomaly) : ๋ฐ๋ณต๋ ๋ฐ์ดํฐ ์ค์ ์ผ๋ถ๋ฅผ ๊ฐฑ์ ํ ์ ๋ฐ์ดํฐ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ค. ์ฝ์ ์ด์ (Insertion Anomaly) : ๋ถํ์ํ ์ ๋ณด๋ฅผ ํจ๊ป ์ ์ฅํ์ง ์๊ณ ์๋ ์ด๋ค ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ญ์ ์ด์ (Deletion Anomaly) : ํ์ํ ์ ๋ณด๋ฅผ ํจ๊ป ์ญ์ ํ์ง ์๊ณ ์๋ ์ด๋ค ์ ๋ณด๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ด์ ํ์์ ์ข ์๊ด๊ณ๋ฅผ ๋ถ์ํ์ฌ ์ฌ๋ฌ ๊ฐ์ ๋ฆด๋ ์ด์ ์ผ๋ก ๋ถํดํ๋ ์ ๊ทํ๋ฅผ ํตํด ๋ฐฉ์งํ .. 2021. 4. 11. ์ด์ 1 2 ๋ค์