๐Ÿ”ฎSpring

[SpringBoot] Rest Api Sample ๋งŒ๋“ค๊ธฐ #1

harry.93 2022. 7. 5. 01:14
๋ฐ˜์‘ํ˜•

๊ธฐ์กด์— ๊ธ‰ํ•˜๊ฒŒ ์ง„ํ–‰ํ•œ ์‚ฌ๋‚ด SMS API ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚˜์„œ, ์ •๋ฆฌ๋„ ํ•  ๊ฒธ ์ƒ˜ํ”Œ๋กœ REST API ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.
๊ธฐ๋ณธ์ ์ธ ๋ฒ„์ „ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์„ธํŒ…

  1. JDK11
  2. Spring Boot 2.7.1
  3. Gradle 7.4.1 (Project Initialize > VS Code Spring Extension > Create a Gradle Project)

๊ทธ๋ฆฌ๊ณ  Build.gradle ์— ์ถ”๊ฐ€ํ•œ dependency ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

// dev tool
implementation group: 'org.springframework.boot', name: 'spring-boot-devtools'
// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.9'
// https://mvnrepository.com/artifact/com.h2database/h2
implementation group: 'com.h2database', name: 'h2', version: '2.1.214'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jdbc
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jdbc', version: '2.7.1'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.7.1'
// https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter
implementation group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.2.2'

 

์„ค์ •ํ•˜๋ฉด์„œ, ์ถ”๊ฐ€์ ์œผ๋กœ ์›๋ž˜๋Š” ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ์„ ์ƒ์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ, ์‹ค์ œ ์ด ์ƒ˜ํ”Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์–ด์ฐจํ”ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ API๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ๋งŒํผ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„๊นŒ๋ฅผ ๊ณ ๋ฏผํ•˜์˜€๋Š”๋ฐ, ๊ทธ ๋•Œ ๋งˆ์นจ ๊ฒ€์ƒ‰ํ•ด์„œ ๋‚˜์˜จ ๊ฒƒ์ด h2 Database ์˜€๋‹ค.

์—ฌํƒœ๊นŒ์ง€๋Š” "ํ…Œ์ŠคํŠธ" ๋‹จ๊ณ„๋Š” ๊ทธ๋‹ค์ง€ ๋งŽ์ด ๊ณ ๋ ค๋ฅผ ํ•˜์ง€ ์•Š์•˜์—ˆ๋Š”๋ฐ, ๋ง‰์ƒ ์‚ฌ์šฉํ•ด๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๊ดœ์ฐฎ์•˜๋‹ค.

Spring Boot์˜ Auto Configuration์„ ํ†ตํ•˜์—ฌ ๋ณ„๋„์˜ ๋งŽ์€ ์…‹ํŒ…์„ ํ•˜์ง€ ์•Š๋”๋ผ๋„ DB๋ฅผ ์„ธํŒ…ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋Œ๋ฆด ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์•„๋ž˜๋Š” h2 database์— ๋Œ€ํ•ด ์ฐพ์€ ๋ธ”๋กœ๊ทธ ๊ธ€์ด๋‹ค.

https://dololak.tistory.com/285

 

[H2DB] H2 Database๋ž€? H2DB ์„ค์น˜ ๋ฐฉ๋ฒ•

H2DB H2DB๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS )์ž…๋‹ˆ๋‹ค. H2DB๋Š” ์„œ๋ฒ„(Server) ๋ชจ๋“œ์™€ ์ž„๋ฒ ๋””๋“œ(Embedded) ๋ชจ๋“œ์˜ ์ธ๋ฉ”๋ชจ๋ฆฌ DB ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋””์Šคํฌ ๊ธฐ๋ฐ˜ ํ…Œ์ด๋ธ”์„

dololak.tistory.com

 

์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” MyBatis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋งŒํผ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์—ฐ๋™ํ•ด๋ณด์•˜๋‹ค.

2. h2 Database + MyBatis ์—ฐ๊ณ„ ์„ค์ •

