Spring
[Redis] Redis์ ๋ฐฑ์ ๊ณผ HA๋ฅผ ์ํ ์ ๋ต (RDB, AOF, Replication, Sentinel, Sharding, Cluster)
๐0. ์๋ก ํ ํ๋ก์ ํธ์์ Redis๋ฅผ ์ฌ์ฉํ๋ค๊ฐ, ์ ๊ธฐํ ํ์์ ๋ฐ๊ฒฌํ๋ค. ์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ ๋์ปค๋ฅผ ํตํด ๋ ๋์ค ์๋ฒ๋ฅผ ๋๋ฆฌ๊ณ ์์๊ณ , JWT Refresh Token์ ๋ ๋์ค ์๋ฒ์ ์ ์ฅํ๊ณ ์์๋๋ฐ ๋์ปค๋ฅผ ์ค์งํ๊ณ ๋ฉฐ์น ๋ค์ ๋ค์ ์คํ์ ํด๋ณธ ๊ฒฐ๊ณผ ์์ง ํด๋น ํ ํฐ๋ค์ด ๋จ์์๋ ํ์์ ๋ฐ๊ฒฌํ๋ค. "์ฅ? Redis๋ InMemory DB๋ก ์ข ๋ฃ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ชจ๋ ํ๋ฐ๋์ด ๋ฐ์ดํฐ๊ฐ ์๋๊ฒ ๋ง์ง ์๋?" ์ด๋ฌํ ์๊ฐ์ ๊ฐ์ง๊ฒ ๋์๊ณ , Redis์ ๋ฐฑ์ ์ ๊ด๋ จ๋ ๋ด์ฉ์ ๊ณต๋ถํ์ ํด๋น ์ค๋ง๋ฆฌ๋ฅผ ํ์ด๋ผ ์ ์์๋ค. ๐ค 1. Redis์ ๋ฐฑ์ ๋ฐฉ์ 1-1. RDB(Redis DataBase ๋ฐฉ์) ์ฌ๊ธฐ์ RDB๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋๋ผ, Redis์ ์์ฒด์ ์ธ ๋ฐฑ์ ๋ฐฉ์์ธ Redis Database ๋ฐฉ์์..
[Spring] @Transactional๊ณผ DB Lock์ DeepDive - (1) DB ํธ๋์ญ์ , ์ฌ์ฉ๋ฐฉ๋ฒ, ๊ฒฉ๋ฆฌ์์ค, ์ ํ ๋จ๊ณ ํ์ด๋ณด๊ธฐ
๐ค 0. DB ํธ๋์ญ์ ๋ ์ด์ ์ชผ๊ฐค ์ ์๋ ์ต์ ๋จ์์ ์์ ์ด๋ผ๋ ๊ฐ๋ ์ผ๋ก, commit()์ ํตํด ๋ชจ๋ ์ฑ๊ณตํ๋ ์ง ์๋๋ฉด rollback()์ ํตํด ๋ชจ๋ ์ทจ์๋์ด์ผ ํ๋ ์์ ๋จ์. ํธ๋์ญ์ ์ DB์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํ๋์ ์์ ๋จ์์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ INSERT, UPDATE, DELETE ๋ฑ์ SQL๋ฌธ์ ์คํํ๋ฉด, ์๋์ผ๋ก ํ ๋ผ์ธ๋ง๋ค ํธ๋์ญ์ ์ด ์ ์ฉ๋์ด Commit์ ์คํํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ํธ๋์ญ์ ์ ์์ญ์ ์๋์ผ๋ก ์ค์ ํด, ํ ํธ๋์ญ์ ์์ ์ฌ๋ฌ๊ฐ์ ๋ช ๋ น๋ฌธ์ ๋ฃ๋๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. START TRANSACTION; .... COMMIT; ํธ๋์ญ์ ์ ์ฐ๋ฆฌ๋ง๋ก '๊ฑฐ๋'๋ผ๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, A์ B๊ฐ ๊ฑฐ๋๋ฅผ ํ๋ ๊ฒฝ์ฐ A๊ฐ B์๊ฒ ๋์ ์ ๊ธ ํ์ผ๋, B์๊ฒ ์ฌ์ ์ด ์๊ฒจ ๋ฌผ๊ฑด์ ๋ณด๋ด์ง..
[Spring JPA] @Enumerated์ AttributeConverter
๐ 0. ์๋ก ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด, ๋ฐฑ์๋์์๋ ์์ธํ ์ ๋ณด๋ฅผ ๋ชจ๋ ๋ด๊ณ ์๋ ๊ฐ์ฒด๋ฅผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํต์ฌ์ ์ผ๋ก ๋ถ๋ณ๊ฐ๋ฅํ ํํธ๋ง ์ ์ฅํ๊ณ ์ถ์ ๋๊ฐ ์์ต๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฃ์ ์ ์๋ ํ์ ์ ์ ํด์ ธ์์ต๋๋ค. ๋ฐ๋ผ์ ์ํฐํฐ์ ํ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ธ์ํ์ง ๋ชปํ๋ ๊ฐ์ฒด๋ฅผ ์ฝ์ ํ๋ฉด ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ง์ฃผํ ์ ์์ต๋๋ค. ์ค๋์ ์ด๋ฌํ ๊ฐ๊ทน์ ํด๊ฒฐํด์ค ๋ ๊ฐ์ง ๊ธฐ์ ์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค. ๋ฐฑ์๋์์๋ Enum ๊ฐ์ฒด๋ก, DB์์๋ Enum์ ์์๊ฐ(์์๊ฐ)์ด๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํ ์ ์๋๋ก ๋ณํํด์ฃผ๋ @Enumerated์, Enum ๊ฐ์ฒด ๋ฟ๋ง ์๋๋ผ JPA๊ฐ ์ง์ํ์ง ์๋ ํ์ ์ ๋ณํ๊ฐ๋ฅํ๋ฉฐ, ์ฌ์ง์ด ๋ ๊ฐ ์ด์์ ์์ฑ์ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ํ ๊ฐ ํ๋์ ๋งคํ์ํฌ ์ ์๋ AttributeConverter์..