트러블슈팅 41

1단계: "아무래도 이름(name)이란 체에 구멍이 뻥 뚫렸나 보다."

[문제]분명히 Key 값으로 name을 넣었는데도 결과는 일정 목록을 조회할 때와 별반 다르지 않았다. 차라리 400이나 500번 대 오류 메시지가 떴다면 원인이 뭔지 금방 찾을 수 있으나, 200 OK 메시지가 뜨면 코드를 다시 읽어야 했다. 우선 수정한 부분을 다시 읽었다. [원인]package com.spring.weekthree.repository;import com.spring.weekthree.dto.PlanResponseDto;import com.spring.weekthree.entity.Plan;import org.springframework.http.HttpStatus;import org.springframework.jdbc.core.JdbcTemplate;import org.spring..

2단계: "왜 수정 날짜를 수정하려고 하니!"

[문제]벌써 500 Internal Server Error 메시지를 두 번이나 봤다. 이쯤 되니까 놀랍지도 않았다. 이번엔 또 뭘 잘못 했을까, 차분한 마음으로 설명을 읽었다. [원인]package com.spring.weekthree.repository;import com.spring.weekthree.dto.PlanResponseDto;import com.spring.weekthree.entity.Plan;import java.time.LocalDate;import java.util.List;import java.util.Optional;// [1/2] 인터페이스public interface PlanRepository { PlanResponseDto save(Plan plan); List ..

1단계: "@NoArgsConstructor가 굴린 대형 눈덩이"

[문제]처음에는 전부 다 빨간 줄이 쳐져서 얼마나 심장이 벌렁벌렁 뛰었는지 모른다. 분명 강의를 들으며 코드를 따라 쳤는데, 왜 내가 쓴 코드에만 문제가 생기는지 영 감을 못 잡았다. 챗GPT에도 물었으나, 분명한 답을 얻지는 못했다. [원인]package com.spring.weekthree.entity;import lombok.AllArgsConstructor;import lombok.Getter;import java.time.LocalDate;import java.time.LocalDateTime;/*entity에 해당하는 Plan 클래스[오답] NoArgsConstructor[정답] AllArgsConstructor*/@NoArgsConstructor@Getterpublic class Plan {..

2단계: "500 Internal Server Error라니! 일단 침착해!"

[문제]어쩐지 데이터베이스(database) 연동이 너무 순조롭다 싶었다. 두근거리는 마음으로 실행 버튼을 누르기 무섭게 무려 500 Internal Server Error 메시지가 떴다. 400번이 아니었기 때문에 코드 작성에 문제가 있다는 뜻이었다. 당황하긴 했지만, 보통 이럴 때는 꼭 문제가 무엇인지 설명도 같이 나오니까 읽어보기로 했다. [원인]spring.application.name=weekthreespring.datasource.url=jdbc:mysql://localhost:3306/memospring.datasource.username=사용자명spring.datasource.password=비밀번호spring.datasource.driver-class-name=com.mysql.cj.jd..

1단계: "Condition '(name != null) && (updatedDate != null)' is always 'false'"

[문제]package com.spring.weekthree.repository;import com.spring.weekthree.dto.PlanResponseDto;import com.spring.weekthree.entity.Plan;import org.springframework.stereotype.Repository;import java.time.LocalDate;import java.util.*;// Data Access Layer(Repository Layer)@Repositorypublic class PlanRepositoryImpl implements PlanRepository { // 속성 private final Map planList = new HashMap(); // ..

2단계: "꿈쩍 안 하는 수정일과 얼음땡!"

[문제]분명히 일정을 수정했는데, createdDate와 updatedDate가 동일했다. 다시 말해 수정한 날짜에 해당하는 updatedDate가 그대로였다. 이번 문제는 튜터님과 함께 디버깅(debugging)을 진행하며 원인을 찾아냈다. [원인]위의 사진처럼 디버깅을 몇 번 해본 결과, createdDate와 updatedDate 설정에 원인이 있다고 추측했다.package com.spring.weekthree.entity;import lombok.Getter;import lombok.Setter;import java.time.LocalDateTime;@Getterpublic class Plan { // [1] 속성 @Setter private Long id; private S..

1단계: "컴퓨터가 200 OK라는데 [ ] 밖에 안 보여요."

[문제]Postman으로 API가 잘 작동하는지 확인했는데, 막상 GET 메서드(method)를 실행하니 아무것도 나오지 않았다. 처음에는 오류인 줄 알고 심정이 철렁했는데, '200 OK'라는 Http 상태 메시지를 보니 원인이 어느 쪽인지 짐작할 수 있었다. 이번에 발생한 문제는 리턴(return), 즉 반환하는 부분을 제대로 작성하지 않아서 생긴 듯했다. 여기까지 추측한 다음에는 DTO(Data Transfer Object)나 엔티티(Entity)는 건너뛰고 각 레이어(layer)를 다시 찬찬히 읽었다.  [원인]package com.spring.weekthree.controller;import com.spring.weekthree.dto.PlanRequestDto;import com.spring...

4단계: "get() 메서드에 가장 적절한 인덱스(index)는?"

[문제]package com.example.kiosk.level4;// 메인(main)import java.util.*;public class KioskLvFour { public static void main(String[] args) { System.out.println(); System.out.println("[MAIN MENU]"); List allMenus = new ArrayList(); Menu menuBurger = new Menu("Burgers", new ArrayList()); Menu menuDrink = new Menu("Drinks", new ArrayList()); Menu menuSide = ne..

3단계: "Variable 'menuItems' initializer 'new ArrayList<>()' is redundant"

[인용 및 참고 자료 출처]1. 사전: "redundant", 네이버 영어사전, 네이버 영어사전, (2024.11.25) [문제] (링크: 첫 번째 노란 경고 해결 과정)package com.example.kiosk.level3;import java.util.*;// Kiosk 클래스public class Kiosk { Scanner sc = new Scanner(System.in); List menuItems = new ArrayList(); // [문제] 위의 코드 한 줄에서 노란 전구가 깜빡였다. public Kiosk(List menuItems) { this.menuItems = menuItems; } public void start() { ..

3단계: "Field can be converted to a local variable"

[문제]package com.example.kiosk.level3;// Kiosk 클래스import java.util.*;public class Kiosk { Scanner sc = new Scanner(System.in); List menuItems = new ArrayList(); private int index; // [문제] 위의 코드 두 줄에서 노란 전구가 깜빡였다. public Kiosk(List menuItems) { this.menuItems = menuItems; } public void start() { for (index = 0; index = 5 || index == 0) { System.out..