목록2024/03 (17)
쌓고 쌓다
https://school.programmers.co.kr/learn/courses/30/lessons/258712 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 m을 통해 A가 B에게 보낸 선물 개수를 관리합니다. gift의 i번째 원소가 "muzi frodo" 값을 갖는다면 m에 "muzi frodo"를 Key로하는 Value의 값을 1 증가시킵니다. sendCnt, reveiveCnt를 통해 보내거나 받은 선물을 관리합니다. m의 값을 갱신할때 동시에 A가 보낸 선물 개수와 B가 받은 선물 개수를 증가시킵니다. month를 통해 다음달에 ..
API의 응답으로 위와 같이 JSON 데이터를 받는다. 나는 response -> body -> items -> item의 List를 받길 원한다. JSON의 List는 어떻게 처리할 수 있을까? 테스트용으로 데이터의 contentid만 받아서 저장해보자. 다음과 같이 클래스를 만든다. @Data @JsonIgnoreProperties(ignoreUnknown = true) public class LocationId { private String contentid; } JsonIgnoreProperties(ignoreUnknow) : item 리스트의 원소 데이터에 contentid 외에도 많은 필드들이 있다. 만약 내가 원하는 필드만 바인딩하길 원한다면 이 옵션을 주면 된다. 이 옵션을 쓰지 않는다면 ..
테스트 코드를 작성하며 실제로 업로드한 파일이 서버와 디스크에 저장되는지 확인할 필요가 있었다. 다음 메서드를 호출하여 정상적으로 파일이 저장되길 원한다. public Location addLocation(Location location, List files) List은 어떻게 생성해서 넘거야할까? 다음과 같이 MockMultipartFile을 사용하여 MultipartFile을 대체할 수 있다. String imgName1 = "abc1.jpg"; String imgName2 = "abc2.jpg"; MockMultipartFile file1 = new MockMultipartFile(imgName1, imgName1, MediaType.IMAGE_JPEG_VALUE, "img".getBytes());..
https://school.programmers.co.kr/learn/courses/30/lessons/258711 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 생성된 정점은 다음 특징을 갖는다. 생성된 정점으로 진입하는 노드의 개수는 0개이다. 생성된 정점으로부터 진출하는 노드의 개수는 2개이상이다. (이것이 빠지면 막대 그래프의 젤 마지막 노드를 생성된 노드로 오해 가능) 이제 위의 특징으로 생성된 노드를 찾았다면 생성된 노드로부터 진출하는 노드는 각각의 그래프의 임의의 정점을 가리킨다. 즉, 생성된 노드의 진출 노드 개수가 그래프의 총 ..
테스트 코드를 작성하는중에 문제가 발생했다. 먼저, 장소와 게시글의 관계는 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..