면접 (Java)/기술면접

[면접] 기술 면접 - Entity

hihyuk 2024. 3. 15. 22:50

JPA에서 Entity를 설계할때 주의점을 말해주세요.

  "JPA 엔티티 설계 시 주의해야 할 몇 가지 중요한 원칙들이 있습니다.

첫째, 엔티티에는 명확한 식별자를 부여해야 합니다. 모든 엔티티는 고유한 식별자를 가져야 하는데, 이는 데이터베이스 내에서 해당 엔티티를 구분하는 데 필수적인 요소입니다. 식별자는 변경되지 않는 값을 사용하는 것이 바람직합니다.

둘째, 엔티티 간의 관계는 신중하게 설계해야 합니다. 불필요한 연관 관계는 성능 저하를 초래할 수 있으므로, 실제로 필요한 관계만을 정의해야 합니다. 또한, 관계의 종류와 방향성(단방향, 양방향)을 적절하게 선택해야 합니다.

셋째, 가능한 한 지연 로딩(Lazy Loading) 전략을 사용하여 연관된 객체들을 필요할 때만 로드하도록 해야 합니다. 이는 불필요한 데이터 로딩을 방지하고 애플리케이션의 성능을 향상시킵니다.

넷째, 엔티티는 가능한 한 단순하게 유지해야 합니다. 복잡한 비즈니스 로직은 서비스 계층으로 분리하여 엔티티가 주로 데이터를 담는 용도로 사용되도록 해야 합니다.

마지막으로, 엔티티의 식별자로는 변경 가능성이 낮은 필드를 선택하는 것이 좋습니다. 예를 들어, 사용자의 이메일 주소보다는 시스템이 생성하는 고유 ID를 사용하는 것이 더 안정적입니다.

요약하자면, JPA 엔티티 설계 시 식별자 선택, 연관 관계 정의, 지연 로딩 활용, 엔티티의 단순성 유지, 안정적인 식별자 사용에 주의를 기울여야 한다는 것입니다. 이러한 원칙들을 따름으로써, 효율적이고 유지보수가 용이한 애플리케이션을 개발할 수 있습니다."

 

꼬리 질문과 답변

  • 엔티티의 식별자를 선택할 때 어떤 유형의 데이터를 선호하나요?

  "식별자를 선택할 때는 변경되지 않는, 유일한 값을 가진 데이터 유형을 선호합니다. 일반적으로 숫자형의 자동 증가 ID나 UUID와 같은 고유 식별자가 이에 해당합니다. 이러한 식별자는 엔티티의 생명주기 동안 동일하게 유지되어야 하며, 엔티티를 식별하는 데 명확성과 안정성을 제공합니다."

 

  • 연관 관계를 맺을 때 지연 로딩과 즉시 로딩 중 어떤 것을 선호하나요, 그리고 왜 그렇습니까?

  "대부분의 경우, 지연 로딩(Lazy Loading)을 선호합니다. 이는 필요하지 않은 데이터를 불러오는 것을 방지하고 성능을 최적화하기 때문입니다. 특히, 대규모 데이터를 다루는 애플리케이션에서 지연 로딩은 애플리케이션의 응답 시간을 개선하고 리소스 사용을 최적화하는 데 도움을 줍니다. 즉시 로딩(Eager Loading)은 특정 케이스에서, 예를 들어 데이터가 항상 함께 사용되는 경우에 유용할 수 있지만, 전반적으로는 성능 저하의 원인이 될 수 있습니다."

 

  • 엔티티 설계 시 단방향 연관 관계와 양방향 연관 관계 중 어떤 것을 더 선호하나요?

  "단방향 연관 관계를 기본으로 고려하는 것이 좋습니다. 단방향 연관 관계는 설계를 더 단순하게 유지하며, 양방향 연관 관계에 비해 관리 포인트가 적습니다. 양방향 연관 관계는 특정 상황에서, 예를 들어 양쪽 엔티티에서 서로를 탐색해야 할 때 유용하지만, 양쪽 엔티티 간의 동기화를 신경 써야 하고 복잡도가 증가하는 단점이 있습니다."

 

  • 엔티티에 비즈니스 로직을 포함시키는 것에 대한 당신의 견해는 무엇인가요?

  "엔티티는 가능한 한 단순하게 유지하는 것이 바람직합니다. 비즈니스 로직은 주로 서비스 계층에서 처리하는 것이 좋습니다. 엔티티는 데이터의 구조와 데이터베이스와의 상호작용을 담당하는 것에 집중해야 합니다. 이렇게 함으로써, 코드의 유지보수성이 향상되고, 계층 간의 책임이 명확히 분리됩니다."