์ฐ๋ฆฌ๊ฐ ๋ง๋ค SBB๋ ์ง๋ฌธ ๋ต๋ณ ๊ฒ์ํ์ด๋ค. ์ง๋ฌธ์ด๋ ๋ต๋ณ์ ์์ฑํ๋ฉด ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๊ฑฐ๋ ์์ ํ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ค. ์น ์๋น์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋๋ถ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด SQL ์ฟผ๋ฆฌ(query)๋ผ๋ ๊ตฌ์กฐํ๋ ์ง์๋ฅผ ์์ฑํ๊ณ ์คํํ๋ ๋ฑ์ ๋ณต์กํ ๊ณผ์ ์ด ํ์ํ๋ค. ์ด๋ ORM(object relational mapping)์ ์ด์ฉํ๋ฉด ์๋ฐ ๋ฌธ๋ฒ๋ง์ผ๋ก๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.
์ฆ, ORM์ ์ด์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ์ง ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
๐ฐ๐ค๐ฅ
id | subject | content |
---|---|---|
1 | ์ถ์1์ผ์ฐจ | 1์ผ์งธ ์ ๋๋ค |
2 | ์ถ์2์ผ์ฐจ | 2์ผ์งธ ์ ๋๋ค |
... | ... | ... |
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์ผ์งธ ์
๋๋ค');
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(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๊ณต๋ถโญโญโญโญโญ