์šฐ์„  build.gradle์— ์•„๋ž˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 build.gradle
// https://mvnrepository.com/artifact/com.h2database/h2
implementation group: 'com.h2database', name: 'h2', version: '2.1.214'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jdbc
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jdbc', version: '2.7.1'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.7.1'
// https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter
implementation group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.2.2'

 

์„ค์ • ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ธํŒ…ํ•œ๋‹ค.

application.yml
spring:
  application:
    name: REST-API
  datasource:
    hikari:
      # ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB๋ฅผ ์˜ฌ๋ฆฐ๋‹ค.
      jdbc-url: jdbc:h2:mem:h2-test
      # ํŒŒ์ผ ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
      # jdbc-url: jdbc:h2:file:{๊ฒฝ๋กœ}/{ํŒŒ์ผ๋ช…}
      driver-class-name: org.h2.Driver
      username: sa
      password:
      generate-unique-name: false
      maximum-pool-size: 4
  h2:
    console:
      enable: true
      path: /h2-console

 

h2-test๋ผ๋Š” DB๋ช…์€ ๋งˆ์Œ๋Œ€๋กœ, username/password๋Š” ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค. ์•„๋ž˜์˜ h2 ํ•ญ๋ชฉ์€ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ฝ˜์†”์ฐฝ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •๊ณผ ๊ฒฝ๋กœ์ด๋‹ค. ์œ„ ์„ค์ •๋Œ€๋กœ๋ผ๋ฉด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ํ›„, http://localhost:8080/h2-console ๋กœ ์ฝ˜์†”์— ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค(8080ํฌํŠธ๊ธฐ์ค€)

๊ทธ๋ฆฌ๊ณ  ๋‚œ ํ›„ ๊ฐ„๋‹จํ•œ test ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•˜์—ฌ DB๊ฐ€ ์˜ฌ๋ผ์˜ค๋Š”์ง€ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

testRunner.java
package rest.api.sample;

import java.sql.Connection;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class TestRunner implements ApplicationRunner {

    @Autowired
    DataSource dataSource;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        Connection connection = dataSource.getConnection();
        System.out.println("url : " + connection.getMetaData().getURL());
        System.out.println("userName : " + connection.getMetaData().getUserName());
    }

}

 

ํ”„๋ฆฐํŠธ๋ฅผ ํ•˜์—ฌ ํ™•์ธํ•˜๋Š” ๋ชจ์Šต

์ด๋ ‡๊ฒŒ ๋กœ๊ทธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ฐํžŒ๋‹ค๋ฉด ๋ฌธ์ œ์—†์ด ๊ตฌ๋™๋œ ๊ฒƒ์ด๊ณ , ์ฝ˜์†”๋กœ๋„ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
๋‚ด๊ฐ€ ๊ฒช์€ ๋ฌธ์ œ๋กœ๋Š” Spring Boot ์˜ Auto Configuration์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•„์„œ No Bean for datasouce ์—๋Ÿฌ๊ฐ€ ๋œจ๊ธด ํ–ˆ๋Š”๋ฐ, ์ƒˆ๋กœ๊ณ ์นจ๊ณผ ์žฌ๋กœ๋”ฉ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

์ด์ œ MyBatis๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

build.gradle์—๋Š” ์•„๊นŒ ์ถ”๊ฐ€๋ฅผ ํ–ˆ์œผ๋‹ˆ, application.yml์— ์•„๋ž˜์˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

application.yml
mybatis:
  # mapperํŒŒ์ผ ์œ„์น˜ ์„ค์ •
  mapper-locations: mybatis/**/*.xml
  # ์นด๋ฉœ ์ผ€์ด์Šค ํ—ˆ์šฉ
  configuration:
    map-underscore-to-camel-case: true
  # ํ’€ ํŒจํ‚ค์ง€๋ช…์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ๋ฏธ๋ฆฌ ์ •์˜ ์ถ”๊ฐ€
  type-aliases-package: rest.api.sample.data

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ ์„ค์ •์— ๋งž๊ฒŒ repository์— interface ํด๋ž˜์Šค์™€ mapper๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

