๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

JPA์—์„œ ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธ ํ‚ค(PK)๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋ ค๋ฉด @GeneratedValue๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋•Œ ์–ด๋–ค strategy๋ฅผ ์„ค์ •ํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํผํฌ๋จผ์Šค๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
PostgreSQL ํ™˜๊ฒฝ์„ ๊ธฐ์ค€์œผ๋กœ @GeneratedValue ์‚ฌ์šฉ๋ฒ•๊ณผ ์ถ”์ฒœ ์„ค์ •์„ ์ •๋ฆฌํ•œ๋‹ค.

 

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

@Id
@GeneratedValue
private Long id;

 

  • strategy๋ฅผ ์ƒ๋žตํ•˜๋ฉด JPA๋Š” ๊ธฐ๋ณธ ์ „๋žต์ธ GenerationType.AUTO๋ฅผ ์ ์šฉํ•œ๋‹ค.
  • AUTO๋Š” ์‚ฌ์šฉํ•˜๋Š” DB์— ๋งž์ถฐ ์ž๋™์œผ๋กœ ์ „๋žต์„ ๊ฒฐ์ •ํ•œ๋‹ค.
  • PostgreSQL์—์„œ๋Š” AUTO → SEQUENCE ์ „๋žต์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

์ „๋žต๋ณ„ ๋™์ž‘ ์ฐจ์ด

์ „๋žต์„ค๋ช…PostgreSQL ์ง€์› ์—ฌ๋ถ€ํŠน์ง•

AUTO DB์— ๋”ฐ๋ผ ์ž๋™ ์„ ํƒ O PostgreSQL์—์„œ๋Š” SEQUENCE ์„ ํƒ๋จ
IDENTITY DB์˜ auto-increment ์‚ฌ์šฉ O (v10 ์ด์ƒ) insert ์ฆ‰์‹œ ์‹คํ–‰๋จ, ๋ฐฐ์น˜ ์–ด๋ ค์›€
SEQUENCE DB ์‹œํ€€์Šค ์‚ฌ์šฉ O ํผํฌ๋จผ์Šค ์šฐ์ˆ˜, ๋ฐฐ์น˜ insert ๊ฐ€๋Šฅ
TABLE ๋ณ„๋„ ํ…Œ์ด๋ธ”๋กœ ์‹œํ€€์Šค ๊ด€๋ฆฌ O ๋А๋ฆผ, ๊ฑฐ์˜ ์•ˆ ์”€

 

 

PostgreSQL์—์„œ๋Š” SEQUENCE ์ „๋žต ๊ถŒ์žฅ

PostgreSQL์€ Oracle์ฒ˜๋Ÿผ SEQUENCE๋ฅผ ์ž˜ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
์ž๋™ ์ƒ์„ฑ ์ „๋žต์œผ๋กœ๋Š” GenerationType.SEQUENCE๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ •์ ์ด๋‹ค.

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_seq")
@SequenceGenerator(
    name = "member_seq",
    sequenceName = "member_seq",  // ์‹ค์ œ DB์— ์ƒ์„ฑ๋  ์‹œํ€€์Šค ์ด๋ฆ„
    allocationSize = 1            // ๊ธฐ๋ณธ๊ฐ’ 50 → 1๋กœ ์ค„์ด๋ฉด ID ์ˆœ์ฐจ์„ฑ ์œ ์ง€ ๊ฐ€๋Šฅ
)
private Long id;

์ฃผ์˜: ์œ„ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด, DB์— member_seq๋ผ๋Š” ์‹œํ€€์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์—†์œผ๋ฉด JPA๊ฐ€ ์ž๋™ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ง์ ‘ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ์•„๋ฌด ์„ค์ •๋„ ์•ˆ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

@Id
@GeneratedValue
private Long id;

 

  • PostgreSQL์—์„œ๋Š” ์ž๋™์œผ๋กœ hibernate_sequence๋ผ๋Š” ์‹œํ€€์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฌธ์ œ๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”์ด ์ด ์‹œํ€€์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ.
  • ํ…Œ์ด๋ธ”๋งˆ๋‹ค ์‹œํ€€์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด @SequenceGenerator๋กœ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

์‹ค๋ฌด ๊ธฐ์ค€ ์ถ”์ฒœ ๋ฐฉ์‹

  • ํ•™์Šต์šฉ/๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ → @GeneratedValue๋งŒ ์จ๋„ ๋ฌด๋ฐฉ
  • ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ → @GeneratedValue(strategy = SEQUENCE) + @SequenceGenerator ๋ช…์‹œ

 

 

๋ฐ˜์‘ํ˜•