기술 면접이 있던 날이었습니다.
준비는 어느 정도 했지만 준비한 범위에서 다 나올지도 모르겠고 대답을 잘 할 수 있을지도 몰랐습니다.
JPA에서 Lazy Loading과 Eager Loading의 차이점은 무엇인가요?
꼬리 질문 : Proxy? 가짜? 좀 더 얘기해주실수 있으신가요?
JPA에서 N+1 문제를 해결하기 위한 방법을 설명해 주세요.
제 경우에는 fetch join을 사용한 방식 밖에는 없는 것 같습니다. 하지만 다른 방식으로는 @EntityGraph를 사용할 수 있다는 것을 알게 되었습니다. fetch join에서 아직 제가 겪어본 문제는 아니지만 엄청 많은 데이터가 조회 될 때 Out of memory가 발생할 수 있다는 글을 봤는데 BatchSize를 정해 해결 할 수 있다고 알게되었습니다.
피드백 : 꼬리 질문이 좀 이어졌는데 정리를 못했습니다. 다만 fetch join과 lazy loading을 엮었을 때에 대한 내용이라 이 부분을 더 정리해보기로 했습니다.
JPA와 Hibernate의 차이점은 무엇인가요?
JPA는 관계형 데이터베이스를 사용하는 방식을 정한 인터페이스이며 Hibernate는 JPA의 구현체입니다. 그 외에도.. (다른 걸 설명하려다가 멈춤 <- 그냥 모르겠으면 더 얘기안하기)
피드백 : 더 말하는게 좋았을 것같기도한데 이 정도 얘기했으면 된 것같다.
통합 테스트와 단위 테스트의 차이점에 대해서 설명해주세요.
꼬리질문 : 장단점에 대해서도 얘기해주실래요?
피드백 : 통합테스트같은 경우는 결과가 실제 프로덕션에 반영될 때 테스트 케이스만 잘 관리한다면 비용도 적고 테스트 활용가치도 클 수 있습니다. 단위테스트는 모든 로직과 분기가 코드로 관리되고있다는 것도 크고 단위로 나눴기때문에 문제가 일어났을 때 추적하기 편합니다.
정리를 하긴 했는데 튜터님의 의도를 온전히 담지 못해서 아쉽습니다.
트랜잭션에 대해서 설명해주세요.
트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말합니다. 특성에는 원자성, 일관성, 격리성, 지속성이 있습니다. 제 경우에는 JPA에서 Transactional 애노테이션을 사용한 경험이 있습니다.
개인적인 생각이긴한데 원자성은 뭐고 DB에 대한 것을 먼저 얘기해야 될 것 같습니다. 트랜잭션에 대해서 공통적인 DB에 대해서 얘기하고 Spring이나 다른 것에 대해 궁금해서 질문을 받았을 때 Transactional을 사용해서 처리했던 경험을 얘기해보면 좋을 것 같습니다.
이렇게 5가지의 질답이 끝났습니다. 역시 정리를 좀 더 해야될 것 같습니다. 최종 프로젝트가 끝나면 최종 프로젝트를 좀 계속 수정하면서 코테, 기술 면접 준비를 이어가야하지않을까 싶습니다.