88 TIL

재미있고, 게임을 좋아해서 여가 시간의 대부분을 게임을 하며 보냈습니다.

그가 모든 시간을 프로그래밍에 사용했다는 사실은 자발적이었습니다.

“미쳤어”라고 생각할 정도로 대단한 일이 아무렇지도 않게 일어난다.

예전에 작성했던 코드는 해야 할 일을 다 했기 때문에 수정하고 있는데 재미있습니다.

for 문이 왜 이렇게 많은지 대부분 람다 식으로 변경되었습니다. 문 찾기 및 람다 식

명확하게 말은 안하지만 튜터님께 여쭤보니 멀티스레드 쪽 정리를 하라고 하더군요.

마지막으로 콘텐츠를 기반으로 TIL을 작성하고 싶습니다.

멀티스레딩:

  1. 여러 스레드(하위 프로세스)를 동시에 실행할 수 있는 프로그램 또는 운영 체제의 기능으로, 프로그램의 여러 부분이 동시에 실행될 수 있습니다. 스레드는 동일한 프로그램 내에서 다른 스레드와 독립적으로 실행할 수 있는 간단한 프로세스입니다.
  2. 프로그램의 여러 부분이 동시에 실행될 수 있으므로 시작하기 전에 다른 부분이 완료될 때까지 대기함으로써 컴퓨터 시스템의 리소스를 보다 효율적으로 사용할 수 있습니다. 이를 통해 프로그램의 전반적인 성능을 향상하고 작업을 완료하는 데 걸리는 시간을 줄일 수 있습니다.
  3. 병렬 처리가 필요한 응용 프로그램에서 일반적으로 사용됩니다. 그러나 멀티스레딩은 프로그램을 복잡하게 만들 수도 있습니다. 예를 들어 경쟁 조건, 교착 상태 및 기타 동시성 문제를 방지하려면 스레드 간의 동기화가 필요합니다.

대단한 내용은 아닙니다. 그냥 응답 속도를 확인하고 for 및 lamda와 비교합니다.

코드 리팩토링을 위해 이전에 구현한 admin에서 게시물 삭제를 시도했습니다.

org.springframework.dao.DataIntegrityViolationException 해당 오류가 발생했습니다.

이전에 본 적이 있는 버그라 당황하지 않았지만 마스터를 삭제하기 전에 자식을 삭제하지 않았습니다.

나는 이것이 문제라는 것을 압니다. 역시나 기존에 존재하지 않던 PartyPost 관계가 추가되면서 발생한 것으로 추정된다.

public ApiResponse deletePost(Long partyPostId) {
    PartyPost partyPost = partyPostRepository.findById(partyPostId)
            .orElseThrow(NotFoundException::new);
    List<ReportPost> reportPosts = getReportPosts(partyPost.getId());
    List<Application> applications = applicationRepository.findAllByPartyPostId(partyPost.getId());
    User createPostUser = partyPost.getUser();
    createPostUser.getProfile().plusAdminReportCnt();

    if (createPostUser.getProfile().getAdminReportCnt() >= 3) {
        createPostUser.setSuspended();
        deleteMasterObject(applications, reportPosts, partyPost);
        return ApiResponse.ok("삭제 및 블랙리스트 처리 완료");
    }

    deleteMasterObject(applications, reportPosts, partyPost);
    return ApiResponse.ok("게시글 삭제 완료");
}
private void deleteMasterObject(List<Application> applications, List<ReportPost> reportPosts, PartyPost partyPost) {
    applicationRepository.deleteAll(applications);
    reportPostRepository.deleteAll(reportPosts);
    if (partyPost != null) {
        partyPostRepository.delete(partyPost);
    }
}

아래 로직은 쓰임새가 3개 중첩된 로직이라 private로 빼서 위 코드를 붙여넣어서 해결했습니다!