해결된 질문
작성
·
104
0
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번 게시글이 실제로 없는데 갑자기 어디서 나온 값인지 혼동이 있으신 걸까요? 테스트 조건만 충족할 수 있다면, 어떠한 값을 넣든 자유입니다.
그저 테스트라는 것에 초점을 맞춰주시면 될 것 같습니다!
"하나의 게시글에 작성된 댓글 목록을 테스트"하려는 데이터입니다.
혹시 더 궁금한 점 있으시면 편히 문의 주세요!
“shard key가 동일한 데이터는, 동일한 샤드에 저장된다.”
일단 위 관점만 이해하시면 됩니다!
따라서, article_id가 동일한 데이터는, 동일한 샤드에 위치하게 됩니다.
게시글의 댓글 목록은 단일 샤드에 들어가 있기 때문에, 단일 샤드에서만 빠르게 쿼리할 수 있는 것입니다!
만약, 2개의 샤드(0번과 1번)가 있고, 샤드 키를 결정하는 방법이 게시글ID % 2라면,
샤드0 = [article_id 짝수인 게시글들의 댓글 목록]
샤드1 = [article_id 홀수인 게시글들의 댓글 목록]
아 감사합니다!! comment테이블 데이터는 article테이블의 DB보존위치를 따라가는거였군요...
comment테이블의 데이터도 article테이블처럼 랜덤으로 DB보존위치가 바뀐다고 생각했습니다 ㅎ
정확히는 article 테이블과는 무관하고,
comment 테이블의 article_id에 의해 샤드가 결정된다고 보시면 될 것 같네요.
article 테이블과 comment 테이블은 서로 다른 데이트베이스에 위치해있다는 관점입니다. (MSA DB 격리)
서로 다른데이터 베이스라고 하시면 article 테이블의 article_id를 기준으로 comment 테이블에서 해당 뎃글을 검색하는 그러한 방식이 되는건가요? 결국 DB위치가 다르면 join을 쓸 수가 없을듯한데..
네 맞습니다!
DB join을 이용하는게 아니라, 애플리케이션 join을 이용할 수 있습니다.
"게시글 조회 최적화" 챕터에서 위 내용과 최적화하는 방법을 배우게 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. ultimates님.
스프링 부트로 대규모 시스템을 설계하면서 Comment와 Article 엔티티 간의 연관 관계 설정과 관련된 질문을 주셨네요. 질문하신 내용은 데이터베이스 설계와 관련된 중요한 개념을 다루고 있습니다. 아래에 몇 가지 설명을 드리겠습니다.
연관 관계 설정:
article_id
를 사용하여 Article 테이블과의 관계를 맺는 것이 일반적입니다. 이는 각 Comment가 특정 Article에 달린 댓글임을 나타내기 위해 필요합니다.@ManyToOne
및 @JoinColumn
등의 어노테이션을 사용하여 Comment 엔티티가 Article 엔티티와 연관되어 있음을 나타낼 수 있습니다.Shard Key 사용:
article_id
를 Shard Key로 사용하는 경우, 같은 Article에 속한 Comment들은 같은 Shard에 위치할 수 있도록 함으로써 데이터 조회 시 성능을 향상시키는 데 도움을 줄 수 있습니다.값 설정:
article_id
가 Comment에 올바르게 설정되어야 Article과의 관계가 성립됩니다. 질문하신 “1 고정값”에 대한 부분은 특정히 설계된 부분이 아니라면, 각 Comment가 본인의 Article에 맞는 article_id
를 갖고 있어야 합니다. article_id
를 Comment를 생성하면서 자동으로 매칭시키는 로직이 필요합니다.이와 관련된 실용적인 구현 예제나 더 구체적인 코드 설명이 필요한 경우, 아래 유사한 질문을 다룬 링크들을 참고하시길 추천드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이해되었습니다 ㅎ
그렇다면 article_id가shard key로 사용된다고 하셨는데 DB가 shard화 되어있다고 하면 DB에는 어떠한 식으로 나누어져서 저장되는 걸까요?