Bibi's DevLog ๐ค๐
[Spring] ์ธํ๋ฐ ์คํ๋ง ์ ๋ฌธ(๊น์ํ ๋) - ์คํ๋ง DB ์ ๊ทผ๊ธฐ์ : H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์น ๋ณธ๋ฌธ
[Spring] ์ธํ๋ฐ ์คํ๋ง ์ ๋ฌธ(๊น์ํ ๋) - ์คํ๋ง DB ์ ๊ทผ๊ธฐ์ : H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์น
๋น๋น bibi 2021. 3. 5. 00:02์ด ๊ธ์ ์ธํ๋ฐ ๊น์ํ ๋์ ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
์คํ๋ง DB ์ ๊ทผ ๊ธฐ์
์คํ๋ง์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฒ์ ์์๋ณผ ๊ฒ์ด๋ค.
- DB : ๋ฐ์ดํฐ๋ฒ ์ด์ค
- JDBC : DB์ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฐ๊ฒฐํด์ฃผ๋ ๊ธฐ์ .
- ์ฐ์ ์ ์์ํ JDBC๋ฅผ ์ฌ์ฉํ๋ ๋ฒ์ ๋ฐฐ์๋ณธ๋ค.
- JDBC ํ ํ๋ฆฟ : ์์ํ JDBC์ ์ฌ์ฉ์ด ์ด๋ ค์์ ๋์จ ์คํ๋ง ๊ธฐ์ . ์ ํ๋ฆฌ์ผ์ด์ ์์ DB๋ก SQL๋ฌธ์ ํธํ๊ฒ ๋ณด๋ผ ์ ์๋ค.
- JPA : SQL๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ์ง์ DB์ ์ ์ฅ ๋ฐ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ์ .
- ์คํ๋ง ๋ฐ์ดํฐ JPA : JPA๋ฅผ ๋ ํธ๋ฆฌํ๊ฒ ์ธ ์ ์๋๋ก ๋ง๋ ์คํ๋ง์ ๊ธฐ์ .
์ด์ ์ง๊ธ๊น์ง ๋ง๋ค์๋ MemoryMemberRepository๋ฅผ JDBCRepository, JPARepository ๋ฑ์ผ๋ก ํ ๋จ๊ณ์ฉ ๋ฐ์ ์์ผ ๋ณผ ๊ฒ์ด๋ค.
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์น
์์ฃผ ๊ฐ๋ณ๊ณ ์ฌํํ H2๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํด ๋ณผ ๊ฒ์ด๋ค.
H2
H2๋ ๊ฐ๋ฐ ๋ฐ ํ ์คํธ, ๊ต์ก ์ฉ๋์ DB์ด๋ค. ํํ์ด์ง
- ๊ฐ๋ณ๊ณ (์ฉ๋์ด ์๋ค) ํธ๋ฆฌํ๋ค
- ์น ํ๋ฉด์ ์ ๊ณตํด ์ค๋ค.
0
ํํ์ด์ง์์ ๋ค์ด๋ก๋ ๋ฐ ์ค์น ํ h2.sh
ํ์ผ์ ์คํํ๋ค.
H2
-bin
-h2.sh
์คํ- ์๋์ฐ๋
h2.bat
(๊น๋ฐฐ์์์๋./h2.bat
) - ๋งฅ์
./h2.sh
- ์๋์ฐ๋
- ์ข ๋ฃ๋ Ctrl + c
๋๋ ๊ทธ๋ฅ ๊ฒ์ ํ "H2 Console"์ ๋๋ฌ ์คํํ๋ค.
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ '์น ์ฝ์' ์ฐฝ์ด ๋์จ๋ค.
1.
์ฒ์์๋ ''๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ''์ ๋ง๋ค์ด์ผ ํ๋ค.
- JDBC URL : ํ์ผ๋ก๋ถํฐ์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋งํ๋ค.
~/test
ํ์์ testํ์ผ์ ๋งํจ.
- ์ด๋ฆฐ ์ํ ๊ทธ๋๋ก [์ฐ๊ฒฐ]์ ๋๋ฅด๋ฉด ์ฐฝ์ด ๋ฐ๋๋ค.
2.
ํ์์ test.mv.db
ํ์ผ์ด ์๊ฒผ๋์ง ํ์ธํ๋ค.
(cd ~
ls
๋ก ํ์ธ)
3.
JDBC URL์ฒ๋ผ ํ์ผ(test
)๋ก ์ ๊ทผํ๊ฒ ๋๋ฉด, ์น ์ฝ์๊ณผ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ ์ถฉ๋์ด ์ผ์ด๋ ์ ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฐ๊ฒฐ์ ๋๊ณ , ๋ค์ ์ ์ํ๊ธฐ ์ ์
JDBC URL ํญ๋ชฉ์ jdbc:h2:tcp://localhost/~/test
๋ก ๋ฐ๊พผ ๋ค ๋ค์ [์ฐ๊ฒฐ]ํ๋ค.
์ด๋ ๊ฒ ์ ์ํ๋ฉด ํ์ผ์ ์ง์ ์ ๊ทผํ๋ ๊ฒ ์๋, ์์ผ์ ํตํด ์ ๊ทผํ๊ฒ ๋์ด ์ฌ๋ฌ ๊ณณ์์ ์ ๊ทผ ๊ฐ๋ฅํด์ง๋ค.
*
๋ง์ฝ ์ ์ ๋๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด rm test.mv.db
๋ก test.mv.db
ํ์ผ์ ์์ ํ ์ญ์ ํ, ์๋ฒ๋ฅผ ๊ป๋ค ์ผ ๋ค์ ์ฒ์๋ถํฐ ๋ค์ ์๋ํด ๋ณธ๋ค.
4
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋ง๋ค์ด ๋ณธ๋ค.
(์ง๊ธ๋ถํฐ๋ SQL๋ฌธ ์ฌ์ฉ)
drop table if exists member CASCADE;
create table member
(
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
Member.java
๋ฅผ ์๊ฐํด ๋ณด๋ฉด์ ์ดํดํ์.
id
:private Long id
=>id bigint
generated by default as identity
: ๊ฐ์ ์ ํ ํ์ง ์๊ณ insertํ์ ๋, DB๊ฐ ์์์ ์ด ๊ฐ์ ์ฑ์๋ผ.
name
:private String name
=>name varchar(255)
primary key
(PK) = id๋ก ์ค์
5
๋ง๋ member ํ ์ด๋ธ์ ๊ฐ์ ๋ฃ์ด ๋ณธ๋ค.
INSERT into member(name) values('spring')
: member ํ ์ด๋ธ์ name์ผ๋ก 'spring'์ด๋ผ๋ ๊ฐ์ ์ถ๊ฐํ๋ค.
์คํ ํ member ํ ์ด๋ธ์ ๋ค์ ์กฐํํด ๋ณธ๋ค.
SELECT * FROM MEMBER
๊ทธ๋ฌ๋ฉด id = 1, name = spring ์ธ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋์ด ์๋ค.
*INSERT ์ id๊ฐ์ ์ง์ ํ์ง ์์๋๋ฐ๋ ์๋์ผ๋ก ์ง์ ๋์ด ์๋ค. ์ด๋ ์์์ id๊ฐ์ ๋ํด generated by default as identity
๋ฅผ ์ค์ ํ๊ธฐ ๋๋ฌธ. (++sequence
์ ๊ฐ์ ์๋ฆฌ)
+
sqlํ์ผ์ ์ธํ ๋ฆฌ์ ์ด์์ ๋ด ํ๋ก์ ํธ ๊ตฌ์กฐ์์ ๋ง๋ค์ด ๋๋ฉด ์ข๋ค.
ํ ์ด๋ธ์ ๋ง๋ค ๋ ์ด๋ป๊ฒ ๋ง๋ค์๋์ง ํ์ธํ๊ธฐ ์ํ ์ฉ๋ (ํธํ๋ผ๊ณ )
src
์ ๋๋ฑํsql
๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑ์๋ก์ด sqlํ์ผ
ddl.sql
์ ์์ฑํ๊ณ ,drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), primary key (id) );
์ด ๋ด์ฉ์ ์ ์ฅํด ๋๋ค.
๊น์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ณ DB ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ธฐ ํธํ๋ค๋ ์ฅ์ ์ด ์๋ค.