๋ ์ง:2025-10-23
ํ์ต ๋ชฉํ
- @Entity, @Table, @Id, @GeneratedValue, @Column ๋ฑ ์ฃผ์ ์ด๋
ธํ
์ด์
์ดํด
- ์ํฐํฐ์ ํ
์ด๋ธ ๊ตฌ์กฐ 1:1 ๋งคํ ์ดํด
- DDL ์๋ ์์ฑ ์ต์
์ค์ ์ดํด
โ
Entity ๊ฐ๋
Entity๋?
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ๊ณผ 1:1 ๋์๋๋ ์๋ฐ ํด๋์ค
- ํ
์ด๋ธ์ ํ(row)์ ๊ฐ์ฒด(object) ๋ก ๋งคํ
- ORM(Object-Relational Mapping)์ ํต์ฌ
โ
์ฃผ์ ์ด๋
ธํ
์ด์
1)@Entity
- ํด๋์ค๊ฐ JPA ์ํฐํฐ์์ ๋ํ๋
- ์ํฐํฐ ํด๋์ค ์ด๋ฆ์ด ํ
์ด๋ธ ์ด๋ฆ๊ณผ ๋งคํ๋จ
@Entity
public class Member {
}
2) @Table
- ์ํฐํฐ์ ๋งคํํ ํ
์ด๋ธ ์ด๋ฆ ์ง์
- ํด๋์ค์ ํ
์ด๋ธ ์ด๋ฆ ์ถฉ๋์ด๋ ์์ฝ์ด ๋ฌธ์ ๋ฐฉ์ง
@Entity
@Table(name = "members")
public class Member {
}
Id & @GeneratedValue**
---
## **4)@Column**
- ํ๋์ ์ปฌ๋ผ ๋งคํ ์ ๋ณด ์ง์
- @Column์ ์์ฑ
- name: ์ปฌ๋ผ๋ช
์ง์
- length: ๋ฌธ์ ๊ธธ์ด ์ ์ฝ
- nullable: null ํ์ฉ ์ฌ๋ถ
- unique: ์ ๋ํฌ ์ ์ฝ ์กฐ๊ฑด
```java
@Column(unique = true, nullable = false, length = 50)
private String email;
โ
์ํฐํฐ์ ํ
์ด๋ธ ๋งคํ
- ์ํฐํฐ๋ ํ
์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์๋ฐ ์ฝ๋๋ก ํํ
- DB ์ปฌ๋ผ์ ์ํฐํฐ์ ํ๋์ 1:1 ๋์
- ORM์ ํตํด ์๋ฐ ์ฝ๋๋ก ๋ฐ์ดํฐ ์ฝ์
, ์กฐํ, ์์ , ์ญ์ ๊ฐ๋ฅ
- @Column ๊ธฐ๋ณธ๊ฐ: length=255, nullable=true
ํ
์ด๋ธ SQL
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
address VARCHAR(255)
);
์ํฐํฐ ํด๋์ค
@Getter
@Entity
@Table(name = "users")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 50, nullable = false)
private String name;
@Column(unique = true, nullable = false)
private String email;
private String address;
}
๐ก ํฌ์ธํธ
- @Column ๋ฏธ์ฌ์ฉ ์ length=255, nullable=true ๊ธฐ๋ณธ๊ฐ
- @NoArgsConstructor(access = AccessLevel.PROTECTED): JPA ๋ด๋ถ ์์ฑ์ฉ ๊ธฐ๋ณธ ์์ฑ์ ์ ๊ณต
โ
JPA DDL ์ค์
application.properties ์์
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=12345678
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
ddl-auto ์ต์
| ์ต์
| ์ค๋ช
์ฌ์ฉ ์๊ธฐ |
|---|
| create | ๊ธฐ์กด ํ
์ด๋ธ ์ญ์ ํ ์ฌ์์ฑ |
| create-drop | create + ์ข
๋ฃ ์ ์ญ์ |
| update | ๋ณ๊ฒฝ๋ถ๋ง ๋ฐ์(์ปฌ๋ผ ์ถ๊ฐ) |
| validate | ์ํฐํฐ์ ํ
์ด๋ธ ๋งคํ ์ ๋ณด๋ง ํ์ธ |
| none | DDL ์๋ ์์ฑ ์ฌ์ฉ ์ํจ |
SQL ์ถ๋ ฅ ์ต์
| ์ต์
| ์ค๋ช
|
|---|
| show-sql | ์คํ๋๋ SQL ๋ก๊ทธ ์ถ๋ ฅ |
| format_sql | ๋ก๊ทธ ๊ฐ๋
์ฑ์ ์ํด SQL ํฌ๋งทํ
|
์ ๋ฆฌ
- Entity๋ DB ํ
์ด๋ธ์ ์ฝ๋๋ก ํํํ ํด๋์ค
- .@Entity, @Table, @Id, @GeneratedValue, @Column๋ JPA ๋งคํ์ ํต์ฌ
- @NoArgsConstructor(PROTECTED): JPA๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ
- DDL ์ต์
(create, update, validate)์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ํ
์ด๋ธ ์๋ ๊ด๋ฆฌ ๊ฐ๋ฅ
- JPA๋ฅผ ํตํด SQL์ ์ง์ ์์ฑํ์ง ์๊ณ ๋ ์๋ฐ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ ๊ฐ๋ฅ