inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

코드테이블 조인방법이 궁금합니다.

3345

김한수

작성한 질문수 3

0

안녕하세요. 강의 잘 듣고있습니다.

질문은,

회사에서 Query를 작성하다보면 코드테이블을 여러번 join 하는 경우가 허다한데요.

a join code 처럼 a 테이블의 특정 코드에 대한 코드값을 읽어오고자 할 경우, a 테이블에서

code 테이블쪽으로 driving이 걸리는 컬럼은 대부분 pk가 아닐텐데요.

이럴 경우 어떤식으로 해결을 해야할까요?

join을 통해서 이래저래 방법을 찾아보았으나 pk와 fk 관계가 아니면 오류가 나네요.

몇일동안 테스트는 하는데 딱히 방법이 보이지않습니다.

내부적으로 메인테이블에서는 단순코드만 관리하고 description 자체를 코드테이블에서 읽어오는 

방식이다 보니 상기방식의 작업이 상당히 많은 편입니다.

그럼 조언부탁드립니다.

미리 감사드립니다.

JPA java

답변 1

5

김영한

안녕하세요 김한수님^^

섹션10. 객체지향 쿼리 언어1 - 기본문법에 있는 조인강좌를 보시면 도움이 되실꺼에요. 그 중에 8:20초에 나오는 ON 절을 활용한 조인 부분을 보시면 연관관계가 없는 부분도 조인을 할 수 있습니다.

그런데 여기서! 코드 테이블에 관한 정말 중요한 내용을 한가지 말씀드리겠습니다.

저도 오랜기간 코드 테이블을 관행처럼 자주 사용해왔습니다. 특히 말씀하신 것 처럼 코드의 설명(description)을 꺼내야 하기 때문에 코드 테이블과 자주 조인을 했습니다. (그래서 정말 조인을 많이 썼지요!)

하지만, 정말 SQL 쿼리에서 이렇게 처리하는게 좋은 방법인가에 대해서는 본질적으로 의문을 가질 필요가 있습니다.

지금까지 수 많은 애플리케이션을 개발하면서 느낀 점은 코드테이블 때문에 코드 유지보수성이 너무 떨어진다는 점입니다. 뭘 하나 하려고 해도 다 코드 테이블에 정의가 되어 있어서, 애플리케이션 코드 로직을 보다가, 중간에 코드 속성이 있으면 데이터베이스 열어서 이 코드가 뭐하는 건지 읽어보고, 또 다시 돌아오고... 그리고 심지어 필드 이름도 그냥 code이고, 여기에 단순 문자이므로 무슨 값이 들어가 있는지 보장도 안됩니다.

그래서 최근에 진행한 모든 프로젝트에서는 코드 테이블을 제거해버렸습니다. 대신에 자바의 ENUM을 적극 활용했습니다. 덕분에 코드 테이블을 사용할 때와는 비교가 되지 않을 정도의 편리함과 유지보수성을 얻었습니다.

JPA를 사용하신다면 테이블 보다는 객체 중심으로 개발을 하게 되므로, 단순한 코드 테이블 보다는 ENUM을 적극 활용하시는 것을 권장합니다.

물론 어쩔 수 없이 코드 테이블을 사용해야 한다면, 제가 권장하는 방법은 SQL에서 조인하는 부분은 피하고, 대신에 코드 테이블은 공통 코드 서비스 등을 만들어서, 애플리케이션 로딩 시점에 메모리에 다 올려서 캐시해서 사용하는 것을 권장합니다. (물론 코드가 자주 바뀐다면 다른 접근법이 필요하겠지만요)

ENUM 관련해서 제가 좋아하는 이동욱님이 작성한 글을 한번 읽어보시면 도움이 되실꺼에요: http://woowabros.github.io/tools/2017/07/10/java-enum-uses.html

감사합니다.

Entity 동등성 비교

0

10

1

실무 조언 관련 질문입니다.

0

41

1

H2데이터베이스 파일 생성

0

51

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

48

1

JPQL 메소드와 락

0

52

1

Delivery @OneToOne

0

57

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

89

2

UnsupportedOperationException 발생

0

82

3

H2 Database 연결이 안됩니다.

0

89

2

연관관계 매핑 질문드립니다.

0

82

2

h2데이터베이스 실행오류

0

105

2

persistence.xml

0

103

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

77

1

영속성 컨텍스트

0

62

1

JPA 프록시

0

90

1

Native Query와 MyBatis

0

63

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

83

1

임베디드 타입 예시 코드 관련 질문

0

112

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

90

3

인텔리제이 패키지 커서 단축키 질문

0

106

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

136

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

68

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1