- Today
- Yesterday
- Total
메이쁘
[Spring] 예상 Q&A 공부(PUT과 PATCH 차이, JPA 연관관계, MapStruct와 ModelMapper) 본문
[Spring] 예상 Q&A 공부(PUT과 PATCH 차이, JPA 연관관계, MapStruct와 ModelMapper)
메이쁘 2022. 1. 5. 22:39안녕하세요.
CS관련 질문과 면접에 맞는 답변을 작성하면서 지식도 쌓고 면접도 대비하는 시간을 가지려고 합니다.
틈틈히 게시글을 작성하며 면접 대비 데이터셋을 확보해둔 다음
언젠간 면접하게 될 때 모아서 쓰려고 합니다.
(실제로 면접에서 들었던 질문이 아니라, 제가 스스로 답을 정해놓고 짜논 질문이라 이렇게 안나올 수 있습니다!!!)
이번 글은 Spring 카테고리 입니다.
-- 질문 목록
Q1. PUT과 PATCH의 차이점과 PATCH를 사용한 이유는?
Q2. JPA에서 연관관계가 필요한 이유 및 테이블 간 맵핑을 어노테이션으로 표시할 필요성?
Q1. PUT과 PATCH의 차이점과 PATCH를 사용한 이유는?
A. PUT과 PATCH 둘 다 데이터를 UPDATE하는 HTTP Method 입니다.
하지만, PUT같은 경우에는 모든 데이터(리소스)를 업데이트하고, PATCH는 요청한 데이터(리소스)만 업데이트합니다.
그래서 PUT 요청 시 담지 않은 값은 NULL로 되서 저장하고, PATCH는 요청한 값만 데이터를 업데이트합니다.
Q2. JPA에서 연관관계가 필요한 이유 및 테이블 간 맵핑을 어노테이션으로 표시할 필요성?
A. JPA에서 연관관계가 필요한 이유는 연관된 테이블의 외래 키를 가지고 있다면 조인 시 해당 외래 키로 또다시 조회해서 데이터를 가져와야되서 여러 번 DB에 조회해야 하게 됩니다.
또한, JPA는 ORM 방식으로, 객체와 관계형 테이블을 맵핑하는 프로그래밍 방식이기 때문에, 키가 아닌 연관된 테이블의 객체를 가지고 있는게 더 명확합니다.
그래서 이러한 연관관계를 나타내기 위해 @ManyToOne(N:1)과 @OneToMany(1:N) 어노테이션을 사용합니다. 양방향인 경우에는 연관관계에 있는 두 엔티티에 전부 어노테이션을 붙여줍니다.
(과제에서는 N:1만 표기했는데, 단방향이었기 때문에)
객체 연관관계와 테이블 연관관계는 다를 수 있는데요.
객체 연관관계는 참조를 가지고 연관관계를 맺기 때문에 반대 Entity class 안에 필드를 추가해두지 않으면 단방향 관계가 되어버립니다.
반면, 테이블 연관관계는 외래 키(FK)를 가지고 연관관계를 맺기 때문에 어느 테이블에서든지 JOIN을 통해 반대 테이블의 값을 확인할 수 있어 양방향 관계가 됩니다. (A JOIN B, B JOIN A 가능)
Q3. ModelMapper, ObjectMapper 대신 MapStruct 사용한 이유는?
A. ModelMapper보다는 MapStruct 라이브러리를 사용해 형변환할 때 속도가 월등히 빨랐기 때문입니다.
그 이유는 바로 Reflection 차이인데요.
ModelMapper는 형변환을 위한 맵핑 시 클래스에 접근하기 위해 Reflection이 발생합니다. 반면, MapStruct는 인터페이스만 구현해두면 컴파일 시 @Mapper 어노테이션을 확인해서 이를 구현한 구현체 클래스를 생성합니다. 런타임 시에 이러한 구현체 클래스의 함수 호출로만 형변환을 진행하기 때문에 Reflection이 발생하지 않습니다. 이러한 Reflection은 비용 소모가 있어서 속도 측면에서도 차이가 생기게 됩니다.
(참고 : https://huisam.tistory.com/entry/mapStruct)
(참고2 : https://mangchhe.github.io/spring/2021/01/25/ModelMapperAndMapStruct/)
이상입니다.
감사합니다!
'면접 대비 CS지식 > SELF CS면접 Q&A' 카테고리의 다른 글
[Spring] 예상 Q&A 공부(EntityManager, 영속성 컨텍스트, @Transactional readOnly) (0) | 2021.12.29 |
---|---|
[Spring] 예상 Q&A 공부(Entity @Setter 지양 이유, @ControllerAdvice 관련) (0) | 2021.12.28 |
[Spring] 예상 Q&A 공부(Transactional 트랜잭션 적용 범위) (5) | 2021.12.26 |
[WEB] 예상 Q&A 공부(HTTP Status Code, Web과 WAS의 차이) (0) | 2021.03.02 |
[Android] 2021.01.28. 오늘의 면접 Q&A (0) | 2021.01.28 |