Spring (core, boot, cloud, batch) ๐ฑ : ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋๋ค
-
[์คํ๋ง] Spring AOP ์ ๋์ ์๋ฆฌ
๊ด๋ จ ์ฉ์ดAspect : ๊ณตํต ๊ด์ฌ์ฌ (๋ก๊น , ๋ณด์, ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ)๋ก์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ ์ฉ๋ ์ ์๋ ๋ชจ๋JoinPoint : AOP์์ Aspect๋ฅผ ์ ์ฉํ ์ ์๋ ํน์ ์ง์ Pointcut : JoinPoint๋ฅผ ์ ํํ๋ ํํ์Advice : Join Point์์ ์ค์ ๋ก ์คํ๋ ๋์์ ์ ์ํ๋ ์ฝ๋ (Before, After Returing, After Throwing, Around, Introduction)ย AOP ๋์ ์๋ฆฌย 1. ํ๋ก์ ๊ฐ์ฒด ์์ฑSpring AOP๋ ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด(Target Object)๋ฅผ ๊ฐ์ธ๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.์ด ํ๋ก์ ๊ฐ์ฒด๋ ๋์ ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ์ ๊ฐ๋ก์ฑ๊ณ , ํ์์ Aspect(๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ)๋ฅผ ์คํํ๋ค.ํ๋ก์๋ JDK ๋์ ..
2025.01.03 11:11 -
[ํจํค์ง๋ฐ๋ฐฐํฌ] Jar vs War
๊ตฌ๋ถJAR (Java ARchive)WAR (Web ARchive)์ฉ๋์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจํค์ง์๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ํจํค์ง์ฃผ์ ๋ด์ฉ์๋ฐ ํด๋์ค ํ์ผ, ๋ฆฌ์์ค ํ์ผ (์ด๋ฏธ์ง, ์ค์ ํ์ผ ๋ฑ)์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ํ์ผ (์๋ธ๋ฆฟ, JSP, HTML ๋ฑ)์คํ ๋ฐฉ๋ฒjava -jar .jar ์น ์๋ฒ์ ๋ฐฐํฌํ์ฌ ์คํ (Tomcat)๊ตฌ์กฐMETA-INF, ์๋ฐ ํด๋์ค ํ์ผ ๋ฑWEB-INF(์ค์ ํ์ผ ๋ฐ ์๋ธ๋ฆฟ ๋งคํ), ๋ฆฌ์์ค ํ์ผ ๋ฑ WAR JSP, Thymeleaf ์ ํ์ฉReact ํ์ผ์ ์ ์ ํ์ผ๋ก ๋ง๋ค์ด์ ํฌํจ์์ผ ๋ฐฐํฌํ ์ ์์
2024.12.21 15:51 -
[Spring] @Transactional
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค (Isolation Level)DEFAULT : ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ ์์คREAD_UNCOMMITED : ์์ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์READ_COMMITED : Dirty Read๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Commit๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์์REPEATABLE READ : ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง ์กฐํํ ๋ชจ๋ ๋ฐ์ดํฐ์ shared lock์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ํธ๋์ญ์ ์ด ์ข ๋ฃ๋ ๋๊น์ง ๋ค๋ฅธ ํธ๋์ญ์ ์ ๊ทธ ์์ญ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์์SERIALIZABLE : ์๊ฒฉํ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค, ์๋ฒฝํ ์ฝ๊ธฐ ์ผ๊ด์ฑ ๋ชจ๋ ์ ๊ณต, PHANTOM READ ์ํ๊ฐ ๋ฐ์ํ์ง ์์ง๋ง ๋์์ฑ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ๋จ์ด์ง ์ ์์ ํธ๋์ญ์ ์ ํ ์ต์ (Propagation)์ด๋ค ํธ๋์ญ์ ์ด ๋์์ค์ธ ๊ณผ์ ์์ ๋ค๋ฅธ ํธ๋..
2024.12.13 17:35
ํ ์คํธ ๐งช : ํผํผํ ์ํํธ์จ์ด๋ก ์ฑ ์์ง๊ธฐ
-
[ํ ์คํธ] ํตํฉ ํ ์คํธ์์ ํ ์คํธ ๊ฐ 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