๊ฐ ํด๋”์— ๋งž๊ฒŒ ์ž‘์„ฑํ•œ ๋ชจ์Šต

 

3. Boot Running ์‹œ, h2 database์— ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ.

๊ธฐ๋ณธ์ ์œผ๋กœ h2 database๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, schema์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ์‹œ, ์ž๋™์œผ๋กœ ์ฐพ์•„์„œ ์‹คํ–‰ํ•ด์ค€๋‹ค.
๋”ฐ๋ผ์„œ, ํ•ด๋‹น sql ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ ์ ์ ˆํ•˜๊ฒŒ ๋†”๋‘๋ฉด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ์‹œ, ์•Œ์•„์„œ ์ฝ์–ด์„œ ์‹คํ–‰์„ ์‹œ์ผœ์ค€๋‹ค.

๊ฒฝ๋กœ๋Š” resouces ํด๋” ์•„๋ž˜์ด๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ๋‹ค.

schema.sql
CREATE TABLE IF NOT EXISTS members
(
    user_id         VARCHAR(50)     NOT NULL,
    user_name       VARCHAR(50)     NOT NULL,
    user_email      VARCHAR(50)     NOT NULL,    
    user_age        VARCHAR(50)     NOT NULL,    
    user_address    VARCHAR(50)     NOT NULL,    
    user_enter_date VARCHAR(50)     NOT NULL,
    PRIMARY KEY (user_id)
);

 

data.sql
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user1','์œ ์ €1','user1@user.net','1','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 1๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user2','์œ ์ €2','user2@user.net','2','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 2๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user3','์œ ์ €3','user3@user.net','3','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 3๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user4','์œ ์ €4','user4@user.net','4','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 4๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user5','์œ ์ €5','user5@user.net','5','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 5๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user6','์œ ์ €6','user6@user.net','6','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 6๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user7','์œ ์ €7','user7@user.net','7','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 7๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user8','์œ ์ €8','user8@user.net','8','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 8๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user9','์œ ์ €9','user9@user.net','9','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 9๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user10','์œ ์ €10','user10@user.net','10','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 10๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user11','์œ ์ €11','user11@user.net','11','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 11๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user12','์œ ์ €12','user12@user.net','12','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 12๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user13','์œ ์ €13','user13@user.net','13','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 13๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user14','์œ ์ €14','user14@user.net','14','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 14๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user15','์œ ์ €15','user15@user.net','15','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 15๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user16','์œ ์ €16','user16@user.net','16','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 16๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user17','์œ ์ €17','user17@user.net','17','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 17๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user18','์œ ์ €18','user18@user.net','18','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 18๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user19','์œ ์ €19','user19@user.net','19','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 19๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user20','์œ ์ €20','user20@user.net','20','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 20๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user21','์œ ์ €21','user20@user.net','21','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 21๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user22','์œ ์ €22','user20@user.net','22','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 22๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user23','์œ ์ €23','user20@user.net','23','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 23๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user24','์œ ์ €24','user20@user.net','24','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 24๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user25','์œ ์ €25','user20@user.net','25','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 25๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user26','์œ ์ €26','user20@user.net','26','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 26๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user27','์œ ์ €27','user20@user.net','27','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 27๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user28','์œ ์ €28','user20@user.net','28','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 28๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user29','์œ ์ €29','user20@user.net','29','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 29๊ธธ','2022-07-01');
INSERT INTO members (user_id,user_name,user_email,user_age,user_address,user_enter_date) VALUES ('user30','์œ ์ €30','user20@user.net','30','์„œ์šธ์‹œ ์œ ์ €๊ตฌ ์œ ์ €๋™ 30๊ธธ','2022-07-01');

 

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด ๋†“๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™์‹œํ‚จ ๋‹ค์Œ, http://localhost:8080/h2-console ๋กœ ์ ‘์†ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

728x90
๋ฐ˜์‘ํ˜•