ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 88 TIL
    내일배움캠프 2023. 3. 7. 01:27

     

    어두운 밤 TIL 적으며 ..

     

    재미있네요 게임 좋아해서 쉬는 시간에 대 부분을 게임하면서 보냈었는데

    그 시간을 전부 코딩을 하고 있다는게 자진해서 말이죠 옛날 김민재가 봤으면 

    "니가 미쳤구나" 싶을 정도로 매우 대단한일이 아무렇지 않게 발생하고 있습니다. 

     

    해야할 일들을 다 마무리해서 전에 작성했던 코드들 리펙토링 중인데 재밌습니다

    for문이 왜 이렇게 많은건지 대부분 lamda 식으로 변경해줬네요 검색해보면 for문과 lamda 식에

    대해서 명확하게 나와있지 않은데 튜터님께 물어보니 멀티 스레드 쪽 정리하라고 말씀해셔서

    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 으로 빼줬고 위 코드들을 넣고 문제를 해결했다

    굉장히 무식해보이는 코드이지만 시간이 늦은 관계로 내일을 기약한다

    '내일배움캠프' 카테고리의 다른 글

    국비교육 수료  (0) 2023.03.14
    자료구조 효율성에 대한 고민  (0) 2023.03.07
    87 TIL  (1) 2023.03.05
    86 TIL  (0) 2023.03.02
    85 TIL  (0) 2023.02.28
Designed by Tistory.