[프로젝트] 고객 및 상품 관리 시스템

정예진·2026년 4월 24일

프로젝트

목록 보기
2/8

2026.04.24

도메인별로 역할을 나눠서 진행하기로 결정하고 각자 개발을 하기에 앞서서 필요한 프로젝트 구조를 먼저 잡았다.
각각 맡은 도메인의 엔티티를 먼저 설계하기!
나는 주문담당이라 엔티티가 두개다...

@Getter
@Entity
@Table(name = "orders")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Order extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true, length = 50)
    private String orderNumber;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "customer_id", nullable = false)
    private Customer customer;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "admin_id")
    private Admin admin;

    @Column(nullable = false)
    private int totalPrice;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private OrderStatus status;

    @Column(columnDefinition = "TEXT")
    private String cancelReason;

    public Order(String orderNumber, Customer customer, Admin admin, int totalPrice, OrderStatus status) {
        this.orderNumber = orderNumber;
        this.customer = customer;
        this.admin = admin;
        this.totalPrice = totalPrice;
        this.status = status;
    }
}
@Getter
@Entity
@Table(name = "order_items")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class OrderItem {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "order_id", nullable = false)
    private Order order;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "product_id")
    private Product product;

    @Column(nullable = false, length = 255)
    private String productName;

    @Column(nullable = false)
    private int productPrice;

    @Column(nullable = false)
    private int quantity;

    public OrderItem(Order order, Product product, String productName, int productPrice, int quantity) {
        this.order = order;
        this.product = product;
        this.productName = productName;
        this.productPrice = productPrice;
        this.quantity = quantity;
    }
}

그리고 주문 상태까지!

public enum OrderStatus {
    PREPARING,
    SHIPPING,
    DELIVERED,
    CANCELLED
}

얘는 이넘으로 사용!

그리고 기본적인 3계층 구조를 잡고 각자 개발을 진행 중이었는데..
문제가 생김.
주문을 할려면 어떤 상품을 주문하는지 누가 주문을 하는지 고객의 정보가 필요했던 것...
그래서 각각의 레포지토리가 필요한데 여기까지 생각을 못해서,,, 멘붕왔다.

해결방법으로는 팀원들 각자 3계층까지 만들고 그걸 푸쉬한 다음 메인브랜치로 머지해서 다시 풀로 내려받는게 제일 깔끔할것 같아서 그렇게 진행해야겠당...

0개의 댓글