[์น๊ฐ๋ฐ์ ๋ด, Spring] 2์ฃผ์ฐจ ๊ฐ๋ฐ์ผ์ง(1) - RDBMS, H2, SQL
2์ฃผ์ฐจ์์๋ ๊ธฐ์ด์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ์์๋ก ํ์ตํ๋ค.
- RDBMS, H2, SQL
- JPA, Repository
- API, Lombok, DTO
์ด๋ฒ ํฌ์คํ ์์ ์ ๋ฆฌํ ๋ถ๋ถ์ DB์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๋ถ์ธ RDBMS, H2, SQL์ ๋ํ ๋ด์ฉ์ด๋ค.
RDBMS
๐ก RDBMS๋?
RDBMS(Relational DataBase Management System)์ ์ปดํจํฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ์ ์ด๋ค.
๋ํ์ ์ธ ์ข ๋ฅ๋ก๋ MySQL, PostgreSQL, Oracle Database ๋ฑ์ด ์๋ค.
๊ฐ์์ 4์ฃผ์ฐจ๊น์ง๋ H2๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. H2๋ In-memory DB๋ก, ์๋ฒ๊ฐ ์๋ํ๋ ๋์์๋ง ๋ด์ฉ์ ์ ์ฅํ๊ณ ์๋ฒ๊ฐ ์๋์ ๋ฉ์ถ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ญ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฆฌ๊ณ ์ถ์ผ๋ฉด ์๋ฒ๋ฅผ ์ฌ์์ํ๋ฉด ๋๋๊น ์ฐ์ต์ฉ์ผ๋ก๋ ๋ฑ์ธ ๊ฒ ๊ฐ๋ค.
๋์ค์ ์๋น์ค๋ฅผ ๋ฐฐํฌํ ๋๋ MySQL์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. AWS RDS๋ผ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํด MySQL์ ๋ถ์ผ ์์ ์ด๋ค.
๐ก H2 ์น์ฝ์ ๋์๋ณด๊ธฐ
1. src > main > resources > application.properties ํ์ผ์ ๋ค์ ์ค์ ์ ๋ถ์ฌ ๋ฃ๋๋ค.
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
2. Week02Application.java ํ์ผ์ Run ํ๋ค.
3. http://localhost:8080/h2-console ๋ก ์ ์ํด์ ์๋ ํ๋ฉด๊ณผ ๊ฐ์ด ๋จ๋ฉด, Connect ๋ฒํผ์ ํด๋ฆญํ๋ค.
4. ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋จ๋ฉด ์น ์ฝ์ ๋์ฐ๊ธฐ ์ฑ๊ณต!!
SQL ๊ธฐ์ด
์์์ ๋์ด H2 ์น์ฝ์์์ SQL ๊ธฐ์ด ์ค์ต์ ์งํํ๋ค.
๐ก SQL ๊ธฐ์ด ์ค์ตํ๊ธฐ
์ด์ ์ฃผ์ฐจ์์ ์ธ๊ธํ์๋ courses๋ฅผ ๊ฐ์ง๊ณ SQL ์์ ๋ค์ ์คํํด๋ดค๋ค.
- courses ํ ์ด๋ธ ์์ฑํ๊ธฐ
CREATE TABLE IF NOT EXISTS courses (
id bigint(5) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
tutor varchar(255) NOT NULL,
PRIMARY KEY (id)
);
- courses ๋ฐ์ดํฐ ์ฝ์
INSERT INTO courses (title, tutor) VALUES
('์น๊ฐ๋ฐ์ ๋ด, Spring', '๋จ๋ณ๊ด'), ('์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ', '์ด๋ฒ๊ท');
- courses ์กฐํํ๊ธฐ
SELECT * FROM courses;
๐ก SQL๊ณผ JPA
์น์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด SQL์ ๋ชจ๋ ๋ฐฐ์์ผ ํ ๊น? ๋ต์ No!
Spring Data JPA๋ผ๋ ๋ ์์ด ๋ด๊ฐ ๋ด๋ฆฐ Java ๋ช ๋ น์ด๋ฅผ SQL๋ก ๋ฒ์ญํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ SQL์ ์ฌ๋ ์๊ฒ(?) ์ ํ์๊น์ง ์๋ค. ๋ฌผ๋ก ๊ฐ๋ฐ์ ์ํด์๋ผ๋ฉด ์๋ ๊ฒ ์ข๊ฒ ์ง๋ง... JPA๋ ์ ๋ง ๋ฉ์ง ๋ ์์ด์ผ~~๐
์ฐธ๊ณ ์๋ฃ: ์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ ์น๊ฐ๋ฐ์ ๋ด, Spring 2์ฃผ์ฐจ ๊ฐ์์๋ฃ