Server๐งค/JPA
์ด์ ์ํฉ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ์ '๋๋ง์๊ธฐ' ๊ธฐ๋ฅ์ ์ ๊ณต์ค์ด๋ค. ์์ธ์ฒ๋ฆฌ๊ฐ ์ ์ฉ๋์ง ์๊ณ ๋๊ฐ์ ๋จ์ด๊ฐ ๋์์ ์ฝ์
๋์๋ค! ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์ฐ์ Chatgpt๋ฅผ ์ด์ฉํด์ ํด๋น ์ฌํญ์ ๋ํด ๋ฌผ์ด๋ณด์๋ค. 1. ๊ฒฉ๋ฆฌ์์ค ์ค์ ์ ๊ณ ๋ ค -> ํ๋ฝ ์ฐ์ PostgreSQL์์๋ 4๊ฐ์ง์ Transaction ๊ฒฉ๋ฆฌ ์์ค์ ์ค์ ํ ์ ์๋ค. ๋๋ง์๊ธฐ์ ์ ์ฉํ๋ ๊ฒ์ ์๊ฐํด๋ดค์๋, ํ๋์ transaction์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์๋, ๋ค๋ฅธ transaction์์ ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ ์ฝ์ด์ผํจ. Postgresql์ Read Uncommited๋ฅผ ์ง์ํ์ง ์๋๋ค๊ณ ํ๋ค! ๊ฒฐ๋ก ์ ์ผ๋ก DirtyRead๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. 2. ๋๊ด์ ๋ฝ๊ณผ ๋น๊ด์ ๋ฝ ๊ณ ๋ คํ๊ธฐ (์ค ๊ด์ฐฎ๋ค!) ๋๊ด์ ๋ฝ๊ณผ ๋น๊ด์ ๋ฝ์ ์ฌ์ฉํ๋ ๊ธฐ์ค์ "๋์์ ์์ ์..
Server๐งค/JPA
JPA ๊ฐ์ Persistence Java ๊ฐ์ฒด(์ ํฌํจ๋์ด์๋ ๋ฐ์ดํฐ)๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด ์ ์ฅ ๋ฐ ๊ด๋ฆฌํจ์ผ๋ก์จ ๊ฐ์ฒด์ ์์์ฑ์ ๋ณด์ฅํจ Java Persistence API Object-Relational Mapping(ORM) ์ ์คํํ๊ธฐ ์ํ Java ํ์ค API Entity๋ก ์ ์๋ Java ๊ฐ์ฒด์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฌ์ด์ mapping ๋ฐฉ๋ฒ์ ์ค์ (annotation ์ด์ฉ) ์ค์ ๋ Mapping์ ๋ฐ๋ผ Java๊ฐ์ฒด๋ฅผ DB์ ์ ์ฅ, ์์ , ์ญ์ ๊ฒ์ ํ ์ ์๋ Interface ์ ๊ณต -> EntityManager JDBC API๋ Data Mapper (ex: MyBatis)์ ๋์ Java ์ค์ฌ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค. Persistence Provider (JPA Provider) JPA์..
Server๐งค/JPA
์ํฉ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์, ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ฃ์ด์ผํ๋ ์ํฉ์ด ์๊ฒผ๋ค. History์ ์๋ ์ ์ ์ ๋ณด๋ฅผ ํ๋์ ๋ณด์ ํด๋น id๋ฅผ ๊ฐ์ง ์ ์ ์๊ฒ ํ๊บผ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์
์ด์๋ค. ์ฒ์์ ์์ฑํ ์ฟผ๋ฆฌ๋ forEach๋ฌธ์ผ๋ก ๊ฐ๊ฐ save๋ฅผ ๋๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด์๋ค. ํด๋น ์์
์ ์ฝ๋๋ฆฌ๋ทฐ๋ก save์ saveAll ์ ๋ํ ๊ฒ์ ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์๋ค. ์ด๋ฒ๊ธฐํ์ ํด๋น ์ฟผ๋ฆฌ๋ค์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์์๋ณด๋ ค๊ณ ํ๋ค. ์ฒ์์ ์์ฑํ save() ๋ฉ์๋์ด๋ค. memberHistories.forEach(memberHistory -> memberActivityRepository.save( memberActivityRepository.save( MemberActivity.builder() .memb..
Server๐งค/JPA
ํ๋ก์? Member ์ํฐํฐ์ Team ์ํฐํฐ๋ @Many(Member)ToOne(Team) ๊ด๊ณ์ ์๋ค. Member๋ฅผ ์กฐํํ ๋, Team์ ํญ์ ์กฐํํ๊ฒ ๋๋ค๋ฉด? - ๋ญ๋น๊ฐ ์์ฒญ๋๊ฒ ๋ฐ์ํ๋ค. ๋น์ฆ๋์ค ๋ก์ง์์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ, ํญ์ Team์ ์กฐํํด์ ๊ฐ์ ธ์ฌ ์ด์ ๋ ์๋ค! JPA๋ ์ด ๋ญ๋น๋ฅผ ํ์ง ์๊ธฐ ์ํด, ์ง์ฐ๋ก๋ฉ๊ณผ ํ๋ก์๋ผ๋ ๊ฐ๋
์ผ๋ก ํด๊ฒฐํ๋ค. ์ง์ฐ๋ก๋ฉ JPA์๋ em.find()์ em.getReference()๋ผ๋ ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค. em.find() : DB๋ฅผ ํตํด์ ์ค์ ์ํฐํฐ ๊ฐ์ฒด ์กฐํ em.getReference() : DB์ ์กฐํ๋ฅผ ๋ฏธ๋ฃจ๋ ๊ฐ์ง(ํ๋ก์) ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์กฐํ Member ์ํฐํฐ @Entity @Getter @Setter public class Member exte..