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

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

조소영님의 프로필 이미지
조소영

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문 목록 검색, 취소

안녕하세요

작성

·

20

0

안녕하세요 jpa 공부하다가 궁금한 것이 있어서 여쭤봅니다

채팅프로그램을 만들고 있는데

간단하게

user table

id, email

chattingroom

id,user_id, room_number로 테이블이 구성되어있습니다
사용자가 로그인해서 채팅방번호를 입력하면
chattingroom만들어지는데 아무래도 id가 따로있다보니

chattingroom에 같은 user_id, room_number중복된 데이터가 생성됩니다

이같은 경우 생성전에 중복 쿼리를 생성해서 검증해야할지

oracle에 merge into ~ update ~ insert를 createQuery로만들어서 구현을 해야하는지 궁금해서 여쭤봅니다 감사합니다

답변 1

0

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

JPA를 활용해 채팅 프로그램을 개발하면서 발생하는 중복 데이터 문제에 대한 해결책을 찾고 계시는군요. 일반적으로 데이터베이스에 중복된 데이터를 방지하기 위해서는 1) 사전 검증과 2) 데이터베이스의 고유(unique) 키를 활용하는 방법이 있습니다.

  1. 사전 검증을 통해 중복 방지: 사용자가 채팅방 번호를 입력할 때 해당 user_idroom_number로 이미 존재하는 채팅방인지 확인하는 쿼리를 실행하여 중복 여부를 체크할 수 있습니다. 중복이 존재하지 않을 경우에만 새로운 채팅방을 생성합니다.

  2. 데이터베이스의 고유(unique) 키 활용: 데이터베이스 차원에서 user_idroom_number의 조합을 고유하게 설정하여 중복된 값이 삽입되지 않도록 할 수도 있습니다. 이 경우, 중복 삽입 시 예외가 발생하므로 예외 처리를 통해 사용자에게 알려줄 수 있습니다.

  3. Oracle의 MERGE INTO 사용: ORACLE의 MERGE INTO 문을 사용하여 테이블에 데이터가 존재하지 않을 때 삽입하고, 존재할 때는 업데이트할 수 있습니다. JPA 자체로는 이 기능을 직접 지원하지 않지만, 네이티브 쿼리를 사용하여 구현할 수 있습니다.

JPA에서 네이티브 쿼리 사용하기 - 본 강의에서는 JPA와 네이티브 쿼리를 활용하는 방법에 대해 설명합니다.

사용 사례에 따라 이 방법 중 하나 또는 여러 개를 병합하여 쓸 수 있습니다. 전체적인 데이터 일관성과 성능을 고려하여 적용하면 좋을 것 같습니다.

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

조소영님의 프로필 이미지
조소영

작성한 질문수

질문하기