인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

이승혁님의 프로필 이미지

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

event, study 참조

작성

·

86

·

수정됨

0

강의 잘 듣고 있습니다!

 

현재 Event에서 다대일로 study를 단방향으로 참조하고있는데 스터디 모집시에 event쪽이 삭제되지 않아 버그가 생깁니다. 해결법으로는 2가지 생각해봤는데요.

  1. 양방향관계로 변경 후 Cascade사용

  2. 단방향으로 유지하지만 스터디종료 메서드에서 event를 수동으로 remove처리

1번 방법으로는 엔티티 설계 구조가 깨지니까 2번방법이 나으려나요. 고민이됩니다. 이런 참조 문제가 더 생길것을 방지해 양방향 관계로가는게 더 유연할지가 고민입니다.

 

아니면 초기설계목표상 모임이 하나라도 존재하면 스터디가 삭제되면안되는것인가요?

답변 2

0

백기선님의 프로필 이미지
백기선
지식공유자

한 스터디에 여러 모임이 만들어 질 수 있고, 스터디를 삭제 하려면 스터디와 연관 되어 있는 모임을 포함해서 모든 엔티티를 먼저 삭제를 해야겠죠. 안그러면 참조 무결성이 깨질테니까요.

그런데, 처음 말씀하신, "스터디 모집시에 event쪽이 삭제되지 않아 버그가 생긴다"는 부분을 다시 설명해 주시겠어요? 스터디 모집이라는게 어떤 건지 왜 이벤트가 삭제되야 하는지, 이해가 잘 안됩니다. 혹시 스터디 "모집" 이 아니라 "삭제"를 말씀하시는건가요?

저한테는 스터디 종료, 모집, 삭제 전부 다른 뜻으로 읽히는데, 혹시 삭제를 뜻하신 거라면 연관 관계만 가지고 해결하려면 스터디가 관계를 관리하는 쪽으로 만들어서 스터디가 삭제될 때 모든 연관 데이터가 삭제 되도록 만들 수 있지만, 서비스 계층에서 코드로 처리하는 것을 추천드리고 싶네요. JPA에 의존해서 삭제 로직을 처리하는 건 다소 리스크도 있고 JPA의 복잡한 로직과 연관 관계를 유지해야 한다는게 단점이라서요. 스터디 로직으로 삭제를 처리하면 연관 관계는 얼마든지 필요에 따라 바꿀 수 있으니 저라면 그런 선택을 하겠습니다.

이승혁님의 프로필 이미지
이승혁
질문자

답변 감사합니다 질문이 좀 어눌했네요 스터디안에 모임이 만들어져있을 경우에 스터디가 삭제되지 않는 문제를 뜻한것이었습니다. study테이블속 데이터를 삭제할 때 event 데이터가 삭제되지 않기때문이죠

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 이승혁님.

JPA를 사용하면서 다대일 혹은 단방향 관계에서 발생할 수 있는 문제에 대해 깊이 있는 질문을 주셨네요. 양방향 관계와 단방향 관계 각각의 장단점을 이해하고, 사용 시 적절한 전략을 선택하는 것이 중요한데요, 이와 관련된 기존 토론과 해결 방법을 참고하여 도움이 될 만한 URL을 추천드립니다.

  1. 단방향 및 양방향 관계의 선택 기준

    • JPA 연관관계에 대해서 질문드립니다
      • 이 게시물에서는 양방향과 단방향 관계의 사용 시점을 논의합니다. 단방향 관계를 사용할 때의 상황과 양방향 관계의 필요성을 이해하는 데 도움이 될 것입니다.
  2. Cascade 옵션과 삭제 전략

JPA에서 단방향, 양방향 관계 설정 및 Cascade 사용은 각기 다른 장단점을 가지고 있습니다. 양방향 관계의 경우 객체지향적 설계와 일관성을 보장하지만, 복잡성이 증가할 수 있습니다. 단방향 관계는 구조가 단순해지지만, 데이터 일관성을 유지하기 위해 수작업이 더 필요할 수 있습니다.

토론하신 방법 중 어느 것이 엔티티 설계에 더 좋은지는 상황에 따라 다르며, 프로젝트의 요구 사항에 따라 최적의 선택이 달라질 수 있습니다. 두 가지 방법 모두 충분히 가능하며, 데이터 일관성과 유지보수성을 함께 고려하는 것이 중요합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.