S04L01 – ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ๊ณ„์ • ๋ชจ๋ธ ์ถ”๊ฐ€

html

Spring Boot์—์„œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ตฌํ˜„: ๊ณ„์ • ๋ชจ๋ธ ์ถ”๊ฐ€

๋ชฉ์ฐจ

  1. ์†Œ๊ฐœ...........................................ํŽ˜์ด์ง€ 1
  2. ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๊ด€๊ณ„ ์„ค์ •....ํŽ˜์ด์ง€ 4
  3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์ฒ˜๋ฆฌ.........ํŽ˜์ด์ง€ 6
  4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ฐ ํ…Œ์ŠคํŠธ.....ํŽ˜์ด์ง€ 8
  5. ๊ฒฐ๋ก ................................................ํŽ˜์ด์ง€ 10

์†Œ๊ฐœ

๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๋Š” ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Java ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Spring Boot๋Š” ์ด ๊ณผ์ •์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒฌ๊ณ ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด eBook์€ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ณ„์ • ๋ชจ๋ธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ณต์žกํ•œ ๊ณผ์ •์„ ๋‹ค๋ฃจ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ์—”ํ‹ฐํ‹ฐ ๊ด€๊ณ„ ์„ค์ •, ์›ํ™œํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์•ˆ์ „ํ•˜๊ณ  ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” ์ดˆ๋ณด์ž์™€ ๊ธฐ๋ณธ ์ง€์‹์„ ๊ฐ€์ง„ ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ, Spring Boot ํ™˜๊ฒฝ ๋‚ด์—์„œ ๊ณ„์ • ๋ชจ๋ธ์„ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์žˆ์–ด ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ

ํšจ๊ณผ์ ์ธ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๋Š” ํ—ˆ๊ฐ€๋œ ์ธ์›๋งŒ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๋ถ€๋ถ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ๊ตฌ์กฐํ™”๋œ ๊ณ„์ • ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” ์ธ์ฆ ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ , ์‚ฌ์šฉ์ž ์—ญํ• ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ๋‹จ์ 

์žฅ์ :

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

๋‹จ์ :

  • ๋ณต์žก์„ฑ: ๊ด€๊ณ„ ์„ค์ •๊ณผ ์—”ํ‹ฐํ‹ฐ ๊ด€๋ฆฌ๋Š” ์ดˆ๋ณด์ž์—๊ฒŒ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ค๋ฒ„ํ—ค๋“œ: ์ถ”๊ฐ€์ ์ธ ๊ด€๋ฆฌ ๊ณ„์ธต์€ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์ œ ๊ทธ๋ฆฌ๊ณ  ์–ด๋””์— ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€

๊ณ„์ • ๋ชจ๋ธ ๊ตฌํ˜„์€ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ, ์†Œ์…œ ๋ฏธ๋””์–ด ๋„คํŠธ์›Œํฌ, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์†”๋ฃจ์…˜๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๊ฐ€ ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๋Ÿ‰์˜ ์‚ฌ์šฉ์ž์™€ ๋ณต์žกํ•œ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


๊ณ„์ • ๋ชจ๋ธ ์„ค์ •

Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๋ฅผ ํ™•๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๊ณ„์ • ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์€ ์‚ฌ์šฉ์ž ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

๊ณ„์ • ์—”ํ‹ฐํ‹ฐ ์ •์˜

Spring Boot์—์„œ ์—”ํ‹ฐํ‹ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. Account ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด:

์„ค๋ช…:

  • @Entity: ํด๋ž˜์Šค๋ฅผ JPA ์—”ํ‹ฐํ‹ฐ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • @Id: ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • @GeneratedValue: ID ์ƒ์„ฑ ์ „๋žต์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • Lombok ์–ด๋…ธํ…Œ์ด์…˜: @Getter, @Setter, @NoArgsConstructor๋Š” getters, setters ๋ฐ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

