Skip to content

본격적인 프로젝트 개발 이전 TDD를 학습하기 위한 Repository입니다.

Notifications You must be signed in to change notification settings

Nine-JH/tdd-study

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TDD 연습 Repository

  • 팀원들간 TDD 이해도를 높이기 위해 만든 연습 Repository입니다.

프로젝트 버전

  • Java 11
  • Spring Boot 2.7.14

진행

  • 해당 repository을 fork 합니다.
  • 각자 fork받은 본인의 Repository에서 TDD를 활용 해 제공된 요구사항들을 처리합니다.
  • 단, 본인의 TDD 스타일을 설명하기 위해 TDD의 Step별로 Commit을 해주시길 바랍니다.
    • 커밋은 다른 팀원들이 이해하기 쉽게 상세하게 작성합시다.
  • 메인 repository로 PR을 신청합니다.
  • 팀원들의 Commit Log를 살펴보고 의견을 나눕니다.

공통사항

엔티티

  • 모든 도메인 엔티티들은 생성 일시(createdAt)최종 수정 일시(lastModifiedAt)을 가지고 있어야 합니다.
  • lastModifiedAt을 제외하고는 모두 Not-Null 제약조건을 지켜야 합니다. (편의성을 위해 Null 제약조건은 작성하지 않았습니다.)

설정정보

  • Datasource 설정정보를 입력해야 합니다.
  • application.yaml에 각자 설정정보를 입력합시다.
  • 혹시 원격 DB (AWS의 RDS 등)을 사용한다면 gitignore을 필수적으로 합시다.

Day 1-2

패키지 구조

├── controller
│   └── UserController.java
├── domain
│   ├── User.java
│   ├── UserLevel.java
│   └── UserType.java
├── repository
│   └── UserRepository.java
└── service
    └── UserService.java

  • 모든 도메인 패키지 구조는 다음을 따릅니다. (예시 : user 도메인)
  • 각 패키지 내부의 클래스들은 예시일 뿐 얼마든지 클래스를 추가로 생성하셔도 됩니다.

유저 도메인을 완성해봅시다.

변수명 필드명 설명
id 사용자 아이디 사용자 엔티티 식별자
username 사용자 아이디 사용자 로그인 아이디
password 사용자 비밀번호 사용자 비밀번호
nickname 사용자 닉네임 사용자 닉네임
userLevel 사용자 등급 사용자 등급
type 사용자 유형 사용자 유형으로 ADMIN, USER가 존재
createdAt 생성 일시 사용자 최초 생성 일시
lastModifiedAt 최종 수정 일시 사용자 최종 수정 일시
  • 사용자는 회원가입이 가능합니다.
    • 회원가입은 아이디, 비밀번호, 비밀번호 재확인, 닉네임을 입력해야 합니다..
  • 사용자는 로그인을 할 수 있습니다.
    • 로그인은 아이디와 비밀번호를 비교합니다.
  • 사용자 별로 등급(level)이 존재합니다.
    • 초기 사용자의 레벨은 BRONZE입니다.
    • BRONZE, SILVER, GOLD가 존재하며 추후 주문 시 결제 금액 할인이 가능합니다.
    • 5번 구매를 하면 SILVER, 10번 구매를 하면 GOLD로 등급업이 됩니다.
  • 사용자 별 타입(type)이 존재합니다.
    • USER : 일반유저
    • ADMIN : 관리자


Day 3-4

상품(Product) 도메인을 완성해봅시다.

변수명 필드명 설명
id 상품 아이디 상품 엔티티 식별자
name 상품명 상품의 이름
price 상품 가격 상품의 가격
amount 상품 재고 상품의 재고
sellingStatus 상품 상태 상품의 판매 상태
createdAt 생성 일시 상품의 최초 생성 일시
lastModifiedAt 최종 수정 일시 상품의 최종 수정 일시
  • 상품명과 가격은 중복될 수 있습니다.
  • 상품에는 재고수량이 정해져 있어 모든 재고 소모 시 주문이 불가능해야 합니다.
  • 상품 판매 상태(SellingStatus)가 존재합니다.
    • SELLING : 상품을 판매하는 중이며 사용자는 상품을 주문할 수 있습니다.
    • STOP_SELLING : 상품 판매가 중지된 상태며, 사용자는 해당 상품을 주문할 수 없습니다.


Day 5-6

주문(Order) 도메인을 완성해봅시다.

변수명 필드명 설명
id 주문 아이디 주문 엔티티 식별자
userId 유저 아이디 유저 엔티티 식별자
orderProducts 주문 상품 정보 주문의 상품의 정보
price 총 주문 가격 총 주문 가격
orderStatus 주문 상태 주문 상태
createdAt 생성 일시 주문의 최초 생성 일시
lastModifiedAt 최종 수정 일시 주문의 최종 수정 일시
  • 상품들을 주문하는 기능입니다.

  • 사용자들은 로그인을 해야 주문을 할 수 있습니다.

  • 상품의 재고가 존재해야 주문을 할 수 있습니다.

  • 상품은 여러가지를 주문 할 수 있습니다. OrderProduct를 확인해주세요.

  • 최종적으로 상품의 가격을 정해야 합니다.

    • 상품의 가격은 기본적으로 주문 상품 가격 X 주문 상품 수의 합으로 이루어집니다.
    • 최종 가격에서 사용자 등급별로 할인이 이루어집니다.
      • SILVER : 5% 할인
      • GOLD : 10% 할인
  • 주문 상태를 확인할 수 있습니다.

    • INIT : 주문 생성 (주문 최초 생성 시 적용되는 상태로 가정)
    • CANCELED : 주문 취소 (사용자가 주문을 취소할 때의 상태로 가정)
      • 관리자는 CANCELED 상태에서 주문 승인을 할 수 없습니다..
      • CANCLED 에서 INIT으로 상태변경이 불가능합니다.
    • COMPLETE : 처리 완료 (관리자가 주문을 승인했을 때의 상태로 가정)
      • 사용자는 COMPLETE 상태에서 주문 취소를 할 수 없습니다.
      • COMPLETE 에서 INIT으로 상태변경이 불가능합니다.
  • 상품 총 가격은 다음 식을 만족합니다. 상품 총 가격 = (상품 가격 X 주문 수)



주문상품(OrderProduct) 도메인을 완성해봅시다.

변수명 필드명 설명
id 상품 아이디 상품 엔티티 식별자
productId 상품 아이디 상품 엔티티 식별자
orderId 주문 아이디 주문 엔티티 식별자
amount 상품 수 주문할 상품의 갯수
createdAt 생성 일시 주문의 최초 생성 일시
lastModifiedAt 최종 수정 일시 주문의 최종 수정 일시
  • 상품과 주문을 잇기 위한 중간클래스입니다. (M:M 논리적 구조를 1:M으로 분해하기 위한 클래스)
  • Order : OrderProduct 는 1:M 관계입니다.
  • Product : OrderProduct 는 1:M 관계입니다.
  • 주문한 갯수만큼 OrderProduct.amount에 추가됩니다.

About

본격적인 프로젝트 개발 이전 TDD를 학습하기 위한 Repository입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%