09:00 ~ 18:30 간 공대 6호관 610호에서 수업을 진행하였습니다.

어제의 버전관리 시스템 구현 미션을 이어서 진행하였습니다.
프론트에서 실제 업데이트 동작을 위한 updateCheck 함수를 작성하였습니다.
# VersionService.java
// 최신 버전 가져오기
public Version getRecentVersion(Version version) {
return versionRepository.findTopByOsInfoAndServiceNameOrderByServiceVersionDesc(version.getOsInfo(), version.getServiceName())
.orElseThrow(() -> new IllegalArgumentException("해당 os의 최신 버전 찾기 실패"));
// 체크
}
public UpdateCheckResponseDto updateCheck(String osInfo, String serviceName, String serviceVersion) {
boolean isForcedUpdate = false;
List<Version> versionList = versionRepository.findByIsDeleteFalseAndOsInfoAndServiceName(osInfo, serviceName)
.orElseThrow(() -> new IllegalArgumentException("동일한 os와 서비스네임을 가진 서비스가 없음"));
for (Version version : versionList) {
if(compareVersion(serviceVersion, version.getServiceVersion())) {
if(version.isUpdateType() == true) {
isForcedUpdate = true;
break;
}
}
}
Version recentVersion = Version.builder().build();
// String serviceVersion, boolean isRecentVersion, boolean isForcedUpdate
return new UpdateCheckResponseDto(serviceVersion, compareVersion(serviceVersion, recentVersion.getServiceVersion()), isForcedUpdate);
}
public Long getVersionCount() {
return versionRepository.count();
}
public static boolean compareVersion(String serviceVersion, String compareVersion) {
boolean isNeedsUpdate = false;
String[] serviceVersionArr = serviceVersion.split(".");
String[] compareVersionArr = compareVersion.split(".");
int maxLen = Math.max(serviceVersionArr.length, compareVersionArr.length);
for (int i = 0; i < maxLen; i++) {
int x = Integer.parseInt(serviceVersionArr[i]);
int y = Integer.parseInt(compareVersionArr[i]);
if (x < y) {
isNeedsUpdate = true;
} else {
isNeedsUpdate = false;
}
}
return isNeedsUpdate;
}
명세가 변경되며 변경점이 많았고, 그 과정에서 문법적인 실수와 파라미터 매핑시 순서 실수 등으로 인해
#VersionRepository.java
Optional<Version> findTopByOsInfoAndServiceNameOrderByServiceVersionDesc(String osInfo, String serviceName);
List<Version> findByOsInfoAndServiceName(String osInfo, String serviceName);
// @Query("select v from Version v where v.os_info= osInfo and v.service_name= serviceName and is_delete = false")
Optional<List<Version>> findByIsDeleteFalseAndOsInfoAndServiceName(String osInfo, String serviceName);
Restful한 API 구현을 위해 기존에 PostMapping으로 구현되어 있던 Read 기능들을 GET Method를 사용하여 받아 오고자 GetMapping RequestParam을 사용하여 Dto를 매핑하였지만,
JpaRepository 기능 사용 시 값을 제대로 받아오지 못하는 현상이 발생했습니다.
같은 값이 출력되었고 추가로 분석하여 차이점을 찾으려 했으나 시간이 부족해 실패하였고,
내일 멘토님께 질문을 해봐야겠습니다..
처음 떠올렸던 기능에서 시간이 지나고 피드백을 받으며 스펙을 바꾸며 명세를 수 차례 변경하였습니다. 이 과정에서 제때 바뀐 명세를 반영하지 못하여 에러가 발생하며 시간이 버려지고, 결국 원래 명세하였던 기능 및 추가하고자 하는 기능들을 반영하지 못했습니다.
원래도 짧은 시간의 팀 프로젝트였지만 자바 자체의 문법에 익숙하지 않았고, 디버깅 능력 및 쿼리 작성 능력 부족 등 제 역량 부족으로 인해 더더욱 시간이 부족해져 아쉬웠던 프로젝트 였습니다. 이를 발판으로 하여 부족한 점을 보완하고자 합니다.