Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- java알고리즘
- javaJVM
- sqld자격증합격
- java set 출력
- java알고리즘문제풀이
- java최솟값구하기
- java list 출력
- 격파르타비전공자
- 코딩부트캠프후기
- 프로그래머스
- java map 출력
- 항해99후기
- 컴파일
- 비전공자sqld
- java참조자료형
- java list 저장
- 작은수제거하기
- 격파르타합격후기
- java set 저장
- java map 저장
- 격파르타후기
- java기본자료형
- 프로그래머스제일작은수
- java map
- 인터프린터언어
- 항해15기
- javaJRE
- 격파르타장점
- java 자료구조 활용
- 노베이스부트캠프
Archives
- Today
- Total
코딩과 결혼합니다
Mongoose와 Spring JPA 본문
728x90
❔ Spring JPA / Mongoose
Spring JPA와 Mongoose는 각각 Java와 JavaScript 환경에서 데이터베이스와 상호작용을 위한 ORM 및 ODM 도구이다.
기본 개념
- Spring JPA : 주로 RDBMS에서 사용되며, SQL 기반의 데이터베이스와 상호작용한다. 엔티티와 테이블 간의 매핑을 통해 관계를 설정한다.
- Mongoose : MongoDB와 같은 NoSQL 데이터베이스와 상호작용하며, JSON 기반의 문서를 처리한다. 스키마 정의를 통해 관계를 설정한다.
❔ 엔티티(스키마) 정의 및 관계 설정
Spring JPA
- @Entity : JPA 엔티티 정의
- 관계 매핑 : '@OneToX', '@ManyToX' 등의 어노테이션을 사용하여 관계 설정
- 즉시 로딩 / 지연 로딩
//Post
@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Comment> comments = new ArrayList<>();
//Comment
@ManyToOne
@JoinColumn(name = "post_id", nullable = false)
private Post post;
Mongoose
- @Schema : Mongoose 스키마를 정의
- 관계 설정: ' Types.ObjectId' 를 사용하여 다른 스키마 참조
- 지연 로딩 : 기본적으로 지연 로딩 방식으로 동작. 관계된 데이터를 가져오려면 'populate()' 사용
//Post extends Document
@Prop({ type: [{ type: Types.ObjectId, ref: 'Comment' }] })
comments: Types.ObjectId[];
//Comment extends Document
@Prop({ type: Types.ObjectId, ref: 'Post', required: true })
post: Types.ObjectId;
//관계된 데이터 가져오기
const postWithComments = await this.postModel.findById(postId).populate('comments').exec();
❔ 주요 차이점
- 데이터베이스 구조
- Spring JPA : 관계형 데이터베이스를 사용하므로, 테이블 간의 관계가 명확히 정의되고 외래 키 제약 조건을 통해 일관성을 보장한다.
- Mongoose : NoSQL 데이터베이스로 MongoDB를 사용하므로, 데이터가 스키마리스 형식으로 저장될 수 있고, 명시적인 외래키 제약 조건이 없다. 대신, 참조 관계를 통해 데이터 무결성을 관리한다.
- 지연 로딩 vs 즉시 로딩
- Spring JPA : 로딩 전략을 명시적으로 설정할 수 있으며, 관계형 데이터 베이스에서의 성능 최적화가 중요한 역할
- Mongoose : 기본적으로 지연 로딩이 사용되며, 필요할 때 populate()를 호출하여 데이터를 가져온다.
- 관계의 유연성
- Spring JPA : 스키마가 엄격하게 관리되며, 복잡한 관계도 쉽게 정의할 수 있다. 하지만 스키마가 변경되면, 이에 따라 엔티티와 관계 설정도 변경되어야 한다.
- Mongoose : 더 유연한 관계 설정이 가능하지만, 데이터의 일관성을 개발자가 더 많이 관리해야 한다.
- 구현 방법 (쿼리 작성)
- Spring JPA : 복잡한 쿼리 및 관계 매핑은 JPA 쿼리 메서드나 JPQL
- Mongoose : MongoDB의 쿼리 문법을 사용하여 관계된 데이터를 처리
'2세 > Nest.js' 카테고리의 다른 글
Aggregation으로 수많은 쿼리를 한방 쿼리로. (0) | 2024.09.02 |
---|---|
몽고DB 스키마 인덱스 삭제하기 (0) | 2024.08.14 |
비동기 | async와 await (0) | 2024.08.13 |
[오류] MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". | @nestjs/config (0) | 2024.08.13 |
[오류]Cannot find module '@nestjs/common' or its corresponding type declarations. (0) | 2024.08.12 |