Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5, 6주차/앨빈] 워크북 제출합니다. #71

Merged
merged 3 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions keyword/chapter05/keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
- Domain
- 도메인은 소프트웨어 개발에서 해당 소프트웨어가 해결하고자 하는 특정 비즈니스 영역 또는 문제의 주제를 의미합니다. ex) 전자 상거래 도메인이라면 주문, 상품, 고객 등의 개념이 여기에 해당합니다
- 도멘인 모델 : 도메인의 개념을 소프트웨어적으로 구조화하여 표현한 모델입니다. 이 모델은 시스템에서 다루는 핵심 개념과 이들 간의 관계를 정의하며, 현실 세계의 비즈니스 규칙이나 프로세스를 반영합니다. 객체지향 개발에서는 이러한 개념을 클래스와 객체로 나타냅니다
- 양방향 매핑
- 엔터티 간의 연관 관계를 양방향으로 설정하는 방식입니다. ex) 부모 자식 엔터티 간에 양방향 관계를 설정하면 부모 객체를 통해 자식 객체에 접근할 수도 있고, 자식 객체를 통해 부모 객체에 접근할 수도 있습니다.
- 주의할점으로 양방향 관계는 서로가 서로를 참조하게 되어 순환 참조가 발생할 수 있으며, 데이터베이스 쿼리가 불필요하게 많이 발생할 위험이 있어 N+1 문제를 일으킬 수 있습니다. 따라서 적절한 연관 관계 관리가 필요
- N + 1 문제
- 데특정 엔터티 목록을 가져오는 쿼리 1개(N을 가져오는 1개)에 대해, 각 엔터티에 관련된 연관 엔터티를 개별적으로 조회하는 추가 쿼리 N개가 발생하는 상황을 말합니다.
- **예시**: 게시글과 댓글 간의 관계를 조회할 때, 전체 게시글을 가져오는 쿼리 1개를 실행한 뒤, 각 게시글마다 댓글을 가져오기 위해 추가로 N개의 쿼리가 발생하는 경우
29 changes: 29 additions & 0 deletions keyword/chapter06/keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
- **지연로딩과 즉시로딩의 차이**
- **지연 로딩 (Lazy Loading)**: 실제로 객체가 필요한 시점까지 데이터베이스 조회를 지연하는 방식
객체를 처음 로드할 때는 연관된 엔터티의 데이터를 가져오지 않고, 해당 연관 엔터티에 접근할 때 그때 데이터베이스에서 데이터를 가져옵니다.
- **장점**: 초기 로딩 시 불필요한 데이터를 가져오지 않아 성능이 향상됩니다.
- **단점**: 실제 연관 엔터티에 접근할 때마다 쿼리가 발생할 수 있어, N+1 문제가 발생할 위험이 있습니다.
- **즉시 로딩 (Eager Loading)**: 엔터티가 로드될 때 연관된 엔터티도 함께 조회하는 방식
필요한 데이터를 한 번에 모두 가져와서 이후에 데이터베이스에 추가적인 쿼리를 발생시키지 않습니다.
- **장점**: 추가적인 데이터베이스 접근을 줄일 수 있으며, 필요한 데이터를 미리 모두 가져오기 때문에 코드의 직관성이 높아집니다.
- **단점**: 불필요한 데이터를 모두 가져오므로, 성능에 영향을 줄 수 있습니다.
- **Fetch Join**

JPQL 에서 연관된 엔터티를 함께 조회하기 위해 사용하는 방법
연관 엔터티를 조인하여 한 번의 쿼리로 모든 데이터를 가져올 수 있게 한다. 지연 로딩과 달리, Fetch join을 사용하면 쿼리 실행 시점에 데이터를 한꺼번에 가져옵니다.

- **@EntityGraph**

엔터티와 연관된 엔터티의 조회 전략을 정의할 때 사용하는 애노테이션
**@EntityGraph**를 사용하면 특정 쿼리에서만 지연 로딩이나 즉시 로딩 설정을 제어할 수 있습니다.

- **JPQL**
- jpa 에서 데이터베이스를 조회하기 위해 사용하는 객체 지향 쿼리 언어
SQL과 유사하지만, 테이블이 아닌 엔터티 객체를 대상으로 쿼리하기 때문에 객체 지향적인 쿼리 작성이 가능
- 테이블 대신 엔터티 이름을 사용합니다.
- SQL과 달리, 데이터베이스에 종속적이지 않으며, 다른 데이터베이스에서도 동일한 쿼리 문법을 사용할 수 있습니다.
- **QueryDSL**
- jpa 와 함께 사용할 수 있는 타입 안전한 쿼리 작성 라이브러리
→ jpql을 더 직관적이고 안전하게 작성할 수 있도록 돕습니다.
- 코드 작성 시점에 쿼리의 문법 오류를 발견할 수 있어, 오류를 줄이고 유지보수가 쉬워집니다.
- 메서드 체이닝을 통해 쿼리를 유연하게 작성
Binary file added mission/chapter05/img.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added mission/chapter05/img_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions mission/chapter05/mission.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://github.com/kseokc/umc_mission