[SW 직무역량 부트캠프] 14일차 (팀 프로젝트 마무리)

WJ·2023년 7월 13일

2023-07-13 SW 직무역량 부트캠프 14일차 학습일지

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

PBL

  • Mission 3

어제의 버전관리 시스템 구현 미션을 이어서 진행하였습니다.

구현

VersionService updateCheck()

프론트에서 실제 업데이트 동작을 위한 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

명세가 변경되며 변경점이 많았고, 그 과정에서 문법적인 실수와 파라미터 매핑시 순서 실수 등으로 인해

#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 기능 사용 시 값을 제대로 받아오지 못하는 현상이 발생했습니다.
같은 값이 출력되었고 추가로 분석하여 차이점을 찾으려 했으나 시간이 부족해 실패하였고,
내일 멘토님께 질문을 해봐야겠습니다..

후기

처음 떠올렸던 기능에서 시간이 지나고 피드백을 받으며 스펙을 바꾸며 명세를 수 차례 변경하였습니다. 이 과정에서 제때 바뀐 명세를 반영하지 못하여 에러가 발생하며 시간이 버려지고, 결국 원래 명세하였던 기능 및 추가하고자 하는 기능들을 반영하지 못했습니다.
원래도 짧은 시간의 팀 프로젝트였지만 자바 자체의 문법에 익숙하지 않았고, 디버깅 능력 및 쿼리 작성 능력 부족 등 제 역량 부족으로 인해 더더욱 시간이 부족해져 아쉬웠던 프로젝트 였습니다. 이를 발판으로 하여 부족한 점을 보완하고자 합니다.

profile
주니어 개발자

0개의 댓글