* ํด๋น ๊ธ์ ๊น์ํ ๊ฐ์ฌ๋์ ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ์ ๋ณด๊ณ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.(์์ธํ ๋ด์ฉ์ ๊ฐ์๊ฐ ์ต๊ณฑ๋๋ค. ๊ฐ์ ์ฌ์ธ์)
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ ๊ฐ์ - ์ธํ๋ฐ
JPA ๋ฅผ ๊ณต๋ถํ๊ณ ์ฑ ์ ๋ณด๋ฉฐ ์ด๋ ค์ ๋ ๋ด์ฉ์ ์์ฃผ๋ก ๋จผ์ ๋ณด์์ต๋๋ค. ์์์ 1:1 ๊ณผ์ธํด์ฃผ๋ ๊ฒ ๊ฐ์ด ์์ํ๊ณ ์ดํด ์๋๋ ์ค๋ช , ์์ (์ฝ๋)๊ฐ ๋๋ฌด ์ข์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ์ ๋งคํจ์์ด ๋ชจ๋
www.inflearn.com
@Entity
@Entity๊ฐ ๋ถ์ ํด๋์ค๋ JPA๊ฐ ๊ด๋ฆฌํ๋ ์ํฐํฐ๋ผ๊ณ ํ๋ฉฐ, JPA๋ฅผ ํตํด์ ํ ์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค๋ ๋ฐ๋์ ์ด ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ผ ํ๋ค.
์ด๋ ธํ ์ด์ ์ฌ์ฉ ์ ์ฃผ์ํ ์ ์ ์๋์ ๊ฐ๋ค.
- ๊ธฐ๋ณธ ์์ฑ์๋ ํ์๋ค.
- final ํด๋์ค, enum, interface, inner class ์ฌ์ฉ ๊ธ์ง
- ์ ์ฅํ ํ๋์ final ์ฌ์ฉ ๊ธ์ง
@Table
@Table์ ์ํฐํฐ์ ๋งคํํ ํ ์ด๋ธ์ ์ง์ ํ๋ฉฐ ๊ด๋ จ๋ ์์ฑ์ ์ค์ ํ ์ ์๋ค. ์ฃผ์ ์์ฑ์ name, catalog, schema, uniqueContraints ๋ฑ์ด ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ์๋ ์์ฑ
DDL์ด๋ Data Definition Languege๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ณจ๊ฒฉ์ ๊ตฌ์ฑํ๋ ์ญํ ์ ํ๋ค.
์ง๊ธ๊น์ง jdbcTemplate์ด๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๋ ์ฐ๋ฆฌ๋ shema.sql ๊ฐ์ด ๊ท์ฐฎ์ ๋ฐฉ๋ฒ์ผ๋ก DDL์ ์์ฑํ๋ค. ์ฌ๊ธฐ์ JPA๋ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์์ ์ ์์์ ์คํค๋ง๋ฅผ ํ์ฑํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฆ, SQL์ ๊ด๋ จํด์ ์์ง ๋ชปํด๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ๊ฐ์ฒด์ ๋ํด์ ์์์ DDL์ ์์ฑํด์ฃผ๋ ์์ฒญ๋๊ฒ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ด๋ค. ๋ค์์ DDL์ ๊ด๋ จ๋ ๊ธฐ๋ณธ ์์ฑ์ ๋ํ ๊ฒ์ด๋ค.
- create : ๊ธฐ๋ณธ ํ ์ด๋ธ ์ญ์ ํ์ ๋ค์ ์์ฑํ๋ค.
- create-drop : create์ ๊ฐ์ผ๋ ์ข ๋ฃ ์์ ์ table์ dropํ๋ค.
- update: ๋ณ๊ฒฝ ๋ถ๋ง ๋ฐ์ํ๋ค.
- validate : ํ ์ด๋ธ๊ณผ ์ํฐํฐ๊ฐ ์ ์์ ์ผ๋ก ๋งคํ๋์๋ ์ง ํ์ธํ๋ค.
- none : ์ฌ์ฉํ์ง ์๋๋ค.
์คํค๋ง ์์์ ์์ฑํด์ฃผ๋ฉด ๋ฌด์กฐ๊ฑด ์ฐ๋ฉด ๋๋ ๊ฑฐ ์๋๊ฐ ์๊ฐํ ์ ์๋๋ฐ, ์ค์ ์ด์์์ DDL ์๋์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค๋ฉด ํธ๋๊ฒ ๋งํ ์ ์๋ค.
์๋ํ๋ฉด, ํ ์ด๋ธ์ด ๋ฐ๋๋ค๋ ๊ฒ ์์ฒด๊ฐ ๊ต์ฅํ ์ํํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ Lock๋๋ ๊ฒฝ์ฐ๋ ๋ง๋ค. ๋ฐ๋ผ์ ์ค์ ์ด์ ์์๋ validate๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ none์ผ๋ก ํด๋๋๋ค.
DDL ์์ฑ ๊ธฐ๋ฅ์ DDL์ ์๋์์ฑํ ๋๋ง ์ ์ฉ์ด ๋๋ฉฐ, JPA ์คํ๋ก์ง ์์ฒด์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค. ๋ฐ๋ผ์ ์ ์ฝ์กฐ๊ฑด์ด๋ ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด์ด ๋ฐ๋ ๋, DDL ์๋์์ฑ์ด ์ ์ฉ๋ ๊น๋ด ๊ฑฑ์ ํ ํ์๋ ์๋ค.
ํ๋์ ์ปฌ๋ผ ๋งคํํ๊ธฐ
ํ๋์ ์ปฌ๋ผ์ ๋งคํํ ๋ ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์ ์ ์๋์ ๊ฐ๋ค.
- _@Column_ : ์ปฌ๋ผ์ ๋งคํํ๋ค.
- _@Temporal_ : ๋ ์ง ํ์ ์ ๋งคํํ๋ค.
- _@Enumerated_ : enum ํ์ ์ ๋งคํํ๋ค.
- _@Lob_ : Blob์ด๋ Clob์ ๋งคํํ๋ค.
- _@Transient_ : ํน์ ํ๋๋ฅผ ์ปฌ๋ผ์ ๋งคํํ์ง ์๋๋ค.
์ฌ๊ธฐ์ _@Transient_๋ ์์ ๋ฉ๋ชจ๋ฆฌ์๋ง ๋ณด๊ดํ๊ณ ๋ฐ๋ก ๋งคํ์ ํ๊ณ ์ถ์ง ์์ ๋ ์ฌ์ฉํ๋ค.
@Column
_@Column_์์ ์กฐ๊ธ ๊ธฐ์ตํด ๋์์ผ ํ ๊ฒ์ NOTNULL ์ ์ฝ ์กฐ๊ฑด์ธ _nullable_์ด๋ค. ๊ทธ์ธ์ _updatable_, _unique_๋ ์๋ ๋ฐ, _unique_๋ฅผ ์ฌ์ฉํ๊ธฐ ๋ณด๋จ, _@Table_์์ ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด์ผ๋ก ์ฃผ๋ ํธ์ด๋ค.
@Enumerated
_@Enumerated_๋ enum ํ์ ์ ๋งคํํ ๋ ์ฌ์ฉํ๋ค.
์๋ ์ด ๋ ๊ฐ์ง ๋๋ฅ๊ฐ ์๋ค.
- EnumType.ORDINAL
- EnumType.STRING
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ORDINAL์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด๋ค. ์๋ํ๋ฉด EnumType.ORDINAL์ enum์ ์์๋ก์จ ์ซ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋๋ฐ, ๋ง์ฝ ENUM ํ์ ์ด ์ถ๊ฐ๋์ด๋ DB ์์์ ์ซ์๋ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ STRING ํ์ ์ผ๋ก ์ ์ฅ๋๋ _EnumType.STRING_์ ์ฌ์ฉํ์.
@Temporal
์๋ฐ ์ต์ ๋ฒ์ ์์๋ ์ง์๋๋ _LocalDate(์ฐ/์)_, _LocalDateTime(์ฐ/์/์ผ)_์ ์ฌ์ฉํ๋ ๊ฒ์ด ํธํ๋ค. _TemporalType.DATE_์ ๊ฐ์ ๊ฒ์ ๊ณผ๊ฑฐ ๋ฒ์ ์ผ๋ ์ง์๋๋ ๊ฒ์ด๋ค.
@Lob
๋ฐ์ดํฐ๋ฒ ์ด์ค์ Blobํ์ ์ด๋ Clobํ์ ์ ๋งคํ๋๋ ๊ฒ์ด๋ค.
Clob์ด๋ฉด, String์ด๋ char[], java.sql.CLOB์ ๋งคํ๋๊ณ ๋๋จธ์ง ๊ฒฝ์ฐ์๋ Blob์ ๋งคํ๋๋ค.
๊ธฐ๋ณธ ํค ๋งคํ ๋ฐฉ๋ฒ
์ง์ ํ ๋น๊ณผ ๊ฐ์ ํ ๋น์ผ๋ก ๋๋๋ค. ์ฌ๊ธฐ์ ์ง์ ํ ๋น์ ์ฌ์ฉํ๋ฉด _@Id_๋ง ์ฌ์ฉํ๋ฉด ๋๋ค.
์๋ํ ๋น์ _@GeneratedValue_๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ธ๋ถ์ ์ธ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค.
- IDENTITY
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ๋น์ ์์ํ๋ ๊ฒ์ด๋ค.
- AUTO_INCREMENT๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ INSERT ์ดํ์ ID ๊ฐ์ ์ ์ ์๋ค.
- ๊ทธ๋์ _persist()_๊ฐ ํธ์ถ๋ ์ดํ์ id๋ฅผ ์ ์ ์๋ค.
- SEQUENCE
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ์ค ์ค๋ธ์ ํธ๊ฐ ํ์ํ๋ค.
- ์ด์ ๋ฐ๋ผ _@SequenceGenerator_๋ฅผ ๋ถ์ฌ์ค๋ค.
- TABLE
- ํค ์์ฑ์ฉ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ค.
- ์ํ์ค ์ ๋๋ ์ดํฐ๋ ์ฝ๊ฐ ๋น์ทํ๋ฐ, _@TableGenerator_๋ฅผ ๋ถ์ด๋ฉด ๋๋ค.
- AUTO
- ๋ฐฉ์ธ์ ๋ฐ๋ผ์ ์๋ ์ง์ ๋๋ค.
์ํ์ค ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ฝ๊ฐ ํฅ์์ํฌ ์ ์๋ ๋ฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
@Entity
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequence = "MEMBER_SEQ",
initialValue = 1, allocationSize = 1)
public class Member {
...
}
_allocationSize_๋ ๋ฐ์ดํฐ๋ฅผ ๋ช ๊ฐ์ฉ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋์ ๊ด๋ จ๋ ์์ฑ์ธ๋ฐ, JPA๋ ๊ธฐ๋ณธ์ ์ผ๋ก _persist_ํ ๋๋ง๋ค ๋คํธ์ํฌ๋ฅผ ํ๊ฐ๋ฉฐ id ๊ฐ์ ๊ฐ์ ธ์จ๋ค. ์ฆ, _allocationSize_๋ฅผ ๋๋ฆฌ๋ฉด ์ฌ๋ฌ ๋ฒ ๋คํธ์ํฌ๋ฅผ ํ ํ์์์ด ํ ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ดํ์๋ Memory๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ์ ๊ทผํ๋ฉฐ ๋์์ฑ ๋ฌธ์ ๋ ์กด์ฌํ์ง ์๋๋ค. ์ด๋ TABLE ์ ๋ต์ ์ฌ์ฉํด๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ ๊ฐ์ - ์ธํ๋ฐ
JPA ๋ฅผ ๊ณต๋ถํ๊ณ ์ฑ ์ ๋ณด๋ฉฐ ์ด๋ ค์ ๋ ๋ด์ฉ์ ์์ฃผ๋ก ๋จผ์ ๋ณด์์ต๋๋ค. ์์์ 1:1 ๊ณผ์ธํด์ฃผ๋ ๊ฒ ๊ฐ์ด ์์ํ๊ณ ์ดํด ์๋๋ ์ค๋ช , ์์ (์ฝ๋)๊ฐ ๋๋ฌด ์ข์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ์ ๋งคํจ์์ด ๋ชจ๋
www.inflearn.com
'๐ฃ Spring > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ๊ณ ๊ธ ๋งคํ ์์๋ณด๊ธฐ (1) | 2024.03.16 |
---|---|
[JPA] ๋ค์ํ ์ฐ๊ด๊ด๊ณ ๋งคํ ์์๋ณด๊ธฐ (2) | 2024.03.09 |
[JPA] ์ฐ๊ด๊ด๊ณ ๋งคํ์ ๊ธฐ์ด (4) | 2024.03.08 |
[JPA] JPA์ ์์์ฑ ๊ด๋ฆฌ์ ๋ํด (2) | 2023.12.29 |