[7] 음식점 포스 프로그램 - 백엔드 인터페이스 개발(1) : Database schema 설계(H2 Database 기반)

2023. 10. 7. 12:29Github 프로젝트/음식점 포스 프로그램

728x90
반응형
SMALL

지난 시간에는 Typescript 기반 React를 사용하여 Front-End 개발을 하였다.

지난 시간까지 한 작업은 Front-End 개발자로서 API 연동을 제외한 나머지 부분들은 프론트 엔드로만 개발자로서 할 수 있는 방법에 대해 넣어 보았습니다.

따라서 이번 시간에는 H2 활용 하는 방법이랑 DDL, DML을 활용하여 데이터 베이스 설계 작업을 실시 하겠습니다.

 

 

github: https://github.com/BerkleyLim/foodstor_pos

 

GitHub - BerkleyLim/foodstor_pos: This is the program on foot store pos machine.

This is the program on foot store pos machine. . Contribute to BerkleyLim/foodstor_pos development by creating an account on GitHub.

github.com

 

 

1. H2 DB application.yaml 파일 둘려보기

spring:
  h2:
    console:
      enabled: true  # H2 Console을 사용할지 여부 (H2 Console은 H2 Database를 UI로 제공해주는 기능)
      path: /h2-console  # H2 Console의 Path
  datasource:
    driver-class-name: org.h2.Driver  # Database를 H2로 사용하겠다.
    # url: jdbc:h2:~/food-pos  # H2 접속 정보 (embeded 모드)
    url: jdbc:h2:mem:food-pos  # H2 접속 정보 (In-Memory 모드)
    username: sa  # H2 접속 시 입력할 username 정보 (원하는 것으로 입력)
    password:  # H2 접속 시 입력할 password 정보 (원하는 것으로 입력)

● spring.h2.console : H2 Console을 열때 사용합니다.

● spring.h2.path : H2 Console 경로를 열 때 설정 해주는 경로

  - 본인이 "localhost:8080" 포트 사용 시 경로 : http://localhost:8080/h2-console

● spring.datasource : JDBC를 H2 Database에 연동해 주고, in-memory 모드 or embeded 모드로 설정 가능

  - 테스트 용도로 사용 시 In-Memory 모드 or embeded 모드, 배포를 사용 할 때 Server 모드를 이용해서 배포해야 한다.

  - 개인적으로 H2 Database는 연습용 및 개발에서 테스트 용도에 적합하다고 판단이 들어 이 프로젝트는 직접 운영하는 프로젝트가 아닌 토이 프로젝트 형식으로 진행하는 용도로 사용하기 위해 H2 Database를 골랐다. 

  - 본인이 H2가 아닌 mariaDB나 mysql 등으로 JDBC 연동 하고 싶으면 datasource에 환경 설정 해도 무방하다.

 

 

2. 화면단 보고 DB Table 설계 작업 실시

아래는 Schema 작업을 위해 DDL 생성하는 SQL문을 삽입할 것이다.

따러서, h2-console에서 각각 질의어를 넣어본다.

테스트 및 연습 용도로 할 때는 datasource의 url를 jdbc:he:mem:food-pos 로 메모리에 저장되는 모드로 사용

(1) 회원 정보 관련

회원정보 입력 화면

 

H2 DB DDL 설정

CREATE TABLE t_user COMMENT '회원'  (
  uno bigint not null auto_increment COMMENT '회원정보 인덱스',
  user_name varchar(255) COMMENT '회원이름',
  user_age bigint COMMENT '회원 나이',
  user_sex varchar(255) COMMENT '회원 성별',
  user_phone varchar(255) COMMENT '회원 연락처',
  user_number varchar(255) COMMENT '회원 주민 번호',
  user_card_password varchar(255) COMMENT '회원 카드 비밀번호',
  PRIMARY KEY (uno)
);

 

 

(2) 계좌 정보 관련

계좌 조회 화면

 

H2 DB DDL 설정

CREATE TABLE t_account COMMENT '은행계좌'  (
  ano bigint not null auto_increment COMMENT '은행 계좌 테이블 인덱스',
  uno bigint COMMENT '회원 은행 계좌 인덱스',
  user_money bigint COMMENT '회원 계좌 잔액 정보',
  PRIMARY KEY (ano)
);

 

(3) 음식 메뉴 관련

음식 메뉴 선택 화면

 

H2 DDL 설정

CREATE TABLE t_food COMMENT '음식정보'  (
  fno bigint not null auto_increment COMMENT '음식 메뉴 인덱스',
  food_menu varchar(255) COMMENT '음식 메뉴 정보',
  food_price bigint COMMENT '음식 메뉴 가격',
  VAT bigint COMMENT '음식 메뉴 부가세 (10%)',
  PRIMARY KEY (fno)
);

 

(4) 주문 정보 관련 로그(사용자용)

로그 회면

 

H2 DDL 설정

CREATE TABLE t_log COMMENT '로그 저장'  (
  lno bigint not null auto_increment COMMENT '로그 인덱스 번호',
  uno bigint COMMENT '유저 인덱스 번호',
  page_no bigint COMMENT '페이지 이벤트 번호',
  page_event_title varchar(255) COMMENT '페이지 별 이벤트 목록',
  page_event_view varchar(255) COMMENT '페이지 별 이벤트 상세',
  crt_time dateTime COMMENT '로그 생성 날짜',
  PRIMARY KEY (lno)
);

 

 

