๐ฑ Backend/Spring16 [JUnit5] @ParameterizedTest, @MethodSource ๊ธฐ์กด์ ์์ฑํ๋ ํ ์คํธ ์ฝ๋์์๋ "๊ฒ์๊ธ ์์ฑ"์ด๋ผ๋ ๊ธฐ๋ฅ์ ๋ํด ํ ์คํธ๋ฅผ ํ๊ธฐ ์ํด @Nested@DisplayName("๊ฒ์๊ธ ์์ฑ")class createPostTest { @Test void createPost_์ฑ๊ณต() { ... } @Test void createPost_์กด์ฌํ์ง์๋์ฌ์ฉ์() { ... } @Test void createPost_์กด์ฌํ์ง์๋๋ฌธ์ ๋ฒํธ() { ... } @Test void createPost_์กด์ฌํ์ง์๋์นดํ ๊ณ ๋ฆฌ() { ... }}์ด๋ฐ ์์ผ๋ก ๋ชจ๋ ์์ธ ์ผ์ด์ค์ ๋ํด์ ํ๋์ฉ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ๊ฒ์ฆํ๊ณ ์๋ค. ํ์ง๋ง ์ด์ฒ๋ผ ์งํํ๋ฉด ์ค๋ณต๋๋ ๋ถ๋ถ๋ ๋ง์์ง๊ณ .. 2025. 6. 19. [JUnit5 / TestCode] @Nested๋ก ๊ฐ๋ ์ฑ ์ข์ ํ ์คํธ์ฝ๋ ์์ฑํ๊ธฐ ๋จ์ํ ์คํธ๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ํ๋์ ๊ธฐ๋ฅ์๋ ์์ฑํด์ผ ํ ํ ์คํธ ์ฝ๋๊ฐ ๋ง์์ง๋ค.์ฑ๊ณต(), ์คํจ_๋ฌด์จ์์ธ() ์ด๋ฐ ์์ผ๋ก..์ฒ์์๋ ๊ทธ๋ฅ@ExtendWith(MockitoExtension.class)class LikeServiceTest {... @Test @DisplayName("์ข์์ ๋ฑ๋ก์ ์ฑ๊ณตํ๋ฉด LikeResponseDto ๋ฐํ") void createLike_์ฑ๊ณต() { ... } @Test @DisplayName("์ด๋ฏธ ์ข์์๋ฅผ ๋๋ฅธ ๊ฒ์๊ธ์ ๋ค์ ๋๋ฅด๋ฉด AlreadyLikedException ๋ฐ์") void createLike_์ด๋ฏธ์ข์์๋๋ฆ_์์ธ() { ... } @Test @DisplayName("์ข์์ ๋ฑ๋ก ์ค ๋.. 2025. 6. 11. [Spring] SSE(Server Sent Events) ์ฐ๋ฆฌ ์๋น์ค์์ ๊ฒ์๊ธ์ ๋๊ธ, ๋๋ ์ข์์๊ฐ ๋๋ฆฌ๋ฉด ์ค์๊ฐ์ผ๋ก ์๋์ ์ ๊ณตํด์ฃผ๊ธฐ ์ํด์ SSE๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ์๋ค.SSE (Server Sent Events): HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋จ๋ฐฉํฅ ํต์ ํ๋กํ ์ฝ์ด๋ค. ๋จ๋ฐฉํฅ ์ง์ ์ฐ๊ฒฐ์ ํ์ฉํ์ฌ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ฒคํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฅ๋์ ์ผ๋ก ์ ์กํ ์ ์๊ฒ ํ๋ค.์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ ํตํด ๊ตฌํClient๊ฐ ์๋ฒ์ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ๊ธฐ ์ํ ์์ฒญ์ ๋ณด๋ธ๋ค.์๋ฒ์์๋ ํด๋ผ์ด์ธํธ์ ๋งคํ๋๋ SSE ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.์๋ฒ์์ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์์์๊ณ , ํด๋ผ์ด์ธํธ์๊ฒ ๋น๋๊ธฐ ์ ์ผ๋ก ๋ฉ์ธ์ง๋ฅผ ํธ์ํ๋ค.[ํน์ง]์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ๋ UTF-8๋ก ์ธ์ฝ๋ฉ๋์ด์ผ ํจ.๋ฐํ๋๋ ์ปจํ ์ธ ์ ํ์ text/event-streamSSE์ ์ฅ์ ์ค์๊ฐ.. 2025. 6. 10. [JUnit, Mockito] TestCode ์์ฑํ๊ธฐ JUnit: ์๋ฐ ์ธ์ด๋ฅผ ์ํ ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ๋จ์ ํ ์คํธ: ํ๋ก๊ทธ๋จ์ ์์ ๋จ์๋ก ๋ถํดํ์ฌ ๊ฐ ๋จ์๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ -> ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์AssertJ: ์๋ฐ ํ ์คํธ๋ฅด ๋๊ธฐ ์ํด ๋ค์ํ ๋ฌธ๋ฒ์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌMockito: ๋จ์ ํ ์คํธ๋ฅผ ์ํด ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ Java ์คํ์์ค ํ๋ ์์ํฌJUnit ๊ด๋ จ ์ด๋ ธํ ์ด์ @TestTest ๋ฉ์๋๋ก ์ธ์ํ๊ณ ํ ์คํธ๊ฐ๊ฐ์ ํ ์คํธ๊ฐ ์๋ก ์ํฅ์ฃผ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ ์์น์ผ๋ก ํจ@BeforeAll@BeforeAll @Test ๋ฉ์๋ ๋ณด๋ค ๋จผ์ ํ๋ฒ๋ง ์ํ๋์ด์ผ ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ@BeforeEach@BeforeEach ์ ์ธ๋ ๋ฉ์๋๋ฅผ @Test ๋ฉ์๋๊ฐ ์คํ๋ ๋๋ง๋ค ๊ทธ ์ ์ ๋ฐ๋์ ์คํ@Test ๋ฉ์๋ ์คํ์ ๊ณตํต์ผ๋ก.. 2025. 6. 8. @RequiredArgsContructor, @AllArgsContructor, @NoArgsContructor ๊ด์ฑ์ ์ผ๋ก ์ฐ๋ ์ด๋ ธํ ์ด์ ์ค์์ @RequiredArgsContructor, @AllArgsContructor, @NoArgsContructor ๊ฐ ์์๋๋ฐ ๊ฐ๋ ์ ํ์ ํ๊ณ ์ ๊ธ์ ์จ๋ณธ๋ค..@RequiredArgsContructorfinal ํ๋๋ @NonNull์ด ๋ถ์ ํ๋๋ง ํฌํจํ๋ ์์ฑ์๋ฅผ ์๋ ์์ฑํ๋ค.๊ผญ ํ์ํ ํ๋๋ง ์ฃผ์ ๋ฐ๋ ์์ฑ์๋ฅผ ๋ง๋ค์ด์ค๋ค.์ฃผ๋ก ์์กด์ฑ ์ฃผ์ (DI) ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค.@AllArgsContructor๋ชจ๋ ํ๋๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๊ฐ๋ ์ ์ฒด ์์ฑ์๋ฅผ ์๋ ์์ฑํ๋ค.DTO, ํ ์คํธ์ฉ ๊ฐ์ฒด ๋ฑ์ ์ฌ์ฉํ๊ธฐ ์ข๋ค.import lombok.RequiredArgsConstructor;import lombok.AllArgsConstructor;import lombok.ToString;@Req.. 2025. 6. 6. @Transactional ์ ๋ด๋ถ ๋์ ์๋ฆฌ ํธ๋์ญ์ ?: DBMS ๋๋ ์ ์ฌํ ์์คํ ์์ ์ํธ์์ฉ์ ๋จ์ (ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์์ ๋จ์)ํน์งAtomicConsistentIsolationDurability์ฐ์ฐ๋กค๋ฐฑ์ปค๋ฐ⇒ ๊ทธ๋ผ Spring์์๋ ์ด ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ๋๊ฐ?@Transactional์คํ๋ง์์๋ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ ์ธ์ ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ค.@Transactional ๊ณผ ๊ฐ์ด ์ด๋ ธํ ์ด์ ๋ฐฉ์์ผ๋ก ์ด๋ฅผ ์ง์ํ๋ค.Spring์์ ๋ฐ์ดํฐ ์์ ์ ์คํ๋จ์๋ฅผ ๋ช ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค๊ณ ๋ณผ ์ ์๋ค.ํด๋์ค / ๋ฉ์๋ ์์ @Transactional ์ ๋ถ์ด๋ฉด AOP(๊ด์ ์งํฅํ๋ก๊ทธ๋๋ฐ)๋ฅผ ํตํด ํ๊ฒ์ด ์์ํ๊ณ ์๋ ์ธํฐํ์ด์ค ๋๋ ํ๊ฒ์ ์์ํ ํ๋ก์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค. ์ด๋ ํ๋ก์ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ํ๊ฒ ๋ฉ์๋ ์ ํ๋ก ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ํ.. 2025. 5. 21. ์ด์ 1 2 3 ๋ค์