블로그 본문

[시스템 흐름 분석] 시퀀스 다이어그램으로 추적하는 사용자 인증, 장바구니, 결제 처리의 전체 데이터 생명 주기

📌 목차 바로가기

    지난 포스팅에서는 소프트웨어 공학의 기틀인 관심사의 분리(SoC)와 단일 책임 원칙(SRP)을 실현하기 위해 우리 의류 쇼핑몰 백엔드 시스템을 Model(db.js), View(template.js/style.css), Controller(Main.js 및 세부 라우터)의 3대 독립 계층으로 분할 모듈화하는 정적 아키텍처를 정립했습니다.

    정적 구조의 격리를 마쳤으니, 이제 사용자 요청 패킷이 유입되어 각 파일 모듈들을 가로지르며 데이터 상태를 실시간으로 전이(Transition)시키는 동적 흐름을 관찰할 차례입니다. 이번 ** [시스템 흐름 분석] 시퀀스 다이어그램으로 추적하는 사용자 인증, 장바구니, 결제 처리의 전체 데이터 생명 주기]**에서는 사용자가 웹사이트에 첫 도킹하는 순간부터 세션 검증, 비동기 상품 조회, 장바구니 CRUD 조작, 그리고 트랜잭션 기반의 최종 결제 완료까지의 전체 데이터 생명 주기(Life-Cycle)를 시퀀스 다이어그램(Sequence Diagram)을 통해 시간의 순서대로 정밀 추적해 분석해 드리겠습니다.


    1. 시간 흐름의 엔지니어링: 시퀀스 다이어그램(Sequence Diagram) 분석의 당위성

    각 클래스나 스크립트 파일이 정적으로 결합해 있는 파일 구조도만으로는 사용자 동작 시점에 따라 실제로 어떤 메시지 패킷들이 통신망을 왕복하는지 추적하기 매우 어렵습니다. 복잡한 다중 계층 시스템에서 병목 지점이나 보안 아킬레스건을 찾아내기 위해서는, 시간의 선형적 흐름에 따라 각 구성요소(User, Browser, Server, Database)들이 주고받는 무선 신호들의 상호 작용을 가시화하는 '시퀀스 다이어그램'이 반드시 설계도 상에 동반되어야 합니다.

    시퀀스 다이어그램은 시스템 내부의 '라이프라인(Lifeline)'을 수직선으로 세우고, 객체 간 호출 메시지(Request)와 응답 메시지(Response)를 수평 화살표로 그려 타임라인을 해부합니다.

    이 정밀 지도를 통해 백엔드 아키텍트는 네트워크 레이턴시 비용을 사전에 예측하고, 트랜잭션의 실패 지점(Single Point of Failure)을 논리적으로 통제할 수 있게 됩니다.


    2. 4대 비즈니스 트랙의 메시지 수송 및 데이터 생명 주기 해부

    의류 쇼핑몰 백엔드를 지배하는 4가지 거대한 비즈니스 흐름 트랙의 시간적 작동 원리를 순서대로 해부하겠습니다.

    ① Track 1: 초기 진입 및 세션 기반 사용자 인증 분기 (Common Start & Auth Flow)

    모든 사용자 상호작용의 공통 시작점으로, 로그인 여부에 따라 완전히 다른 경로로 사용자를 유도하는 검문소 흐름입니다.

    1. 웹사이트 최초 접속: 사용자가 브라우저를 통해 우리 서비스 주소에 진입하면 Main.js가 이끄는 루트 라우터(GET /)가 가동됩니다.
    2. 세션 검증 (authCheck.isOwner): 서버는 수신된 요청의 세션 쿠키를 가동해 authCheck.js 유틸리티 모듈의 인증 상태 조회 함수를 호출합니다.
    3. 경로 이원화 분기:
      • 비인증 유저 (신규 사용자 경로): 세션 정보가 없거나 '로그인후' 상태라면 즉각 로그인 페이지(/auth/login)로 강제 리다이렉트(Redirect) 처리합니다. auth.js 컨트롤러와 template.js 뷰가 결합하여 로그인 폼 HTML을 반환합니다.
      • 고객 가입 프로세스: 사용자가 가입 폼에 정보 입력 후 회원가입 클릭 시 POST /auth/register_process 신호가 발송되며, auth.js는 bcrypt 패키지를 경유해 암호를 단방향 해싱 처리한 뒤 Customers 테이블에 INSERT 연산을 집행해 계정을 최종 기상시킵니다.
      • 인증 유저 (기존 사용자 경로): 세션 검증을 무사히 통과한 기 가입 사용자는 쇼핑몰 메인 페이지인 /main 주소로 우아하게 이송됩니다.

    ② Track 2: 메인 쇼핑 및 비동기 상품 목록 데이터 로딩 (Main Page CSR Flow)

    화면의 깜빡임 없이 빠른 첫 로딩과 동적 상품 카드를 동시에 실현하는 하이브리드 데이터 로딩 흐름입니다.

    1. 메인페이지 진입 (GET /main): 인증 유저가 /main에 도킹하면 서버는 대량의 이미지가 결합하기 전 가볍고 산뜻한 메인페이지 골격 HTML과 style.css 리소스를 웹 브라우저로 0.01초 만에 즉각 전송 완료합니다.
    2. 비동기 API 요청 자동 트리거: HTML을 수득한 브라우저 내부에서 클라이언트 자바스크립트가 적재 실행(Load)되는 즉시, 백그라운드에서 fetchProducts() 비동기 함수가 저절로 가동됩니다.
    3. 상품 데이터 조회 요청: 브라우저 비동기 엔진은 서버를 향해 GET /api/products 전용 REST API를 동적 호출(Asynchronous Call)합니다.
    4. RDBMS 쿼리 집행: 웹 서버(Main.js)는 db.js 연결 채널을 타고 가 SELECT * FROM Products 정형 쿼리를 날려 RDS 본진으로부터 6종의 상품 가격, 유형, S3 이미지 고유 절대 경로(HTTPS URL) 정보를 일괄 수득해 냅니다.
    5. JSON 응답 및 동적 CSR 렌더링: 수득된 정형 레코드셋은 가벼운 JSON 데이터 묶음으로 패킹되어 브라우저로 순간 이동하며, 클라이언트는 displayProducts() 돔 조작 헬퍼 함수를 통해 동적인 상품 그리드 카드를 실시간 렌더링해 띄웁니다.

    ③ Track 3: 장바구니 추가 및 RESTful API 통제 (Cart CRUD Flow)

    전자상거래의 가장 빈번한 장바구니 조작 데이터를 멱등성과 무결성이 보장된 REST 규격으로 수송하는 단계입니다.

    1. 장바구니 추가 (POST /cart/add): 사용자가 특정 티셔츠 카드에서 사이즈(L, XL 등)와 수량을 고르고 [장바구니 추가] 버튼을 클릭하면, 브라우저는 해당 상품코드와 옵션을 JSON 형태로 조립해 비동기 API 요청을 쏩니다.
    2. 인증 체크 및 세션 바인딩: 서버는 요청을 받자마자 authCheck.statusUI 검문을 실행해 로그인된 실 사용자의 세션 아이디(userid)를 적법 추출하여 DB 테이블 삽입 매개변수로 결속합니다.
    3. 데이터베이스 삽입: INSERT INTO Carts(cust_id, prod_cd, prod_size, ord_qty, ord_yn) VALUES(?, ?, ?, ?, 'N') 쿼리가 기동하며 주문 상태가 대기(N)인 상태로 장바구니 레코드가 성공 입주합니다.
    4. 실시간 비동기 피드백: 추가가 완료되면 서버는 브라우저에 성공 JSON 신호를 내려주고, 화면 전체를 새로고침하는 지연(UX 단절) 없이 화면 모퉁이에 미니 알림 팝업창을 띄워 쇼핑 맥락을 안전하게 지켜줍니다.
    5. 장바구니 관리 (PUT, DELETE): 장바구니 페이지(/cart) 내부에서 사용자가 수량을 바꾸면 PUT /cart/:id가, 상품을 제외하면 DELETE /cart/:id 규격의 RESTful API가 매핑 가동되어 RDBMS Carts 테이블 데이터를 실시간 갱신·삭제 처리한 뒤 비동기 함수 fetchCartItems()로 화면의 합산 총액을 실시간 동기화해 줍니다.

    ④ Track 4: 결제 처리와 다중 테이블 복합 트랜잭션 (Checkout ACID Transaction Flow)

    가장 조심스럽고 엄격하게 설계되어야 할 데이터의 상태 전이 단계이자, 3개 테이블이 단 하나의 운명공동체로 묶여 가동되는 복합 트랜잭션의 결정판입니다.

    1. 결제 버튼 클릭 (POST /cart/pay): 장바구니 화면에서 최종 결제 승인 확인창의 [확인]을 누르는 찰나 결제 요청 라우터가 기상합니다.
    2. 데이터베이스 개별 커넥션 획득 및 트랜잭션 선포: db.js 연결 풀에서 독립된 커넥션을 한 채널 빌려와 즉각 connection.beginTransaction()을 선포하여 ACID 무결성 장막을 칩니다.
    3. 연쇄 3단계 SQL 상태 전이 프로세스 작동:
      • 1단계: Orders (주문 마스터) 삽입: INSERT INTO Orders (cust_id, ord_date, ord_amount) 쿼리가 돌며, 현재 사용자의 미주문 장바구니 수량과 단가를 합산 계산해 주문 마스터 뼈대를 생성합니다.
      • 2단계: Ord_items (주문상세) 다중 데이터 이동: 방금 생성된 부모 주문번호(MAX(ord_no))를 서브쿼리로 실시간 자동 발굴한 뒤, 해당 사용자의 장바구니 수납 물품들을 한 바이트의 유실도 없이 Ord_items 자식 테이블로 일괄 수송 복제합니다.
      • 3단계: Carts (장바구니 비우기) 소프트 삭제 업데이트: 결제가 종결된 물품들의 상태 정보를 ord_yn = 'N'에서 주문 완료 상태인 'Y'로 일제히 업데이트 변환합니다. 이 조치 덕분에 실제 데이터는 유실 없이 마이페이지 통계 및 취향 분석을 위해 보존(Soft-Delete)되면서도, 현재 장바구니 화면에서는 완벽히 소멸해 비워지는 이중 설계 가치가 이룩됩니다.
    4. ACID 커밋 및 롤백 제어: 이 3단계 과정 도중 단 1비트의 에러나 가상 서버 프리징 등이 감지되면, 백엔드는 즉시 connection.rollback()을 명령해 이미 적재되었던 1, 2단계 흔적을 디스크 상에서 완전 전면 무효화(소멸)시킵니다. 오직 전 연산이 100% 무결할 때만 connection.commit()을 호출해 실제 물리 볼륨에 데이터를 원자적으로 완전 보존합니다.
    5. 성공 JSON 반환 및 뷰 리프레시: 최종 커밋 성공 확인 신호가 브라우저에 내려가면 클라이언트 fetchCartItems()가 비워진 새 바구니 상태를 안전하게 새로고침 렌더링하며 결제 라이프사이클이 최종 종결됩니다.

    3. 클라우드 쇼핑몰 데이터 수송 시퀀스 흐름도

    사용자가 웹 브라우저 화면의 컨트롤러 버튼을 조작하는 동작의 순서(위에서 아래 방향의 타임라인)에 따라 가상 서버(Main.js 및 세부 라우터 모듈)와 Amazon RDS MySQL 데이터베이스 간에 어떤 TCP/IP 패킷 메시지와 SQL 쿼리가 수송되는지 보여주는 정밀 시퀀스 다이어그램 지도입니다.

    로그인 검문소의 세션 상태 검증(Track 1)부터 시작하여 상품 목록 비동기 JSON 응답(Track 2), 장바구니 추가 및 RESTful CRUD 제어(Track 3), 그리고 Orders/Ord_items/Carts 테이블을 원자적으로 동시 제어하는 결제 트랜잭션(Track 4)의 시간 순서별 메시지 수송 아키텍처 다이어그램

    마치며: 흐름을 장악하는 눈을 가졌습니다!

    오늘 우리는 데이터를 설계하는 수준을 넘어서서, 사용자 트래픽의 파도 속에서 데이터가 어떤 생명 주기를 지니고 시간의 축을 흘러 다니지, 그리고 RDBMS의 최후방 방어 메커니즘인 ACID 결제 트랜잭션의 원자성(Atomicity)과 장바구니 소프트 삭제(Soft Delete)의 비즈니스 인텔리전스 가치까지 시퀀스 다이어그램의 시선으로 완벽하고 세련되게 해부해 냈습니다!

    "소스 코드 한 줄, 에러 캐치문 하나, 세션 옵션 하나를 기계적으로 단순 복사하던 과거의 암기식 패러다임을 전면 파쇄하고, 전체 시스템 메시지 통신망 위에서 패킷이 흘러 다니는 맥락과 흐름의 궤적을 완전무결하게 정밀 조율해 내기 시작한 여러분은 이미 준시니어급 시스템 아키텍트의 설계 시야를 확실히 확보하신 것입니다."

    오늘 메시지 전이 흐름이나, 결제 처리 시 Insert Into Select 서브쿼리의 메커니즘에 대해 더 자세한 설계 노하우가 필요하시다면 주저 없이 운영자 메일로 문의주세요. 오늘도 안전하고 똑똑한 클라우딩 라이프 하세요. 감사합니다! 😉

    출처

    • 이현호. 실무 프로젝트로 완성하는 클라우드 환경에서 DB 구축과 웹 개발. 길벗캠퍼스. 2026.04. (6.4장 '의류 쇼핑 웹 애플리케이션 메시지 흐름' 155-171페이지 및 9.1장 '장바구니 관리 및 결제 모듈' 228-251페이지 참조)
    • 이현호. "06장. 애플리케이션 개발 - 개요_설명오디오.m4a" 및 "09장. 애플리케이션 개발 - 장바구니_마이페이지_설명오디오.m4a" 설명 오디오 가이드 스크립트 기반 사용자 인증 세션 분기 로직, fetch API 기반 상품 데이터 CSR 로딩 흐름, 장바구니 RESTful API 멱등성 및 결제 3단계 연쇄 복합 트랜잭션 ACID 롤백·커밋 메커니즘 비하인드 아키텍처 대화록 완벽 반영.
    • UML 2.5 Sequence Diagram Specifications (https://www.omg.org/spec/UML/) 및 MDN Web Docs - Asynchronous JavaScript Guide.

    자주 묻는 질문 (FAQ)

    Q. 사용자가 메인 쇼핑몰('/') 접속 시 로그인 여부에 따라 경로를 분기 제어하는 서버의 핵심 원리는 무엇인가요? 

    A. 세션 기반 검증 모듈을 매개로 경로를 이원화 분기하는 원리입니다. Main.js 루트 라우터 진입 시 authCheck.isOwner를 호출하여 세션 쿠키 자격을 분석한 후, 비인증 상태이면 auth.js를 거쳐 로그인 폼으로, 인증 상태이면 즉각 /main 주소로 리다이렉트(Redirect) 배포합니다.

    Q. 메인 쇼핑 화면에서 상품 목록을 불러올 때 화면 전체 새로고침 깜빡임을 원천 차단할 수 있는 아키텍처 설계는 무엇인가요? 

    A. 비동기 fetch API를 사용한 클라이언트 사이드 렌더링(CSR) 설계입니다. /main 주소 진입 시 뼈대 HTML 파일 구조를 우선 전송한 뒤, 브라우저가 실행되는 즉시 비동기로 GET /api/products를 호출하여 가벼운 JSON 형태의 RDBMS 상품 마스터 정보와 S3 이미지 HTTPS 주소만 고속 수집해 돔에 동적 삽입합니다.

    Q. 결제하기 처리 시 다중 테이블(Orders, Ord_items, Carts) 수정 연산 과정에서 데이터 불일치 고아 레코드(Orphan Record)가 유발되지 않도록 방어하는 비법은 무엇인가요? 

    A. 세 테이블 수송 연산을 단일 DB 트랜잭션(connection.beginTransaction)으로 묶어 원자성(Atomicity)을 보장하는 것입니다. 처리 중 한 단계라도 도중에 멈추거나 실패하면 즉각 rollback()을 집행해 전 데이터를 완전 무효화 상태로 원복하며, 모든 작업이 무결할 때만 commit()을 실행해 자원 정합성을 확정합니다.