Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

형식을 명시하여 컴파일 시점에 에러를 찾아낼 수 있는 방법

Đang mở
#7 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

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

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ả

Java Spring

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

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của minaver/Daily-Issue

Tất cả issue của minaver/Daily-Issue

Issue tương tự

Thêm issue về Backend & API Design

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.