설계를 위한 설계 – 개발 이전, 설계의 전체 흐름을 경험하다

2025. 7. 22. 17:29·Test Code

문제 관측

기능을 개발하다 보면 이런 고민을 자주 하게 됩니다:

  • “이 흐름이 맞는 걸까?”
  • “클래스 구조는 어떻게 나누지?”
  • “요구사항이 막연해서 테스트를 어디서부터 시작할지 모르겠다…”

예전에 작성했던 글 “TDD, 어디서부터 시작해야 할까?”에서도 저는 이런 질문을 던졌습니다:

“E2E 테스트부터 시작해야 할까? 단위 테스트부터 시작해야 할까?”
“기능이 머릿속에는 있는데, 테스트나 설계로 어떻게 쪼갤 수 있지?”

결국 제가 느낀 건 하나였습니다:

기능 구현보다 먼저 "설계를 위한 설계"가 필요하다.


다양한 시도: 요구사항 명세부터 시작한 설계 실험

이번에 이커머스 서비스를 설계하며 저는 "설계 자체를 목적으로 한 설계 실험"을 해봤습니다.
그 중심에는 요구사항 정의 → 흐름 시각화 → 구조 설계 → 데이터 설계가 있었습니다.

1. 요구사항 정의서 작성

가장 먼저 기능별로 다음과 같은 포맷을 만들었습니다:

  • 유저 스토리
    사용자가 어떤 니즈를 가지고 있는지 자연어로 서술
    Ex: "사용자는 상품을 좋아요할 수 있다."
  • 기능 흐름
    • Main Flow: 정상 흐름
    • Alternate Flow: 조건 분기, 반복 요청 등
    • Exception Flow: 실패 시나리오 (→ 테스트/예외 설계에 매우 중요)\
  • 고려사항
    인증/인가, 트랜잭션, 동시성, 예외 처리 등 기능 외적인 조건

  • 요청/응답 명세
    HTTP 요청 구조 및 반환 필드 정의

작성한 주요 기능 항목은 다음과 같습니다:

  • 상품 목록 조회 / 상세 조회
  • 브랜드 조회
  • 상품 좋아요 등록 / 취소 / 조회
  • 주문 및 결제 (포인트, 재고, 외부 연동 포함)

시각화: 시퀀스 다이어그램으로 흐름 정리

요구사항 명세서를 바탕으로 기능 흐름을 시퀀스 다이어그램으로 시각화했습니다.

시퀀스 다이어그램을 통해 명확히 알 수 있었습니다:

  • 어떤 서비스/레포지토리가 호출되는지
  • 어느 단계에서 어떤 예외가 발생하는지
  • 인증/검증 → 상태 변경 → 응답 구조까지 흐름을 자연스럽게 따라갈 수 있음

예시: 상품 좋아요 등록

 


구조 설계: 클래스 다이어그램으로 책임 분리

시퀀스 다이어그램이 "행위 중심"이라면,
클래스 다이어그램은 "구조와 책임 중심"입니다.

  • 도메인 중심 구조 (Order, Product, User, Brand, Point 등)
  • Service → Repository 간 책임 분리
  • 연관관계 명확화 (예: Order → OrderItem → Product)

이 구조를 만들면서 객체 간 협력 관계를 명확히 정리할 수 있었고,
이후 테스트 코드나 실제 구현을 할 때도 훨씬 수월해질 것이라는 확신이 들었습니다.


데이터 설계: ERD로 실체화

클래스 다이어그램을 기반으로 ERD(Entity-Relationship Diagram) 까지 도출했습니다.

설계 기준

  • Long 타입 PK (auto increment)
  • ID 기반 외래키 설계 (JPA 연관관계 최소화 고려)
  • 1:N, N:M 관계 명확화
    • Order ↔ OrderItem: 1:N
    • User ↔ Product Like: N:M (→ 중간 테이블 분리)

예시 구조:


흐름 정리: 설계 → 테스트 → 구현의 전 단계 준비

이번 과정을 통해 제가 얻은 가장 큰 인사이트는 다음과 같습니다:

“요구사항을 설계하고 흐름을 시각화하는 것 자체가, 테스트와 구현을 위한 가장 강력한 준비가 될 수 있다.”

요구 → 행위 흐름 → 책임 구조 → 데이터 설계
이 흐름이 머릿속에서 정리되면, 실제 코드는 자연스럽게 따라올 수 있습니다.


회고: 설계를 위한 설계, 그 가치는 충분했다

이번 프로젝트는 아직 구현 이전입니다.
하지만 저는 테스트나 코드 이전에 ‘설계를 위한 설계’만으로도 충분히 값진 경험을 했다고 느낍니다.

  • 요구사항을 글로 풀어내면서 기능에 대한 이해가 깊어졌고
  • 시퀀스/클래스/ERD를 그리며 흐름이 머릿속에 새겨졌습니다

그리고 무엇보다 중요한 점:

좋은 테스트는 명확한 요구에서 시작되고,
좋은 구현은 선명한 구조에서 나온다.


다음 단계: 이제 테스트로 넘어간다

이제 이 설계 자료를 바탕으로 TDD 사이클을 시도해보려 합니다.
요구사항 → 시각화 → 구조화 → DB설계의 흐름을 기반으로 테스트 설계 → 실제 코드로 확장해나갈 예정입니다.

그 흐름이 끊기지 않도록,
이번 설계를 발판 삼아 더 탄탄한 구현과 테스트 루틴을 만들어가고 싶습니다.

'Test Code' 카테고리의 다른 글

E2E부터 단위 테스트까지, 나만의 TDD 루틴 만들기  (0) 2025.07.16
'Test Code' 카테고리의 다른 글
  • E2E부터 단위 테스트까지, 나만의 TDD 루틴 만들기
JoshDev
JoshDev
    • 분류 전체보기 (24)
      • Java (3)
      • Spring (9)
      • Test Code (2)
      • WIL (6)
      • Vue.js (2)
      • WEB (0)
      • DB (1)
        • MySQL (1)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.4
JoshDev
설계를 위한 설계 – 개발 이전, 설계의 전체 흐름을 경험하다
상단으로

티스토리툴바