Troubleshooting: 무엇이 문제였는가?/본캠프 3주 차: 일정 관리 앱 만들기

3단계: "사용자 Id를 입력했는데 왜 자꾸 0이 나오니?"

writingforever162 2024. 12. 12. 14:49

[문제]

몇몇 사용자가 이미 가입한 상황이라고 가정하고, 즉 데이터베이스에 몇몇 사용자 정보를 저장한 다음 3단계 도전 과제를 했다. 문제는 일정을 생성하는 데에는 성공했는데, memberId를 입력해도 계속 0이 나왔다. 아무래도 무언가를 빠뜨린 듯싶었다. 

 

[원인]

package com.spring.weekthree.dto.responsedto;

import com.spring.weekthree.entity.Plan;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.time.LocalDate;
import java.time.LocalDateTime;

// 클라이언트(client)에 응답하는 response DTO 클래스(class) 
@AllArgsConstructor
@Getter
public class PlanResponseDto {
    // (1) 속성
    private long planId;
    private long memberId;
    private LocalDate plannedDate;
    private String title;
    private String task;
    private LocalDateTime createdDateTime;
    private LocalDateTime updatedDateTime;

    // (2) 생성자
    public PlanResponseDto(Plan plan) {
        this.planId = plan.getPlanId();
        this.memberId = plan.getMemberId();
        /*
        [오답] 누락
        [정답] 추가: this.memberId = plan.getMemberId();
         */
        this.plannedDate = plan.getPlannedDate();
        this.title = plan.getTitle();
        this.task = plan.getTask();

        this.createdDateTime = plan.getCreatedDateTime();
        this.updatedDateTime = plan.getUpdatedDateTime();
    }
    // (3) 기능
}

역시나 사용자의 Id에 해당하는 memberId를 클라이언트(client)에 응답으로 전달하는 response DTO에 제대로 넣지 않은 데에 원인이 있었다. 그나마 로직(logic)을, 논리 흐름을 뜯어고칠 필요가 없어서 안도의 한숨이 나왔다.

 

[해결]

처음에 빠뜨린 memberId를 생성자에 추가한 다음, 다시 확인하니 0이 아니라 직접 입력한 Id가 그대로 나왔다. 혹시 몰라서 몇 번 더 시험하고 데이터베이스(database)에도 잘 저장되었는지 확인했다. 

데이터베이스에 잘 저장된 정보를 확인한 후에야 마음이 놓였다. 사용자의 이름이 아니라 Id로 사용자를 구분하니, 동명이인도 구분할 수 있어서 마음에 들었다. 또한 일정의 Id와 별도로 관리하다 보니, 한 사용자가 일정을 여러 개 생성했을 때도 더 쉽게 정보를 관리할 수 있을 듯했다.