jdk 14에 등장하여 16부터 정식스펙으로 포함되었다. 사실상 많이쓰는 8, 11, 17 과 같은 lts 에선 17에서 처음 사용 되기때문에 깊이있는 자료는 찾기 힘들었습니다.
대략적인 설명으론 생성자, get, tostring, equals 와 같은 것들을 기본으로 제공해줍니다. 따라서 불변객체, DTO 와 에서 사용하면 좋을것 같아 이번 프로젝트 REST API 작업을할때 사용했습니다.
@Schema(description = "Patch 할때 사용")
public record UpdateRequest(String name, String about, String xp, String count, String provider, String difficulty) {
}
다음과 같은 DTO 를 만들때 사용했습니다. 기존에 롬복을 사용하여 생성자 만들어주고, @Data 와 같은 어노테이션들을 붙여줄 필요없이 정의만 하면 됐고
public RuleForm updateRule(Long id, UpdateRequest updates) {
String name = updates.name();
String about = updates.about();
String strXp = updates.xp();
String strCount = updates.count();
String provider = updates.provider();
String difficulty = updates.difficulty();
RuleForm ruleForm = new RuleForm();
setForm(id, ruleForm);
if (name != null) {
ruleForm.setName(name);
}
if (about != null) {
ruleForm.setAbout(about);
}
if (strXp != null) {
try {
Integer xp = Integer.parseInt(strXp);
ruleForm.setXp(xp.toString());
} catch (NumberFormatException e) {
throw new NumberInputException("xp는 숫자로 입력해주세요");
}
}
if (strCount != null) {
try {
Integer count = Integer.parseInt(strCount);
ruleForm.setCount(count.toString());
} catch (NumberFormatException e) {
throw new NumberInputException("Count는 숫자로 입력해주세요");
}
}
if (provider != null) {
ruleForm.setProvider(provider);
}
if (difficulty != null) {
ruleForm.setDifficulty(difficulty);
}
return ruleForm;
}
@PatchMapping("/v1/{ruleid}")
@Operation(summary = "규칙수정", description = "파라미터 id 를 입력받고 수정하고 싶은 Key:value 의 내용을 입력", tags = "수정")
public RsData<ModifyRuleResponse> updateRule(@Parameter(description = "RuleId", in = ParameterIn.PATH) @PathVariable("ruleid") Long ruleid
, @RequestBody UpdateRequest updates) {
RuleForm ruleForm = ruleService.updateRule(ruleid, updates);
ruleService.modify(ruleid, ruleForm);
Rule rule = ruleService.getRule(ruleid).getData();
return RsData.of("S-1", "수정 완료", new ModifyRuleResponse(rule));
}
다음과 같이 service 와 controller 를 사용해서 Patch 를 구현했습니다.
물론 Service 에서 그러한 로직을 만들었지만 Patch도 잘 되는것을 확인할 수있습니다.
복잡한 비즈니스 로직이 들어가는것이 아닌 가볍게 dto, vo 를 만들때 사용하면 편리하게 코딩을 할 수 있을것같습니다.
dto 만들고 rest api 만들고 동일한 작업의 반복이지만 이처럼 새로운 기술들을 적용해보면서 프로젝트를 진행하면 색다른 느낌도 나고 보다 편리하게 코딩을 할 수있을거같습니다 추가적으로 정보가 더 있는지 구글링을 해봤는데 엔티티로는 사용을 하기엔 힘들거같다고 하는데 나중에 기회가 된다면 한번 알아보겠습니다.