๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒท Spring/๊ฐœ๋…

[Spring][JPA] @Column์€ ์ •์˜, ์†์„ฑ, ์˜ˆ์‹œ ์ฝ”๋“œ + int์™€ Integer๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€?

by ._.sori 2026. 3. 28.

 

 

์—”ํ‹ฐํ‹ฐ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด,
ํ•„๋“œ์— @Column์„ ๋ถ™์ด๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒŒ ๋œ๋‹ค.
๋ˆˆ์น˜๋กœ ๋Œ€์ถฉ ์–ด๋–ค ๋А๋‚Œ์ธ์ง€ ์•Œ์ง€๋งŒ
๊ทธ๋ž˜๋„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ž.

 

 

 

@Column

  • ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ์–ด๋–ป๊ฒŒ ๋งคํ•‘ํ• ์ง€ ์ •์˜ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
  • ์ž๋ฐ” ๋ณ€์ˆ˜๋ช…๊ณผ DB ์ปฌ๋Ÿผ๋ช…์ด ๋‹ค๋ฅผ ๋•Œ, ์ปฌ๋Ÿผ์— ์ œ์•ฝ์กฐ๊ฑด(๊ธธ์ด, NULL ์—ฌ๋ถ€ ๋“ฑ)์„ ๊ฑธ๊ณ  ์‹ถ์„ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 


 

 

 

 

@Column์˜ ์†์„ฑ

  • name
    : ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.
  • nullable
    : false๋กœ ์„ค์ •ํ•˜๋ฉด DDL ์ƒ์„ฑ ์‹œ NOT NULL ์ œ์•ฝ์กฐ๊ฑด์ด ๋ถ™๋Š”๋‹ค. 
  • unique
    : ํ•œ ์ปฌ๋Ÿผ์— ๊ฐ„๋‹จํžˆ ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • length
    : ๋ฌธ์ž์—ด(String) ํƒ€์ž…์˜ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•œ๋‹ค. (Varchar์˜ ๊ธธ์ด)
  • insertable
    : false๋กœ ์„ค์ •ํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ ์ €์žฅํ•  ๋•Œ ์ด ํ•„๋“œ๋Š” DB์— ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • updatable
    : false๋กœ ์„ค์ •ํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ •ํ•  ๋•Œ ์ด ํ•„๋“œ๋Š” DB์— ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค.
  • columnDefinition
    : DB ์ปฌ๋Ÿผ ์ •๋ณด๋ฅผ ์ง์ ‘ ์ ๋Š”๋‹ค. VARCHAR(100) DEFAULT 'EMPTY' ๋“ฑ...
  • precision / scale
    : precision์€ ์†Œ์ˆ˜์ ์„ ํฌํ•จํ•œ ์ „์ฒด ์ž๋ฆฟ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ  scale์€ ์†Œ์ˆ˜์˜ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. BigDecimal ํƒ€์ž…์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

โ€ป ์ฃผ์˜ โ€ป 
๋งŒ์•ฝ SQL ๊ตฌ๋ฌธ์œผ๋กœ ์†์„ฑ์„ ์ง€์ •ํ–ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ๊ทธ ์ค‘ A ์นผ๋Ÿผ์— null์„ ํ—ˆ์šฉํ•œ ์ƒํƒœ๋ผ๋ฉด, ์ž๋ฐ” ์ฝ”๋“œ์—์„œ @Column(nullable = false)๋ผ๊ณ  ์ ์–ด๋„ ์ปฌ๋Ÿผ์— ์ง€์ •ํ•œ ์†์„ฑ์€ ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

 

 

 

 


 

 

 

 

 

@Column์˜ ์ฝ”๋“œ ์˜ˆ์‹œ

@Entity
public class User {

    @Id @GeneratedValue
    private Long id;

    // ์ปฌ๋Ÿผ๋ช…์„ username์œผ๋กœ ์ง€์ •ํ•จ
    // null์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ -> ๊ฐ’์„ ๋ฌด์กฐ๊ฑด ๋„ฃ์–ด์•ผํ•จ
    // ๊ธธ์ด๋Š” 20์ž ์ œํ•œ
    @Column(name = "username", nullable = false, length = 20)
    private String name;

    // ์ˆ˜์ • ๋ถˆ๊ฐ€ํ•˜๋„๋ก ํ•จ (์—…๋ฐ์ดํŠธ ์•ˆ์‹œํ‚ด)
    // ์–ด๋–ค ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•  ๋•Œ ์‚ฌ์šฉํ•จ
    @Column(updatable = false)
    private LocalDateTime createdAt;

    // ํŠน์ • DB ์ „์šฉ ๊ตฌ๋ฌธ์„ ์ง์ ‘ ๋„ฃ๊ณ  ์‹ถ์„ ๋•Œ
    @Column(columnDefinition = "TEXT")
    private String description;
}

 

 

 

 


 

 

 

 

JPA๊ฐ€ JAVA์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณด๊ณ  DB๋ฅผ ๋งŒ๋“ค ๋•Œ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€?

  • @Column ์ƒ๋žต, ์ž๋ฐ” ๊ธฐ๋ณธ ํƒ€์ž…(int)
int data1;

↓

์ƒ์„ฑ๋˜๋Š” DDL
data1 integer **not null**
์ž๋ฐ”์˜ int๋Š” ์›์‹œํƒ€์ž…์ด๋ผ์„œ ์• ์ดˆ์— null์„ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ JPA๋Š” int๋ฅผ ๋ณด๊ณ  null์ด ๋“ค์–ด์˜ค๋ฉด ์•ˆ๋œ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ž๋™์œผ๋กœ not null์ด๋ผ๋Š” ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ถ™์—ฌ์ค€๋‹ค.

 

  • @Column ์ƒ๋žต, ์ž๋ฐ” ๊ฐ์ฒด ํƒ€์ž…(Integer)
