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

Minkoo Lee님의 프로필 이미지
Minkoo Lee

작성한 질문수

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

양방향 연관관계와 연관관계의 주인 2 - 주의점, 정리

아직까지는 JPA가 어떤 장점이 있는지 모르겠네요.

작성

·

375

0

열심히 JPA강의 잘 듣고 있습니다.

DB테이블은 FK로 연결되어 양방향 1개

객체기준으론 단방향 2개, 주인 개념까지는 알겠습니다.

분명 컨트롤은 앞선 강의에서 주인에서만 수정 가능한 걸로 알고 있는데.. 갑자기 read만 된다고 했던 거에 team쪽 member객체 세팅??

영속성 컨텍스트에 없으니 객체개념에선 양쪽 다 값을 세팅해야한다는게 규칙 일관성이 없는 느낌이네요.

테이블 2개 하는데도 신경 쓸 포인트가 요런데.. 테이블 10개 조인하면 이거 생각하다가 시간을 소비할 거 같은 느낌이 드네요.

테이블 10개 조인시엔 부모, 자식 테이블 중에 FK갖고 있는 바닥자식이 주인이 될거 같은데요.

그렇다는건 2개씩 조인이 되는 양쪽 객체에 전부 세팅 해야할거같은 느낌적인 느낌..

JPA는 초짜라 제가 이해한 게 맞을까요?

지적 부탁드립니다.

 

쿼리를 작성하지 않는 부분은 큰 장점이나 쿼리작성할 많은 부분을 결국 객체에 문법을 적용하는 느낌이라 아직은 장점을 잘 모르겠네요 ㅜㅜ.. 테이블 스키마를 보고 객체설계를 해야한다라는게 공수가 더 드는게 아닌가 생각되네요.

답변 2

0

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

JPA가 모든 문제를 해결해 주지는 못합니다 🙂 말씀하신것처럼 기본적인 CRUD 쿼리를 작성할 필요가 없다는 점. 객체지향 관점으로 전체 코드를 작성한다는 점이 강점입니다. 이 객체지향 관점으로 데이터베이스를 다룬다는 일이 처음에 잘 와닿지 않을수 있습니다.

 

말씀하신 상황처럼 10개의 테이블을 조인해야 하는 상황처럼 복잡한 상황에서는 JPA를 사용하는 것이 더 번거롭게 느껴질 수 있습니다(테이블을 10개나 조인해야 하는 경우는 보통 통계 외에는 없는 것이 정상이긴 합니다, 일반적인 쿼리에서 10테이블 조인이라면 과도한 정규화를 적용한것으로 볼 수 있습니다).

 

코딩 작업 시 관점의 전환이 필요한데요, JPA에서는 한 개의 엔터티를 먼저 조회하고 필요 시 관계 엔터티를 불러와 사용한다는 접근이 필요합니다. 한방 쿼리로 필요한 값들을 불러와 DTO에 넣어놓고 사용한다라는 기존의 접근과는 달라야 합니다.

 

제가 JPA로 첫 프로젝트를 진행하며 느낀 강점은, 명확한 계획없이 일단 시작해야 하는 프로젝트에서는 JPA가 분명 강점이 있다는 점입니다. 테이블의 구조나 엔터티의 관계가 수시로 변하고 추가되고 삭제되는 상황에서 JPA는 간단한 코드 변경으로 이를 구현할 수 있었습니다.

 

또 엔터티의 최적화 및 인덱스 작업등을 뒤로 미룰수 있다는 점도 장점중 하나였습니다. 일단은 구현에만 집중하고 최적화 부분은 서비스 배포 전에 일관되게 작업할 수 있었습니다.

 

감사합니다.

Minkoo Lee님의 프로필 이미지
Minkoo Lee
질문자

답변 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. Minkoo Lee님, JPA의 장점과 더불어 테이블과 객체의 연관 관계에 대한 이해가 필요한 질문을 해주셨네요.

JPA를 사용하면서 겪는 초기 혼란은 대부분의 개발자가 경험하는 과정 중 하나입니다. 데이터베이스의 테이블 간 연관 관계와 객체 지향 프로그래밍에서의 클래스 간 관계 사이에 존재하는 패러다임의 차이로 인해 발생하는 것이 대부분입니다. 그러나 JPA의 사용 목적과 장점을 제대로 파악하고 나면, 이전의 방식과는 다른 효율성과 코드의 유지보수 측면에서 큰 이점을 갖게 됩니다.

질문하신 내용에 대해 유사한 주제로 이야기되고 있는 질문&답변을 찾아보았으며 다음 링크를 참고해 주시기 바랍니다:

  • JPA의 양방향 연관관계 이해: 여기에서는 JPA의 양방향 연관관계 개념에 대해 김영한 강사님이 답변해주시고 있습니다. 양방향 연관관계는 객체 관점에서 양쪽 클래스 모두가 서로를 참조할 수 있도록 하는 관계를 말합니다. 양방향 연관관계의 설정과 객체의 주인(Owner) 개념에 대해 자세하게 설명하고 있어 질문에 도움이 될 것입니다.

객체 지향 측면에서 봤을 때 JPA를 사용하는 이유 중 하나는 실제 객체간의 관계를 데이터베이스에 보다 자연스럽게 반영할 수 있으며, 애플리케이션의 개발과 유지관리를 편리하게 만들어주기 때문입니다. JPA는 연관 관계 매핑, 쿼리 방식의 단순화뿐만 아니라, 객체 지향적 코드로 데이터 작업을 처리할 수 있게 함으로써 개발자로 하여금 비즈니스 로직에 더 집중하게 만듭니다.

JPA 학습 초기에는 쿼리 대신 객체와 그 관계에 대해 생각하면서 설계하는 것이 부담스러울 수 있지만, JPA를 사용함으로써 얻을 수 있는 이점과 효율성은 학습 과정에서 점차 명확해질 것입니다.

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

Minkoo Lee님의 프로필 이미지
Minkoo Lee
질문자

자바의 객체스타일로 DB 구분없이 테이블을 컨트롤 하고 싶다라는 개념은 알겠습니다. 그래서 궁금해서 강의듣고 있습니다. 계속 실무에서 어떤장점이 있을까라는 기준에서 강의계속 듣고 있습니다.

Minkoo Lee님의 프로필 이미지
Minkoo Lee

작성한 질문수

질문하기