[Spring Boot] JPA๋ž€?

DANIยท2023๋…„ 9์›” 29์ผ
0
post-thumbnail

๐Ÿ“ ORM์ด๋ž€?


์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค SBB๋Š” ์งˆ๋ฌธ ๋‹ต๋ณ€ ๊ฒŒ์‹œํŒ์ด๋‹ค. ์งˆ๋ฌธ์ด๋‚˜ ๋‹ต๋ณ€์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ์›น ์„œ๋น„์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด SQL ์ฟผ๋ฆฌ(query)๋ผ๋Š” ๊ตฌ์กฐํ™”๋œ ์งˆ์˜๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋“ฑ์˜ ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ด๋•Œ ORM(object relational mapping)์„ ์ด์šฉํ•˜๋ฉด ์ž๋ฐ” ๋ฌธ๋ฒ•๋งŒ์œผ๋กœ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ORM์„ ์ด์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ฐ๐Ÿ“ค๐Ÿ“ฅ

๐Ÿ“ ํ…Œ์ด๋ธ” ๊ตฌ์„ฑ ์˜ˆ์‹œ

idsubjectcontent
1์ถœ์„1์ผ์ฐจ1์ผ์งธ ์ž…๋‹ˆ๋‹ค
2์ถœ์„2์ผ์ฐจ2์ผ์งธ ์ž…๋‹ˆ๋‹ค
.........

โ“ ๋งŒ์•ฝ, sql ์ฟผ๋ฆฌ๋กœ ์ž‘์„ฑํ•œ๋‹ค๋ฉด?

creat table board(
	id int primary key,
    subject varchar(100) not null,
    content varchar(1000) not null
);

insert into question (subject, content) 
values ('์ถœ์„1์ผ์ฐจ', '1์ผ์งธ ์ž…๋‹ˆ๋‹ค'), ('์ถœ์„2์ผ์ฐจ', '2์ผ์งธ ์ž…๋‹ˆ๋‹ค');

โ— ORM์„ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค๋ฉด!

board q1 = new board();
q1.setSubject("์ถœ์„1์ผ์ฐจ");
q1.setContent("1์ผ์งธ ์ž…๋‹ˆ๋‹ค");
this.boardRepository.save(q1);

board q2 = new board();
q2.setSubject("์ถœ์„2์ผ์ฐจ");
q2.setContent("2์ผ์งธ ์ž…๋‹ˆ๋‹ค");
this.boardRepository.save(q2);

์ฝ”๋“œ์—์„œ board์€ ์ž๋ฐ” ํด๋ž˜์Šค์ด๋ฉฐ, ์ด์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ORM ํด๋ž˜์Šค๋ฅผ ์—”ํ‹ฐํ‹ฐ(Entity)๋ผ๊ณ  ํ•œ๋‹ค.

ORM์„ ์ด์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜์— ์ƒ๊ด€ ์—†์ด ์ผ๊ด€๋œ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์œ ์ง€ยท๋ณด์ˆ˜ํ•˜๊ธฐ๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค. ๋˜ํ•œ ๋‚ด๋ถ€์—์„œ ์•ˆ์ „ํ•œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด ์ฃผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ฌ๋ผ๋„ ํ†ต์ผ๋œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ์˜ค๋ฅ˜ ๋ฐœ์ƒ๋ฅ ๋„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.





๐Ÿ“ JPA ๋ž€?


์Šคํ”„๋ง๋ถ€ํŠธ๋Š” JPA(Java Persistence API)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. JPA๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ ORM(Object-Relational Mapping)์˜ ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ์ด๋‹ค.

JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์‹ค์ œ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์‹ค์ œ ํด๋ž˜์Šค์—๋Š” ํ•˜์ด๋ฒ„๋„ค์ดํŠธ(Hibernate)๊ฐ€ ์žˆ๋‹ค. SBB๋„ JPA + ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค.


โœ… H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐํ•˜๊ธฐ


1. build.Gradle > dependencies{} ์— runtimeOnly 'com.h2database:h2' ์ถ”๊ฐ€

2. application.properties ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€

# DATABASE
spring.h2.console.enabled=true // H2 ์ฝ˜์†”์˜ ์ ‘์† ํ—ˆ์šฉ ์—ฌ๋ถ€
spring.h2.console.path=/h2-console // ์ฝ˜์†” ์ ‘์†์„ ์œ„ํ•œ URL ๊ฒฝ๋กœ
spring.datasource.url=jdbc:h2:~/local // DB์ ‘์†์„ ์œ„ํ•œ ๊ฒฝ๋กœ
spring.datasource.driverClassName=org.h2.Driver // DB ์ ‘์† ์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„ 
spring.datasource.username=sa // ์‚ฌ์šฉ์ž ๋ช…
spring.datasource.password= // ํŒจ์Šค์›Œ๋“œ

3. ํ•ด๋‹นํŒŒ์ผ ๋ˆŒ๋Ÿฌ์„œ ์ ‘์†

4. ์—๋Ÿฌ ๋ฐœ์ƒ

๐Ÿ”‘ C:/Users/์‚ฌ์šฉ์ž๋ช… ์•„๋ž˜์— ๋นˆ ํ…์ŠคํŠธํŒŒ์ผ ์ด๋ฆ„์„ ํ™•์žฅ์ž๋ช… ํฌํ•จํ•˜์—ฌ "local.mv.db"๋กœ ์ƒ์„ฑ ํ›„ ์ ‘์†ํ•˜๊ธฐ!

๐Ÿ’ฌ ์ ‘์† ์™„๋ฃŒ~!!

5. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' ์ถ”๊ฐ€

6. application.properties ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€

# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect // DB ์—”์ง„ ์ข…๋ฅ˜ ์„ค์ •
spring.jpa.hibernate.ddl-auto=update // ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๊ทœ์น™์„ ์ •์˜

spring.jpa.hibernate.ddl-auto ์„ update๋กœ ์„ค์ •

  • none : ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • update : ์—”ํ‹ฐํ‹ฐ์˜ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ ์šฉํ•œ๋‹ค.
  • validate : ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ๋งŒ ํ•œ๋‹ค.
  • create : ์Šคํ”„๋ง๋ถ€ํŠธ ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋ ๋•Œ ๋ชจ๋‘ dropํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•œ๋‹ค.
  • create-drop : create์™€ ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ข…๋ฃŒ์‹œ์—๋„ ๋ชจ๋‘ drop ํ•œ๋‹ค.





โœจ ์ด๋ฒˆ ์ฑ•ํ„ฐ์—์„œ ๋ฐฐ์šด ๋ถ€๋ถ„

โœ… JPA ์ถ”๊ฐ€ํ•˜๊ธฐ

๐Ÿ“ ๊ณต๋ถ€ํ•  ๋ถ€๋ถ„

โœ… JPA๊ณต๋ถ€โญโญโญโญโญ

0๊ฐœ์˜ ๋Œ“๊ธ€