article_id에 대해서
comment기능에서 comment테이블에 article_id을 shard key로 사용한다고 하셨는데 comment기능은 article기능에 뎃글을 다는 기능으로 article테이블에 article_id와 연관관계를 맺는 컬럼이 아닌건가요? 만약맞다면 article테이블에 article_id를 comment테이블에 article_id에 저장되게끔 해야 할 듯 한거 같은데 1고정값으로 넣는게 이해가 안되서 질문드렸습니다.
답변 2
0
ultimates님, 안녕하세요!
말씀하신대로 "게시글의 댓글"이 맞고,
comment 테이블의 article_id가 article 테이블과 연관 관계를 맺기 위한 참조키(외래키)입니다.
강의에서는 1번 게시글(article_id=1)의 댓글을 "테스트" 데이터로 삽입하는 것이고,
"게시글별 댓글 목록"이라는 쿼리 패턴을 만족하고, 그 동작의 빠름을 "테스트" 하기 위해,
1번 게시글에 "댓글 테스트 데이터"를 삽입하는 것입니다.
1번 게시글이 실제로 없는데 갑자기 어디서 나온 값인지 혼동이 있으신 걸까요? 테스트 조건만 충족할 수 있다면, 어떠한 값을 넣든 자유입니다.
그저 테스트라는 것에 초점을 맞춰주시면 될 것 같습니다!
"하나의 게시글에 작성된 댓글 목록을 테스트"하려는 데이터입니다.
혹시 더 궁금한 점 있으시면 편히 문의 주세요!
0
이해되었습니다 ㅎ
그렇다면 article_id가shard key로 사용된다고 하셨는데 DB가 shard화 되어있다고 하면 DB에는 어떠한 식으로 나누어져서 저장되는 걸까요?
1
“shard key가 동일한 데이터는, 동일한 샤드에 저장된다.”
일단 위 관점만 이해하시면 됩니다!
따라서, article_id가 동일한 데이터는, 동일한 샤드에 위치하게 됩니다.
게시글의 댓글 목록은 단일 샤드에 들어가 있기 때문에, 단일 샤드에서만 빠르게 쿼리할 수 있는 것입니다!
만약, 2개의 샤드(0번과 1번)가 있고, 샤드 키를 결정하는 방법이 게시글ID % 2라면,
샤드0 = [article_id 짝수인 게시글들의 댓글 목록]
샤드1 = [article_id 홀수인 게시글들의 댓글 목록]
1
아 감사합니다!! comment테이블 데이터는 article테이블의 DB보존위치를 따라가는거였군요...
comment테이블의 데이터도 article테이블처럼 랜덤으로 DB보존위치가 바뀐다고 생각했습니다 ㅎ
1
정확히는 article 테이블과는 무관하고,
comment 테이블의 article_id에 의해 샤드가 결정된다고 보시면 될 것 같네요.
article 테이블과 comment 테이블은 서로 다른 데이트베이스에 위치해있다는 관점입니다. (MSA DB 격리)
0
서로 다른데이터 베이스라고 하시면 article 테이블의 article_id를 기준으로 comment 테이블에서 해당 뎃글을 검색하는 그러한 방식이 되는건가요? 결국 DB위치가 다르면 join을 쓸 수가 없을듯한데..
0
안녕하세요, 인프런 AI 인턴입니다. ultimates님.
스프링 부트로 대규모 시스템을 설계하면서 Comment와 Article 엔티티 간의 연관 관계 설정과 관련된 질문을 주셨네요. 질문하신 내용은 데이터베이스 설계와 관련된 중요한 개념을 다루고 있습니다. 아래에 몇 가지 설명을 드리겠습니다.
Comment와 Article의 연관 관계
연관 관계 설정:
- Comment 테이블에서
article_id를 사용하여 Article 테이블과의 관계를 맺는 것이 일반적입니다. 이는 각 Comment가 특정 Article에 달린 댓글임을 나타내기 위해 필요합니다.
- JPA나 다른 ORM을 사용한다면
@ManyToOne및@JoinColumn등의 어노테이션을 사용하여 Comment 엔티티가 Article 엔티티와 연관되어 있음을 나타낼 수 있습니다.
- Comment 테이블에서
Shard Key 사용:
- Shard Key는 데이터의 저장 위치를 결정하는 키입니다.
article_id를 Shard Key로 사용하는 경우, 같은 Article에 속한 Comment들은 같은 Shard에 위치할 수 있도록 함으로써 데이터 조회 시 성능을 향상시키는 데 도움을 줄 수 있습니다.
- Shard Key는 데이터의 저장 위치를 결정하는 키입니다.
값 설정:
article_id가 Comment에 올바르게 설정되어야 Article과의 관계가 성립됩니다. 질문하신 “1 고정값”에 대한 부분은 특정히 설계된 부분이 아니라면, 각 Comment가 본인의 Article에 맞는article_id를 갖고 있어야 합니다.article_id를 Comment를 생성하면서 자동으로 매칭시키는 로직이 필요합니다.
이와 관련된 실용적인 구현 예제나 더 구체적인 코드 설명이 필요한 경우, 아래 유사한 질문을 다룬 링크들을 참고하시길 추천드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.
0
32
1
consumer에서 에러가 발생할 경우 데이터 유실 문의
0
50
2
게시글 테스트 데이터 삽입
0
51
2
정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?
0
104
2
좋아요 기능 정합성 보장 방법
0
98
2
좋아요 동시성처리 최적의 선택?
1
138
2
프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해
0
92
2
안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.
0
61
1
조회수 조회 로직 질문
1
67
2
비로그인 유저도 어뷰징 방지 정책
1
73
2
CommentServiceTest의 테스트 로직 질문
0
54
2
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
1
74
2
path 쿼리 관련 질문드립니다!
0
60
2
antigravity 에디터를 쓰신다면 종료해주세요
1
123
0
프로젝트 구조
0
88
2
article_like_count api test
0
79
2
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
0
104
2
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
0
92
2
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
0
94
3
jpa ddl-auto none을 하는 이유와 join 방법
0
98
2
팩터리 메소드와 response 객체 사용 이유가 궁금합니다!
0
91
2
커서 기반 페이지네이션 과 무한 스크롤링
0
112
2
게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기
0
97
2
멀티 모듈이 아닌 MSA 환경에서 common
0
158
2





