react38 [Spring] ๋์์ฑ ๋ฌธ์ ๋ฅผ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ํด๊ฒฐํด๋ณด์!_ ๋ฆฌํฉํ ๋ง ๋ง๋ค์๋ ์ฝ๋๋ฅผ ๋ค์ ์ดํด๋ณด๋๋์์ฑ ๋ฌธ์ ๋ฅผ ์ ๋งคํ๊ฒ ํด๊ฒฐํ๊ณ ์์๋ค.์ข ๋ ํ์คํ๊ฒ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋ณด์. 1. ์์ธ์ด๋ฐ ๋ก์งif (customerRepository.existsByCode(code)) { throw new DuplicateCodeException("์ด๋์ฝ๋๊ฐ ์ค๋ณต๋์์ต๋๋ค.");}customerRepository.save(customer);customerSearchRepository.save(toSearchEntity(customer));CustomerService ์ค save ๋ฉ์๋์ ์ผ๋ถ๋ถ์ด๋ค. ์ฒ์ ๊ณ ๊ฐ ๋ฑ๋ก ๋ก์ง์ ์ด๋ฐ ํ๋ฆ์ด์๋ค. code๊ฐ ๋ค์ด์ค๋ฉด existsByCode๋ก code๊ฐ ์กด์ฌํ๋์ง ๋ณด๊ณ , ์กด์ฌํ๋ฉด DuplicateCodeException์ ๋์ก๋ค.๋.. 2026. 6. 8. [Spring, React] ๊ฐ์ฒด ์ค์ฌ์ธ JPA์ ๋ง์ถฐ์ ์ฝ๋ ์์ ํ๊ธฐ. ์ด๋ฐ์ DB ์ฝ๋๋ฅผ ์์ฑํ ๋,ํ ์ด๋ธ ์ค์ฌ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.๊ทธ๋ฌ๋ JPA๋ ๊ฐ์ฒด ์ค์ฌ์ด๊ธฐ ๋๋ฌธ์์ฝ๋๋ฅผ ์์ ํด์ผํ ํ์์ฑ์ ๋๊ผ๋ค. 1. ์ํฉ์ค๋ช ์ด๋ฐ ํ๋ก์ ํธ๋ ๊ด๋ฆฌ์ ์์ญ์์ ์ด 3๊ฐ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.AdminRepository : ๊ด๋ฆฌ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.PemissionRepository : ๊ถํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. ์ง๊ธ ํ๋ก์ ํธ์์ ์ด 5๊ฐ์ง ๊ถํ์ด ์๋ค. ์กฐํ | ์ถ๊ฐ | ์์ | ์ญ์ | ๊ฒ์์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๊ฐ๊ฐ 1๋ฒ, 2๋ฒ, 3๋ฒ... ์ด๋ฐ์์ผ๋ก ๋ฒํธ๋ฅผ ๋ถ์ฌํ๋ค.AdminPermissionRepository : ์ด๋ค ๊ด๋ฆฌ์๊ฐ ์ด๋ค ๊ถํ์ ๊ฐ๊ณ ์๋์ง ์ ์ฅํ๋ค. ์๋ฅผ ๋ค์ด id๊ฐ 1๋ฒ์ธ ๊ด๋ฆฌ์๊ฐ ์กฐํ, ์์ ๊ถํ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด '1-1', '1-3' ๋์ถฉ ์ด๋ฐ์์ผ๋ก ์ ๋ณด๊ฐ ์ .. 2026. 6. 4. [Spring, React] flush( )๋ฅผ ์ฌ์ฉํด์ DB ์ค๋ฅ ํด๊ฒฐํ๊ธฐ ๊ด๋ฆฌ์ ์ ๋ณด๋ฅผ ์์ ํ๋๋์ค๋ณต ์ ์ฅ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.์๋ฌ์ ์์ธ์ ์ฐพ๊ณ ์์ ํด๋ณด์. 1. ์๋ฌDuplicate entry '2-3' for key 'admin_permission.uk_admin_permission'์ฒ์ ๋ก์ง์ ์ด๋ฌ๋ค. [ ๊ด๋ฆฌ์ ์ ๋ณด ์์ ] - [ ๊ธฐ์กด ๊ถํ ์ญ์ ] - [์ ๊ถํ ๋ค์ ์ ์ฅ] ํ๋ฆ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฐ๋ฐ ์๊ฐํ ํ๋ฆ๋๋ก ์ผ์ฒ๋ฆฌ๊ฐ ๋์ง ์์ ๋ชจ์์ด๋ค. ์ด๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง DB๋ถํฐ ๋ค์ ์ดํด๋ดค๋ค.AdminService์ update ์ฝ๋ ์ค ์ผ๋ถ// ๊ธฐ์กด ๊ถํ ์ญ์ adminPermissionRepository.deleteByAdminId(id);// ๋ค์ ์ ์ฅsavePermissions(id, request.getPermissions());โ DB๋ฅผ 3๊ฐ๋ก.. 2026. 6. 2. [React, Next.js] Zod ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ๊ณ ์ฝ๋ ์์ฑํด๋ณด์ ์ฌ์ฉ์ ์ ํ ์ต์ ์ ๊ฒ์ฌํ๊ณ ๋ก๋ ๊ฒฐ๊ณผ ์๋ต์ ๊ฒ์ฆํ๊ธฐ ์ํดZod ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค.Zod๊ฐ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ์ง ์์๋ณด๊ณ ์ฝ๋ ์์ฑ์ ํด๋ณด์ - ๋ก๋ ๋ฒํธ ์์ฑ ๋ง๋ฒ์ง ๋ก๋ ๋ฒํธ ์์ฑ ๋ง๋ฒ์งํ์ด ์์ 3๊ฐ๋ฅผ ์ ํํ๋ฉด ์ค๋์ ๋ก๋ ๋ฒํธ์ ํ์ด ์ ์๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ฌ์ดํธ์ ๋๋ค.lotto-magic-frontend.vercel.app 1. ZodTypeScript๋ฅผ ์ํ ์คํค๋ง ์ ์ธ ๋ฐ ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.๋ฐ์ดํฐ๊ฐ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํํ์ ๊ท์น์ ์ ํํ ๊ฐ์ถ๊ณ ์๋์ง ๊ฒ์ฌํด์ฃผ๋ ๋๊ตฌ์ด๋ค.TypeScript๋ ์ปดํ์ผ ํ์์๋ง ํ์ ์ ๊ฒ์ฌํด์ค๋ค.์ฝ๋๊ฐ ๋ณํ๋์ด ์ค์ ๋ก ์น๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์์ ์คํ๋ ๋๋ ์์ํ JavaScript๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ํ์ ๊ฒ์ฌ๊ฐ ๋ถ๊ฐํ๋ค.๋ง์ฝ ์๋ฒ API์์ ์ซ์๋ฅผ .. 2026. 5. 30. [Spring, React] react-query ์ถ๊ฐ ํ ๊ธฐ๋ฅ ๋จนํต ์ค๋ฅ ๋ฐ์,,, ํด๊ฒฐํด๋ณด์! ๋ฆฌ์กํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ ๋ค๊ฒ์์ฐฝ์ ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๊ณ ์ํฐ๋ฅผ ๋๋ฅด๋ฉด์์ ํ ํ๋ฉด์ด ๋ฉ์ถฐ๋ฒ๋ฆฌ๋ ์ด์ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.์ ๊ทธ๋ฐ์ง ์ฐพ์๋ณด๊ณ ํด๊ฒฐํด๋ณด์. 1. ๋ฌธ์ ์ํฉ ๋ง์ง๋ง์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๊ฒํ ํ๋ฉด์ ์์ํ๊ฒ ์์ ํด์ผํ ๋ถ๋ถ๋ถํฐ ๋ถํธํ๋ ์ , ์์ฌ์ ๋ ๋ถ๋ถ ๋ฑ ์ฌ๋ฌ๊ตฐ๋ฐ ์์ ์ ์งํํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ๋ค๋ถํฐ ๊ฒ์ ๊ธฐ๋ฅ์ด ๋์ํ์ง ์์๋ค. ์ฌ๊ธฐ์ ๋์ ๋ฌธ์ ์ ์ด ์์๋๋ฐ, ๊ณ ์น ๋๋ง๋ค ๋ชจ๋ ๊ธฐ๋ฅ์ ํ์ธํ์ด์ผํ์ง๋ง ๊ฒ์๋ง ๋นผ๊ณ ํ์ธํ๋ ๋ฐ๋์ ์ด ๋ฌธ์ ๊ฐ ์ธ์ ๋ถํฐ ๋ฐ์ํ๊ฒ ๋์๋์ง ์ ํํ ํ์ ํ ์ ์์๋ค.F12๋ฅผ ๋๋ฌ์ network๋ฅผ ํตํด ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง, ์ ๋จนํต์ด ๋๊ฑด์ง ์๊ณ ์ถ์ด๋ F12์กฐ์ฐจ ๋๋ฆฌ์ง ์์๋ค. ๊ฒ๋ค๊ฐ ์๋ฌ๊ฐ ๋ฐ์ํ์ง๋ ์๊ณ run์ ์ ๋์๊ฐ๊ณ ์์๊ธฐ์ ์ฝ๊ฒ ์ด์ ๋ฅผ ์ฐพ์ ์ ์์๋ค.. 2026. 5. 26. [Spring, React] ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํจ๊ฐ ๋จ๋ ์์ธ์ ์ฐพ์ ์์ ํด๋ณด์. ์ปจํธ๋กค๋ฌ๊ฐ ์๋ฌ๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ๋์ง์์๋ณด๊ธฐ ์ํด ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค.๊ทธ๋ฐ๋ฐ ์๊พธ๋ง ํ ์คํธ๋ฅผ ์คํจํ๋ค.์๊ทธ๋ฐ์ง ๋ถ์ํ๊ณ ๊ณ ์ณ๋ณด์! https://lotto-magic-frontend.vercel.app/ ๋ก๋ ๋ฒํธ ์์ฑ ๋ง๋ฒ์งํ์ด ์์ 3๊ฐ๋ฅผ ์ ํํ๋ฉด ์ค๋์ ๋ก๋ ๋ฒํธ์ ํ์ด ์ ์๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ฌ์ดํธ์ ๋๋ค.lotto-magic-frontend.vercel.app 1. ์ค๋ฅ ๋ถ์LottoControllerErrorTest.java์๋ฌ๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ๋์ง ๋ณด๋ ํ ์คํธ ํด๋์ค@WebMvcTest(LottoController.class)@Import(GlobalExceptionHandler.class)class LottoControllerErrorTest { @Autowired p.. 2026. 5. 21. ์ด์ 1 2 3 4 ยทยทยท 7 ๋ค์