inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

댓글 최대 2 depth - CUD API 테스트 & 테스트 데이터 삽입

article_id에 대해서

해결된 질문

150

ultimates

작성한 질문수 34

0

comment기능에서 comment테이블에 article_id을 shard key로 사용한다고 하셨는데 comment기능은 article기능에 뎃글을 다는 기능으로 article테이블에 article_id와 연관관계를 맺는 컬럼이 아닌건가요? 만약맞다면 article테이블에 article_id를 comment테이블에 article_id에 저장되게끔 해야 할 듯 한거 같은데 1고정값으로 넣는게 이해가 안되서 질문드렸습니다.

java mysql spring-boot kafka redis

답변 2

0

쿠케

ultimates님, 안녕하세요!

말씀하신대로 "게시글의 댓글"이 맞고,

comment 테이블의 article_id가 article 테이블과 연관 관계를 맺기 위한 참조키(외래키)입니다.

강의에서는 1번 게시글(article_id=1)의 댓글을 "테스트" 데이터로 삽입하는 것이고,

"게시글별 댓글 목록"이라는 쿼리 패턴을 만족하고, 그 동작의 빠름을 "테스트" 하기 위해,

1번 게시글에 "댓글 테스트 데이터"를 삽입하는 것입니다.

1번 게시글이 실제로 없는데 갑자기 어디서 나온 값인지 혼동이 있으신 걸까요? 테스트 조건만 충족할 수 있다면, 어떠한 값을 넣든 자유입니다.

그저 테스트라는 것에 초점을 맞춰주시면 될 것 같습니다!

"하나의 게시글에 작성된 댓글 목록을 테스트"하려는 데이터입니다.

 

혹시 더 궁금한 점 있으시면 편히 문의 주세요!

0

ultimates

이해되었습니다 ㅎ

그렇다면 article_id가shard key로 사용된다고 하셨는데 DB가 shard화 되어있다고 하면 DB에는 어떠한 식으로 나누어져서 저장되는 걸까요?

1

쿠케

“shard key가 동일한 데이터는, 동일한 샤드에 저장된다.”

일단 위 관점만 이해하시면 됩니다!

따라서, article_id가 동일한 데이터는, 동일한 샤드에 위치하게 됩니다.

게시글의 댓글 목록은 단일 샤드에 들어가 있기 때문에, 단일 샤드에서만 빠르게 쿼리할 수 있는 것입니다!

 

만약, 2개의 샤드(0번과 1번)가 있고, 샤드 키를 결정하는 방법이 게시글ID % 2라면,

샤드0 = [article_id 짝수인 게시글들의 댓글 목록]

샤드1 = [article_id 홀수인 게시글들의 댓글 목록]

1

ultimates

아 감사합니다!! comment테이블 데이터는 article테이블의 DB보존위치를 따라가는거였군요...

comment테이블의 데이터도 article테이블처럼 랜덤으로 DB보존위치가 바뀐다고 생각했습니다 ㅎ

1

쿠케

정확히는 article 테이블과는 무관하고,

comment 테이블의 article_id에 의해 샤드가 결정된다고 보시면 될 것 같네요.

article 테이블과 comment 테이블은 서로 다른 데이트베이스에 위치해있다는 관점입니다. (MSA DB 격리)

0

ultimates

서로 다른데이터 베이스라고 하시면 article 테이블의 article_id를 기준으로 comment 테이블에서 해당 뎃글을 검색하는 그러한 방식이 되는건가요? 결국 DB위치가 다르면 join을 쓸 수가 없을듯한데..

3

쿠케

네 맞습니다!

DB join을 이용하는게 아니라, 애플리케이션 join을 이용할 수 있습니다.

"게시글 조회 최적화" 챕터에서 위 내용과 최적화하는 방법을 배우게 됩니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. ultimates님.

스프링 부트로 대규모 시스템을 설계하면서 Comment와 Article 엔티티 간의 연관 관계 설정과 관련된 질문을 주셨네요. 질문하신 내용은 데이터베이스 설계와 관련된 중요한 개념을 다루고 있습니다. 아래에 몇 가지 설명을 드리겠습니다.

Comment와 Article의 연관 관계

  1. 연관 관계 설정:

    • Comment 테이블에서 article_id를 사용하여 Article 테이블과의 관계를 맺는 것이 일반적입니다. 이는 각 Comment가 특정 Article에 달린 댓글임을 나타내기 위해 필요합니다.
    • JPA나 다른 ORM을 사용한다면 @ManyToOne@JoinColumn 등의 어노테이션을 사용하여 Comment 엔티티가 Article 엔티티와 연관되어 있음을 나타낼 수 있습니다.
  2. Shard Key 사용:

    • Shard Key는 데이터의 저장 위치를 결정하는 키입니다. article_id를 Shard Key로 사용하는 경우, 같은 Article에 속한 Comment들은 같은 Shard에 위치할 수 있도록 함으로써 데이터 조회 시 성능을 향상시키는 데 도움을 줄 수 있습니다.
  3. 값 설정:

    • 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