Error Handling Log

🧑🏻💻 pre-project를 진행하다가 만난 에러와 새롭게 알게된 것들에 대한 정리 ❓ 문제 상황 게시글 전체 조회 API를 만들고 Postman으로 호출을 했는데 호출 결과가 "406, Acceptable" 로 나왔다. ✔️ 결과 HTTP (HyperText Transfer Protocol) 406 Not Acceptable 클라이언트 오류 응답 코드는 서버가 요청의 사전 콘텐츠 협상 헤더에 정의 된 허용 가능한 값 목록과 일치하는 응답을 생성 할 수 없으며 서버가 기본 표현을 제공하지 않음을 나타냅니다. 찾아본 결과 위와 같은 문제 때문에 나타나는 에러인데 좀 더 자세하게 설명을 해보자면 Accept 등의 헤더에 적혀있는 형식을 생성해 낼 수 없을 때 발생하는 에러라는 것이다. 즉, Spring에..


🧑🏻💻 to-do App 프로젝트 ✔️ ToDoService 중 update 부분 → 기존에 저장된 데이터를 가져와 내용, 순서, 완료여부를 수정할 수 있도록 구현했다. 하지만 막상 실행하고 수정해 보니 수정되는 값을 제외하고 디폴트 초기값으로 변경되는 것이었다. ✔️ Postman으로 todo를 등록하고 수정한 모습 → 처음에는 수정되는 값과 id를 제외하고 다 디폴트 초기값으로 변경된다고 생각했는데 디버깅을 통해 유일한 int 타입인 todoOrder 에서의 문제인 것을 알게 되었다. → 뭐가 문제인지를 모르겠어서 디버깅을 몇 번이나 돌려보고 수업 진행 시 받았던 solution 코드에서 비슷한 부분을 찾아 또 다시 디버깅을 돌려본 결과 유일한 차이점이 타입이라는 것을 알아냈다. 그리고 Option..


❓ 문제 상황 복습을 하려고 프로젝트 파일을 열었는데 어제만 해도 잘 적용되었던 애너테이션들이 모두 빨간 글씨가 되었다. Gradle이 빌드가 잘 안 된 것 같아 리부팅도 해 보고 다시 빌드도 해봤지만 계속해서 적용이 안 됐다. 그러다 발견한 오류 문장. ➡️ "no candidates found for method call useJUnitPlatform" 이 오류 메시지는 일반적으로 JUnit 5 테스트 프레임워크를 사용할 때 필요한 종속성이 올바르게 구성되지 않았을 때 발생한다고 한다. ➡️ 해결 방법은 [Help] - [Find Action] - [Reload All Gradle Projects 검색하고 실행]


❓ 문제 상황 프로그래머스 홀짝 구하기를 삼항 연산자로 풀어보다가 에러를 만났다. "incompatible types: String cannot be converted to boolean" 이 말이 무슨 의미인가 하니 호환되지 않는 타입: String은(는) boolean으로 변환될 수 없습니다, 즉 boolean 값이 예상되는 곳에서 문자열을 사용하려고 하니 나타나는 문제라는 것이다. 그러니까 (n % 2 == 0)? "even" : "odd" 삼항 연산자 전체가 묶여서 문자열을 출력하는 것을 인식해야하는데 그러지 못 하고 개별적으로 인식하니 (n % 2 == 0) 조건식에 따라 true와 false가 나오게 된다. 하지만 이 코드에서는 String 으로 값이 반환되길 원하니 당연히 에러가 날 수 밖에..


❓ 문제 상황 AOP의 핵심 개념을 활용하여 프로그램의 로깅(Logging) 기능을 공통화하는 작업 중 일어난 문제. 구현 조건은 아래와 같았다. Aspect 클래스를 작성하고 실행시키니 메서드 호출이 아래와 같이 잘 되는 것을 확인 할 수 있었다. 하지만 Discount 클래스의 메서드와 Order 클래스의 메서드에서 로깅 기록이 남지 않는 것을 발견했다. 주문하기를 누르고 수강생인지 확인하는 것과 나이를 확인하는 부분에서 checkAllDiscountConditions() 메서드가 호출되면서 로깅 기록이 남아야 하는데 누락되었다. 금액 합계를 구하고 나서 discount() 메서드가 호출되면서 할인 적용 금액에 대한 로깅 기록이 남아야 하는데 누락되었다. 빈이 잘 등록되는 것도 확인했고 포인트컷도 이..


❓ 문제 상황 2차원 배열을 입력받아 각 배열을 이용해서 만든 HashMap을 리턴하는 문제였다. 중요한 조건 중 하나가 중복되는 키가 있으면 저장된 초기값을 리턴해 줘야 하는 것이었는데 나는 HashMap에 먼저 담아두고 그 다음 중복되는 키를 찾아 삭제해 주자라는 생각을 하고 코드를 짰다. HashMap에 put() 을 해준 뒤 중복되는 키를 찾고 해당되는 키가 있으면 삭제하라는 코드를 작성하였으나 위와 같은 에러가 발생하였다. 검색을 해보니 java.util.ConcurrentModificationException 에러는 두 가지 상황에 발생한다고 한다. 반복자를 사용하여 컬렉션을 순회하고 있는 도중 컬렉션의 구조가 변경된 경우 멀티스레드 환경에서 여러 스레드가 동시에 컬렉션을 수정하는 경우 보통 ..


❓ 문제 상황 Arrays.copyOfRange() 메서드를 사용하여 새로운 배열로 해당되는 인덱스 요소부터 출력하는 문제였다. 처음에는 당연히 해당 인덱스의 요소부터 끝 요소까지 나와야한다고 생각했기 때문에 length(arr.length) - 1 을 했다. 근데 array lengths differ, expected: but was: 와 같은 에러가 나왔다. 즉, 배열의 길이가 다른데 같은 것으로 취급하니 안 된다는 얘기인데...... 알고 보니 Arrays.copyOfRange() 메서드의 특성? 속성? 을 제대로 알지 못해 생긴 일이었다. Arrays.copyOfRange(원본 배열, 시작 인덱스(from), 끝 인덱스(to)) 이 메서드는 원본 배열에서 복사 시작 인덱스 부터 끝 인덱스의 이전까..


❓ 문제 상황 코플릿 문제를 다시 복습하면서 풀어보던 중 배열 문제...... 코플릿에 있는 예시를 가져왔는데 계속 주소값이 출력이 되는 거다! 배열의 요소를 출력할 수 있는 메서드 찾아 적용했는데 여전히 주소값이 출력됐다. 여기서 살짝 멘붕 옴...... 그리고 구글링을 했는데도 나와 같은 사례는 찾을 수 없었다. 대체 뭐가 원인인지 디버깅을 돌리려는데 화면 상단에서 원인을 발견했다. → 엉뚱한 애를 계속 실행시키고 있었던 것, 저 코드는 배열 요소가 나오도록 수정하지 않은 상태의 코드였기 때문에 주소값이 계속 나오는 것이었다...... → 올바르게 파일을 찾아 실행시켜주니 배열의 요소가 잘 출력되었다. 등잔 밑이 어둡다 를 잊지 말고 꼼꼼하게 잘 살펴본 뒤 실행할 것...... 알고나니 스스로가 진심..