Integer data2;

↓

data2 integer
Integer์€ ๊ฐ์ฒด ํƒ€์ž…์ด๋ผ null์ด ๊ฐ€๋Šฅํ•˜๋‹ค.  JPA๋Š” Integer๋ฅผ ๋ณด๊ณ  null์„ ํ—ˆ์šฉ ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค.

 

  • @Column ์‚ฌ์šฉ, ์ž๋ฐ” ๊ธฐ๋ณธ ํƒ€์ž…(int)
@Column
int data1;

↓

data3 integer
๋ถ„๋ช… int data1;๋งŒ ๋ณด๋ฉด ์ฒซ๋ฒˆ์งธ ์˜ˆ์‹œ์ฒ˜๋Ÿผ not null์ด ๋ถ™์–ด์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ถ™์ง€ ์•Š์•˜๋‹ค. ๊ทธ ์ด์œ ๋Š” @Column ์–ด๋…ธํ…Œ์ด์…˜์˜ ๊ธฐ๋ณธ๊ฐ’ ๋–„๋ฌธ์ด๋‹ค. @Column์˜ nullable ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์€ true์ด๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๋ฉด JPA๋Š” ๊ธฐ๋ณธ๊ฐ’์ธ nullable = true๋ฅผ ์ ์šฉํ•œ๋‹ค.

 

Q. DML๊ณผ DDL์˜ ์ฐจ์ด๋Š”?

A. DML์€ Data Manipulation Language๋กœ SELECT, INSERT, UPDATE์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์“ด๋‹ค. ์•ˆ์— ๋‚ด์šฉ๋ฌผ์„ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. DDL์€ Data Definition Language๋กœ CREATE, ALTER, DROP์ฒ˜๋Ÿผ ํ…Œ์ด๋ธ” ์ž์ฒด๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋‚ด์šฉ๋ฌผ์„ ๋„ฃ๋Š” ๊ทธ๋ฆ‡์„ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

Q. ์–ธ์ œ int๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , Integer๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

A. int, long, boolean์€ ์›์‹œํƒ€์ž…์ด๋ผ๊ณ  ๋งํ•œ๋‹ค. ์›์‹œ ํƒ€์ž…์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’ ๊ทธ ์ž์ฒด์ด๋‹ค. Integer, Long, Boolean์€ ๊ฐ์ฒด ํƒ€์ž…์ด๋ผ๊ณ  ๋งํ•œ๋‹ค. ๊ฐ์ฒด ํƒ€์ž…์€ ๊ฐ์ฒด(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ์ฃผ๋กœ ๊ฐ ํƒ€์ž…์ด ๊ฐ–๊ณ  ์žˆ๋Š” ํŠน์ง•์— ๋งž์ถฐ ๋งž๋Š” ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๊ฐ์ฒด ํƒ€์ž…์ด ํ›จ์”ฌ ๋ฌด๊ฒ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€๋˜๊ณ  ์‹ถ์œผ๋ฉด ์›์‹œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ณ , ๋ฌด์กฐ๊ฑด ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์žˆ์–ดํ– ํ•˜๋Š” ๊ฒฝ์šฐ ์›์‹œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.

Optional ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ ๊ฐ์ฒด ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค. Optional์€ ์ฃผ๋กœ ๊ทธ ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ์„ ๋•Œ ๋ถ™์ธ๋‹ค. ์˜ˆ์‹œ๋กœ ํšŒ์›๊ฐ€์ž…์— ์ด๋ฉ”์ผ์„ ์„ ํƒ ํ•ญ๋ชฉ์œผ๋กœ ์ ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ์ €์žฅ๋œ DB์—๋Š” ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๊ฐ’์ด ๋“ค์–ด์žˆ์„ ์ˆ˜ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํšŒ์› ์ •๋ณด ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€์„œ ๋ณธ์ธ์˜ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ, ์„œ๋ฒ„๋Š” ์ด๋ฉ”์ผ์„ Optional๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค. ๊ฐ’์ด ์—†์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”์˜ List๋‚˜ Map ๊ฐ™์€ ์ปฌ๋ ‰์…˜์ด๋‚˜ ์ œ๋„ˆ๋ฆญ์„ ์‚ฌ์šฉํ•  ๋• ๊ฐ์ฒด ํƒ€์ž…์„ ์จ์•ผํ•œ๋‹ค. List<Integer>์ฒ˜๋Ÿผ ๋ง์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  DB๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด id(๊ธฐ๋ณธํ‚ค)์—๋Š” ๊ผญ Long์„ ์“ด๋‹ค. ๊ทธ ์ด์œ ๋Š” id๊ฐ€ 0์ธ ๊ฒƒ๊ณผ ์•„์ง ํ• ๋‹น๋˜์ง€ ์•Š์•„ null์ธ ์ƒํƒœ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•จ๊ณผ ํ›จ์”ฌ ํฐ ๋ฒ”์œ„๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค.

 

 

 


 

- @Column

 

[JPA] ํ•„๋“œ์™€ ์ปฌ๋Ÿผ ๋งคํ•‘ - @Column

๐Ÿง @Column @Column์€ ๊ฐ์ฒด ํ•„๋“œ๋ฅผ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ๋งคํ•‘์‹œ์ผœ์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ์†์„ฑ ์†์„ฑ ๊ธฐ๋Šฅ ๊ธฐ๋ณธ๊ฐ’ name ํ•„๋“œ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค. ๊ฐ์ฒด์˜ ํ•„๋“œ ์ด๋ฆ„ insertable (๊ฑฐ์˜ ์‚ฌ

ttl-blog.tistory.com