Spring (core, boot, cloud, batch) ๐ฑ : ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋๋ค
ํ ์คํธ ๐งช : ํผํผํ ์ํํธ์จ์ด๋ก ์ฑ ์์ง๊ธฐ
-
[ํ ์คํธ] ํตํฉ ํ ์คํธ์์ ํ ์คํธ ๊ฐ DB ์ํ๊ฐ ๊ณต์ ๋๋ ๋ฌธ์ : @Transactional, ์ฌ์ฉํ๋ฉด ์๋๋ ์ํฉ, ๊ทธ์ธ ๋ฐฉ์
์ํฉ- ์๋ ํ ์คํธ ์ฝ๋๋ฅผ ์คํ ์์ผฐ๋ค @SpringBootTest@Import(SplearnTestConfiguration.class)public class MemberRegisterTest { @Autowired private MemberRegister memberRegister; @Test void register(){ Member member = memberRegister.register(MemberFixture.createRegisterRequest()); assertThat(member.getId()).isNotNull(); assertThat(member.getStatus()).isEqualTo(MemberStatus.PENDING); } @Test void du..
2026.02.09 22:10 -
[ํ ์คํธ] No qualifying bean of type 'tobyspring.splearn.application.required.EmailSender' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
์๋ฌ ๋ฉ์์ง ์ผ๋ถCaused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberService' defined in file [/Users/eundms/IdeaProjects/splearn/build/classes/java/main/tobyspring/splearn/application/MemberService.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'tobyspring.splearn.application.required.Ema..
2026.02.09 19:36 -
[ATDD] ์ธ์ํ ์คํธ, ํ ์คํธ๊ฒฉ๋ฆฌ, ํ ์คํธ ํฝ์ค์ฒ, RestAssured
์ธ์ํ ์คํธ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) - ์ค์ ์๋ฒ๋ฅผ ๋์์ API๋ฅผ ํธ์ถํ๋ End-to-End ํ ์คํธ - ์ฌ์ฉ์ ๊ด์ ์์ ๊ธฐ๋ฅ์ด ๋์ํ๋์ง ๊ฒ์ฆ - RANDOM_PORT: ํ ์คํธ๋ง๋ค ๋๋ค ํฌํธ๋ก ์๋ฒ ์คํ (์ถฉ๋ ๋ฐฉ์ง) ํ ์คํธ ๊ฒฉ๋ฆฌ @BeforeEach void setUp() { databaseCleanup.execute(); // ๋งค ํ ์คํธ๋ง๋ค DB ์ด๊ธฐํ } - ๊ฐ ํ ์คํธ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋๋ก ๋ณด์ฅ - ํ ์คํธ ์์์ ์์กดํ์ง ์์ ํ ์คํธ ํฝ์ค์ฒ (Test Fixture) public class TestFixture { public static Extr..
2026.01.18 21:35
Git&Jira๐ ๏ธ : ๊ฒฝํํ๋ฉฐ ๋ชธ์ ๋ฐฐ์ฐ๋ ํ์ ํด
CS : ์ด์ ๋ ๋์ด์ ๋ฌผ๋ฌ๋ ์ ์๋ค
-
[๋คํธ์ํฌ] ์ฟ ํค ๋ฐฉ์๊ณผ ์ธ์ ๋ฐฉ์์ ๊ณ ๋ฏผํ๋ ์ด์ + ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค ๊ณต์
์ฟ ํค ๋ฐฉ์๊ณผ ์ธ์ ๋ฐฉ์์ ๊ณ ๋ฏผํ๋ ์ด์ ์ฟ ํค ๋ฐฉ์- ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ฏ๋ก ์๋์ ์ผ๋ก ์ทจ์ฝํจ- ์ ์ฅ ์์น : ํด๋ผ์ด์ธํธ (๋ธ๋ผ์ฐ์ )- ์ฉ๋ ์ ํ : ์ฝ 4KB- ํ์ฅ์ฑ : ์๋ฒ ๋ฌด๊ด(ํด๋ผ์ด์ธํธ ์ ์ฅ) -> ํ์ฅ์ฑ ์ข์- ์๋ : ์๋ฒ ๋ถ๋ด ์ ๊ณ , ๋น ๋ฆ - ์ธ์ ์ ์ง : ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ฏ๋ก ์ค๋ ์ ์ง ๊ฐ๋ฅ- ์ค์ ํ์ฉ : JWT ๊ธฐ๋ฐ ํ ํฐ ์ธ์ฆ ๋ฑ ์ธ์ ๋ฐฉ์ - ์๋ฒ์ ์ ์ฅ๋์ด ๋ณด์์ฑ์ด ๋์- ์ ์ฅ์์น : ์๋ฒ - ์ฉ๋ ์ ํ : ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ฅ์ ์ฉ๋๋งํผ- ํ์ฅ์ฑ : ์๋ฒ ์ ์ฅ -> ์๋ฒ ๊ฐ ์ธ์ ๊ณต์ ํ์ - ์๋ : ์๋ฒ ๋ฆฌ์์ค ์ฌ์ฉ, ๋๋ฆด ์ ์์ - ์ธ์ ์ ์ง : ์ผ๋ฐ์ ์ผ๋ก ์ผ์ ์๊ฐ ํ ๋ง๋ฃ๋จ- ์ค์ ํ์ฉ : ๋ก๊ทธ์ธ ์ํ ์ ์ง ๋ฑ ์ง์ง ์ค์ํ๊ฒ ๊ณ ๋ คํด์ผ ํ๋ ๋ถ๋ถ์ 1. ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์ง..
2025.07.19 11:25 -
[์ผ] ์ ๊ทธ๋์ CORS๊ฐ ๋ญ์์ : ๊ฐ๋ + ์ค์ ์์
(๊ฐ๋ ๊ณผ ๋์ ์๋ฆฌ๋ฅผ ์ ํํ ๋ชฐ๋ผ์) ์๋ง์ ์ต๊น๋ฅผ ๋นํ๊ณ ๊ตฌ๊ธ๋ง์ผ๋ก Mdn ๋ฌธ์๋ฅผ ์ฐพ์ ์ดํดํ ํ ํด๊ฒฐํจ (์ญ์ ์ ์๋๋ก ๊ฐ์ผ ํจ)๋ฐ๊ฒฌํ๋ cors ํต์ฌ ๊ฐ๋ ์ ์ ์ด๋ณด๊ณ ์ ํ๋คย CORSCORS๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ ์ ์ถ์ฒ๊ฐ ์๋ ๋ค๋ฅธ ์ด๋ค ์ถ์ฒ๋ก๋ถํฐ ์์์ ๋ก๋ฉํ๋ ๊ฒ์ ํ์ฉํ๋๋ก ์๋ฒ๊ฐ ํ๊ฐ ํด์ฃผ๋ HTTP ํค๋ ๊ธฐ๋ฐ ๋ฉ์ปค๋์ฆ์ด๋ค.ย ย ย CORS๊ฐ ๋์ํ๋ ์ธ๊ฐ์ง ์๋๋ฆฌ์คย 1. Simple RequestPreflight Request ์์ฒญ์์ด ์๋ฒ์ ์งํ์ผ๋ก ๋ณธ ์์ฒญ์ ๋ณด๋ธ ํ, ์๋ฒ๊ฐ ์ด์ ๋ํ ์๋ต์ ํค๋์ Access-Control-Allow-Origin ํค๋๋ฅผ ๋ณด๋ด์ฃผ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ CORS ์ ์ฑ ์๋ฐ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ค.ย 1) ์์ฒญ์ ๋ฉ์๋๋ GET, HEAD, POST ์ค ํ๋๋คย 2) Accept, Ac..
2025.02.14 11:49 -
[์ฟ ํค๐ช] ์๋ํํฐ์ฟ ํค, ๊ณต๊ฒฉ์ ํ(์ค๊ฐ์๊ณต๊ฒฉ, XSS, CSRF)
Thrid-Party Cookie- ๋๋ฉ์ธ๊ณผ ์คํค๋ง๊ฐ ๋ค๋ฅด๋ฉด, ๊ฐ์ ์ฌ์ดํธ์์ ์ค์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ด๋ฅผ ํ์ฌ ์ฟ ํค๋ผ๊ณ ํ๋ค.ย - ๋๋ฉ์ธ๊ณผ ์คํค๋ง๊ฐ ์ฌ์ฉ์๊ฐ ํ์ฌ ๋ณด๊ณ ์๋ ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ ํ์๋ URL๊ณผ ์ผ์นํ๋ฉด,ย ์ฟ ํค๋ ํ์ด์ง์ ๋์ผํ ์ฌ์ดํธ์์ ์จ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐย ์ด๋ฅผ First-Party Cookie ๋ผ๊ณ ํ๋ค.ย Thrid Party Cookie ์ ์ก ์์- ํ ์ฌ์ดํธ์ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ค๋ฅธ ์ฌ์ดํธ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ- ํ์ด์ง๊ฐ ๋ค๋ฅธ ์ฌ์ดํธ์ ๊ตฌ์ฑ ์์๋ฅผ ์๋ฒ ๋ํ๋ ๊ฒฝ์ฐย ์ค๊ฐ์ ๊ณต๊ฒฉ์์ฒญ์ ์ค๊ฐ์์ ๊ฐ๋ก์ฑ์ ๋ณ์กฐํ์ฌ ์ ๋ฌํ๋ ๊ณต๊ฒฉย https://developer.mozilla.org/en-US/docs/Glossary/MitMย MitM - MDN Web Docs Glossary: Definiti..
2025.02.14 09:41
