0. ๋์์ฑ ์ด์์ ํด๊ฒฐ ๋ฐฉ๋ฒ๋์์ฑ ์ด์๋ ์ฌ๋ฌ ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ๋์์ ๊ฐ์ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค ํ ๋ ๋ฐ์ํ๋ค. ๋์์ฑ ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์ ๋ฐ์ํ ๋์์ฑ ์ด์๋ฅผ ํด๊ฒฐํด ๋ณด๋ ค๊ณ ํ๋ค. ๋จผ์ , Spring Boot ํ๊ฒฝ์์ ๋์์ฑ ์ด์๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ๋ค. 0-1. ๋ฝ (Lock)๋ฝ์ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณต์ ๋ฆฌ์์ค์ ๋ํ ๋์ ์ ๊ทผ์ ์ ์ดํ๋ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ด๋ค. ๋ฝ์ ํตํด ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ Race Condition์ ๋ฐฉ์งํ๋ค. 0-1-1. ๋๊ด์ ๋ฝ (Optimistic Lock)๋๊ด์ ๋ฝ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ๋ฝ์ ๊ฑธ์ง ์๋๋ค. ๋ณดํต ๋ฒ์ ๋ฒํธ๋ ํ์์คํฌํ๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๊ฐ์งํ๋ค. ์ถฉ๋์ด ๊ฐ์ง๋๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํค..
๋ฒ์ Spring Boot 3AWS SDK for java v2firebase-admin 6.5.00. ๋์
๋ฐฐ๊ฒฝ๊ธฐ์กด ๊ตฌ์กฐ๊ธฐ์กด์๋ ํธ์ ์๋ฆผ ์์ฒญ์ ๋ฐ๋ผ์ ์๋ฒ ๋ด์์ ๋ฉ์ธ์ง๋ฅผ ์์ฑํ๊ณ Firebase๋ก ๋ฉ์ธ์ง๋ฅผ ์ ์กํ๋ค. ํ์ง๋ง, ์ฌ๊ธฐ์ ํธ์ ์๋ฆผ์ ๋ณด๋ผ ์ฌ์ฉ์๊ฐ ๋ง๋ช
, 10๋ง๋ช
, 100๋ง๋ช
์ด ๋๋ค๋ฉด... ๋ชจ๋ ์ฌ์ฉ์์ ๋ํ ์๋ฆผ์ ์ผ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค. ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ์ํ Firebase์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณด์. ๋จผ์ ํ๊บผ๋ฒ์ ๋ณด๋ด๋ sendAll์ Deprecate๋์๊ณ , ๋์ sendEach๋ฅผ ์จ์ผํ๋ค. sendEach()๋ ๊ฐ ํ ํฐ๋ณ ์ฌ๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ์ ์์ง๋ง, ๊ฐ ๋ฉ์ธ์ง๋ง๋ค ๋ณ๋์ HTTP ์์ฒญ์ ๋ง๋ค์ด๋ธ๋ค. 10๋ง๊ฐ์ ์์ฒญ์ด๋ฉด 10๋ง๊ฐ์ HTTP ์์ฒญ์ด ์์ฑ๋๋ค๋ ๊ฒ์ด๋ค. ์ฌ์ง์ด, mes..
0. ๋์์ธ ํจํด์ด๋?ํ๋ก๊ทธ๋จ ์ค๊ณ ์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ ๊ฐ์ฒด ๊ฐ์ ์ํธ ๊ด๊ณ ๋ค์ ์ด์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋๋ก ํ๋์ ๊ท์ฝ ํํ๋ก ๋ง๋ค์ด ๋์ ๊ฒ 1. ์ฑ๊ธํค ํจํด Singleton Patternํ๋์ ํด๋์ค์ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง ๊ฐ์ง๋ ํจํด. ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ชจ๋์ ๋ง์ด ์ฌ์ฉ๋๋ค. ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด๋๊ณ , ๋ค๋ฅธ ๋ชจ๋๋ค์ด ๊ณต์ ํ๋ฉฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋น์ฉ์ด ์ค์ด๋๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ์์กด์ฑ์ด ๋ฎ์์ง๋ค๋ ๋จ์ ์ด ์๋ค. class Singleton { private static class singleInstanceHolder { private static final Singleton INSTANCE = new Singleton(); } pu..
Spring Security 6 ๋ฒ์ ๊ธฐ์ค ์ต๊ทผ Spring Security ๋ฅผ ์ด์ฉํ JWT๊ธฐ๋ฐ ์ธ์ฆ ์๋ฒ๋ฅผ ๋ฆฌํฉํ ๋ง ํ๋ฉด์ ์ธ์ฆ/์ธ๊ฐ์ ๋ํ ๋ถ๋ถ์ ๋ค๋ค๋ณด์๋ค. ์ฌ๋ฌ ๋ ํฌ์ ๋ธ๋ก๊ทธ ๊ธ์ ๋ง์ด ๋ณด์์ง๋ง ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ชจ๋ ๋ฌ๋๋ค. ๊ทธ๋์ Spring Security ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ตฌํํด ๋ณด์๋ค. ๊ทธ ์ค ์ธ๊ฐ(Authorization) ๋ฐฉ๋ฒ์ ์ค์ ์ ์ผ๋ก ๋ค๋ค๋ณผ ๊ฒ์ด๋ค. 1. AuthUser์ด ํด๋์ค๋ ์๋น์ค๋จ์์ ์ฌ์ฉํ ์ฌ์ฉ์์ uniqueํ ์๋ณ์๋ค์ ์ ๋ณด๋ฅผ ๋ฃ์ด ์ ๋ฌ๋๋ ์์ ๊ฐ์ฒด๋ก,ํ์ฌ ์ธ๊ฐ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ด์ ์ฌ์ฉ๋ ๊ฒ์ด๋ค. @Getter@AllArgsConstructorpublic class AuthUser { private final Long id; ..
๊ฐ๋ฐ์ ๊ธ์ง๊ธฐ์ ๋น์ทํ๋ค. ๋จผ์ ์๊ฐ์ ๊ธฐ๋กํ ํ ์ฝ๊ธฐ ์ข๊ฒ ๋ค๋ฌ๋ ๊ณผ์ ์ด ์งํ๋๋ค. ํจ์๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ๋จผ์ ๋ก์ง์ ๋์ดํ๊ฒ ์ถํ์ ๋ฆฌํฉํ ๋ง์ด ์งํ๋๋ค. ์ค๋์ ๊ตฌ์กฐ์ ์ผ๋ก๋ ์ข์ผ๋ฉฐ ์ฝ๊ธฐ ์ข์ ํจ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ฒ ๋ค. ์๊ฒ ๋ง๋ค๊ธฐ์ข์ ํจ์ ๊ตฌ์กฐ๋ ๋๊ฐ ์๊ฒ ๊ตฌํํ๋๊ฒ ์ข๋ค. ๊ฐ ํจ์๊ฐ ํ๋์ ์ด์ผ๊ธฐ๋ฅผ ํํํ๋๊ฒ ์ข๋ค. ๋ณดํต ์๋์ ๊ฐ์ ํจ์์ ๊ธธ์ด ์ ๋๊ฐ ์ ํฉํ๋ค๊ณ ํ๋ค.public static String renderPageWithSetupsAndTeardowns( PageData pageData, boolean isSuite) throws Exception { if (isTestPage(pageData)) includeSetupdAndTeardownPages(pageDa..
์ฝ๋์์ ๋ค์ด๋ฐ์ ์ด๋ ์ํฉ์์๋ ์ฐ์ธ๋ค. ์ข์ ๋ค์ด๋ฐ์ ๊ณ ๋ฏผํ๋ ์๊ฐ๋ณด๋ค ์ ์ฝํ๋ ์๊ฐ์ด ๋ ๋ง์์ง๋ค. ์ค๋์ ๋ค์ด๋ฐ์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ช๊ฐ์ง ์์๋ณด๊ฒ ๋ค. ์๋๋ฅผ ๋ด์ ์ด๋ฆ๋ณ์, ํจ์, ํด๋์ค์ ์ด๋ฆ์๋ ๋ถ๋ช
ํ ์๋๋ฅผ ๋ด๋๊ฒ ์ข๋ค. - ์กด์ฌ ์ด์ - ์ํ ๊ธฐ๋ฅ- ์ฌ์ฉ ๋ฐฉ๋ฒ ๋ค์ด๋ฐ ๊ท์น์ค์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ท์น์ด๋ค. ํด๋น ์ด๋ฆ์ ํตํด ์ด๋ค ์๋๋ฅผ ํ๋ ค๊ณ ํ๋์ง ํ์
ํ ์ ์์ด์ผ ํ๋ค. public List a() { //์คํ ๋ก์ง ..} ๋น์ฐํ๊ฒ๋ ์ ํจ์ ์ด๋ฆ์ผ๋ก๋ถํฐ๋ ์ด๋ค User๋ฅผ ๋ฐํํ๋๊ฑด์ง ์ ์ ์๋ค. public List getActiveUsers() { //์คํ ๋ก์ง ..} ๋ค์ด๋ฐ์ ์๋๋ฅผ ์ถ๊ฐํ์ฌ ํ์ฑ ์ฌ์ฉ์๋ฅผ ์ป๊ธฐ ์ํ ๋ชฉ์ ,์ฌ์ฉ์๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ฅ,get์ ํตํด ์กฐํํ๋ ์ฉ๋..