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

[1단계 - DB 복제와 캐시] 카피(김상혁) 미션 제출합니다. #43

Merged
merged 12 commits into from
Oct 26, 2024

Conversation

tkdgur0906
Copy link
Member

안녕하세요 초코칩!
잘 부탁드립니다~

복제 지연 해결방법에 대해 고민하면서 생각했던 것들에 대해 적어봤어요.
리뷰하실 때 참고 부탁드립니다!

1. 비동기를 동기방식으로 바꾼다

  • 항상 소스 서버와 리플리카 서버의 데이터가 같다는 것이 보장되기 때문에 복제 지연을 방지할 수 있다.
  • 소스 서버에 기록하는 것과 리플리카 서버로 복제하는 것이 하나의 작업으로 처리된다면 성능저하가 발생한다.
  • 모든 작업이 데이터의 일관성이 중요한 것은 아니기 때문에 해당 방법은 단점이 클 것이라 판단했다.

2. 비동기를 반동기방식으로 바꾼다.

  • 리플리카 서버의 릴레이 로그까지 적는 작업까지 하나의 트랜잭션으로 처리한다.
  • 리플리카 서버로 데이터가 적혔다는 것은 보장할 수 있지만, 복제 지연을 완벽하게 방지하는 것은 아니다.
  • 결국 비동기에 비해 처리 속도가 느리고, 복제 지연을 완벽히 막지 않기 때문에 적용하지 않았다.

3. 코드 상에서 리플리카 서버에 데이터가 없는 경우 소스 서버에 다시 조회하도록 한다.

  • 복제 지연 발생 시 트랜잭션을 한번 더 시작하여 쿼리를 보내야한다는 단점이 있지만 복제 지연 발생을 완벽히 막을 수 있다는 장점이 있고 원하는 곳에 적용할 수 있어 선택하였다.

Copy link

@Chocochip101 Chocochip101 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반가워요, 카피 🙌🏻

구현 잘해주셔서, 간단하게 리뷰 남겼어요!

확인 부탁드립니다 :)

Comment on lines 37 to 39
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put(DataSourceType.WRITER, writeDataSource);
dataSourceMap.put(DataSourceType.READER, readDataSource);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

함수 분리를 해봐도 좋을 것 같아요!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

initializeDataSource 메서드로 분리했습니다!

if (discountAmount < 1000 || discountAmount > 10000) {
throw new IllegalArgumentException("할인 금액은 1,000원 이상, 10,000원 이하여야 합니다.");
}
if (discountAmount % 500 != 0) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

매직 넘버 적용해주세요!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

적용했습니다!

docker/init.sql Outdated
minimumOrderAmount INT NOT NULL,
discountAmount INT NOT NULL,
discountRate INT NOT NULL,
category VARCHAR(255),

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(궁금) 255로 정하신 이유가 있나요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사실 별 생각없이 적용한 값입니다!
카테고리의 특성상 길이가 길지 않기 떄문에 30으로 해도 적절할 것 같아 수정했습니다!

Copy link

@Chocochip101 Chocochip101 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

모든 요구사항 만족하셔서 approve할게요!

수고 많으셨어요 :)

@Chocochip101 Chocochip101 merged commit 5db2629 into woowacourse:tkdgur0906 Oct 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants