결제 기능 구현 1 : ERD - jsp, 오라클, mybatis
결제 기능을 구현하기 위해 포트원(구 아임포트)가 제공하는 api 를 사용하였다.
단계를 나누었는데,
1단계 : 사전검증 전 단계
2단계 : 사전검증
3단계 : 사후검증
4단계 : 웹훅
현재 상태에서 실무 경험이 하나도 없는 상태이기 때문에, 실무에서 하는 방식이 어떤지는 잘 모르는 상태로, 포트원이 안내하는 걸 최대한 이해하려고 노력하면서 구현하려고 노력하였다.
따라서, 혹시 제 포스팅 보시는 분들 중에 실무에서 어떻게 하는지에 대해 궁금하셔서 보시려는 분들은 돌아가주세요..
저도 몰라요..
최대한 노력한거니까, 혹시라도 포트폴리오 만드시려는 분들은 조금이라도 도움이 될 거 같기도 해요
실무하시는 분들이 혹시라도 읽으신다면, 조언 부탁드립니다.
--------------------------------------------------------------------------------------------
들어가기 전에, ERD 부터 정리해볼 것이다.
추가된 테이블은 3개이다.
PRODUCTS 라는 테이블, ORDERS 라는 테이블, PAYMENTS 라는 테이블이다.
1. PRODUCTS 테이블
PRODUCTS 라는 테이블은 이름에서도 알 수 있듯이 상품에 대한 정보를 담는 테이블이다.
총 4개의 컬럼으로 이루어져 있는데,
id : 기본키
product_name : 상품의 이름
stock : 상품의 수량
amount : 상품의 가격
이렇게 4개의 컬럼으로 이루어져있다.
2. ORDERS 테이블
ORDERS 테이블은 아래와 같이 생겼다.
id : 기본키
member_id : MEMBER 테이블의 id 컬럼을 참조하는 외래키로 설정했으며, 상품을 주문한 사용자가 누군지를 나타낸다.
한명의 사용자가 여러 주문을 할 수 있기 때문에, 1 은 MEMBER 테이블 id 컬럼이고, 다 는 ORDERS 테이블의 member_id 컬럼값이다.
또한, 사용자는 회원가입 한 후 주문을 안할수도 있지만, 주문 행을 삽입되기 위해서는 회원가입을 해서 MEMBER 테이블에 행이 들어가야 하기 때문에, ORDERS 쪽이 OPTIONAL, MEMBER 쪽이 MANDATORY 이다.
product_id : PRODUCTS 테이블의 id 컬럼을 참조하는 외래키로 설정했으며, 해당 주문건이 어떤 상품을 주문했는지를 나타낸다.
merchant_uid : 포트원과 통신할 때에, 내 애플리케이션 쪽에서 설정한 주문마다 부여한 고유한 키 라고 생각하면 된다. 당연히 이해안되지. 쭉 보면 이해될거임.
amount : 해당 주문건이 결제할 총 금액
status : 이게 주문 테이블의 핵심이라고 볼 수 있다. 뭐냐면, 주문의 상태를 표시하는 컬럼이다. 결제 전인지, 결제가 됬는지, 배송중인지 등에 대한 데이터를 담고 있는 컬럼이다.
fail_reason : 주문이 도중에 실패한 경우 왜 실패했는지에 대한 정보를 담고있는 컬럼이다.
created : 주문이 생성된 시점
buyer_ ~ : 이것들은 구매한 사람에 대한 정보이다. 어차피 회원만 구매할 수 있다면, member_id 만 알고 있으면 될텐데 왜 굳이 buyer 에 대한 데이터를 담고 있을까?
인터넷에서 쇼핑을 하다보면, 회원정보에 담고 있는 주소가 아닌 다른 곳으로 배송을 받고 싶은 경우가 있을 수 있다.
예를 들어, 설날에 곶감을 샀다고 해보자. 이건 회원정보에 들어가 있는 우리집이 아니라, 할머니집으로 보내야 하잖아.
그래서, 주문을 할 때에, 배송지 정보를 변경할 수 있도록 해두었는데, 그 정보가 이곳에 담기는 것이다.
3. PAYMENTS 테이블
PAYMENTS 테이블은 어떤 정보를 담고 있는 테이블이냐면, 결제가 되면, 포트원(아임포트) 로부터 결제한 건에 대한 데이터가 정말 많이 넘어오는데, 그 모든 데이터를 담는 테이블이다.
이렇게 엄청나게 많은 데이터를 가지고 어떤 일들을 해나가지에 대해 실무경험이 없기 때문에, 정규화를 어떻게 할지 감이 안잡혔다.
카테고리화 시킬 수는 있었는데, 자주 조회되는 데이터가 무엇인지 모르는 상태에서 정규화를 시키는 건 오히려 애플리케이션의 관리를 어렵게만 만들뿐이라는 판단이 들어서, 포트원으로부터 받아온 데이터를 모두 한 테이블에 두었다.
ERD 끝.
다음 포스팅은 "사전검증 전 단계" 에 대해서 정리해볼것이다.