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

팀원분들과 API에 어떤 파라미터와 아웃풋 값이 필요할지 논의하여, 그 결과를 통해 getConfig, getConfigAll API에 대한 명세를 아래과 같이 진행하였습니다.


아래와 같은 예시 화면이 안내되었습니다.


DB의 객체를 나누어 가져오는 방식에 대해 백엔드 팀원분과 토의하였고,
모두 가져와 나누자, 쿼리를 보내 가져오자, 프론트에서 처리하자(?) 등 다양한 의견이 나왔고, 그 중 가장 손쉬운 방법인 JPA Paging 방법을 발견하고 다음과 같이 구현하였다.
# VersionService
public Page<Version> getVersionList(int count) {
# PageRequest 임시로 0 설정 매개변수는 (page,size) 형태
PageRequest pageRequest = PageRequest.of(0,count);
return versionRepository.findAll(pageRequest);
}
querydsl, @Query 어노테이션 사용 등 다양한 방법을 떠올리고 시도했지만, 코딩하던 중간에 배터리가 없어 방전되는 바람에 코드가 증발해서 다른 팀의 백엔드 팀원분께 도움을 요청했고,
JPA의 findTopby와 OrderBy를 이용하여 구현하였습니다.
# VersionService
public Version getRecentVersion(Version version) {
#findTop N By 형태로 사용, 생략시 default값인 1이 들어감
return versionRepository.findTopByOsInfoOrderByServiceVersionDesc(version.getOsInfo())
.orElseThrow(() -> new IllegalArgumentException("해당 os의 최신 버전 찾기 실패"));
}
프론트엔드와 백엔드 간 데이터를 주고받지 못하는 cors 문제가 발생하여
일단 테스트 진행을 위해 컨트롤러에 @CrossOrigin 어노테이션을 붙여 급한 불은 껐지만, 이렇게 모든 origin에 대해 허용해놓으면 보안상 문제가 될 것이라고 생각되서, 다시 수정할 예정입니다.
@RestController
@CrossOrigin
@RequestMapping("/vercontrol")
@RequiredArgsConstructor
public class VersionApiController {
수업중 갑작스럽게 질문들을 받았는데, 바로 떠오르지 않아 대답을 못했습니다.
제가 알고있다고 생각한 개념이 사실은 완전히 체화되지 않은 지식이였고, 기술 면접 진행 시에도 대처능력을 기르기 위해 다시 한번 개념을 정리하고 재학습의 필요성을 느꼈습니다. 그리고 코드를 작성하다보니 바로바로 메소드들이 떠오르지않아 시간이 지체되고 중간에 실수도 하였습니다. 또한 오류 발생 시에도 어디서 문제가 발생했는지 찾고 대처하는데 시간이 많이 소요되어
스프링 프레임워크 자체에 대한 공부도 더 해야할 필요성을 느꼈습니다.
JPA 페이징
https://velog.io/@conatuseus/JPA-Paging-%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%82%98%EB%88%84%EA%B8%B0-o7jze1wqhj
PageRequest
https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/PageRequest.html
JPA Limit, order 처리하기
https://devfunny.tistory.com/571