목록분류 전체보기 (718)
쌓고 쌓다
테스트 코드를 작성하는중에 문제가 발생했다. 먼저, 장소와 게시글의 관계는 1:N 관계이다. 다음의 테스트 코드를 보자. Location location = new Location(); location.setTitle("테스트 장소"); locationRepository.save(location); Poster poster = new Poster(); poster.setTitle("게시글1"); poster.setLocation(location); posterRepository.save(poster); Poster poster2 = new Poster(); poster2.setTitle("게시글1"); poster2.setLocation(location); posterRepository.save(post..
테스트 코드를 작성하던 중 NPE가 발생했다. List locationImages = location.getLocationImages(); for (LocationImage locationImage : locationImages) { imageStore.deleteLocationImage(locationImage); } get 메서드를 호출하여 반환받은 List를 탐색하는 코드이다. 여기서 반환 받은 컬렉션이 NULL이라면 난 NPE가 발생하지 않고 반복문만 돌지 않을거라 생각했었다. List를 탐색하는 로직이 존재할 수 있으니 엔티티의 List와 같은 컬렉션 필드는 new로 컬렉션을 초기화해주는 것이 좋다. 그리고 컬렉션을 초기화해주면 좋은 이유가 한가지 더 있다. 나중에 임의로 개발자가 초기화하게 된..
똑같은 요청이라도 특정 조건에서는 권한 체크를 확인하는 로직을 구현하고자 한다. 작성한 코드는 다음과 같다. @GetMapping public ResponseEntity getLocations(@RequestParam("latitude") Double latitude, @RequestParam("longitude") Double longitude, @Valid @ModelAttribute LocationConditionRequest conditionRequest) throws PermissionException { Boolean approve = conditionRequest.getApprove(); if (!approve) { Authentication authentication = SecurityCo..
클라이언트는 회원가입시 이메일 인증 번호와 프로필 이미지를 서버로 전송한다. 이때 이메일 인증 번호가 일치할때 이메일 인증서를 찾아 삭제하고, 프로필 이미지 업로드 로직을 수행한다. 그런데 프로필 이미지 업로드 로직을 수행할때 업로드 용량의 제한이 있어서 예외가 발생할 수 있다. 이때 @Transactional을 통해 롤백을 수행하여 삭제한 이메일 인증서를 삭제하지 않고 다시 원래 상태로 DB에 두는 롤백을 원했다. 그러나 예외는 발생했지만 롤백은 되지 않는 문제가 발생했다. 문제의 코드는 다음과 같다. @Transactional public MemberResponse addMember(SignUpMember signUpMember, MultipartFile memberImg) throws Duplica..
https://school.programmers.co.kr/learn/courses/30/lessons/150369#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 최소 이동 거리로 배송과 픽업을 모두 완료하려면 계속 가장 먼 거리의 집을 먼저 방문하며 배송과 픽업을하면 된다. 가장 먼 거리의 집(픽업 또는 배송이 필요한 집)을 가는길에 배송이 필요한 가장 먼 집들을 배송을 진행하고 픽업이 필요한 가장 먼 집들을 픽업을 진행하면 된다. 전체 코드 #include #include #include #include using namespace ..
여러 Controller를 작성하다가 내가 어떨땐 다음과 같이 Controller에서 DTO -> Entity 변환을 하여 Service단에 넘겨주는 코드를 작성하기도 하고, PosterController.java Poster poster = PosterRequest.toEntity(posterRequest); posterService.addPoster(poster, files, locationId, member); 내가 어떨땐 Controller에서 DTO를 그대로 넘기고 Serive단에서 DTO -> Entity 변환을 하는 코드를 작성하기도 한게 눈에 들어왔다. PosterService.java void addPoster(PosterRequest posterRequest) { Poster poste..
Merge하고 작업하던 브랜치를 삭제했고 분명 브랜치는 존재하지 않는데. 기존에 작업했던 feature/approveParameter 브랜치가 남아있어 보인다. git remote update를 해도 자꾸 나타난다... 다음 명령어로 지워주자. git remote prune origin local에서 remote를 참조하는데 유효하지 않는것을 지워주는 작업이다. 존재하지 않는 브랜치가 제거되었다. git remote update는 remote에 존재하는 브랜치를 가져올뿐이지 삭제된것을 반영해주지는 않는다고한다.
특정 게시글에 달린 댓글 개수와 좋아요 개수를 구하는 쿼리를 작성하고자 했다. 먼저 poster_id가 61인 게시글에 달린 댓글들을 보자. 댓글 id가 25, 26, 34번으로 3개의 댓글이 존재한다. 여기서 게시글과 댓글을 LEFT JOIN하여 결과를 보자. select * from poster LEFT JOIN comment ON poster.id = comment.poster_id; 게시글 정보와 댓글 정보가 붙어 출력된다. 그럼 게시글에 달린 댓글 개수를 세보자. select poster.id, COUNT(comment.id) from poster LEFT JOIN comment ON poster.id = comment.poster_id GROUP BY poster.id; 61번 게시글에 달린 ..