형식을 명시하여 컴파일 시점에 에러를 찾아낼 수 있는 방법
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 20/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- java, spring
- Lĩnh vực
- backend, distributed-systems
Hướng nghiên cứu
Không có tệp, bài kiểm thử hoặc entry point nào được nêu tên. Bắt đầu bằng cách xác định interface tạo khóa và cách sử dụng tính đồng thời của Redisson, sau đó xác định cách biểu diễn định dạng khóa thực thể và thứ tự tham số; hoàn thành có nghĩa là các dạng khóa không hợp lệ bị từ chối tại thời điểm biên dịch thay vì tạo ra một khóa.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Spring 동시성 처리를 위해 Redisson을 사용하다 Redisson에서 Key를 사용하기 위한 Entity별 키 인터페이스를 구성하였다.
현재 구성한 key 생성 메서드는 다음과 같다
@Override
public String getKey(String... args) {
StringBuffer key = new StringBuffer(domain);
String[] components = args;
for (String comp : components) {
key.append("_");
key.append(comp);
}
return key.toString();
}
이때 키 같은 경우 "Entity 이름(domain)" + "구분자 1" + ... "구분자 N" 과 같이 딱 정형화된 틀이 있다.
위 코드의 문제점은 해당 메서드를 사용하는 사용자가 잘못된 순서나 잘못된 형식으로 파라미터를 입력해도 키가 그대로 생성되고 사용자는 의심 없이 사용하게 된다는 점이다.
이렇게 된다면 내부 틀을 아는 사용자만이 해당 메서드를 사용할 수 있고 메서드를 사용하는 시기에 틀에 맞춰 파라미터를 입력해야 하니 안정성이 취약해진다.
즉 안전하고 일관된 키 생성을 추구하려면 메서드에서 정형화된 틀을 제공해주고 이를 어긴다면 컴파일 시점에서 에러를 보여줘야한다.
초기 접근
초기에는 엔티티 객체 자체를 파라미터로 넘겨 해당 메소드 안에서 형식에 맞게 키를 생성해주는 방식을 선택했다.
이 방식은 redisson을 사용한 동시성 처리와 같이 사용하는데 문제가 있었다.
redisson을 사용한 동시성 처리는 동시성 처리가 필요한 튜플을 접근하기전 특정하여 이를 동기적으로 처리하는 방식이고 이때 튜플들을 구분하기 위해 키를 사용한다.
즉 키를 먼저 생성해야 튜플에 접근하고 엔티티를 획득할 수 있으니 (구분되는 키 -> 엔티티 접근) 엔티티를 사용하여 키를 생성하는 것은 동시성 처리 순서에 부합하지 않는 것이다.
메서드 파라미터
메서드 파라미터의 제한으로 한계가 있어 보인다. 파라미터로 제약할 수 있는 부분은 파라미터의 '타입값'과 '수'인데 만약 구분자의 종류가 둘다 Integer 인 두 개의 mapId, robotId 구분자가 있을 경우 두 구분자의 순서를 파라미터로 제한할 수 있는 방법은 없다.
- Ngôn ngữ chính
- Không có dữ liệu ngôn ngữ
- Star
- 0
- Fork
- 0
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của minaver/Daily-Issue
-
MSA에 대하여Đang mởSpring
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
minaver/Daily-Issue#10 · 1 bình luận ·
-
커넥션 풀과 트랜잭션에 대한 통찰이 필요하다.Đang mởDB Spring
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
minaver/Daily-Issue#9 ·
-
TDD
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
minaver/Daily-Issue#5 · 1 bình luận ·
-
Tech
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
minaver/Daily-Issue#3 ·
-
단위테스트를 해야하는 영역은 어디까지일까?Đang mởTDD
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
minaver/Daily-Issue#1 · 2 bình luận ·
Tất cả issue của minaver/Daily-Issue
Issue tương tự
-
`github-events` aborts the repository scan when a closed pull's API payload has a null `head`Có thể đã có người làm @renyamamoto2026-cmyk đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
zerocracy/judges-action#2823 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
test(fabric): load the TestLoad fixture through config.Service instead of a raw koanf decodeĐang mởcleanup hacktoberfest priority: low skill: good first issue testing
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
hyperledger-labs/fabric-smart-client#2197 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug] Unhandled ValueError terminates watchdog thread when GISRC value contains multiple colonsĐang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
corro-client drops the last byte of a response line that has no trailing newlineCó thể đã có người làm @RaphaelFakhri đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 64/100
joinrpg/joinrpg-net#5752 ·
Maintainer thường phản hồi trong vòng 1 ngày