09:00 ~ 17:30 간 강원대학교 AI융합 라운지에서 수업을 진행하였습니다.

새로운 미션의 목표에 맞춰 getConfigAll API에 대한 명세를 수정하였고, 추가적인 API에 대한 명세를 아래과 같이 진행하였습니다.
기본 리스트 화면의 API인 getConfigAll

Add : Version 정보를 Insert 합니다.

수정 : Version 정보를 Update 합니다.

삭제 : Version 정보를 Delete 합니다.

Test : 해당 버전의 정보를 json String으로 정상적으로 출력하는지 확인하는 Test기능

이번에는 기존 GetConfigAll과 versionAdd, Test기능 API 구현 및 스펙 수정, 코드의 리팩토링을 진행하였습니다.
임시로 표시하기위해 임의의 값를 파라미터로 넣어 사용하였는데, 프론트와 연동을 위해 Dto 및 컨트롤러를 수정하였습니다.
# VersionService
public Page<Version> getVersionList(Integer pageNumber, Integer pageSize) {
PageRequest pageRequest = PageRequest.of(pageNumber, pageSize);
return versionRepository.findAll(pageRequest);
}
# VersionController
@PostMapping("/getconfigall")
public ResponseEntity<List<Version>> getConfigAll(@RequestBody VersionPageRequestDto requestDto) {
return ResponseEntity.ok(versionService.getVersionList(requestDto.getPageNumber(), requestDto.getPageSize()).toList());
}
HTTP Status code 201를 반환하기 위해 created로 리턴하였습니다.
# VersionService
@PostMapping("/versionadd")
public ResponseEntity<Version> versionAdd(@RequestBody AddVersionRequestDto requestDto,
UriComponentsBuilder builder){
// 컨텍스트 상대 경로 URI를 쉽게 만들게 해주는 UriComponentsBuilder를 컨트롤러 메서드의 인자로 지정
Version version = Version.createVersion(requestDto);
versionService.saveVersion(version);
URI location = builder.path("/vercontrol/versionadd")
.buildAndExpand(version.getId()).toUri();
return ResponseEntity.created(location).body(version);
}
PathVariable로 id를 받아와 해당 정보를 리턴
# VersionController
@GetMapping("/getversion/{id}")
public ResponseEntity<Version> getVersion(@PathVariable Long versionId) {
return ResponseEntity.ok(versionService.findById(versionId));
}

위 사진과 같이 기존 컨트롤러 단에서 builder를 호출하여 객체를 만드는 것이 OOP와 멀어지고 실제 유지보수에도 좋지 않다 판단하여 엔티티에 createVersion 함수를 추가하여 리팩토링 하였습니다.
# Version.java
@Builder
public static Version createVersion(VersionRequestDto versionRequestDto) {
Version version = Version.builder()
.osInfo(versionRequestDto.getOsInfo())
.serviceVersion(versionRequestDto.getServiceVersion())
.serviceName(versionRequestDto.getServiceName())
.updateType(versionRequestDto.isUpdateType())
.message(versionRequestDto.getMessage())
.packageInfo(versionRequestDto.getPackageInfo())
.build();
return version;
}
프론트와 API 통신 과정에서 잘못된 명세 및 구현하며 수정된 부분으로 인해 명세와 달라져 시간이 지체된 부분이 있었는데, 정확한 명세와 명세에 따른 구현, 수정시 명세또한 수정되어야 한다는 점을 간과했던 것 같습니다.
프론트와 백엔드, 즉 팀원간 소통 및 협업이 부족하다 느껴 더 시간을 더 투자하여 진행하고자 합니다.