본문 바로가기
Spring Boot (프로젝트)

[쇼핑몰 프로젝트]PG 시스템을 공부하기 위한 쇼핑몰 토이 프로젝트 기획

by Hoozy 2023. 10. 28.

개발 동기

  • 몇 개월 전에 PG 사에 면접을 보러 갔었다. 비록 2차에서 불합격했지만, 이때 처음 들어보는 개념이라 공부하면서 관심이 생겨 PG 시스템에 대한 토이 프로젝트를 취직 후에 만들어 볼 생각이었지만, 아직 취준생으로 PG 시스템을 배울 겸 취업 준비 포트폴리오에 추가할 겸 코드 기초와 개념들을 다질 겸 시작해 보려고 한다.
  • PORTONE(전 IAMPORT) 사의 국내외 PG 사들과의 연동 서비스를 알고 이를 활용해서 PG 시스템의 전반적인 개념을 공부해 보면서 실제 쇼핑몰의 상품 선택부터 상세 페이지에서 결제 페이지까지 이어지는 실제 결제가 어떻게 이루어지는지 알고 싶어서 개발을 생각했다..
  • Kubernates를 한 번 사용해 보고 싶었지만, 어렵기도 하고 컨테이너도 적어서 프로젝트 완성 후에 기회가 되면 해보려고 한다.
    다양한 기술들을 공부하고 사용해 보며 나한테 맞는 기술을 더더욱 알 수 있게 되었으면 좋겠기에 시작하려고 함.

프로젝트 목적

  • Github의 브랜치 생성, 병합, git bash 등 github 공부
  • PG 결제 연동의 개념 및 절차를 알고 활용하는 방법
  • 결제 요청과 승인을 따로 하는 이유 이해
  • 구매자의 결제 취소 절차 이해
  • Docker의 이미지, 컨테이너 개념을 다시 익히고, 컨테이너화 개념 이해
  • 핵심 기능 프로시저와 트리거 사용하는 방법
  • ORACLE의 기초 및 활용법
  • 리액트의 기초 설정과 axios, fetch 통신 이해
  • 리액트와 스프링이 HTTP로 통신할 때 예전에는 많이 다루지 못했던 Restful API의 이해
  • AWS의 EC2를 재사용해보며 기억하고 개념 이해
  • 요즘 핫한 FIGMA를 체험하며 툴의 이해
  • 중복 로그인, 중복 결제 등 기초적인 보안에 관한 공부
  • 너무 복잡해 보이지만, 간단하게 개념만 익힌다는 느낌으로 다가가는 것으로 적당하게 갈 예정이다.
  • 쇼핑몰의 쿠폰 적용 및 취소, 이벤트 적용 개념 공부
  • 장바구니 원리 공부

프로젝트 기획

  • 피그마로 페이지를 기획 후 리액트로 프론트엔드 구현
  • 테스트 계정으로 누구나 쉽게 접근해서 테스트 가능
  • PG 사에 결제 요청을 할 때, 쿠폰, 일정 요일(금토일) 할인 이벤트를 적용하여 결제 요청
  • Spring Security 로 로그인 후 JWT, 권한을 활용한 인증 인가
  • 사이트에 접근하는 어느 사용자나 사용할 수 있게 테스트 계정을 만들어 접근성을 높임
  • 전반적인 PG 사 API와의 연동 구현

