Spring Data ๊ตฌ์กฐ ๊ธฐ๋ฅ ๋ชฉ๋ก ๊ฐ๋ ฅํ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฐ ์ฌ์ฉ์ ์ง์ ๊ฐ์ฒด ๋งคํ ์ถ์ํ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฉ์๋ ์ด๋ฆ์์ ๋์ ์ฟผ๋ฆฌ ํ์ ๊ธฐ๋ณธ ์์ฑ์ ์ ๊ณตํ๋ ๊ตฌํ ๋๋ฉ์ธ ๊ธฐ๋ณธ ํด๋์ค ๋ช
๋ฃํ ์ถ์ ๊ธฐ๋ฅ ์ง์(์์ฑ ์ผ์, ๋ง์ง๋ง ๋ณ๊ฒฝ ์ผ์, ์์ฑ์, ๋ง์ง๋ง ๋ณ๊ฒฝ์) ์ฌ์ฉ์ ์ง์ ๋ฆฌํฌ์งํ ๋ฆฌ ์ฝ๋ ํตํฉ ๊ฐ๋ฅ์ฑ JavaConfig ๋ฐ ์ฌ์ฉ์ ์ง์ XML ๋ค์์คํ์ด์ค๋ฅผ ํตํ ๊ฐํธํ Spring ํตํฉ Spring MVC ์ปจํธ๋กค๋ฌ์์ ๊ณ ๊ธ ํตํฉ ๊ต์ฐจ ์คํ ์ด ์ง์์ฑ์ ๋ํ ์คํ์ ์ง์ ์๋ฆฌ Repository ๋ MarkerInterface๋ก ํน๋ณํ ๊ธฐ๋ฅ์ ์๋ค. Repository ~ JpaRepository ๊น์ง๋ @NotRepositoryBean ์ด ๋ถ์ด์๋ ์ธํฐํ์ด์ค์ด๋ค. JpaRepository ๋ถ์ด๋ฉด ์๋ง์ ํ๋ก..
๋ด์ผ๋ฐฐ์์บ ํ
Cascade(์์์ฑ ์ ์) ์ฌ์ฉ ์์น ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ ๋ฐ๋ํธ - ๋ถ๋ชจ ์ํฐํฐ(๋ค๋์ผ ์์ ์ผ) ์ฆ, @OneToMany๊ฐ ์๋ ์ชฝ ๋๋ @OneToOne๋ ๊ฐ๋ฅ ์ฌ์ฉ ์กฐ๊ฑด ์์ชฝ ์ํฐํฐ์ ๋ผ์ดํ ์ฌ์ดํด์ด ๋์ผํ๊ฑฐ๋ ๋น์ทํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ๊ฒ์๊ธ์ด ์ญ์ ๋๋ฉด ์ฒจ๋ถํ์ผ๋ ์ญ์ ๋์ด์ผ ํ๋ค. ๋์ ์ํฐํฐ๋ก์ ์์์ฑ ์ ์ด๋ ํ์ฌ ์ํฐํฐ์์๋ง ์ ์ด ๋์ด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ์ฒจ๋ถ ํ์ผ์ ๊ฒ์๊ธ์ด ์๋ ๋ค๋ฅธ ๊ณณ์์ ์์์ฑ ์ ์ด๋ฅผ ํ๋ฉด ์๋๋ค. ์ต์
์ข
๋ฅ ALL : ์ ์ฒด ์ํ ์ ์ด PERSIST : ์ ์ฅ ์ํ ์ ์ด REMOVE : ์ญ์ ์ํ ์ ์ด MERGE : ์
๋ฐ์ดํฐ ์ํ ์ ์ด REFRESH : ๊ฐฑ์ ์ํ ์ ์ด DETACH : ๋น์์์ฑ ์ํ ์ ์ด orphanRemoval(๊ณ ์ ๊ฐ์ฒด ์ ๊ฑฐ) ์ฌ์ฉ ์์น @OneToM..
DB ๋ฅผ Java ์ฑ๊ณผ ์ฐ๋ํ๊ธฐ ์ํด JDBC ํ์๐ JDBC(Java Database Connectivity) JDBC Driver๋ ์ฌ๋ฌ ํ์
์ DB์ ์ฐ๊ฒฐํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต JDBC Driver Manager๋ ๋ฐํ์ ์์ ์ Connection(์ฐ๊ฒฐ)์ ์์ฑํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์์ฒญํ ์ ์๋ ์ํ๋ฅผ ๋ง๋ค์ด ์ฃผ๊ณ Statement(์ํ)๋ฅผ ์์ฑํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์์ฒญํ๊ฒ ํด์ฃผ๊ณ ResultSet(๊ฒฐ๊ณผ ์
)์ ์์ฑํด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ํด์ค๋ค. โ ๏ธ ๊ผญ ์ฌ์ฉ ํ์๋ close()๋ฅผ ํธ์ถํด ์์ ํด์ ๋ฅผ ํด์ค์ผ ํ๋ค. โ ๏ธ JDBC ์ ์ฌ๋ฌ ๋ฌธ์ ๋ก QueryMapper ํ์ ๐ JDBC๋ก ์ง์ SQL์ ์์ฑํ์ ๋์ ๋ฌธ์ SQL ์ฟผ๋ฆฌ ์์ฒญ ์ ์ค๋ณต ์ฝ๋ ๋ฐ์ DB ๋ณ ์์ธ์ ๋ํ ๊ตฌ๋ถ ์์ด Checked ..
EDA(Event Driven Architecture)? ๋ถ์ฐ๋ ์์คํ
์์ ์ด๋ฒคํธ๋ฅผ ์์ฑ(๋ฐํ)ํ๊ณ , ๋ฐํ๋ ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ ๊ตฌ์กฐ๋ก ์์ ์๋ ๊ทธ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ํคํ
์ฒ ๋ถ์ฐ ์ํคํ
์ฒ ํ๊ฒฝ์์ ์ํธ ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ํจํด์ผ๋ก ์ฃผ๋ก Message Broker(Kafka, RabbitMQ)์ ๊ฒฐํฉํ์ฌ ๊ตฌ์ฑ๋๋ค. ๊ตฌ์ฑ ์์ Event Generator(Publisher, Producer, Creater) ํ์คํ๋ ํ์์ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋ค. ์์ฑ๋ ์ด๋ฒคํธ๋ Event Channel๋ก ์ ์ก๋๋ค. Event Channel(Bus) Event Generator์์ Event Processing Engine์ผ๋ก ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ ๋งค์ปค๋์ฆ ์ฆ, ์ด๋ฒคํธ๋ฅผ ํ์๋ก ..
KEEP ๊ตณ์ด ๋ง์ ํ์ง ์์๋ ์ ํด์ง ๋ฒ์๊น์ง ์์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ํ
์คํธํ์๋ค. ์ด๋ฒํ๋ก์ ํ์์ GIT์ ๋ค๋ฅธ ํ๋ก์ ํธ๋๋ณด๋ค ๋ง์ด์จ๋ด์ ๋งค์ฐ์ข์๊ณ ์ค๋ ฅ์๋ ํ์๋ค ๋๋ถ์ ๋ฐฐ์๊ฐ๊ฒ ๋ง๋ค. ์ค๊ณ๋จ๊ณ์์ ERD์ API๋ช
์ธ๋ฅผ ์์ฑํ ๋ ํ์ํ API๊ธฐ๋ฅ๋ค๊ณผ Entitiy์ ํด๋น Entity๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฉด๋ฐํ๊ฒ ์์ฑํ์ฌ ์ค ์๋ฒ ๊ตฌ์ถ๋จ๊ณ์์ ๋น ๋ฅด๊ฒ ๋ชฉํํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ ํ ์์๋ ์ ํ์๊ณผ์ ์ํํ ์ํต์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์์๋ค. ์งํ๋ ๋ฐ ๋ฌธ์ ์ ๊ณต์ ๋ฅผ ํตํด ๋น ๋ฅธ ๊ฐ๋ฐ ๊ฐ๋ฅ PROBLEM ๋ฌธ์ ๋ฐ์์ ํ๋ฉด๊ณต์ ๋ฅผ ํตํ ํด๊ฒฐ๋ฐฉํ ๋
ผ์ @Valid๋ฅผ ์ด์ฉํ ์ ํจ์ฑ ๊ฒ์ฆ์ ๊ธ๋ก๋ฒ์์ธ์ฒ๋ฆฌ๋ก ๋์ค๊ฒ ํ๊ณ ์ถ์์ง๋ง ์์ง ์ดํด๋๊ฐ ๋ถ์กฑํด์ ํ์ง๋ชปํ๋ค. ์ค๊ณ ๋จ๊ณ์์ ๋ฐฑ์คํผ์ค์ ๊ด๋ฆฌ์ ๊ธฐ๋ฅ์ ๊น๊ฒ ์๊ฐ ..
Spring AOP Annotation @Aspect Spring Bean ํด๋์ค์๋ง ์ ์ฉ ๊ฐ๋ฅ ์ด๋๋ฐ์ด์ค ์ข
๋ฅ @Around: ํต์ฌ๊ธฐ๋ฅ ์ํ ์ ๊ณผ ํ(@Before + @After) @Before: ํต์ฌ๊ธฐ๋ฅ ํธ์ถ ์ (ex. Client์ ์
๋ ฅ ๊ฐ Validation ์ํ) @After : ํต์ฌ๊ธฐ๋ฅ ์ํ ์ฑ๊ณต/์คํจ ์ฌ๋ถ์ ์๊ด์์ด ์ธ์ ๋ ๋์(try, catch์ finally() ์ฒ๋ผ ๋์) @AfterReturning : ํต์ฌ๊ธฐ๋ฅ ํธ์ถ ์ฑ๊ณต ์ (ํจ์์ Return ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ) @AfterThrowing : ํต์ฌ๊ธฐ๋ฅ ํธ์ถ ์คํจ ์, ์ฆ ์์ธ(Exception)๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ง ๋์(ex. ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ๊ฐ๋ฐ์์๊ฒ email์ด๋ SMS ๋ณด๋) ํฌ์ธํธ์ปท ํฌ์ธํธ์ปท Expression Langua..
์ง์ฐ ๋ก๋ฉ ์์ ํ
์ด๋ธ๊ณผ ๊ณ ๊ฐ ํ
์ด๋ธ์ด N:1 ์๋ฐฉํฅ ๊ด๊ณ๋ผ ๊ฐ์ "์๋ณด์นด๋ ํผ์"์ ๊ฐ๊ฒฉ์ ์กฐํํ๋ ค๊ณ ํ์ ๋ฟ์ธ๋ฐ ์๋์ผ๋ก JOIN ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฐ๊ด๊ด๊ณ๊ฐ ์ค์ ๋์ด ์๋ ๊ณ ๊ฐ ํ
์ด๋ธ์ ์ ๋ณด๋ ๊ฐ์ ธ์ด JPA๋ ์ฐ๊ด๊ด๊ณ๊ฐ ์ค์ ๋ Entity์ ์ ๋ณด๋ฅผ ๋ฐ๋ก ๊ฐ์ ธ์ฌ ์ง, ํ์ํ ๋ ๊ฐ์ ธ์ฌ ์ง ์ ํ ์ ์์ ์ฆ, ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์ ํ๊ฒ๋๋๋ฐ JPA์์๋ Fetch Type์ด๋ผ๊ณ ๋ถ๋ฆ Fetch Type์ ์ข
๋ฅ์๋ 2๊ฐ์ง๊ฐ ์๋๋ฐ, ํ๋๋ LAZY, ๋ค๋ฅธ ํ๋๋ EAGER LAZY๋ ์ง์ฐ ๋ก๋ฉ์ผ๋ก ํ์ํ ์์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด EAGER๋ ์ฆ์ ๋ก๋ฉ์ผ๋ก ์กฐํํ ๋ ์ฐ๊ด๋ ๋ชจ๋ Entity์ ์ ๋ณด๋ฅผ ์ฆ์ ๊ฐ์ ธ์ด ๊ธฐ๋ณธ์ ์ผ๋ก @OneToMany ์ ๋ํ
์ด์
์ Fetch Type์ default ๊ฐ์ด LAZY๋ก ์ง์ ๋์ด ..
์ถ๋ฐ ๋น๋์ค ์ฌํ Keep ์์ ๋ง ์ํต ๋งค์ผ ํ์๋ฅผ ํตํด ์ฝ๋ ๋จธ์ง ๋ฐ ์ง๋ ๊ณต์ Problem ์จ๋ผ์ธ์์์ ์ํต ํ๊ณ ์๊ทน์ ์ธ ๋ง์ธ๋ ์ํต ๋ถ์ฌ๋ก ์ธํ์ฌ ๋ชจ๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ ์งํ ๋ชปํจ Try ์ํตํ ์ ์๋ ๋ฐฉ๋ฒ(๊ฒ๋, zep, ์ฌ๋ ๋ฑ)์ ์ต๋ํ ํ์ฉํ๊ธฐ ๋ถ๋ฐฐ๋ ์ญํ ์ธ์๋ ์ ๋ป ๋์์ฃผ๊ธฐ ๋ค๋ฅธ ํ์์ ์งํ ์ํฉ ์ ๊ทน์ ์ผ๋ก ๊ณต์ ๋ฐ์ ์๋ก์ ํ๋ ๋ถ๋ถ์ ๋์์ฃผ๊ธฐ ํ์๋ค์ ํ๋ง๋ ๊นํ์ค : ํ์ฅ์ด๋ผ๋ ์ง์ฑ
์ ๋งก์๋๋ฐ, ํ์๋ค์ ๋ง์ด ๋์์ฃผ์ง ๋ชปํ ๋ถ๋ถ์ด ์์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ค ๋งก์ ๋ฐ๋ฅผ ์ด์ฌํ ํด์ฃผ์
จ๊ณ , ๋ง์ง๋ง๊น์ง ์ต์ ์ ๋คํด ์ํด์ฃผ์
์ ๊ฐ์ฌํ์ต๋๋ค. ๋ค์์ ๋ ๊ฐ์ ํ์ด ๋๋ค๋ฉด, ์ ๊ทน์ ์ผ๋ก ์ํตํด์!! ๋ฌธ๊ธฐํ : ์ง๋๋ฅผ ๋ฐ๋ผ๊ฐ๋๊ฒ ๋ฆ์ด์ ธ ์ ์ ์ค์ ๋ก ์๊ฐํด์ ์ฝ๋๋ฅผ ์ง๋ณด๋ ์๊ฐ์ ์ ์๋๋ฐ ์ด๋ฒ ํํ๋ก์ ํธ..