3. 샘플 DB 넣어보기

아래는 h2-console에서 schema 생성 후 넣어보자

-- 테스트용 DML 문
-- insert into t_test (test_field) values ('테스트용');

-- 회원 정보 구문 : 프론트엔드 샘플 데이터용으로 추가
insert into t_user
(user_name, user_age, user_sex, user_phone, user_number, user_card_password)
values ('Berkley', 29, '남', '01011111111', '880401', '1111');

-- 회원 은행 계좌 관련 구문
insert into t_account (uno, user_money) values (1, 100000);

-- 음식 메뉴 insert 구문
insert into t_food (food_menu, food_price, VAT) values ('장어덮밥',5000, 500);
insert into t_food (food_menu, food_price, VAT) values ('피자',10000,1000);
insert into t_food (food_menu, food_price, VAT) values ('치즈스틱',3000,300);
insert into t_food (food_menu, food_price, VAT) values ('로스트비프',15000,1500);
insert into t_food (food_menu, food_price, VAT) values ('감자튀김',4000,400);


-- 로그 insert 구문
insert into t_log 
(uno, page_no, page_event_title, page_event_view, crt_time) 
values 
(1, 1, '로그인', '로그인 진입', now());

-- 회원 정보 테스트
select * from t_user;

-- 은행 계좌 테스트
select * from t_account;

-- 음식점 테스트
select * from t_food;

-- 로그 테스트
select * from t_log;

 

 

 

4. Test용 SQL문을 이용해 Sample DDL, DML 질의어 넣기

(1) resource 디렉토리 아래 schema.sql 를 이용하여 데이터베이스 스키마 생성 (비어 있으면 에러 표시)

-- 회원 정보
DROP TABLE IF EXISTS t_user;

CREATE TABLE t_user COMMENT '회원'  (
  uno bigint not null auto_increment COMMENT '회원정보 인덱스',
  user_name varchar(255) COMMENT '회원이름',
  user_age bigint COMMENT '회원 나이',
  user_sex varchar(255) COMMENT '회원 성별',
  user_phone varchar(255) COMMENT '회원 연락처',
  user_number varchar(255) COMMENT '회원 주민 번호',
  user_card_password varchar(255) COMMENT '회원 카드 비밀번호',
  PRIMARY KEY (uno)
);

-- 은행 계좌 잔액
DROP TABLE IF EXISTS t_account;

CREATE TABLE t_account COMMENT '은행계좌'  (
  uno bigint not null auto_increment COMMENT '회원 은행 계좌 인덱스',
  user_money bigint COMMENT '회원 계좌 잔액 정보',
  PRIMARY KEY (uno)
);


-- 음식 정보
DROP TABLE IF EXISTS t_food;

CREATE TABLE t_food COMMENT '음식정보'  (
  fno bigint not null auto_increment COMMENT '음식 메뉴 인덱스',
  food_menu varchar(255) COMMENT '음식 메뉴 정보',
  food_price bigint COMMENT '음식 메뉴 가격',
  VAT bigint COMMENT '음식 메뉴 부가세 (10%)',
  PRIMARY KEY (fno)
);

-- 이벤트 관련 로그 저장(사용자용)
DROP TABLE IF EXISTS t_log;

CREATE TABLE t_log COMMENT '로그 저장'  (
  lno bigint not null auto_increment COMMENT '로그 인덱스 번호',
  uno bigint COMMENT '유저 인덱스 번호',
  page_no bigint COMMENT '페이지 이벤트 번호',
  page_event_title varchar(255) COMMENT '페이지 별 이벤트 목록',
  page_event_view varchar(255) COMMENT '페이지 별 이벤트 상세',
  crt_time dateTime COMMENT '로그 생성 날짜',
  PRIMARY KEY (lno)
);

 

(2) resource 디렉토리 아래 data.sql 를 이용하여 샘플 데이터 베이스 생성 (비어 있으면 에러 표시)

-- 회원 정보 구문 : 프론트엔드 샘플 데이터용으로 추가
insert into t_user
(user_name, user_age, user_sex, user_phone, user_number, user_card_password)
values ('Berkley', 29, '남', '01011111111', '880401', '1111');

-- 회원 은행 계좌 관련 구문
insert into t_account (user_money) values (100000);

-- 음식 메뉴 insert 구문
insert into t_food (food_menu, food_price, VAT) values ('장어덮밥',5000, 500);
insert into t_food (food_menu, food_price, VAT) values ('피자',10000,1000);
insert into t_food (food_menu, food_price, VAT) values ('치즈스틱',3000,300);
insert into t_food (food_menu, food_price, VAT) values ('로스트비프',15000,1500);
insert into t_food (food_menu, food_price, VAT) values ('감자튀김',4000,400);


-- 로그 insert 구문
insert into t_log 
(uno, page_no, page_event_title, page_event_view, crt_time) 
values 
(1, 1, '로그인', '로그인 진입', now());

 

위와 같이 Back-End 서버 로드시 질의어 적용 바로 가능합니다.

현재는 연습용으로 쓰는 용도로 아래와 같이 작업하였습니다.

 

 

5. 마치며

이번 시간에는 Database Schema 설정과 Data 샘플 넣는 것 까지 진행 해 보았습니다.

 

다음으로, SQL문으로 이용한 조작 질의어랑 Mapper에 넣는것 까지 진행하도록 하겠습니다.

728x90
반응형
LIST