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

WJ·2023년 7월 12일

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

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

PBL

  • Mission 3

명세

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

  • 기본 리스트 화면의 API인 getConfigAll

  • Add : Version 정보를 Insert 합니다.

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

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

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

구현

이번에는 기존 GetConfigAll과 versionAdd, Test기능 API 구현 및 스펙 수정, 코드의 리팩토링을 진행하였습니다.

GetConfigAll(A. 기본 리스트 화면)

임시로 표시하기위해 임의의 값를 파라미터로 넣어 사용하였는데, 프론트와 연동을 위해 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());
    }

VersionAdd (B. ADD)

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);
    }

getversion (E. Test)

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 통신 과정에서 잘못된 명세 및 구현하며 수정된 부분으로 인해 명세와 달라져 시간이 지체된 부분이 있었는데, 정확한 명세와 명세에 따른 구현, 수정시 명세또한 수정되어야 한다는 점을 간과했던 것 같습니다.
프론트와 백엔드, 즉 팀원간 소통 및 협업이 부족하다 느껴 더 시간을 더 투자하여 진행하고자 합니다.

profile
주니어 개발자

0개의 댓글