설계 실수) Repository는 하나의 객체만 저장하기

Jang990·2026년 2월 3일

이상함을 느낀 코드

Repositroy의 커넥션을 파라미터로 넘기는 작업을 제거하다 애매한 부분이 발견됐다.

public class OrderRepository {
	...
    public Orders save(Connection conn, Orders order) throws SQLException {
        try {
            conn.setAutoCommit(false);

            insertOrder(conn, order);
            insertOrderItems(conn, order.getOrderItems(), order.getId());
            
            conn.commit();
            return order;
        } catch (SQLException e) {
            conn.rollback();
            throw e;
        }
    }
    
    ...
}

OrderRepository에서 Order를 저장할 때 OrderItem까지 저장하는 부분이다.

Order : 언제 주문했고, 총액 얼마인지 ...
OrderItem : 어떤 Food를 주문했고, 주문 당시 가격이 얼마인지 ...


언제부터 잘못됐나

Order안에서 OrderItem을 관리하게 만드려했다.
그래서 OrderService라는 도메인 서비스 내부에서만 OrderItem을 생성하도록 설계했다.

근데 이런 애플리케이션의 로직이 Repository까지 반영되면서 잘못된 것 같다.
Repository에서 Order를 저장할 때 내부 OrderItem까지 저장하는 것이다.

Cascade 같은 것을 구현하려는 욕심이였던 것 같다.

이것을 유지하면서 커넥션을 없애자니 애매한 부분이 많았다.

결론은 Repository를 분리하는 것이다.

OrderItemRepository를 만들고 OrderRepository내에 OrderItem 관련 로직을 없애야겠다.
그게 더 자연스러운 것 같다.

profile
개발 기록 아카이브

0개의 댓글