작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
337
0
안녕하세요 영한님! 질문이있어서 찾아왔습니다.
현재 프로젝트를 진행중인데
한줄로 요약하면 기준 영양 성분에 맞추어 부족,과잉 영양분을 판별해 주는 프로젝트입니다.
저는 기준 영양성분을 ENUM 타입으로 관리하자는 입장이였습니다.
그 이유는
1) 저희 서비스는 적정영양성분 부족과잉을 판별 하는데 매번 DB를 조회해서 findProperAmountByName("단백질") 을 매번 같은 적정량을 조회하는 게 부담스럽다.
=> Enum 타입으로 탄수화물의 적정량을 넣어두면 훨씬 편하게 조회할 수 있을 것이다.
2) findProperAmountByName("단백질") 은 현재 코드만으로는 DB에 어떤 영양소가 있는지도 모르고 확인하기 어렵다. ENUM 타입으로 묶으면 CARBON_HYDRATE,PROTEIN 등등 이렇게 묶어서 편하게 관리할 수 있다.
이렇게 생각하고 또 개발을 진행중에 있었습니다.
그러던 와중에 "영양제" 라는 컨텐츠에 탄수화물, 단백질 이 부족할 때 좋은 영양제라는 의미로 "탄수화물","단백질" 이라는 키워드를 쓰고 싶을 때
<아래는 영양제 칼럼>
@ElementCollection(targetClass = StandardNutrient.class)
@JoinTable(name = "StandardNutrient",joinColumns = @JoinColumn(name = "drug_id"))
@Column(name ="StandardNutrientName", nullable = false)
@Enumerated(EnumType.STRING)
private Set<StandardNutrient> efficientNutrient = new HashSet<>();
이렇게 쓰고 싶은 마음이 굴둑 같습니다.
이렇게 했을 때 발생할 수 있는 단점에 대해 알고 싶습니다. (StandardNutrient는 Enum 타입입니다. )
1) 일단 StandareNutrient 의 종류가 바뀔일이 절대 없습니다!
2) 이 서비스의 Manager 만 영양제를 등록할 수 있습니다.
3) List 대신 Set 을 사용함으로써 다 delete 한이후 insert 하지도 않습니다.
어떻게 생각하시나요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. dionisos198님의 질문에 대해 유사한 상황을 다룬 지식공유자의 답변을 찾아보았습니다.
dionisos198님께서 직면하신 문제는 Enum과 값 타입 컬렉션(@ElementCollection)의 사용에 관한 고민으로 보입니다. 특히, Enum을 사용하여 영양소의 적정량을 관리하고자 하는 상황에서 발생할 수 있는 이점과 단점, 그리고 구현 방법에 대한 고민이 있으신 것 같습니다.
해당 주제와 밀접한 내용을 다룬 답변으로는 김영한님의 다음 답변을 추천드립니다:
@ElementCollection
사용과 관련된 최적화 방안과 실무에서의 적용 방식에 대한 조언이 포함되어 있어 유익할 것입니다.이 답변에서 다루고 있는 핵심적인 내용은 다음과 같습니다:
- Enum과 @ElementCollection
사용 시 고려할 사항: Enum 타입을 사용할 때 데이터 변화가 잦지 않고, 정해진 범위 내에서 관리되어야 하는 경우 유용하게 사용할 수 있습니다. 하지만 Enum 값이 변경되거나 확장될 때는 다소 유지 보수적인 측면에서 고민이 필요할 수 있습니다.
- 값 타입 컬렉션의 단점과 해결 방법: 값 타입 컬렉션을 사용할 때 발생할 수 있는 문제점과 이를 최적화하기 위한 전략에 대해 설명합니다. 특히, @ElementCollection
을 사용할 때 발생할 수 있는 성능 문제와 이를 해결하기 위한 접근법에 대해 조언하고 있습니다.
김영한님은 JPA의 이해와 실무 적용에 관한 다양한 조언을 제공하시기 때문에, dionisos198님의 경우와 관련된 고민에 도움이 될만한 통찰을 얻을 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.