Skip to content

[๐ŸŒฑ JPA ๋ฐฉํƒˆ์ถœ ์˜ˆ์•ฝ ๋Œ€๊ธฐ] ์•„ํ‹ฐ(๋ฐ•์ง€์˜) ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#594

Open
ParkJiYeoung8297 wants to merge 12 commits into
woowacourse:parkjiyeoung8297from
ParkJiYeoung8297:jpa-step1
Open

[๐ŸŒฑ JPA ๋ฐฉํƒˆ์ถœ ์˜ˆ์•ฝ ๋Œ€๊ธฐ] ์•„ํ‹ฐ(๋ฐ•์ง€์˜) ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#594
ParkJiYeoung8297 wants to merge 12 commits into
woowacourse:parkjiyeoung8297from
ParkJiYeoung8297:jpa-step1

Conversation

@ParkJiYeoung8297

@ParkJiYeoung8297 ParkJiYeoung8297 commented Jun 18, 2026

Copy link
Copy Markdown

์ฒดํฌ ๋ฆฌ์ŠคํŠธ

  • ๋ฏธ์…˜์˜ ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ๋‚˜์š”?
  • Gradle test๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผํ–ˆ๋‚˜์š”?
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋‚˜์š”?

๋ฒ ์ด์Šค ์ฝ”๋“œ ์„ ํƒ ์ฒดํฌ

  • ์ด์ „ ๋ฏธ์…˜์˜ ๋‚ด ์ฝ”๋“œ์—์„œ ์‹œ์ž‘
  • ์ด์ „ ๋ฏธ์…˜์˜ ํŽ˜์–ด์˜ ์ฝ”๋“œ์—์„œ ์‹œ์ž‘

์–ด๋–ค ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•˜์—ฌ ๋ฆฌ๋ทฐํ•ด์•ผ ํ• ๊นŒ์š”?

1๋‹จ๊ณ„ - JPA ์ „ํ™˜

  • build.gradle ์„ค์ •์— jpa๋กœ ์ˆ˜์ •
  • Time๊ณผ Theme์˜ ์˜์†์„ฑ ๊ด€๋ฆฌ๋ฅผ JPA๋กœ ์ „ํ™˜
  • ReservationSlot๊ณผ Reservation์˜ ์˜์†์„ฑ ๊ด€๋ฆฌ๋ฅผ JPA๋กœ ์ „ํ™˜
  • Reservation๊ณผ ReservationSlot์„ ์–‘๋ฐฉํ–ฅ ๋งคํ•‘์œผ๋กœ ์ˆ˜์ •

2๋‹จ๊ณ„: ๋‚ด ์˜ˆ์•ฝ ๋ชฉ๋ก ์กฐํšŒ ๊ธฐ๋Šฅ

  • ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ์˜ˆ์•ฝ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

3๋‹จ๊ณ„: ์˜ˆ์•ฝ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ

์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์ด๋ผ, ์ด์ „ ๋ฏธ์…˜๊ณผ ์ด๋ฒˆ ๋ฏธ์…˜์˜ SQL๋ฌธ ๋กœ๊ทธ ๋น„๊ต์— ์ค‘์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

4๋‹จ๊ณ„ - ์˜ˆ์•ฝ ๋Œ€๊ธฐ ๊ด€๋ฆฌ

  • ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ์ˆ˜์ •

๋ฐœํ–‰ SQL ๋ฐœ์ทŒ

