티스토리 뷰

이번엔 게시글 조회가 안되네,,?

 

그런데 이번엔 회원 탈퇴처리를 한 후에 게시글을 조회해봤더니 

NullPointerException이 발생하였다..... 

회원이 탈퇴함에 따라 게시글과 연결된 회원 정보가 'null'로 설정된 것 까지는 잘 했는데,,,

 

 

이 상황에서 발생한 NullPointerException 오류는 게시글을 조회하는 과정에서 해당 게시글을 작성한 회원의 정보를 참조하려고 했으나, 회원 정보가 이미 'null'로 설정되어 있기 때문에 발생한 것이다. 즉 회원 정보가 'null'이 될 수 있다는 점을 체크하지 않고 회원 정보가 있을 때만을 고려하여 (null이 아닐 때만을 고려하여) 코드 구현을 했기 때문이다..!!

 

trace를 보니 DTO 변환 로직을 수정해야 함을 알 수 있었다. 

  ArticleResponseDto.createArticleDto 메소드를 수정하여 null 상황을 안전하게 처리하도록 변경하여, 게시글의 회원 정보가 null이라면 이를 감안한 로직을 구현하면 된다.

 


해결방법

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import teamFive.freshmanCommunity.entity.Major;

public class MemberInfoDto {
    private Long id;
    private String memberName;
    private String studentId;
    private Major major;


    public static MemberInfoDto createMemberDto(Member member){
        return new MemberInfoDto(
                member.getId(),
                member.getMemberName(),
                member.getStudentId(),
                member.getMajor()
        );
    }
}

 

먼저, MemberInfoDto 클래스를 만들었다. 이 dto는 게시글과 연결된 회원의 ID, 이름, 학번, 전공 등의 기본 정보를 포함하고 있다. 이 dto는 게시글 조회의 응답 dto인 articleReadDto에서 사용된다. 또한 createMemberDto 생성 메서드도 만들어주었다.

 

    public static ArticleResponseDto createArticleDto(Article n) {
        MemberInfoDto memberInfo = n.getMember() != null ?
                MemberInfoDto.createMemberDto(n.getMember()) : null; //Member가 null인 경우 MemberInfo를 null로 설정

        return new ArticleResponseDto(
                n.getId(),
                n.getTitle(),
                n.getContent(),
                n.getBookmarkCount(),
                n.getCreateDate(),
                memberInfo,
                n.getMajor()
        );
    }

 

그리고 게시글 조회의 응답 dto인 ArticleResponseDto의 createArticleReadDto인 생성 메서드에 위에서 만들어둔 memberInfo를 이용하여 'null'을 안전하게 처리하는 로직을 구현하였다. 이를 통해 회원 정보가 'null'인 경우에도 시스템이 정상적으로 작동하게 해주었다.

 

Java의 삼항 연산자 (조건) ? (참일 때의 결과) : (거짓일 때의 결과) 형식을 사용하여

n.getMember() 메서드 호출 결과가 null이 아니라면, 즉 회원 정보가 존재한다면, createMemberDto(n.getMember())를 호출하여 해당 회원의 정보로 MemberInfoDto 객체를 생성하였다. 만약 회원 정보가 null이라면, 즉 게시글에 연결된 회원 정보가 없다면, memberInfo 변수에 null을 할당해주었다.

 

 

다시 포스트맨으로 게시글 조회를 해보면, 회원이 탈퇴해도 NullPointerException 오류가 발생하지 않고 null로 잘 뜨는걸 확인할 수 있다!!

 

휴,,, 개발을 하다보면 생각지 못한 오류들이 너무 많다. 그치만 또 다 처리하고 해결하면 더 뿌듯함이 큰 거 같다.

계속 파이팅!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함