2024/12 48

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..

Spring 본캠프 Day 069 - 1단계 일정 관리 앱 Develop 완료, 2단계 진행 중

어제 새벽에 데이터베이스(database)를 직접 생성하다가 오류가 나서 딱따구리가 나무를 쪼듯이 챗GPT에 엄청나게 물어보고 나서야 해결했다. 데이터베이스가 제대로 삭제되지 않아서 생긴 문제였다. 혹시라도 비슷한 오류를 겪는 사람이 있을 수도 있고, 미래의 내가 또 같은 문제를 겪을 수 있으므로 문제 해결용 코드를 적어놓으련다. (1) MySQL 버전: 9.1.0(2) 윈도우/맥북: 맥북(3) 터미널에서 사용하지 않는 데이터베이스 삭제하기 ⓐ 위치 이동▼cd /usr/local/mysql/binⓑ MySQL 접속▼./mysql -u root -pⓒ 비밀번호 입력▼ ⓓ 데이터베이스 확인▼show databases;ⓔ 데이터베이스 삭제▼drop database 데이터베이스이름;오늘 오후에 느지막이 일어나 ..

Spring 본캠프 Day 068 - 일정 관리 앱 Develop 1단계 진행 중

도전 단계까지 포함하여 총 8단계인 과제 중 1단계만 하는 중인데도 벌써 트러블슈팅(troubleshooting)으로 작성할 오류를 두 개나 냈다. 이번엔 낸 오류는 쉼표와 관련이 없지만 평소 쉼표를 깜빡해서 빨간 줄을 자주 마주하곤 했는데, 오늘부터는 쉼표를 맨 앞으로 옮기기로 했다. 튜터님께서 알려주신 방법인데, 이렇게 하면 쉼표를 빠뜨릴 일이 줄어들 거라고 하셨다. 확실히 앞에 쓰니 쉼표가 눈에 더 잘 들어오기도 하고, 앞에 쓸지 뒤에 쓸지 고민하는 그 몇 초 덕에 '쉼표 쓰기'를 더 잘 의식하게 되었다. 개인 프로젝트를 한 뒤로, 정확히는 스프링(Spring)을 공부한 뒤로 갖가지 오류를 내면서 유입 키워드에 오류의 비중이 커졌다. 트러블슈팅(trooubleshooting)을 작성할 땐 보통 해결..

1단계: "not-null property references a null or transient value"

[문제]'일정 관리 앱 Develop' 과제는 JPA를 활용해야 했다. 필수 과제 1단계에서는 일정을 생성, 조회, 수정, 삭제할 수 있도록 CRUD를 구현해야 했는데, 생성(Create)에 해당하는 C를 구현한 다음 프로그램을 실행하자, 바로 500 Internal Server Error 메시지가 떴다. 우선 null이 들어가면 안 되는 곳에 null이 들어가서 생긴 문제라 짐작했다. [원인]package com.example.plan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.data.j..

Spring 본캠프 Day 067 - 숙련 Spring 3주차 완강, "오류의 가호가 있기를!"

package com.example.board.repository;import com.example.board.entity.Member;import org.springframework.data.jpa.repository.JpaRepository;import java.util.Optional;// repository layer의 인터페이스(interface)public interface MemberRepository extends JpaRepository { Optional findById(Long id); /* [수정 전] findByIdInRepository(Long id) [수정 후] findById(Long id) */}어제 본 Error creating bean wit..

3단계: "406 Not Acceptable"

[문제]이러다가 정말 400번 대 오류를 전부 한 번 이상 만나겠다 싶었다. 데이터베이스(database) 구성이 완전히 바뀌고, 자료구조 대신 JdbcTemplate를 사용하면서 한 문제를 해결하면 다른 문제가 생겼다. [원인]package com.spring.weekthree.dto.member.response;import com.spring.weekthree.entity.Member;import lombok.Getter;// response DTO 클래스(class) @Getter // @Getter가 없으면 JSON 변환이 안 된다.public class MemberResponseDto { //(1) 속성 private long memberId; private String name..

3단계: "순환 참조 오류라니, 돌아가는 각도가 예술이군요."

[문제]열심히 코드를 고치고 나서 실행했더니만, 축하한다는 메시지인 양 APPLICATION FAILED TO START 오류 메시지가 떴다. 일명 순환 참조 오류였다. 화살표가 정말 한 치 오차도 없이 완벽한 각도로 꺾였다. [원인]// [1/1] Data Access Layer(Repository Layer)@Repositorypublic class JdbcTemplatePlanRepository implements PlanRepository { private final JdbcTemplate jdbcTemplate; private final PlanService planService; /* [오답] private final PlanService planService; [정..

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

[문제]몇몇 사용자가 이미 가입한 상황이라고 가정하고, 즉 데이터베이스에 몇몇 사용자 정보를 저장한 다음 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) @AllA..

Spring 본캠프 Day 066 - 숙련 Spring 2주차 완강, 다 끝내려고 했으나…….

오류가 났다.3주 차 강의를 모두 듣기까지 딱 40여 분 남았을 때, CRUD 중 R 기능을 작업하고 실행을 눌렀을 때, 종료 버튼을 누르지 않았는데도 애플리케이션(application)이 자기 마음대로 꺼졌다. 이 오류는 챗GPT에 물어보면 어찌저찌 해결할 수 있긴 하겠으나, 왠지 어제 받은 과제를 하는 도중에 또 겪을 듯한 직감이 들어서 튜터님께 물어보기로 했다. 유일하게 확신하는 사항은 분명 내 손가락이 또 무언가를 잘못 쳤다는 점! 컴퓨터는 하라는 대로 했을 뿐이라는 사실! 문제는 그 무언가가 뭔지 모르겠다! 오류는 이미 2주 차 강의를 들을 때도 발생했다. 일정 생성인데 POST 메서드(method)가 아니라 GET 메서드를 써서 405 Method Not Allowed 오류 메시지를 아침부터 ..

Spring 본캠프 Day 065 - 일정 관리 앱 만들기 0단계부터 3단계까지 제출, 하루에 리드미(README)를 두 개나 작성하다니!

1. 필수 단계 과제 링크 2. 도전 단계 과제 링크전말은 이러했다. 필수 단계 과제에서 도전 단계 과제로 넘어가면 데이터베이스 구성 자체가 바뀌어서 깃허브(Github)에 브랜치(branch)를 하나 만든 뒤 각 과제를 저장했다. 나중에 필요할 때마다 원하는 결과물을 참고하고 싶어서. 그런 다음 팀원들과 함께 재즈 음악 흐르는 카페 분위기 속에서 각자 과제를 했는데, 그랬는데……. '어라? 잠깐만.' '둘의 구성이 다르면 ERD와 API 명세서도 달라야 맞지 않니?' 의문이 든 시간이 자정이 넘은 시간이었기 때문에 진짜 마른세수를 몇 번이나 했는지 모른다. 어제 새벽 2시 넘어서 리드미(README)를 쓰고, 아침에 잠깐 3단계 리팩토링(refactoring)을 진행하고, 오후 1시까지 속으로 통곡하면..