JPA ๊ตฌ๋ ๋ฐฉ์
EntityManagerFactory
์ํฐํฐ ๋งค๋์ ๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๋ฉด ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ค๋ ๋ ๊ฐ์ ์ ๋ ๊ณต์ ํ๋ฉด ์ ๋๋ค.
๋์์ฑ(Concurrency): ์ ์ ๊ฐ ์ฒด๊ฐํ๊ธฐ์๋ ๋์์ ์ํํ๋ ๊ฑฐ ์ฒ๋ผ ๋ณด์ด์ง๋ง
์ฌ์ค์ ์ ์ ๊ฐ ์ฒด๊ฐํ ์ ์๋ ์งง์ ์๊ฐ๋จ์๋ก ์์ ๋ค์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์ํํ๋ ๊ฒ์ด๋ค.
๋ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์๋๋ฐ ๋ค๋ฅธ ์ค๋ ๋์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์์ ํด๋ฒ๋ฆฌ๋ฉด ์๋๊ธฐ ๋๋ฌธ์
์ํฐํฐ ๋งค๋์ ๋ ํ๋๋ฅผ ๊ณต์ ํ๋ฉด ์ ๋๊ณ , ์ํฉ์ ๋ฐ๋ผ ๊ณ์ ๋ง๋ค์ด์ค์ผํ๋ค.
์ํฐํฐ ๋งค๋์ ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ์ด๋ค.
EntityManager
Entity๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ์ํํ๋ ํด๋์ค์ด๋ค.
์ํฐํฐ ๋งค๋์ ๋ด๋ถ์ ์์์ฑ ์ปจํ
์คํธ(Persistence Context)๋ผ๋ ๊ฑธ ๋์ด์ ์ํฐํฐ๋ค์ ๊ด๋ฆฌํ๋ค.
@PersistenceContext
private EntityManager em;
@PersistenceContext : EntityManager๋ฅผ ๋น์ผ๋ก ์ฃผ์ ํ ๋ ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์
@PersistenceContext๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์
EntityManager๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํด์ผ ํ ์ ์
์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๋ฉด ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ
์ฐ๋ ๋ ๊ฐ์๋ EntityManager๋ฅผ ๊ณต์ ํด์๋ ์๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์คํ๋ง์ ์ฑ๊ธํค ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ์ ๋น์ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํฉ๋๋ค.
๊ทธ๋ฌ๋ @PersistenceContext์ผ๋ก EntityManager๋ฅผ ์ฃผ์ ๋ฐ์๋ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋ ์ด์ ๋
์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ด๊ธฐํ๋๋ฉด์ @PersistenceContext์ผ๋ก ์ฃผ์ ๋ฐ์ EntityManager๋ฅผ Proxy๋ก ๊ฐ์๋๋ค.
๊ทธ๋ฆฌ๊ณ EntityManager ํธ์ถ ์ ๋ง๋ค Proxy๋ฅผ ํตํด EntityManager๋ฅผ ์์ฑํ์ฌ Thread-Safe๋ฅผ ๋ณด์ฅํฉ๋๋ค.
Entity(์ํฐํฐ)
JPA์์ ์ํฐํฐ๋ ์ฝ๊ฒ ์๊ฐํ๋ฉด, DB ํ ์ด๋ธ์ ๋์ํ๋ ํ๋์ ํด๋์ค๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
@Entity๊ฐ ๋ถ์ ํด๋์ค๋ JPA๊ฐ ๊ด๋ฆฌํด์ฃผ๋ฉฐ,
JPA๋ฅผ ์ฌ์ฉํด์ DB ํ ์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค๋ @Entity๋ฅผ ๊ผญ ๋ถ์ฌ์ผ๋ง ๋งคํ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ํฐํฐ ํด๋์ค๋ ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ํด๋์ค์ด๋ค.
์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ ์ ํ ์ํฐํฐ ํด๋์ค๋ฅผ ๊ตฌ์ฑํ๊ณ , ์์ฑ๋ ์ํฐํฐ ํด๋์ค๋ ๋ช ์ธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ 2์ฐจ์ ํ ์ด๋ธ
์ด ํ
์ด๋ธ์ ์๋น์ค์์ ํ์ํ ์ ๋ณด๋ฅผ ๋ค ์ ์ฅํ๊ณ ํ์ฉํ๊ฒ ๋๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ธ๋ก์ ์ด ๋ถ๋ถ์ด Column ์ด๊ณ , ๊ฐ๋ก์ ํ ๋ถ๋ถ์ด ์ํฐํฐ ๊ฐ์ฒด๊ฐ ๋๋ค.
์ด ํ ์ด๋ธ ์ ์ฒด๊ฐ ์ํฐํฐ ์ด๊ณ , ๊ฐ 1๊ฐ์ ํ๋ค์ด ์ํฐํฐ ๊ฐ์ฒด๊ฐ ๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
@Entity : ํด๋์ค ์์ ์ ์ธํ์ฌ ์ด ํด๋์ค๊ฐ ์ํฐํฐ์์ ์๋ ค์ค๋ค.
์ด๋ ๊ฒ ๋๋ฉด JPA์์ ์ ์๋ ํ๋๋ค์ ๋ฐํ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋ง๋ค์ด์ค๋ค.
ํ๋๋ผ๋ ๊ฒ์ ์ํฐํฐ์ ๊ฐ Column์ ์๋ฏธํ๋ค.
@Id : ํด๋น ์ํฐํฐ์ ์ฃผ์ ํค(Primary Key, PK)๊ฐ ๋ ๊ฐ์ ์ง์ ํด์ฃผ๋ ๊ฒ์ด @Id ์ด๋ค.
@GeneratedValue ๋ ์ด PK๊ฐ ์๋์ผ๋ก 1์ฉ ์ฆ๊ฐํ๋ ํํ๋ก ์์ฑ๋ ์ง ๋ฑ์ ๊ฒฐ์ ํด์ฃผ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
JPA์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํธ๋์ญ์ ์์์ ์คํ
ํธ๋์ญ์ ์ด๋ ?
๋ชจ๋ ์์ ๋ค์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์ด์ผ ์์ ๋ฌถ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฉํ๊ณ ,
์ด๋ค ์์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋๋ ์ด์ ์ ์๋ ๋ชจ๋ ์์ ๋ค์ด ์ฑ๊ณต์ ์ด์๋๋ผ๋
์์๋ ์ผ์ฒ๋ผ ์์ ํ ๋๋๋ฆฌ๋ ๊ฒ์ด ํธ๋์ญ์ ์ ๊ฐ๋
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ๋ ํธ๋์ญ์ ์ ์ ์ฉํ๋ฉด
๋ฐ์ดํฐ ์ถ๊ฐ, ๊ฐฑ์ , ์ญ์ ๋ฑ์ผ๋ก ์ด๋ฃจ์ด์ง ์์ ์ ์ฒ๋ฆฌํ๋ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋
๋ชจ๋ ์์ ๋ค์ ์์ํ๋ก ๋๋๋ฆด ์ ์๋ค.
๋ชจ๋ ์์ ๋ค์ด ์ฑ๊ณตํด์ผ๋ง ์ต์ข ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋๋ก ํ๋ค.
JPQL
SQL์ ์ถ์ํํ JPQL
SQL ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋ค .
๋ฐ๋ฉด์ JPA๋ฅผ ์ฌ์ฉํ๋ฉด ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์
JPQL ์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋ค .
[์ค์ ! ์คํ๋ง ๋ถํธ์ JPA ํ์ฉ1] - 0. Entity / EntityManager
Entity(์ํฐํฐ) JPA์์ ์ํฐํฐ๋ ์ฝ๊ฒ ์๊ฐํ๋ฉด, DB ํ ์ด๋ธ์ ๋์ํ๋ ํ๋์ ํด๋์ค๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. @Entity๊ฐ ๋ถ์ ํด๋์ค๋ JPA๊ฐ ๊ด๋ฆฌํด์ฃผ๋ฉฐ, JPA๋ฅผ ์ฌ์ฉํด์ DB ํ ์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค
endyd1567.tistory.com
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ
www.inflearn.com