JDBC์—์„œ๋Š” ์ œ๊ฐ€ ์ง์ ‘ SQL์„ ์ž‘์„ฑํ–ˆ๋˜ ๋ฐ˜๋ฉด, JPA์—์„œ๋Š” hibernate๊ฐ€ ์—”ํ‹ฐํ‹ฐ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•ด์„œ Insert SQL ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ JDBC๋Š” ์‹คํ–‰๊ณผ์ •(SQL ์ƒ์„ฑ, ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ, Generated Key ์กฐํšŒ ๊ณผ์ • ๋“ฑ)์ด ๋กœ๊ทธ๋กœ ์ž˜ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฐ˜๋ฉด, JPA์—์„œ๋Š” hibernate ๋‚ด๋ถ€์—์„œ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋‹จ์ˆœํ•œ SQL ๋กœ๊ทธ๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, JDBC์—์„œ๋Š” DB์—์„œ ์ƒ์„ฑํ•œ primary key๋„ ๊ฐœ๋ฐœ์ž๊ฐ€ SimpleJdbcInsert๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์กฐํšŒํ•˜๊ณ  ๊ฐ์ฒด์— ๋ฐ˜์˜ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด JPA์—์„œ๋Š” Hibernate๊ฐ€ Insert ํ›„์— ์ƒ์„ฑ๋œ primary key๋ฅผ ์กฐํšŒํ•ด์„œ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

[JDBC]
2026-06-22T14:21:43.181+09:00 DEBUG 9599 --- [    Test worker] o.s.jdbc.core.simple.SimpleJdbcInsert    : Compiled insert object: insert string is [INSERT INTO reservation (NAME, RESERVATION_SLOT_ID, STATUS, UPDATED_AT) VALUES(?, ?, ?, ?)]
2026-06-22T14:21:43.182+09:00 DEBUG 9599 --- [    Test worker] o.s.jdbc.core.simple.SimpleJdbcInsert    : JdbcInsert for table [reservation] compiled
2026-06-22T14:21:43.182+09:00 DEBUG 9599 --- [    Test worker] o.s.jdbc.core.simple.SimpleJdbcInsert    : The following parameters are used for call INSERT INTO reservation (NAME, RESERVATION_SLOT_ID, STATUS, UPDATED_AT) VALUES(?, ?, ?, ?) with: [๊น€์ฒ ์ˆ˜, 23, RESERVED, 2026-06-22T14:21:43.136685]
2026-06-22T14:21:43.182+09:00 DEBUG 9599 --- [    Test worker] o.s.jdbc.core.JdbcTemplate               : Executing SQL update and returning generated keys
2026-06-22T14:21:43.182+09:00 DEBUG 9599 --- [    Test worker] o.s.jdbc.core.JdbcTemplate               : Executing prepared SQL statement
2026-06-22T14:21:43.182+09:00 DEBUG 9599 --- [    Test worker] o.s.jdbc.core.simple.SimpleJdbcInsert    : Using generated keys support with array of column names.

[JPA]
Hibernate:
insert
into
reservation
(name, reservation_slot_id, status, updated_at, id)
values
(?, ?, ?, ?, default)

๋ณ€๊ฒฝ์‚ฌํ•ญ

JDBC์—์„œ JPA๋กœ ๋„˜์–ด์˜ค๋ฉฐ ์ƒ๊ธด ๋ณ€๊ฒฝ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
1)@Entity , @id, @GeneratedValue ์ถ”๊ฐ€
2)๋„๋ฉ”์ธ ํ•„๋“œ์—์„œ final์ œ๊ฑฐ (JPA์—์„œ๋Š” EntityManger๊ฐ€ ๊ฐ์ฒด ํ•„๋“œ๊ฐ’์„ ์ฑ„์›Œ์ฃผ๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— final ๋ถˆ๊ฐ€๋Šฅ)
3)protected ์ƒ์„ฑ์ž ์ถ”๊ฐ€(jpa์ „์šฉ),
๊ธฐ์กด ์‚ฌ์šฉ์ž ์ง€์ •์—์„œ๋Š” ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ id ์‚ญ์ œ(์ด๊ฒƒ ์—ญ์‹œ JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— id๋Š” ์ง์ ‘ ์ง€์ • ์•ˆํ•จ)
4)JdbcTemplate์™€ RowMapper ์‚ญ์ œ
5)JpaRepository<T, ID>๋ฅผ extendsํ•˜์—ฌ ์ œ๊ณต๋œ CRUD ๊ธฐ๋Šฅ ์‚ฌ์šฉ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant