์ค๋์ ํธ๋ฌ๋ธ ์ํ
์ด์ ๋ถํฐ ํ๋ก ํธ ๊ตฌํ๊ณผ ํจ๊ป ํ ์ค ๊ฒฐ์ API ์ฐ๋ ๊ฐ๋ฐ์ ๋ค์ด๊ฐ๋ค. ๊ทผ๋ฐ ๋ฌธ์ ์ 1. 401 Unauthorized tossPayments = TossPayments(key); ํด์ฃผ๋ ๊ณผ์ ์์, ํค ๊ฐ์ด ๊ถํ์ด ์๋ ๊ฑฐ๋ค๋ผ๋ ์ค๋ฅ๊ฐ ์ฃผ๊ตฌ์ฅ์ฐฝ .......... ๋ถ๋ช
๊ณต์ ์ฌ์ดํธ์์ ๋ฐ์ ๊ฐ์ ์๋ฃ์ด์คฌ๋๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ ๊ณ์ํด์ ๋ค๋ฅธ ๊ฐ๋ ๋ฃ์ด์ฃผ๊ณ ๋ค์ ๋ฃ์ด์ฃผ๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ ๋๋ค.... ์ ๋์ง???? ๋ญ๊ฐ ๋ค์ ๊ณต๋ฐฑ์ด๋ผ๋๊ฐ .... ์ด๋ฐ๊ฒ ๋ค์ด๊ฐ๊ฑฐ ๊ฐ๋ค.... ๋์ผ๋๋ญ 2. ๋ก๊ทธ์ธ ์ฌ๋ถ ํ์ธ ํ, ํค๋์ ํ์๋๋ ๋ฉ๋ด๊ฐ ๋ฌ๋ผ์ ธ์ผํ๋๋ฐ function checkLoginStatus() { var token = Cookies.get('Authorization'); // ๋ก๊ทธ์ธ ์ํ ํ์ธ A..
TIL๐ฅ
TCP (Transmission Control Protocol): ์ฐ๊ฒฐ ์งํฅ์ฑ (Connection-Oriented): TCP๋ ์ฐ๊ฒฐ์ ์ฑ๋ฆฝํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ํ์๋ ์ฐ๊ฒฐ์ ์ข
๋ฃํ๋ ๊ณผ์ ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ ์ ๋ขฐ์ฑ ์๊ณ ์ ํํ ์ ์ก์ ๋ณด์ฅํฉ๋๋ค. ์ ๋ขฐ์ฑ ๋ฐ ํ๋ฆ ์ ์ด: TCP๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๊ทธ๋จผํธ๋ก ๋ถํ ํ์ฌ ์ ์กํ๊ณ , ์์ ์ธก์์๋ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์กฐ๋ฆฝํ์ฌ ์์ ๊ณ์ธต์ ์ ๋ฌํฉ๋๋ค. ๋ํ, ํ๋ฆ ์ ์ด ๊ธฐ๋ฅ์ ํตํด ์์ ์ธก์ ์ฒ๋ฆฌ ์๋๋ฅผ ์กฐ์ ํ์ฌ ๊ณผ๋ํ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํฉ๋๋ค. ์์ ๋ณด์ฅ: TCP๋ ๋ฐ์ดํฐ์ ์ ์ก ์์๋ฅผ ๋ณด์ฅํ์ฌ ์์ ์ธก์์๋ ์ ํํ ๋ฐ์ดํฐ ์์๋ก ์ฌ์กฐ๋ฆฝํฉ๋๋ค. ๋์ ์ ๋ขฐ์ฑ: ์ค๋ฅ ๋ณต๊ตฌ ๊ธฐ๋ฅ๊ณผ ์ฌ์ ์ก ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ก์ ๋ณด์ฅํฉ๋๋ค. ์ฌ์ฉ ์์: ์น ๋ธ๋ผ์ฐ์ ์ HTTP ํต์ , ..
์ค๋์ ํ์ง๊ฑฐ๋ฆฌ โ ๏ธ ํ ํฐ ๊ฒ์ฆ,์ธ๊ฐ ์ ๋ฐ์ํ๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ์ต์์ ํํฐ๋ฅผ ํ๋ ๋ ๋ง๋ค์๋ฐ. ๋น ๋ฅด๊ฒ ์์ธ๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ๋ํด์๋ง ์ฒดํน์ ํ๊ณ ๋์ด๊ฐ๋๋ฐ, ์ดํ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ํ
์คํธ ์ฝ๋๋ฅผ ์คํํด๋ณด๋ ์๋ฌ์ ํฅ์ฐ... ๋๋์ฒด ์ด๋์ ๋๋ ๊ฒ์ธ๊ฐ ๋ณด๋, ๋ก๊ทธ์ธ ์ฑ๊ณต ํ์ ๋ฐ์ํ๋ค. ๊ทธ๋์ ํํฐ์ ์์(?) ์ค์ ์ด ๋ฌธ์ ์ธ๊ฐํด์, addFilterBefore()์ ์ด๊ฒ์ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํด๋ดค๋ค. .addFilterBefore(exceptionHandlerFilter(), JwtAuthenticationFilter.class) ๊ธฐ์กด -> ์์ธ๋ ์ํ๋ ๋ฐ๊ฐ ๋์ค์ง๋ง, ๋ก๊ทธ์ธ ์ฑ๊ณต ์, ์ด์ํ ์๋ฌ๊ฐ ๋ธ .addFilterBefore(exceptionHandlerFilter(), JwtAuthoriza..
์ค๋์ ๋๋ฌด ๋ง์ ๊ฒ์ ํ๋ค 1. ๊ธฐ์กด ) ์ด๋๋ฏผ ์ ์ ํ์ ๊ฐ์
(์ด๋๋ฏผ ํ ํฐ์ ๊ฐ์ง๊ณ ) -> ๋ณ๊ฒฝ ) ์ด๊ธฐ ์ด๋๋ฏผ์ data.sql๋ก ์ง์ ๋ฃ์ด์ฃผ๊ณ , ์ดํ ์ถ๊ฐ๋๋ ๊ด๋ฆฌ์๋ค์ ๊ธฐ์กด ๊ด๋ฆฌ์๋ค์ด ๊ถํ์ ๊ฐ์ง๊ณ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ์ (โ
๊ตฌํํด์ผํจ) 2. ๊ด๋ฆฌ์ API๋ ๊ด๋ฆฌ์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก 3. ๊ธฐ์กด) JWT Token ๊ฒ์ฆ ์คํจ ์, log.error ๋ก ๋ก๊ทธ๋ง ์ฐ์ด์คฌ๋๋ฐ, ๋ณ๊ฒฝ ) ApiException์ ๋์ ธ์ Response๋ฅผ ์ฃผ๋๋ก ์์ - ์ถ๊ฐ ์์ โ ๏ธ, ์ต์์ Filter๋ฅผ ํ๋ ๋ ๋ง๋ค์ด์, ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ๊ธฐ์ ํ๋๋ก ํด์ฃผ๊ธฐ โ ๏ธ 4. ํด๋ํฐ ๋ฒํธ SMS ์ธ์ฆ ๊ธฐ๋ฅ 50% ๊ตฌํ ์๋ฃ (..... ์ ์ก๊น์ง ๋๊ณ , ์ด์ ์ ๋ฆฌ์ redis์ ์ ์ฅํ๊ณ , ํ์ ๊ฐ์
๋ฒํผ ๋๋ฅด๋ฉด ํ์ธ๊น์ง ใฑใฑ)
๊นจ๋ฌ์ ์ ๋๋ ๋ค๋ฅธ ํ์๋ค๋ณด๋ค ๋ถ์กฑํ ์ ์ด ๋ง๋ค... ๋ง์ด ๋ฐฐ์๊ฐ์! ํ์ดํ
! ๊ทธ๋ฆฌ๊ณ ํ์ ๋ง๋ด๋ก์(๋ง๋..?) ์๊ธฐ๋ฅผ ๋งก๊ณ ์๋๋ฐ ์ดํ์ ๋ณด๋ ๋๋ฌด ์ค๊ตฌ๋๋ฐฉ ์ ๋ฆฌ๊ฐ ๋์ด์์๋ค. ์ ๋ฆฌ๋ฅผ ๋ ์ ํ์! 01/06 ์ ๊ฐ๋ฐ ์ผ์ง ์๊ฑด1 : ๊ฐ์ฒด์งํฅ์ 5๊ฐ์ง ์์น์ค ์์กด ์ญ์ ์์น ์ฝ๋ ์ปจ๋ฒค์
์ถ๊ฐ ์ค์ ํจ! User of(String email, String password…), User of(UserCreateRequest) entity๋ request์ ์์กดํ์ง ์๊ณ ๊ทธ ์์ฒด๋ก ์กด์ฌํด์ผ ํ๋ค๊ณ ์๊ฐํจ Request.toEntity(User) → User of(String email, String password…) ์ด ๋ถ๋ถ์ ์ดํ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌ, Sequence ๊ฐ์ ๊ฒฝ์ฐ request๊ฐ ํ์ํ์ง ์๋๋ฐ..
์ต์ข
ํ๋ก์ ํธ์ ๋ค์ด๊ฐ๋ค. ๊ธฐ์กด ํ๋ค๊ณผ ๋ฌ๋ฆฌ S.A ๋ถํฐ ์์ฒญ ์ธ์ธํ๊ฒ ์งฐ๋๋ฐ, ์ด๋ ต๋ค... ๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋จผ์ ์์ฑํ๊ณ → ์ํคํ
์ณ ๊ทธ๋ฆฌ๊ณ → ์์ด์ด ํ๋ ์ → ERD → API ๋ช
์ธ์ ์ด๋ฐ ์์ผ๋ก ์งํํ๋๋ฐ ์ฌ์ค API ๋ช
์ธ์ ์์ฑ์ ์ด๋ ค์์ด ๋ง์์ ์ค๊ฐ ์ค๊ฐ์ ๊ทธ๋ง๋๊ณ ์์ด์ด ํ๋ ์์ ๊ทธ๋ฆฌ๊ณ , ERD๋ฅผ ์ค๊ณํ ํ์ ์งํํ๋ค. ERD๋ฅผ ์ค๊ณํ ๋, ๊ฐ์ฅ ์ด๋ ค์ ๋ค. ๊ณต์ฐ์ฅ๊ณผ ์ข์์ ์ฐ๊ฒฐํ์ฌ ๊ตฌ์ฑํ๋๋ฐ, ์ฒ์์๋ ์ข์ ์์ ์ด ์ข์์ด ๊ฒฝ๋งค์์ธ์ง ์ ์ฐฉ์์ธ์ง๋ฅผ ํ๊ธฐํ๋ ์ปฌ๋ผ๊ณผ ๊ฐ๊ฒฉ ์ปฌ๋ผ์ด ๋ค์ด์์๋ค. ๊ทธ๋ฐ๋ฐ ์๊ฐ์ ๊ณฐ๊ณฐํ ํด๋ณด๋(๋ค๋ฅธ ํ์๋ถ์ด ใ
) ์ข์์ ๊ฐ๊ฒฉ, ํ๋งค ํ์
์ ๊ณต์ฐ์ฅ์ด ์๋๋ผ ๊ณต์ฐ์ ๋ฐ๋ผ ๋ณ๋๋๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ณต์ฐ๊ณผ ์ข์์ ๋ณตํฉํค๋ก ๊ตฌ์ฑ๋ ๊ณต์ฐ ๋ณ ์ข์ ๊ฐ๊ฒฉ ํ
์ด๋ธ์ ์๋กญ๊ฒ ์์ฑํ์ฌ ๊ฐ๊ฒฉ๊ณผ ํ..
๋ฐํ ํผ๋๋ฐฑ์์ GitHub Action Redis TTL ์ํคํ
์ณ ์ ๋ํด ๋ค์๋ค. ๊ณต๋ถํ์ ใ
๋ด์ผ....
CardService ํด๋์ค์ ๋ํ ํ
์คํธ ์ฝ๋๋ฅผ ์ง๋๋ฐ, ์๋ ์์กดํ๊ณ ์๋ ํด๋์ค๊ฐ ๋ง์ Mockito๋ฅผ ํ์ฉํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ค์๋ค... given-willReturn ์ด ๋๋ฌด ๋ง์ด ์ฌ์ฉ๋๊ณ , ์์ ์ํฐํฐ์ id๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์, ์ฐจ๋ผ๋ฆฌ H2๋ฅผ ์ด์ฉํ์ฌ ์ค์ ๊ฐ์ ๋ฃ๋๋ก ์งํํ๋ค. ๊ฐ๋ค์ ์ ์ฅํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ Never ์์๋ค. ํ์ง๋ง!! โ ๏ธ ํ ๊ฐ์ ํ
์คํธ๊ฐ ๋๋ ๋๋ง๋ค ๋ฐ์ดํฐ ๊ฐ๋ค์ ๋ชจ๋ ์ง์์ค์ผ ํ๋๋ฐ ๋ค๋ฅธ ์ํฐํฐ์ repository๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ, service ๋จ์ ๊ฑฐ์ณ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ deleteAll ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์๋ค. ๊ทธ๋์ ๋ค์ mockito ๋ฅผ ์ ์ฉํด๋ณด๋ คํ๋ค ์ฅ๋ ฌํ ์คํจ....... ๋ค์ ๊ธฐ์กด์ผ๋ก ๋์์์ ์ฌ๋ฌ ์์น๋ฅผ ํด๋ณธ ๊ฒฐ๊ณผ Databas..