728x90
모델링(Modeling) 개념 정리
💡 모델링이란?
모델링은 현실 세계의 시스템이나 프로세스를 컴퓨터 시스템 내에서 표현하기 위해 추상화하는 과정입니다.
- 중요 정보를 식별하고, 정보 간의 관계를 정의하며 데이터 구조와 알고리즘을 설계합니다.
- 특히, 데이터베이스 모델링은 데이터 구조 설계에 중점을 둡니다.
데이터베이스와 Java 간 데이터 타입 차이
- 데이터베이스와 Java는 사용하는 데이터 타입이 다릅니다.
- 데이터베이스 데이터를 Java 객체로 표현하기 위해 모델링 과정이 필요합니다.
ORM (Object-Relational Mapping)
개념
ORM은 객체 지향 언어의 객체와 관계형 데이터베이스 테이블을 매핑하는 기법입니다.
주요 특징
- 객체의 속성과 메서드를 통해 데이터 조작 가능.
- SQL 쿼리 작성 최소화.
- 데이터베이스 구조보다 비즈니스 로직에 집중 가능.
- 코드의 가독성 및 유지보수성 향상.
대표 ORM 프레임워크
- Java: Hibernate, JPA (Java Persistence API)
- Python: SQLAlchemy
- Ruby: ActiveRecord
TRM (Table-Relational Mapping)
개념
TRM은 테이블 간의 관계를 설계하고 정의하는 과정으로, 데이터베이스 설계에서 매우 중요합니다.
관계의 유형
- 일대일 (One-to-One): 한 행이 다른 테이블의 한 행과 연결.
- 일대다 (One-to-Many): 한 행이 여러 행과 연결.
- 다대다 (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;
결론
- 모델링: 현실 세계의 시스템을 컴퓨터에서 표현하기 위한 핵심 설계 과정.
- ORM: 객체와 테이블 간의 매핑을 통해 코드 품질과 개발 생산성 향상.
- 테이블 설계: 데이터의 구조와 흐름을 결정하여 데이터베이스와 애플리케이션 간 상호작용을 효율적으로 관리.
'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 |