Gaboja 쇼핑몰 프로젝트를 진행하면서,
User 가 생성되면서 Cart 가 동시에 생성하거나 삭제되도록 하고 싶었다.
이를 JPA 연관관계를 활용해서 구현해보기로 하였다.
기존 네이버 소셜로그인을 구현해 놓은 코드에, 로직을 추가하는 방식으로 구현했다.
JPA를 좀 더 찾아보니, 각각 객체를 생성해주고, 이를 매핑해주면 되었다.
Cart가 User의 id를 통해서 생성하도록 구현해 놓았기에, 순서를
User 생성 -> User 저장 -> 저장된 User의 Id를 통해 Cart 생성 -> Cart 저장 -> 매핑 의 순서로 정하였다.
구현은 완료했고, 이후에 메소드 분리가 필요해 보인다.
User 클래스
Cart 클래스
책으로만 보고 이해했던 연관관계를 직접 구현하면서 한층 더 jpa 연관관계에 대해 잘 알게 되었다.
처음 구현할 때 User 에 orphanremoval 과 cascade 속성을 정해주지않고, Cart에 정해줘서 많이 헤맸는데, 제대로 이해해서 잘못된 지식을 바로잡게 된 계기가 되었던 것 같다.
또한 이번에도 설계에 대한 아쉬움이 드러났다. 다른때보다 설계에 좀 더 집중을 하고 진행을 했는데도, 여기서도 아쉬운 점이 드러났다. Cart에 대한 연관관계 매핑을 해줌에 따라 cart의 생성과 삭제를 api 화 할 필요가 없어졌다. 현업에서는 이런 부분까지 디테일하게 설계를 할텐데, 뭔가 아쉬움이 생겼다.
지금 드는 의문은 이렇게 구현한 코드가 과연 DDD적으로 옳은 코드일까에 대한 고민이다. User와 Cart 가 다른 어그리거트라고 경계짓고 구현을 했는데, 현재 User의 서비스에서 Cart의 어그리거트에 관여하고 있기 때문이다. 또한 이후에 구현할 Order 나, Product에 대한 연관관계도 생겨날텐데, 이렇게 되면 Cart를 여기저기서 관여하게 될거같아서 걱정이 된다.
DDD 책에 필요한 부분을 좀 더 자세히 보고 구현에 임하고, 필요한 리팩토링을 진행해야겠다.