728x90
반응형
오늘도 Spring 강의를 들었습니다.
그리고 튜터님과 면담이있었는데, 기술 질문들을 물어보셨고
아는 내용도 머리속에 정리가 안되서 대답을 잘 못해서
개념들을 평소에 정리해놓는게 중요하다는 것을 알게 되었습니다.
1. 오늘의 학습 키워드
restTemplate, Lazy, eager, cascade, DI, entity 연관관계 (1:1, 1:N, N:M ..)
2. 핵심 키워드 상세 정리
RestTemplate
- 정의: Spring에서 제공하는 동기(Blocking) 방식의 HTTP 통신 클라이언트입니다.
- 역할: 내 서버에서 외부 API를 호출할 때 사용하며, JSON 응답을 자바 객체로 자동 변환해 주는 기능을 제공합니다.
Lazy(지연 로딩) & Eager(즉시 로딩)
- Lazy: 연관된 엔티티를 실제로 사용하는 시점에 DB에서 조회하는 방식입니다. (성능 최적화에 유리)
- Eager: 엔티티를 조회할 때 연관된 모든 엔티티를 한꺼번에 조회하는 방식입니다.
Cascade(영속성 전이)
- 정의: 부모 엔티티의 상태 변화(저장, 삭제 등)를 자식 엔티티에 전파하는 설정입니다.
- 특징: CascadeType.ALL을 사용하면 부모만 저장해도 연관된 자식들이 자동으로 DB에 반영되어 편리합니다.
DI (Dependency Injection, 의존성 주입)
- 정의: 객체가 직접 의존 객체를 생성하지 않고, 외부(Spring 컨테이너)로부터 주입받는 디자인 패턴입니다.
- 장점: 객체 간의 결합도를 낮추고 유연성과 테스트 용이성을 높여줍니다.
Entity 연관관계 (1:1, 1:N, N:M)
- 1:1 (OneToOne): 한 명의 사용자가 하나의 프로필을 가지는 관계입니다.
- 1:N (OneToMany): 한 명의 사용자가 여러 개의 게시글을 작성하는 관계입니다. (실무에서 가장 흔함)
- N:M (ManyToMany): 여러 학생이 여러 강의를 수강하는 관계입니다. 중간 테이블이 필요하며 관리가 까다로워 실무에서는 1:N - N:1로 풀어서 사용하곤 합니다.
3. 질문 정리
Q. JS에서 호이스팅(Hoisting)이란?
- A: 변수나 함수 선언문이 해당 스코프의 최상단으로 끌어올려진 것처럼 동작하는 현상입니다. var로 선언한 변수는 선언 전 호출 시 undefined가 나오지만, let과 const는 TDZ(Temporal Dead Zone) 영향으로 에러가 발생해 더 안전합니다.
Q. 순환 참조란?
- A: 두 개 이상의 객체가 서로를 참조하고 있어 끝이 나지 않는 루프에 빠지는 현상입니다. 특히 JPA 양방향 연관관계에서 JSON 변환 시 무한 루프가 발생할 수 있어 @JsonIgnore 등으로 끊어주어야 합니다.
Q. 객체를 추상화하면 개발(재사용)하는데 좋은 이유?
- A: 구체적인 구현(How)을 숨기고 공통된 규격(Interface)을 정의하기 때문입니다. 덕분에 내부 로직이 바뀌거나 새로운 부품이 추가되어도 메인 코드를 수정하지 않고 그대로 재사용할 수 있어 유연한 확장이 가능합니다.
Q. 의존성 주입(DI)이란?
- A: 객체가 사용할 협력 객체를 직접 만들지 않고 스프링이 '주입'해주는 것입니다. 비유하자면 요리사가 칼을 직접 대장간에서 만들지 않고, 주방장이 주는 칼을 받아 사용하는 것과 같아 요리사는 요리에만 집중할 수 있게 됩니다.
Q. N + 1 문제? 해결 어떻게?
- A: 1번의 쿼리로 N개의 데이터를 가져왔는데, 연관 데이터를 조회하기 위해 N번의 추가 쿼리가 발생하는 성능 문제입니다. (질문하신 N+M은 보통 N+1을 의미합니다.)
- 해결 방법: 주로 Fetch Join을 사용해 한 번의 쿼리로 연관된 데이터를 미리 다 가져오거나, Batch Size 설정을 통해 쿼리 횟수를 획기적으로 줄여 해결합니다.
반응형
'Study' 카테고리의 다른 글
| [내일배움캠프 TIL] 6일차 - Entity, 영속성 등 복습 (0) | 2026.04.13 |
|---|---|
| [내일배움캠프 TIL] 5일차 - MSA (Microservice Architecture) (0) | 2026.04.10 |
| [내일배움캠프 TIL] 4일차 - MSA (Microservice Architecture) (0) | 2026.04.09 |
| [내일배움캠프 TIL] 3일차 - Spring 심화 (0) | 2026.04.08 |
| [내일배움캠프 TIL] 1일차 - Spring. 시작 (0) | 2026.04.06 |