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

cw k님의 프로필 이미지
cw k

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

JPA 연관관계 자체의 필요성에 대한 질문입니다.

해결된 질문

작성

·

38

·

수정됨

0

영한님 강의로 많은 도움 얻은 학습자입니다.

 

최근 커뮤니티나 기술 블로그에 종종 보이는 내용 중 하나가

 

"연관관계를 맺지 않고 그냥 쓰는 것" 에 대해 어떻게 생각하시는지 궁금합니다.

 

@Entity
class Member {
     ....
     // @ManyToOne @JoinColumn("team_id")
     // private Team team;
     private Long teamId; // 이런식으로 연관관계 없이 그냥 id 값 넣어 사용
}

위와 같은 형태로 Team 객체를 연관관계로 갖고있는게 아닌 id 값 타입 그대로를 가진 형태입니다.

 

토스 개발자로 계신 제미니님도 연관관계를 잘 맺지 않으신다는 의견을 갖고 계시고,

(이유는 id 로만 맺었을 땐 그 다음 전략을 선택하기 쉽다 && 관계를 잘못되게 많이맺어놓으면 다음이 없다라고 하시더군요.)

 

신빙성 없는 블로그발 출처이긴 하지만 네이버, 카카오에서도 연관관계를 안맺고 쓴다라는 얘기가 있긴하더군요.

(https://velog.io/@ssuh0o0/BE-STUDY-%EC%97%B0%EA%B4%80%EB%A7%A4%ED%95%91%EC%9D%84-%EC%A7%80%EC%96%91%ED%95%98%EB%9D%BC)

 

당연히 답이 없는 문제이지만,

개인적인 생각으로는 현업에서 JPA 를 써본 결과 JPA 의 러닝커브 자체도 너무 높고,

이것저것 고려해야 될 것이 너무 많아진다 << 가 제 결론이긴 하거든요.

그 예로

n+1 문제부터 시작해서 양방향 연관관계일 경우 명시적으로 set, add 등을 해줘야하는 문제, 오래 전이라 정확히 기억은 나지 않지만 OneToOne 관계일때 발생했던 문제, A 테이블과 B 테이블 간 조인을 2개 컬럼으로 해야할 때 발생했던 문제, ddl-auto 실수할 여지 ... 등등

 

  1. 연관관계를 통해 객체 그래프를 쉽게 가져올 수 있다는 장점, sql 종속적이지 않은 장점

  2. 여러가지 제약사항이 많아 실수할 여지가 많다라는 단점

개인프로젝트라면 1번을 선택하겠지만 현업에서는 1 < 2 인것 같아 고민입니다.

 

강의 내에서도 그 뛰어난 배민 개발자들도 종종 실수 하신다고 하시기도 했구요.

 

배민에서는 적극적으로 활용 중인 것으로 알고 있는데,

배민을 제외한 다른 회사에서는 현업에서 어떻게 활용 중인지 또, 위 내용에 대한 의견이 어떠신지 궁금합니다.

답변 2

2

안녕하세요. cw k님, 공식 서포터즈 코즈위버입니다.

JPA는 기본적으로 연관관계를 지원하는데요, 이를 사용할지 말지는 개발상황에 따라 달라질 수 있습니다.말씀하신것처럼 MSA를 고려하여 데이터가 서로 다른위치에 저장할 경우 연관관계를 이용할 수 없고 별도의 방법을 사용해야 합니다. 반면 규모가 그리 크지 않아 데이터를 한 곳에 보관하는 경우 연관관계를 적극 이용하는 것이 편리할 수 있습니다.

 

기술은 상황에 따라 꺼내어 쓸 수 있어야 합니다. 어느 상황에나 다 쓸 수 있는 도구는 없습니다. 연관관계를 이용하는 방법을 습득한 상태에서 상황에 따라 사용하지 않는 것과 연관관계를 사용할 줄 몰라서 쓰지 않는 것은 차이가 있습니다. 그러니 학습단계에서는 연관관계 사용법에 익숙해 지는것을 추천드립니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

cw k님이 질문하신 JPA 연관관계의 사용 여부에 대한 의견은 최근 자주 논의되는 주제 중 하나입니다. 아래 유사한 질문에 대한 답변을 참고하시면 도움이 될 것 같습니다:

  1. 연관 관계에 대해서 질문 드립니다.

    • JPA를 사용해도 반드시 연관관계 매핑을 해야 하는 것은 아닙니다. 이는 각 팀의 개발 지향점이나 프로젝트의 특성에 따라 달라질 수 있습니다. 연관관계 매핑을 하지 않는 것이 복잡성을 줄이는 데 도움을 줄 수 있으며, MSA로 서비스를 나누는 경우에도 연관관계 매핑이 아닌 id를 통한 관계 맺기를 선택하게 됩니다.
  2. 의존성에 관한 질문

    • 조용호님의 발표처럼 연관관계를 객체가 아닌 id 값으로만 맺는 상황도 있는데, 이는 연관관계의 명확성 감소보다는 객체 간 느슨한 결합을 위한 선택이 될 수 있습니다. 객체 연관관계를 지양하는 이유로는 객체 그래프 탐색의 복잡성이 증가할 수 있다는 점이 있으며, 이는 프로젝트의 복잡성을 고려했을 때 중요한 요소가 될 수 있습니다.
  3. 영한님 연관관계의 주인 개념과 관련해서 질문이 있습니다!

    • 연관관계의 주인 설정은 데이터 일관성을 유지하기 위한 방법 중 하나입니다. 그러나 실제로 양방향 연관관계를 구현하더라도 JPA에서는 연관관계의 주인을 통한 데이터 관리 및 변경 적용이 중요하게 여겨집니다.

각 사례와 의견들을 종합해보면, 연관관계 매핑을 통해 얻을 수 있는 이점들도 분명히 존재하지만, 제도의 복잡성과 러닝커브를 감안하여 프로젝트 상황에 맞게 전략을 선택하는 것이 중요함을 알 수 있습니다. 현업에서도 JPA 연관관계를 사용하는 방식은 회사의 내부 정책과 엔지니어의 경험에 따라 다르게 적용될 수 있습니다.

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

cw k님의 프로필 이미지
cw k

작성한 질문수

질문하기