Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

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

未关闭
#7 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
20/100
Issue 类型
功能
描述清晰度
需要澄清
活跃度
停滞
技术栈
java, spring

调研方向

未指定任何文件、测试或入口点。首先定位密钥生成接口及其对 Redisson 并发功能的使用,然后定义实体密钥格式和参数顺序应如何表示;完成的标准是无效的密钥形状会在编译时被拒绝,而不是生成密钥。

由索引模型根据 Issue 内容生成。

描述

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 구분자가 있을 경우 두 구분자의 순서를 파라미터로 제한할 수 있는 방법은 없다.

主要语言
没有语言数据
星标
0
派生
0
PR 合并指标
30 天内没有已合并 PR

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

minaver/Daily-Issue 的其他 Issue

查看 minaver/Daily-Issue 的全部 Issue

相似的 Issue

更多 Backend & API Design Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。