Troubleshooting: 무엇이 문제였는가? 34

10단계: "NoSuchBeanDefinitionException - No qualifying bean of type 'JwtUtil' available"

[인용 및 참고 출처]1. 구글 검색: 티스토리, "@Slf4j "테스트 코드", 테스트 코드에서 @Slf4j 사용하기, (2025.01.28) 2. 구글 검색: SLF4J Manual, "Spring Slf4j docs", SLF4J user manual, (2025.01.28) [문제]더보기package org.example.expert;import java.time.LocalDateTime;import org.example.expert.common.dto.AuthUserDto;import org.example.expert.common.entity.Todo;import org.example.expert.domain.user.dto.response.UserResponseDto;import org.exa..

10단계: "세상에, 'HttpMessageNotWritableException'이라니! 순환 참조에 걸린 사람? 저요!" (수정 중)

[문제]가게(Store), 카테고리(Category), 중간 테이블(Store Category)이 연관관계를 잘 맺었고 가게가 잘 생성되는지 확인했는데, 이상하게 입력된 카테고리가 데이터베이스(database)에만 저장되고 반환되지 않았다. 카테고리 목록을 제외한 여는 시간이나 주문 최소 금액 같은 다른 값은 모두 제대로 반환되었기 때문에, 혹시 응답 시 쓰는 DTO(Data Transfer Object)에 카테고리 목록이 들어가지 않았을지 모른다고 추측했다. [원인 및 문제 해결 과정]더보기package com.example.outsourcingproject.store.service;import com.example.outsourcingproject.auth.repository.OwnerAuthRepo..

10단계: Cannot invoke "Object.getClass()" because "constant" is null

[문제]QueryDSL을 사용해서 조회할 때 특정 검색어가 없으면 일정 목록이 전부 조회되어야 하는데 이상하게 '403 Forbidden' 오류 메시지가 떴다. 메시지야 직접 설정하지 않았으니 그렇다 쳐도, 어디선가 문제가 생겼다는 뜻이라 눈을 동그랗게 뜨고 원인을 찾았다. [원인]private long countByTitle(String search) { return Optional.ofNullable( jpaQueryFactory.select(Wildcard.count) .from(todo) .where(todo.title.contains(search)) .fetchOne() ) ..

10단계: Null이 아니라 널 보고 싶어요, 이메일 씨

[문제]스프링 시큐리티(Spring Security)를 적용한 뒤 일정을 생성할 때마다 email 값이 null로 나왔다. 데이터베이스(database)에는 잘 저장되어 이후에 일정을 조회할 때는 email 값이 잘 나왔기 때문에 이메일 값이 들어가는 AuthUserDto를 확인했다. 그 결과 email 값이 null이 되었다는 점을 확인했고, 'AuthUserDto를 생성하는 부분에서 이메일 값을 빠뜨렸나?' 추측했다. [원인]우선 'new AuthUserDto'로 새로운 AuthUserDto를 생성하는 AuthUserArgumentResolver에서 로그를 찍었다. 그 결과 SpringContext에 인증 정보를 설정할 때, 또는 그 전에 인증 객체를 생성할 때부터 email 값이 빠졌다고 추측할 수..

6단계: 예외 처리 메시지를 일일이 작성해야 할까? (수정 중)

1. [문제 인식 및 정의]더보기package com.example.plan.member7.service;import com.example.plan.base.BaseEntity;import com.example.plan.comment7.entity.Comments;import com.example.plan.comment7.repository.CommentRepository;import com.example.plan.config.PasswordEncoder;import com.example.plan.member7.dto.response.*;import com.example.plan.member7.entity.Member;import com.example.plan.member7.repository.*;imp..

6단계: 일정이 반복된다면? (수정 중)

1. [문제 인식 및 정의]현재 일정은 하루 단위로만 생성할 수 있어 사용자는 반복되는 일정을 매번 새로 추가해야 하는 불편함을 겪는다. 예를 들어, 매주 수요일마다 팀 회의가 있다면 이를 수동으로 반복 입력해야 하며, 이 과정에서 사용자가 실수로 일정을 빠뜨리거나 잘못 입력해 중요한 일정을 놓칠 수 있다. 이러한 비효율성과 실수 가능성을 문제로 인식했다. 2. [해결 방안]2-1. [의사결정 과정]1안: 수동 날짜 계산(1) 장점- 구현이 간단하고 직관적이다.- 외부 라이브러리(library) 없이 직접 구현할 수 있다. - 사용자가 직접 반복 주기를 설정하고 날짜를 계산하는 방식으로 유연하게 처리할 수 있다.(2) 단점 - 반복 주기를 추가하면 복잡도가 증가하며, 코드가 길어질 수 있다. - 사용자가..

6단계: 예외 처리 메서드는 어떻게? (수정 중)

1. [문제 인식 및 정의] q1. 중복이 왜 안 좋은가??? package org.example.expert.domain.manager.service;import java.util.ArrayList;import java.util.List;import lombok.RequiredArgsConstructor;import org.example.expert.domain.common.dto.AuthUser;import org.example.expert.domain.common.exception.InvalidRequestException;import org.example.expert.domain.manager.entity.Manager;import org.example.expert.domain.manager.re..

2단계: "SQL Error 1049: Unknown database"

[인용 및 참고 자료 출처]1. 구글 검색: 티스토리, "spring.jpa.hibernate.ddl-auto=create", ddl-auto 설정 시 주의 사항, (2024.12.15) [문제]이젠 프로그램을 실행할 때 오류가 안 나면 이상할 지경이다. 데이터베이스(database)를 제대로 생성한 줄 알았는데 아니었다. 오류 메시지를 볼 때마다 심장은 아직 철렁거리긴 하나, 이미 전날 새벽에 데이터베이스와 씨름한 전적이 있는지라 담담한 마음으로 데이터베이스를 확인했다. [원인]오류가 발생한 원인은 역시나, 데이터베이스가 이상하게 만들어진 데에 있었다. plans2라는 이름으로 데이터베이스를 만든 줄 알았는데 테이블로 생성되어야 할 'members2'가 데이터베이스로 있었다. [해결]문제는 금방 해결했..

1단계: "200 OK인데 왜 username이 null일까?"

[문제]400번 대이든 500번 대이든 오류 났다는 메시지가 뜨면 그나마 코드를 잘못 썼다고 짐작할 수 있는데, 200 OK 메시지와 다르게 입력한 값이 제대로 반영되지 않으면 더 골치 아팠다. null도 문제였으나, 수정됐다면서 일정 수정 날짜인 updatedAt의 값이 그대로인 점이 더 골치 아팠다. 도대체 원인이 뭔지 추측조차 못 한 채, '코드 또 전부 다 뜯어고쳐야겠구나.' 해탈한 심정으로 튜터님께 찾아갔다. [원인]package com.example.plan.plan.dto.request;import lombok.Getter;// 일정 수정 요청에 해당하는 request DTO@Getterpublic class UpdatePlanRequestDto { // (1) 속성 privat..