Bibi's DevLog ๐Ÿค“๐ŸŽ

[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์Šคํ”„๋ง DB ์ ‘๊ทผ๊ธฐ์ˆ  : H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜ ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Spring ์Šคํ”„๋ง

[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"์„ ๋ˆŒ๋Ÿฌ ์‹คํ–‰ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ '์›น ์ฝ˜์†”' ์ฐฝ์ด ๋‚˜์˜จ๋‹ค.

์Šคํ”„๋ง H2 ์ฝ˜์†”

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ํŒŒ์ผ์„ ์ธํ…”๋ฆฌ์ œ์ด์ƒ์˜ ๋‚ด ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์ƒ์— ๋งŒ๋“ค์–ด ๋‘๋ฉด ์ข‹๋‹ค.

ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค ๋•Œ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„ (ํŽธํ•˜๋ผ๊ณ )

  1. src์™€ ๋™๋“ฑํ•œ sql๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ

  2. ์ƒˆ๋กœ์šด 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)
    );

    ์ด ๋‚ด์šฉ์„ ์ €์žฅํ•ด ๋‘”๋‹ค.

  3. ๊นƒ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  DB ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ํŽธํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

'๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ > Spring ์Šคํ”„๋ง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

mustache(ํ…œํ”Œ๋ฆฟ์—”์ง„), ๋™์ HTML, MVC์˜ ๊ฐœ๋…, formํƒœ๊ทธ, GET/POST ์ฐจ์ด  (0) 2021.03.09
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์ˆœ์ˆ˜JDBC, ํ†ตํ•ฉํ…Œ์ŠคํŠธ, ์Šคํ”„๋งJdbcTemplate, JPA, ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA  (0) 2021.03.06
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์›น MVC ๊ฐœ๋ฐœ(ํšŒ์›๊ด€๋ฆฌ ์˜ˆ์ œ) : ํšŒ์› ๋“ฑ๋ก ๋ฐ ์กฐํšŒ  (0) 2021.03.05
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ : ์ปดํฌ๋„ŒํŠธ ์Šค์บ”, ์˜์กด๊ด€๊ณ„, DI, ์Šคํ”„๋ง ๋นˆ ์ง์ ‘ ๋“ฑ๋กํ•˜๊ธฐ  (0) 2021.03.04
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ:๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ, ํšŒ์› ๋„๋ฉ”์ธ/๋ฆฌํฌ์ง€ํ† ๋ฆฌ/์„œ๋น„์Šค ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ž‘์„ฑ  (0) 2021.03.04