๐ Entity
โ๏ธ GenerationType
@GeneratedValue(strategy = GenerationType.)
- IDENTITY
- MySQL์์ ์ฌ์ฉํ๋ ์ ๋ต (AUTO_INCREASEMENT)
- SEQUENCE
- ORACLE, PostgreSQL, H2์์ ์ฌ์ฉํ๋ ์ ๋ต
- TABLE
- DB ์ข ๋ฅ์ ๊ด๊ณ์์ด ID๋ฅผ ๊ด๋ฆฌํ๋ ํ ์ด๋ธ์ ์์ฑํ์ฌ ID๋ฅผ ๊ด๋ฆฌ
- AUTO (default)
- ๊ฐ DB์ ์๋ง๋ ์ ๋ต์ ์ ํ
โ๏ธ @Table
name: ํ
์ด๋ธ ์ด๋ฆ ์ง์
ex)@Table(name = TBL_USER)
indexes = {@Index(columnList = "name")}uniqueConstraints = {@@UniqueConstraint(columnName={"email"})}
- ์ธ๋ฑ์ค, ์ ์ฝ์ฌํญ์ ์ฝ๋๋ ๋ฒจ์์ ์ ์
but, DB์ ์ ์๋์ด ์์ง ์๋ค๋ฉด ๋์ํ์ง ์์. - DB์ ์ง์ ์ ์ํ๋ ๊ฒ์ ๊ถ์ฅํจ (์ํฐํฐ์๋ ํ์ํ์ง ์๋ ๊ฒ์ ๊ถ์ฅ)
โ๏ธ @Column
- insertable
- default: true
- false๋ก ์ค์ ์ ํด๋น ์นผ๋ผ์ผ๋ก์ ์ฝ์ ๋ถ๊ฐ
- updatable
- default: true
- false๋ก ์ค์ ์ ํด๋น ์นผ๋ผ์ผ๋ก ์์ ๋ถ๊ฐ
โ๏ธ @Transient
- ํ ์ด๋ธ๊ณผ ๋งคํํ์ง ์๊ณ ์ ํ๋ ํ๋์ ์ ์
- ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ดํจ
โ๏ธ @Enumerated
- Enum ํ์
์ ๋งคํ์ํค๊ธฐ ์ํ ์ด๋
ธํ
์ด์
- EnumType.STRING, EnumType.ORDINAL (defualt)
ex) @Enumerated(EnumType.STRING)
- EnumType.STRING, EnumType.ORDINAL (defualt)
- EnumType.ORDINAL: ์์(์ซ์)
- default ์ค์ ๊ฐ์ด์ง๋ง ๊ถ์ฅ๋์ง ์์
- ์์(์ซ์)๋ฅผ DB์ ์ ์ฅ์ํค๊ธฐ ๋๋ฌธ์ ์ดํ ์ค๊ฐ์ Enunํ์ ์ด ์ฝ์ ๋๊ฑฐ๋ ์ญ์ ํ ์ฝ์ ๋๋ค๋ฉด ๊ฐ์ ์์(์ซ์)๋ฅผ ๊ฐ์ง๋ง ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ผ ์ ์๋ค.
- ์๋ฌ์ ์ฌ์ง๊ฐ ์์
- EnumType.STRING: ๋ฌธ์๊ทธ๋๋ก ์ฌ์ฉ
- Enumํ์ ์ ์์๊ฐ ์๋ ๋ฌธ์๋ฅผ ๊ทธ๋๋ก DB์ ์ ์ฅ
- ์์์ ๊ธฐ๋ฐํ์ง ์๊ธฐ ๋๋ฌธ์ ORDINAL์์ ๋ฐ์ํ๋ ์๋ฌ์ ์ฌ์ง๊ฐ ์์
๐ ๊ด๊ณ
โ๏ธ @ManyToOne ๋จ๋ฐฉํฅ
- One์ชฝ์์ ์ปฌ๋ ์ ํ์ ์ผ๋ก ํ๋๋ฅผ ์ ์ธ
- @JoinColumn์ ์ด์ฉํด์ ๋ฐ๋ํธ์ FK์ ๋งคํ
ex) @JoinColumn(name = "user_id") - One์ชฝ์ ์ปฌ๋ ์
์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์์ ๋์ง ์๋๋ก ํด์ค์ผ ํจ
ex) @JoinColumn(insertable=false, updatable=false)
โ๏ธ @ManyToMany
๊ธฐ๋ณธ์ ๋ต
- ์ค๊ฐ ํ ์ด๋ธ ์์ฑ
- author : book => author_book_table
- 1:N์ ๊ฒฝ์ฐ ์ค๊ฐ ํ
์ด๋ธ์ด ์๊ธฐ๋ ๊ฒ์ @JoinColumn์ ์ด์ฉํด์
N์ชฝ์ FK๊ฐ ์๊ธฐ๋๋ก ํด์ฃผ์์ - M:N์ FK๊ฐ ์นผ๋ผ๋น ํ๋๋ง ์๊ธฐ๋๋ก ๋ณด์ฅํ ์ ์๋ ์ชฝ์ด ์๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅ
- ๋งค์ฐ ๋ณต์กํ๋ฏ๋ก ํ์ ์์ ์ ์ฐ์ด์ง ์์
- 1:M , M:1๋ก ํ์ด์ ์ค๊ฐํ
์ด๋ธ์ ๋ช
์์ ์ผ๋ก ์์ฑํด์ M:N์ ํ์ด๋ด๋ ๊ฒ์ ๊ถ์ฅ
(์ค๊ฐํ ์ด๋ธ์ ์ํฐํฐ๋ก ์น๊ฒฉ)
โ๏ธ @ManyToOne vs @OneToMany
- ์ํฐํฐ์ ์กฐํ ๋น๋์ ๋ฐ๋ผ ์ค๊ณ๋ฅผ ํด์ผํจ
- User์ UserHistory์ ๊ด๊ณ์์ UserHistory ์ฆ ๋ณ๊ฒฝ์ด๋ ฅ์์
ํ์ฌ User์ ์ํ๋ฅผ ์กฐํํ๋ ๋น๋๋ ์ ๊ณ ์์ฐ์ค๋ฝ์ง ์๋ค๊ณ ์๊ฐ๋จ. - User์์ User์ ๋ณ๊ฒฝ์ด๋ ฅ์ ์ฐธ์กฐํ๋ ๊ฒ์ ์์ฐ์ค๋ฝ๊ณ ๋ณด๋ค
๋น๋ฒํ ๊ฒ์ผ๋ก ์๊ฐ๋จ - ์ด๋ฌํ ๊ฒฝ์ฐ User(One)์ชฝ์ ์กฐํ์ ์ฉ ์ปฌ๋ ์
์ ๋๊ณ @OneToMany์
@JoinColumn(insertable, updatable) ๋ฅผ ์ด์ฉํด์ ๊ด๊ณ์ค์ - User๊ฐ์ฒด์์ ๋ฐ๋ก getUserHistories()๋ก ๊ฐ๋จํ๊ฒ ์กฐํ๊ฐ๋ฅ
@ManyToOne์ด๋ผ๋ฉด ?
- UserHistory์ @ManyToOne User user๋ก ๊ด๊ณ์ค์
โ๏ธ mappedBy
- ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด ์๋์ ํ์
- ํด๋น ํ๋๋ DB์ ๋งคํ๋์ง ์๊ณ ๊ฐ์ฒด ๊ทธ๋ํ๋ก ํ์๋ง ๊ฐ๋ฅ
- ๋๋๋ก ๋จ๋ฐฉํฅ์ผ๋ก ์ค๊ณํ๊ณ ๋ฐ๋์ ํ์ํ ์ํฉ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅ
(side-effect๊ฐ ๋ง์)
โ๏ธ @ToString์ผ๋ก ์ธํด ์ํ์ฐธ์กฐ ๋ฐ์ ๋ฌธ์
@ToString.Exclude
- ์ค์ ํ ํ๋๋ ToString ๋์์์ ์ ์ธ
๐ ์๊ฐ์ธ์ฆ

ํจ์คํธ์บ ํผ์ค [์ง์ฅ์ธ ์ค๋ฌด๊ต์ก]
ํ๋ก๊ทธ๋๋ฐ, ์์ํธ์ง, UX/UI, ๋ง์ผํ , ๋ฐ์ดํฐ ๋ถ์, ์์ ๊ฐ์, The RED, ๊ตญ๋น์ง์, ๊ธฐ์ ๊ต์ก, ์๋น์ค ์ ๊ณต.
fastcampus.co.kr