[ 오늘의 한 일]
- 개인 공부) 자바 / 스프링 학습
- 생성자
- 접근 지시자
https://github.com/Je-chan/OOP-Study
GitHub - Je-chan/OOP-Study
Contribute to Je-chan/OOP-Study development by creating an account on GitHub.
github.com

[ 오늘의 회고 ]
1. LEFT JOIN 의 함정에 빠지다
브라우저에서 차트를 렌더링하기 위해 필요한 데이터를 제공하는 API 에서 LEFT JOIN 을 쓰면서 발생한 문제였다. 그 차트에서 보여줘야할 데이터는 A, B, C 테이블 총 세 개에 있었다. 코드를 작성할 당시에 나는 아무 생각 없이 "A" LEFT JOIN "B" LEFT JOIN "C" 를 했고, 이게 문제를 발생했다.
지금 쓰면서도 내가 왜 그렇게 작성했나 싶을 정도로 문제는 뻔하게 보였다. 저렇게 코드를 짰을 때 만약, 12시에 A 테이블에 있는 데이터가 없다면, B 와 C 에 있는 데이터도 12시에 데이터가 있다 하더라도 값을 가져올 수 없다. 왜냐하면 기준이 되는 테이블이 A 테이블이기 때문에 이 데이터에 row 데이터가 없다면 당연히 오른쪽에 있는 테이블의 데이터도 가져오지 않는 것이다. 하지만 차트에서 12시에 여러 데이터 중 하나의 데이터가 없다고 해서 모든 데이터가 없는 것으로 간주해 화면에 그리지 않으면 안 된다. 하나의 데이터가 값이 없다면 그것만 보여주지 않고 나머지 값이 있는 데이터는 보여줘야 한다. 지금 LEFT JOIN 으로 작성한 코드는 각각의 데이터를 독립적으로 가져오지 않다 보니 A 테이블에서 구멍이 나면 다른 테이블도 다 구멍이 난 것처럼 데이터를 보여주게 되었다
덕분에 LEFT JOIN 을 사용할 때와 사용하지 않을 때에 대한 구분을 명확하게 알게 된 것 같다. 값을 가져오는데 기준이 되는 데이터가 존재한다면, 그러니까 A 테이블의 데이터가 없다면 나머지 모든 데이터들도 다 보여주지 않게 해야 한다면 A 테이블을 기준으로 LEFT JOIN 하면 되고 만약 모든 데이터가 각각 동일한 Level 로 취급해서 보여줘야 한다면 LEFT JOIN 이 아니라 각각 따로 SELECT 해서 java 에서합치든 UNION 이든 FULL OUTER JOIN 이든 해야겠다는 생각을 했다.
'je개발 일지' 카테고리의 다른 글
[ je 개발 일지 ] 357일차 (0) | 2023.01.10 |
---|---|
[ je 개발 일지 ] 354~356일차, "Side Project 목표" (0) | 2023.01.09 |
[ je 개발 일지 ] 352일차, "새해부터 다사다난 2" (0) | 2023.01.04 |
[ je 개발 일지 ] 351일차, "새해부터 다사다난" (0) | 2023.01.03 |
[ je 개발 일지 ] 350일차, "언제 이렇게?" (0) | 2023.01.01 |