ID ์ƒ์„ฑ ์ „๋žต ๊ตฌ์„ฑ

๊ธฐ๋ณธ์ ์œผ๋กœ Spring Boot๋Š” ID ์ƒ์„ฑ์— AUTO ์ „๋žต์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ, ID๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ์œ„ํ•ด SEQUENCE ์ „๋žต์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • GenerationType.SEQUENCE: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ ์œ ํ•œ ID๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ์ฆ๋ถ„์ ์ธ ID ํ• ๋‹น์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๊ด€๊ณ„ ์„ค์ •

์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž(๊ณ„์ •)๋Š” ๊ฒŒ์‹œ๋ฌผ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์—”ํ‹ฐํ‹ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์›ํ™œํ•œ ์šด์˜์„ ์œ„ํ•ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋Œ€๋‹ค ๊ด€๊ณ„

ํ•˜๋‚˜์˜ ๊ณ„์ •์€ ์—ฌ๋Ÿฌ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ ๊ฒŒ์‹œ๋ฌผ์€ ํ•˜๋‚˜์˜ ๊ณ„์ •๊ณผ๋งŒ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ๋ง๋ฉ๋‹ˆ๋‹ค.

Account.java

์„ค๋ช…:

  • @OneToMany(mappedBy = "account"): Account ์—”ํ‹ฐํ‹ฐ๊ฐ€ Post ์—”ํ‹ฐํ‹ฐ์™€ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. mappedBy ์†์„ฑ์€ Post ํด๋ž˜์Šค์˜ account ํ•„๋“œ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋Œ€์ผ ๊ด€๊ณ„

๋ฐ˜๋Œ€๋กœ, ๊ฐ ๊ฒŒ์‹œ๋ฌผ์€ ๋‹จ์ผ ๊ณ„์ •๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” Post ์ธก์—์„œ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Post.java

์„ค๋ช…:

  • @ManyToOne: ์—ฌ๋Ÿฌ ๊ฒŒ์‹œ๋ฌผ์ด ํ•˜๋‚˜์˜ ๊ณ„์ •๊ณผ ์—ฐ๊ด€๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋Œ€์ผ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • @JoinColumn: Post ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค ์—ด(account_id)์ด Account ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค(id)๋ฅผ ์ฐธ์กฐํ•จ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • nullable = false: ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ์ด ๊ณ„์ •๊ณผ ์—ฐ๊ด€๋˜์–ด์•ผ ํ•จ์„ ๋ณด์žฅํ•˜์—ฌ account_id ์—ด์— null ๊ฐ’์ด ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์ฒ˜๋ฆฌ

์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ๊ด€๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹œ๋“œ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”์™€ ๋„ ๊ฐ€๋Šฅ์„ฑ ์ œ์•ฝ ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋“œ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”

์‹œ๋“œ ๋ฐ์ดํ„ฐ๋Š” ํ…Œ์ŠคํŠธ ๋ฐ ๊ฐœ๋ฐœ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

SeedData.java

์„ค๋ช…:

  • CommandLineRunner: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋กœ๋“œ๋œ ํ›„ run ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ดˆ๊ธฐ ๊ณ„์ •์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • AccountRepository: Account ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ CRUD ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋„ ๊ฐ€๋Šฅ์„ฑ ์ œ์•ฝ ๊ด€๋ฆฌ

ํŠน์ • ํ•„๋“œ๊ฐ€ null์ด ์•„๋‹˜์„ ๋ณด์žฅํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ์ด์ƒ์„ ์˜ˆ๋ฐฉํ•˜๊ณ  ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Post.java์—์„œ๋Š” account ํ•„๋“œ๊ฐ€ nullable = false๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์–ด ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ์ด ๊ธฐ์กด ๊ณ„์ •๊ณผ ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•จ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ณ„์ •๊ณผ ์—ฐ๊ด€๋˜์ง€ ์•Š์€ ๊ฒŒ์‹œ๋ฌผ์„ ์ƒ์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ๋„ ๊ฐ€๋Šฅ์„ฑ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์—๋Š” nullable = true๋กœ ์ผ์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ฒŒ์‹œ๋ฌผ์„ ๊ณ„์ •๊ณผ ์—ฐ๊ด€์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ฐ ํ…Œ์ŠคํŠธ

