프로젝트/법잘알
-
리스트 조회 시 페이징으로 특정 데이터만 조회프로젝트/법잘알 2024. 2. 23. 20:57
리스트를 조회할 때 fetch join을 사용했다 하더라도 시간이 많이 소요된다. 저번 포스팅에서 데이터를 임의로 30만개를 생성했다고 했는데, 30만개를 실제로 한 번에 get할 일은 거의 없다. 때문에 페이징을 진행하여 원하는 갯수만큼의 데이터를 가져오게 되는데 페이징을 할 때 계속 시간이 오래 걸리는 문제가 생겼다. @Override public Page findAllSuggestion(Category category, Boolean likeCount, Pageable pageable) { JPAQuery query = queryFactory .selectFrom(suggestion) .leftJoin(suggestion.user, user).fetchJoin() // fetch join 제거 .l..
-
조회 시 N+1 문제 해결로 쿼리 최적화프로젝트/법잘알 2024. 2. 23. 20:41
기능 개발을 할 때에는 쿼리에 대해 고려하지 않고 일단 개발을 진행했다. 개발을 완료하고 테스트를 하는 과정에서 쿼리를 호출할 때 N+1 문제가 발생하는 것을 확인했다. SuggestionController @GetMapping("/list") public ResponseEntity suggestionList( @AuthenticationPrincipal PrincipalDetails principal, @RequestParam(name = "category", required = false, value = "category") String category, @RequestParam(name = "likeCount", required = false) Boolean likeCount) { List allS..
-
영속성 컨텍스트 분리로 인한 비밀번호 수정 불가프로젝트/법잘알 2024. 2. 11. 18:10
UserController @PreAuthorize("hasRole('ROLE_USER')") @PatchMapping("/change/password") public ResponseEntity updatePassword( @AuthenticationPrincipal PrincipalDetails principal, @RequestBody ChangePasswordRequestDto request) { userService.updatePassword(principal.getUser(), request.getPassword(), request.getNewPassword()); return ResponseEntity.ok().build(); } UserService @Transactional public v..
-
클린코드와 관심사의 분리프로젝트/법잘알 2024. 2. 4. 14:30
이번 프로젝트를 할 때 이전의 3개의 프로젝트를 보며 느낀점이 있다. 코드가 복잡하고 내가 다시 봐도 이해가 잘 안되는 것이었다. 코드의 중복이 굉장히 많았으며 관심사의 분리도 잘 이루어지지 않아서 service 계층에서 있어야 하는 비즈니스 로직이 컨트롤러에 있는 등 코드도 알아보기 힘들었으며 관심사의 분리도 잘 이루어지지 않았다. 나날이 코드 @GetMapping public GarmentResponseDto Garment(@RequestParam Double temp, @RequestParam Double uv, @RequestParam Double rain, @RequestParam Sex sex) { List outers = garmentService.findOuters(temp, uv, rai..
-
ai 활용 - 텍스트 분석 라이브러리와 생성형 ai의 사용프로젝트/법잘알 2024. 2. 2. 22:29
국회 공공데이터 활용 공모전 공고를 보고 프론트엔드 개발자인 과 동기와 바로 해보자는 얘기가 나왔다.하지만 공고를 늦게 확인해서 시간이 한 달밖에 남지 않았었고, 짧은 시간안에 ai 개발자를 구하기 힘들어서 백엔드 개발자인 내가 동시에 ai까지 구현해보게 되었다. 내가 ai 개발자가 아니기 때문에 유튜브와 구글링, 공식 문서등을 참고하며 개발을 해서 어려운 라이브러리의 코드를 한 줄 한 줄 이해하고 코딩한 것은 아니지만 최대한 원리를 이해하고 사용했다. 요즘은 많은 서비스에 ai 기술을 도입하는데, 백엔드와 ai 간의 호출이 어떻게 이루어지는지도 궁금했었는데 이번 기회에 직접 구현해보면서 백엔드 개발자로서 조금이나마 ai 기술을 이해하게 되었다. chanhee01/LawSearch_AI: 국회 공공데이..
-
스프링 bean 순환참조 에러프로젝트/법잘알 2024. 1. 28. 17:47
like와 suggestion 엔티티가 존재하는데, 프론트엔드 개발자가 suggestion/list에 조회되는 각각의 정책 건의 글마다 로그인된 사용자가 좋아요를 눌렀는지, 안 눌렀는지 상태를 반환해달라고 요청을 했다. public List findAllByUser(User user) { List suggestionList = suggestionRepository.findAllByUser(user); List suggestionIds = suggestionList.stream() .map((suggestion -> suggestion.getId())) .collect(Collectors.toList()); List likes = likeService.likeListBySuggestion(user, sug..