[Spring boot] Bank App - 모델링

2025. 1. 14. 23:26·Spring
728x90

모델링(Modeling) 개념 정리

💡 모델링이란?

모델링은 현실 세계의 시스템이나 프로세스를 컴퓨터 시스템 내에서 표현하기 위해 추상화하는 과정입니다.

  • 중요 정보를 식별하고, 정보 간의 관계를 정의하며 데이터 구조와 알고리즘을 설계합니다.
  • 특히, 데이터베이스 모델링은 데이터 구조 설계에 중점을 둡니다.

데이터베이스와 Java 간 데이터 타입 차이

  • 데이터베이스와 Java는 사용하는 데이터 타입이 다릅니다.
  • 데이터베이스 데이터를 Java 객체로 표현하기 위해 모델링 과정이 필요합니다.

ORM (Object-Relational Mapping)

개념

ORM은 객체 지향 언어의 객체와 관계형 데이터베이스 테이블을 매핑하는 기법입니다.

주요 특징

  1. 객체의 속성과 메서드를 통해 데이터 조작 가능.
  2. SQL 쿼리 작성 최소화.
  3. 데이터베이스 구조보다 비즈니스 로직에 집중 가능.
  4. 코드의 가독성 및 유지보수성 향상.

대표 ORM 프레임워크

  • Java: Hibernate, JPA (Java Persistence API)
  • Python: SQLAlchemy
  • Ruby: ActiveRecord

TRM (Table-Relational Mapping)

개념

TRM은 테이블 간의 관계를 설계하고 정의하는 과정으로, 데이터베이스 설계에서 매우 중요합니다.

관계의 유형

  1. 일대일 (One-to-One): 한 행이 다른 테이블의 한 행과 연결.
  2. 일대다 (One-to-Many): 한 행이 여러 행과 연결.
  3. 다대다 (Many-to-Many): 여러 행이 여러 행과 연결되며, 중간 테이블로 구현.

주의: TRM은 널리 사용되는 용어는 아니며, 일반적으로 데이터베이스 설계와 관계형 데이터 모델링으로 표현됩니다.

 


테이블 설계

데이터베이스 생성
create database mybank;
use mybank;

테이블 구조

  • 사용자 테이블
create table user_tb(
    id int auto_increment primary key, 
    username varchar(50) not null unique, 
    password varchar(100) not null, 
    fullname varchar(50) not null,
    created_at timestamp not null default now()
);

 

  • 계좌 정보 테이블
create table user_tb(
    id int auto_increment primary key, 
    username varchar(50) not null unique, 
    password varchar(100) not null, 
    fullname varchar(50) not null,
    created_at timestamp not null default now()
);

 

  • 거래 내역 테이블
create table history_tb(
    id int auto_increment primary key comment '거래내역 id',
    amount bigint not null comment '거래금액', 
    w_account_id int comment '출금 계좌 ID',
    d_account_id int comment '입금 계좌 ID',
    w_balance bigint comment '출금 요청 후 계좌 잔액',
    d_balance bigint comment '입금 요청 후 계좌 잔액',
    created_at timestamp not null default now()
);

샘플 데이터 입력

1. 사용자 데이터

insert into user_tb(username, password, fullname, created_at)
values('길동', '1234', '고', now());

insert into user_tb(username, password, fullname, created_at)
values('둘리', '1234', '애기공룡', now());

insert into user_tb(username, password, fullname, created_at)
values('마이', '1234', '콜', now());

2. 계좌 데이터

insert into account_tb(number, password, balance, user_id, created_at)
values('1111', '1234', 1300, 1, now());

insert into account_tb(number, password, balance, user_id, created_at)
values('2222', '1234', 1100, 2, now());

insert into account_tb(number, password, balance, user_id, created_at)
values('3333', '1234', 0, 3, now());

3. 거래 내역

 
  • 이체
insert into history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at)
values(100, 1200, 1200, 1, 2, now());
  • 출금
insert into history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at)
values(100, 1100, null, 1, null, now());
  • 입금
insert into history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at)
values(500, null, 1600, null, 1, now());

 

 

4. 거래 내역 등록 예시

-- 거래 내역 등록 연습 
-- 가상 현재 잔액 

-- 1. 이체 내역 기록 
-- 1111 번 계좌에서 2222번 계좌로 100원 이체한다. 
insert into history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at)
values(100, 1200, 1200, 1, 2, now());    


-- 2 ATM 기기에서 출금 
-- 1111번 계좌에 현재 잔액 1200인 상태 이다. 
-- 1111 번 계좌에서 100만원 출금하는 거래내역을 만들어 보세요 
insert into history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at)
values(100, 1100, null, 1, null, now());    


-- 3. ATM 기기에서 입금 거래 내역을 만들어 보자. 
-- 1111 현재 계좌 잔액은 1100원 이다. 
-- 1111 계좌에 500원만 입금하는 거래내역을 만들어 보세요 
insert into history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at)
values(500, null, 1600, null, 1, now());    


select * from history_tb;
select * from account_tb;

결론

  1. 모델링: 현실 세계의 시스템을 컴퓨터에서 표현하기 위한 핵심 설계 과정.
  2. ORM: 객체와 테이블 간의 매핑을 통해 코드 품질과 개발 생산성 향상.
  3. 테이블 설계: 데이터의 구조와 흐름을 결정하여 데이터베이스와 애플리케이션 간 상호작용을 효율적으로 관리.

'Spring' 카테고리의 다른 글

[Spring boot] Bank App - 화면 구현(레이아웃 분리)  (0) 2025.01.15
[Spring boot] Bank App - 화면 구현(템플릿 가져오기)  (0) 2025.01.15
[Spring boot] Bank App - 코딩 컨벤션  (0) 2025.01.14
[Spring boot] Bank App - 패키지 설정  (0) 2025.01.14
[Spring boot] Bank App - 디자인 시안 확인  (0) 2025.01.14
'Spring' 카테고리의 다른 글
  • [Spring boot] Bank App - 화면 구현(레이아웃 분리)
  • [Spring boot] Bank App - 화면 구현(템플릿 가져오기)
  • [Spring boot] Bank App - 코딩 컨벤션
  • [Spring boot] Bank App - 패키지 설정
공돌이 출신 개발자
공돌이 출신 개발자
공돌이 출신 개발자입니다
  • 공돌이 출신 개발자
    공돌이 출신 개발자
    공돌이 출신 개발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • Database (0)
        • SQL (0)
        • 1일 1쿼리 (9)
      • Flutter (40)
        • Dart 언어 (18)
        • App (22)
      • Git (0)
      • Http 기초 지식 (14)
      • HTML5 & CSS3 (0)
      • Java (33)
      • JSP (0)
      • JavaScript (0)
      • Linux (0)
      • MSA (0)
      • Project (0)
      • React (0)
      • Spring (19)
      • 설치 메뉴얼 (1)
      • [Flutter] 프로젝트 (눈길) (8)
        • 작업일지 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    Java
    JAVA 기초
    블로그 만들기
    프로그래밍
    안드로이드
    안드로이드 앱 개발
    객체지향
    Android
    코딩
    SQL
    flutter
    로그인
    android studio
    클래스
    객체
    앱 개발
    1일1쿼리
    HTTP
    공부
    프로젝트
    데이터
    개발
    메서드
    spring boot
    dart
    SQLD
    앱개발
    jsp
    회원가입
    플러터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
공돌이 출신 개발자
[Spring boot] Bank App - 모델링
상단으로

티스토리툴바