๋ชจ๋ธ๊ณผ ๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฑ„์›Œ์กŒ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

์„ค๋ช…:

  • ./mvnw spring-boot:run: Maven Wrapper๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ๊ฐ„์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

H2 ์ฝ˜์†”์—์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ

Spring Boot๋Š” H2 ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ตํ•ฉ๋˜์–ด H2 ์ฝ˜์†”์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. H2 ์ฝ˜์†” ์ ‘๊ทผ:

    ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080/h2-console์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ์—ฐ๊ฒฐ ์„ธ๋ถ€ ์‚ฌํ•ญ:
    • JDBC URL: jdbc:h2:mem:testdb
    • ์‚ฌ์šฉ์ž ์ด๋ฆ„: sa
    • ๋น„๋ฐ€๋ฒˆํ˜ธ: (๋น„์›Œ ๋‘๊ธฐ)
  3. ํ…Œ์ด๋ธ” ๊ฒ€์ฆ:
    • Accounts ํ…Œ์ด๋ธ”: ์‹œ๋“œ๋œ ๊ณ„์ •์ด id, email, password, firstName๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • Posts ํ…Œ์ด๋ธ”: ์ดˆ๊ธฐ์—๋Š” ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ nullable = true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ account_id๊ฐ€ null์ธ ๊ฒŒ์‹œ๋ฌผ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ:

ID Email Password First Name
1 [email protected] password123 John

๊ฒฐ๋ก 

Spring Boot์—์„œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์ž˜ ๊ตฌ์กฐํ™”๋œ ๊ณ„์ • ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๊ณ , ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, ๊ฒฌ๊ณ ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์— ๋ช…์‹œ๋œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํšจ์œจ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ์‹œ์‚ฌ์ :

  • ์—”ํ‹ฐํ‹ฐ ๊ตฌ์„ฑ: ํด๋ž˜์Šค๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—”ํ‹ฐํ‹ฐ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๊ธฐ๋ณธ ํ‚ค ์ƒ์„ฑ ์ „๋žต์„ ์ •์˜ํ•˜์‹ญ์‹œ์˜ค.
  • ๊ด€๊ณ„ ๋งคํ•‘: @OneToMany ๋ฐ @ManyToOne๊ณผ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ: ๋„ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ•„๋“œ์™€ ๊ฐ™์€ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.
  • ์‹œ๋“œ ๋ฐ์ดํ„ฐ: ํ…Œ์ŠคํŠธ ๋ฐ ๊ฐœ๋ฐœ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋“œ ๋ฐ์ดํ„ฐ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์‹ญ์‹œ์˜ค.
  • ๊ฒ€์ฆ: H2 ์ฝ˜์†”๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋Šฅ์„ ๊ฒ€์ฆํ•˜์‹ญ์‹œ์˜ค.

SEO ํ‚ค์›Œ๋“œ: Spring Boot ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ, ๊ณ„์ • ๋ชจ๋ธ ์ถ”๊ฐ€, Spring์—์„œ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„, Spring Boot ์—”ํ‹ฐํ‹ฐ, Spring Boot ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •, Spring Boot์—์„œ Lombok, JPA ๊ด€๊ณ„, Spring Boot H2 ์ฝ˜์†”, Spring์—์„œ ์‹œ๋“œ ๋ฐ์ดํ„ฐ, Spring Boot ํŠœํ† ๋ฆฌ์–ผ

์ฐธ๊ณ : ์ด ๊ธฐ์‚ฌ๋Š” AI์— ์˜ํ•ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.






Share your love