프로젝트 기능

  • 홈페이지
    • 로그인 -> Spring Security의 JWT를 활용한 인증, 인가
    • 마이페이지 -> 결제 내역, 결제 취소
    • 상품 리스트 제공, 상품 클릭 시 상품 상세 페이지로 이동
    • 물품 상세 정보는 네이버 쇼핑 API를 활용해 DB에 넣은 후 사용
  • 물품 상세페이지
    • 물품 정보, 가격, 결제하기 버튼 제공
  • 장바구니 페이지
    • 상품을 최대 6개까지 담을 수 있으며 쿠폰, 이벤트 따로 적용 가능
    • 전체 한 번에 결제 가능
  • 결제 페이지 -> PG 중개 회사 API(PORTONE API)와의 결제 시스템 연동
    1. PG 사로 결제 요청 - 구매자와 가맹점 Client
      • 결제 요청 전에 구매자의 결제 정보를 저장 -> 결제 요청 전후의 데이터가 바뀌지 않았나 확인하기 위해
      • 주문서 페이지에서 적립금이나 쿠폰이 적용된 최종 결제 금액을 서버에 저장
    2. 결제 요청에 대한 인증 - 카드사
      • 결제 요청 시 취소가 될 때
        1. 잔액 부족
        2. 정지 또는 불법 카드
    3. 결제 승인 - 가맹점 Server (카드사에 승인해달라는 요청)
      • 결제 승인 전에 위에 저장해 두었던 데이터와 비교 후 승인 요청
      • 결제 정보가 전후에 일치하는 가, 적립금 및 쿠폰을 사용할 수 있나, 적용한 최종 결제 금액까지 일치하면 요청
    4. 결제 성공 또는 실패 응답
  • 결제 완료 페이지
    • 요청이 취소 될 경우 실패 페이지
  • 결제 취소 페이지
    • 구매자가 결제를 취소할 때 페이지
  • 에러 페이지
    • 웹 사이트의 에러가 발생했을 때 페이지

프로젝트 기술 - 선택 이유

  • JDK 17
    • 현재 많은 사람이 8을 사용하고 있고, 현업에서는 업그레이드를 보통 하지 않지만, 스프링 부트의 짧은 지원으로 최신의 스프링 부트를 쓰고 싶어서 3.1.5를 선택하게 되었고, 이로 인해 17을 선택했다.
  • Spring Tool Suite 4
    • 원래 이클립스, sts3, sts4 를 사용해와서 편리하고, 그 중 STS4가 제일 편해서 선택했다.
  • Gradle 8.3
    • maven과 비교해 편리하고 좋은 빌드 툴이라 생각해서 선택했다.
    • Gradle 최신 버전으로 선택했다.
  • Spring Boot 3.1.5
    • Spring Framework 보다 편리하고, 현재 사용을 많이 하고 빌드를 JAR 파일로 쉽게할 수 있어서 선택했다.
    • 최신 버전 중에서 안정적인 버전으로 선택했다.
  • Spring Security 6.1.5
    • JWT를 활용한 유저의 인증, 인가를 공부하고 활용해보기 위해 선택했다.
    • 스프링 부트에 맞는 버전으로 선택했다.
  • Spring Data JPA
    • 현재 해외는 JPA로 많이 기울었고, 국내도 최근 JPA로 기우는 것 같았다.
    • JPA와 마이바티스를 고민했지만, 간단한 CRUD는 JPQL을 사용하고, 복잡한 쿼리는 @query 어노테이션을 사용해 native query로 사용하면 좋을 것 같아서 선택했다.
    • 스프링 부트에 맞는 버전으로 선택했다.
  • Oracle 11g
    • MySQL과 Oracle 사이에 고민을 했지만, 최근에 MySQL을 사용하여 사용한지 오래된 Oracle 사용법을 익히기 위해 선택했다.
    • 대중적이고 예전에 사용해본 11g 버전을 선택했다.
  • Docker
    • 한 대의 서버에서 여러 개의 서비스를 구독하기 좋기도 하고, 도커의 기본기를 다시 상기시키기 위해 선택했다.
  • AWS EC2
    • 클라우드 서비스 제공 사 중 제일 큰 AWS의 물리적 자원(서버, 네트워크, OS, 스토리지)을 가상화하여 제공하고 관리해주는 IaaS인 EC2를 선택했다.
    • RDS를 사용해보려다 Oracle은 프리티어에서 제외되어서 RDS를 사용하지 않기로 했다.
  • Visual Studio Code
    • 리액트 개발을 위한 툴로 선택했다.
  • PG 사 -> 토스페이먼츠
    • 토스페이먼츠가 가파른 성장세로 출시 2년만에 PG 결제액 1위를 해서 사용해보면서 PG 결제 시스템에 대한 전반적인 이해도를 높이기 위해 선택했다.

페이지 기획 - 피그마

참고 자료

https://kghworks.tistory.com/137

댓글