프로젝트 진행하며 발생했던 이슈를 정리하려다보니, 프로젝트 자체의 이슈보다는 스프링이나 JPA 등 사용한 기술과 직접적으로 연관된 이슈가 많네요.
따라서 문제 상황만 확인하고, 자세한 내용은 별도의 글로 정리하도록 하겠습니다.
우선 문제 상황은 코스에 대한 소개 column 입니다.
지금 코스 테이블의 설계는 위와 같습니다.
코스에 대한 소개를 별도의 테이블로 분리해둔 상황이죠.
주석으로 쓰여있듯이, 자주 조회되는 값이 아니고 조회 시 부담되는 값이기 때문입니다.
예를 들어 코스의 목록을 보여줄 때는 제목이나 작성자는 보여지지만, 그 소개는 보여지지 않습니다.
만약 MyBatis를 이용한다면 조회할 column에서 introduction을 제외하는 것으로 충분할 수도 있겠지만,
JPA를 이용하여 Course entity를 조회할 때는 비효율적입니다.
따라서 1:1 관계인 별도의 테이블로 분리하고, FetchType.LAZY를 이용하여 실제로 참조하는 경우에만 조회하도록 설계하였습니다.
지연 로딩에 대한 자세한 설명은 아래 글에 정리해두었습니다.
※ 추가로 테이블 설계를 보면 Course에서 Introduction을 참조하고 있는 형태이기 때문에, DB에서는 Course를 삭제하더라도 Introduction이 삭제되지 않습니다.
그러나 JPA의 CascadeType.ALL을 이용하여 서버에서는 Course가 삭제되면 Course가 참조하고 있는 Introduction 객체도 삭제되도록 반영할 수 있습니다.
'프로젝트 > 글로런' 카테고리의 다른 글
[글로런] 배포 (3) - AWS EC2 배포하기 (0) | 2023.03.23 |
---|---|
[글로런] 배포(2) - 이미지 AWS S3 에 저장하기 (0) | 2023.03.22 |
[글로런] 배포(1) - AWS RDS로 전환하기 (0) | 2023.03.22 |
[글로런] 프로젝트 개요 (0) | 2023.03.22 |