๐ŸŒฑ ์œ„๋‹ˆ Log ๐ŸŒฑ

Redis๋ž€?

Redis (Remote dictionary server) ๋ž€? ์˜คํ”ˆ ์†Œ์Šค ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์ €์žฅ์†Œ๋กœ, ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์บ์‹œ, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๋น ๋ฅธ ์ ‘๊ทผ ์†๋„์™€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋น ๋ฅธ ์ ‘๊ทผ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋ฉด ๋””์Šคํฌ I/O ๋ฅผ ์ค„์ด๊ณ , ๋†’์€ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค...

CI/CD ์ง€์†์  ํ†ตํ•ฉ๊ณผ ์ง€์†์  ๋ฐฐํฌ

๋‹ค์ˆ˜์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ณต์œ  ์ €์žฅ์†Œ์— ๋งŽ์€ ์ปค๋ฐ‹์ด ์Œ“์ด๊ฒŒ ๋œ๋‹ค. ๊ธฐ๋Šฅ๋ณ„๋กœ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๊ทธ๋ฆฌ๊ณ  ๋ณ‘ํ•ฉ๊นŒ์ง€ ๋งค๋ฒˆ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ด๋ฉฐ ์‹œ๊ฐ„์ด ์ƒ๋‹นํžˆ ์†Œ์š”๋˜๋Š” ์ž‘์—…์ด๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CI/CD๊ฐ€ ๋“ฑ์žฅํ•˜์˜€๋‹ค. CI/CD ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ ๊ณผ์ •์„ ํšจ์œจ์ ์ด...

SQL Injection

SQL Injection ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์˜์ ์ธ SQL๋ฌธ์„ ์ž…๋ ฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ํ•˜๋Š” ๊ณต๊ฒฉ ์ด ๊ณต๊ฒฉ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ถœํ•˜๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ธ์ œ? ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ SQL์ฟผ๋ฆฌ์— ์ง์ ‘ ์‚ฝ์ผํ•  ๋•Œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๋Š” ์ฟผ๋ฆฌ์—์„œ ์ž…๋ ฅ ๊ฐ’์ด ์ œ๋Œ€๋กœ ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ...

Mysql์˜ LIKE ์—ฐ์‚ฐ์ž ์™€ full-scan

Mysql์˜ LIKE ์—ฐ์‚ฐ์ž๋Š” ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ํŒจํ„ด ๋งค์นญ์„ ํ†ตํ•ด ํŠน์ • ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ, % ์™€ _๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. % : 0๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž์™€ ์ผ์น˜ _ : ์ •ํ™•ํžˆ 1๊ฐœ์˜ ๋ฌธ์ž์™€ ์ผ์น˜ SELECT * FROM users WHERE username LIKE 'john%'; -- 'john'์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ...

Transactional Annotation๊ณผ Proxy

@Transactional์€ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „ํ›„์— ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์Šคํ”„๋ง์—์„œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„ ์„ค์ • ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘: @Transactional์ด ์ ์šฉ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ๋จผ์ € PlatformTransactionManager๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ...

Transaction

ํŠธ๋žœ์žญ์…˜์€ ์ผ๋ จ์˜ ์ž‘์—…๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์œ„์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ์ž‘์—…์ด ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜๋˜๊ณ , ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ๋ชจ๋“  ์ž‘์—…์ด ์ทจ์†Œ๋œ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง• (ACID) Atomicity ์›์ž์„ฑ ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ์—ฐ์‚ฐ๋“ค์ด ์™„์ „ํžˆ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ „ํ˜€ ...

JWT

ํ”„๋กœ์ ํŠธ ์ค‘์— JWT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์„œ ์ž˜ ๋ชฐ๋ผ์„œ.. ๊ณต๋ถ€ํ•˜๊ณ ์ž HTTP ํ”„๋กœํ† ์ฝœ์€ ์›น์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ทœ์•ฝ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ํ”„๋กœํ† ์ฝœ์€ connectionless(์—ฐ๊ฒฐ์ด ๋Š์–ด์ง)ํ•˜๊ณ  stateless(์ƒํƒœ ๋น„์ €์žฅ) ํŠน์„ฑ์„ ๊ฐ–๋Š”๋‹ค. ์ฆ‰, ํ•œ ๋ฒˆ์˜ ํ†ต์‹ ์ด ๋๋‚˜๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๊ณ , ์ดํ›„ ์š”์ฒญ์—์„œ ์ด์ „ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€...

JPA์™€ ์˜์†์„ฑ

ORM์ด ๋„์ž…๋˜๊ธฐ ์ด์ „์—๋Š”, ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ์ฃผ๋กœ JDBC๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค. Connection ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์˜€๊ณ , ๊ฐœ๋ฐœ์ž๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณด๋‚ธ ํ›„ ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์ž๋ฐ”...

index์™€ B-tree ๊ทธ๋ฆฌ๊ณ  Hash Index

๋ฐ์ดํ„ฐ์ด ์–‘์ด ๋งŽ์•„์ง€๋ฉด ๋งŽ์•„์งˆ์ˆ˜๋ก ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ํ…Œ์ด๋ธ”์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ธ๋ฑ์Šค๊ฐ€ ๋„์ž…๋˜์—ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณ„๋„์˜ ๊ตฌ์กฐ๋กœ ์ €์žฅํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์ง์ ‘ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์ฑ…์˜ ๋ชฉ์ฐจ์ฒ˜๋Ÿผ ํ•„์š”...