inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

엔티티 클래스 개발2

외래키 제약 조건

502

수수깡

작성한 질문수 5

1

[질문 내용]
강의 내용 중 "외래키를 꼭 사용해야할까?" 에 대한 물음에 두 가지 방안을 주셨는데요.

  1. 빠른 처리가 중요하며 실시간 트래픽이 많은 시스템인 경우 -> "외래키를 사용하지 않는 쪽도 고려해볼만 함"
  2. 돈이 왔다갔다 하는 등의 reliablity가 중요한 시스템인 경우 -> "외래키를 꼭 사용하라"
그렇다면 질문이 있습니다.질문 1. 만약 외래키 제약조건이 관계형 DB에 이미 걸려있는 상태라면 Java 코드상에서는 아무런 설정 없이 비즈니스 로직을 개발해도 되나요?질문 2. 만약 외래키 제약조건이 관계형 DB에 걸려있지 않고 관계형 DB의 성능상의 이슈로 외래키 제약 조건을 애플리케이션에서 해결해야 한다면 해당 로직 또한 개발해야 하나요? 즉, JPA가 외래키 제약 조건을 체크해주는 기능이 있는지 궁금합니다.

java spring 웹앱 spring-boot jpa

답변 1

2

김영한

안녕하세요. 천수환님

  1. 외래키 제약조건이 이미 설정된 경우의 Java 코드 개발: 외래키 제약조건이 데이터베이스에 이미 설정되어 있다면, 이는 데이터베이스 수준에서 관계의 무결성을 보장합니다. Java 코드상에서 별도의 설정이나 체크를 추가하지 않아도, 데이터베이스에서 외래키 제약조건 위반 시 오류를 발생시켜 관계 무결성을 유지합니다. 그러나, 어플리케이션 수준에서 무결성 오류를 더 우아하게 처리하거나, 비즈니스 로직에 따라 추가적인 유효성 검증 로직을 구현할 필요가 있을 수 있습니다.

    제가 추천하는 것은 애플리케이션에서 한번 더 검증하는 것이 좋다 입니다. 그렇지 않으면 DB에서 예외가 계속 날라오게 되고 이것을 처리하는 것이 번거로워 집니다. 그리고 DB에서 발생하는 예외는 정말 예외로 보고 사용자에게는 오류 페이지를 보여주고, 개발자는 오류 로그로 해당 문제를 확인하는 것이 좋습니다.

 

  1. 외래키 제약조건이 없는 경우의 JPA 사용: 외래키 제약조건이 데이터베이스에 설정되어 있지 않다면, JPA와 같은 ORM(객체 관계 매핑) 프레임워크를 사용하여 어플리케이션 수준에서 관계의 무결성을 유지할 수 있습니다. JPA는 엔티티 간의 관계를 객체 모델로 매핑하고 관리할 수 있는 기능을 제공합니다. 따라서, 어플리케이션 로직에서 관계 무결성을 체크하거나 유지하는 로직을 개발할 수 있습니다. 그러나, 이는 데이터베이스 수준의 무결성 보장과는 다른 개념이며, 성능상의 이슈나 복잡한 비즈니스 요구 사항에 따라 적절한 설계와 구현이 필요합니다.

정리하면 JPA가 연관관계를 통해 어느정도는 무결성을 해결해주지만, 완벽한 해결책이 되지는 않습니다. 특히 데이터베이스는 여러 서버에서 동시에 요청을 처리하게 되는데, JPA는 각각의 애플리케이션 서버에서 작동하기 때문에 동시성에 대한 무결성 처리까지 완벽히 보장하기는 어렵습니다.

 

감사합니다.

sdk 설정 오류

0

53

2

오탈자 - @Transactional

0

56

1

src/test/resources 테스트 경로 문제

0

50

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

64

1

MemberRepositoryTest 실행오류

0

81

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

184

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

142

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

51

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

60

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

103

1

멤버서비스테스트 부분에서 막힙니다.

0

165

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

116

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

120

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

114

1

24분 27초 연관관계 편의 메서드 위치

0

113

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

109

2

빌드 툴, Gradle

0

59

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

77

2

Repository에서 EntityManager 주입 방식 차이

0

90

1

롬복과 사용자 정의 setter 메서드

0

73

1

주문 목록 조회 fetch join 질문드립니다

0

82

1

dirty checking 질문드립니다.

0

83

1

동시성 관련 질문입니다

0

75

1