- 쇼핑몰 프로젝트에서는 Spring Data JPA를 사용하기 때문에 ORM, JPA에 대한 개념과 활용법을 먼저 공부해야 한다.
ORM (Object Relational Mapping)
- 애플리케이션의 class 파일과 RDB(관계형 DB)의 테이블을 매핑한다는 뜻이며, 기술적으로는 애플리케이션의 객체를 RDB 테이블에 자동적으로 영속화 해주는 것이다.
- 장점
- SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 객체 모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있다.
- Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높인다.
- 객체지향적인 코드 작성이 가능하다. 오직 객체지향적 접근만 고려하면 되기 때문에 생산성 증가
- 매핑하는 정보가 class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고, DB가 바뀌어도 SQL문을 일일이 고치지 않아도 되어서 유지보수 및 리팩토링에 유리하다.
- 단점
- 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다.
- 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 native Query 문을 써야할 수도 있다.
- 학습비용이 비싸다.
JPA (Java Persistence API)
- Java 진영에서 ORM 기술 표준으로 사용하는 인터페이스 모음이다.
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
- 인터페이스이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현한다.
- JPA는 반복적인 CRUD SQL을 간편하게 처리해준다. JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 SQL이 실행될지 생각만하면 되어서 예측도 쉽게 할 수 있다.
- 또한, JPA는 native SQL이란 기능을 제공해주는데, 이는 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용할 수 있다.
- 자바 객체간의 상속 관계를 JPA에서는 객체 연관관계를 테이블 연관관계로 바꿔주어 객체 중심으로 개발을 가능하게 해준다. 이에 따라 생산성이 좋아져 유지보수도 수월해지는 장점이 있다.
ERD 기획
- ERD (Entity Relationship Diagram)
- 개체-관계 모델로, 테이블간의 관계를 설명해주는 다이어그램이라고 볼 수 있고, 이를 통해 프로젝트에서 사용되는 DB의 구조를 한눈에 파악할 수 있다.
- Entity
- 테이블을 구성하는 객체 구성 성분이다.
- 예를 들어, User(유저)의 엔티티는 이름, 아이디, 비밀번호, 이메일 등의 Attributes(속성)들로 구성된 Entity이다.
- 객체 관계
- One to One
- 1 대 1 관계로, 객체 간의 관계가 객체 한개당 객체 한개씩 매핑된다는 뜻이다.
- One to Many
- 1 대 다 관계로, 객체 한개당 다른 객체 여러개와 매핑된다는 뜻이다.
- Many to Many
- 다 대 다 관계로, 객체 여러개와 다른 객체 여러개가 매핑된다는 뜻이다.
- One to One
- 식별 관계
- 식별 관계는 서로의 관계를 맺을 때 외래키가 PK가 되는 관계로, 외래키가 유일해야 하는 관계이다.
쇼핑몰 ERD
- 회원
- 회원은 이메일과 비밀번호를 무조건 가져야 한다.
- 보통 웹 사이트라면 회원과 권한이 다 대 다 관계로 중간 테이블을 mapper로 만들어 관리하는게 보통이지만, 쇼핑몰 프로젝트는 회원당 권한이 하나만 가질 수 있게 기획해서 권한을 회원 테이블에 넣었다.
- 회원은 test 계정이 아니면 쿠폰을 하루에 3개만 쓸 수 있다. (매일 00시 3개로 초기화)
- 상품
- 상품당 이미지는 고유하기 때문에 식별 관계로 설정했다.
- 상품은 하나의 이미지와 카테고리가 있어야 한다.
- 상품은 재고가 0이되면 구매를 못하도록 설정했다. (default 값으로는 30개로 했다.)
- 장바구니
- 장바구니는 회원만 가질수 있고, 장바구니에는 상품이 한개 씩 들어가며 상품 한가지를 여러개 넣을 수 있다.
- 장바구니 내에 있는 여러가지 상품을 결제하면 하나하나씩 결제내역에 들어간다.
- 상품이미지
- 상품당 고유한 이미지 링크 테이블이다.
- 결제내역
- 결제내역은 회원이 상품을 산 내역 테이블이다.
- 회원과 상품은 다 대 다 관계로 중간에 mapper 테이블인 결제내역을 만들었지만, 중간테이블에 중요한 정보를 담아야해서 결제아이디는 결제내역을 조회하는 역할일뿐 중요한 정보는 담지 않았다.
- 카테고리
- 상품의 제일 작은(세세한) 카테고리 테이블이다.
- 취소여부
- 결제의 취소여부를 나타내기 위해 설정한 테이블이다.
- 새로운 토큰
- 회원이 로그인하고 액세스 토큰이 만료되었을 때 새로운 토큰을 가지고 액세스 토큰과 새로운 토큰을 다시 발급받기 위한 토큰 테이블이다.
- 가져올 때에는 Security 의 Authentication에 있는 회원의 id로 찾아온다.
- 새로운 토큰의 만료시간이 초과하면 새로운 토큰도 만료되어 로그인을 새로해야 한다.
참고 자료
'Spring Boot (프로젝트)' 카테고리의 다른 글
[쇼핑몰 프로젝트] 4. Spring Boot, 엔티티 기본 설정 (0) | 2023.11.06 |
---|---|
[쇼핑몰 프로젝트] 2. 리액트 화면 구현 (0) | 2023.10.29 |
[쇼핑몰 프로젝트] 1. 페이지 기획(feat. 피그마) (0) | 2023.10.28 |
[쇼핑몰 프로젝트]PG 시스템을 공부하기 위한 쇼핑몰 토이 프로젝트 기획 (0) | 2023.10.28 |
[스프링 부트] 프로젝트 6 S3 백엔드 구현 (0) | 2023.04.17 |
댓글