해결된 질문
작성
·
111
0
학습 관련 질문을 최대한 상세히 남겨주세요!
고민 과정도 같이 나열해주셔도 좋습니다.
먼저 유사한 질문이 있었는지 검색해보세요.
인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요 거의 막바지에 이르러서 테스트 부분을 들으려 하고 있습니다
테스트 부분에서 강의 코드와 같이 맞춰 보아도 에러가 발생하여 어떤 에러인지 감이 잘 잡히지 않아 질문드립니다.
최하단에 에러 로그를 첨부합니다.
저장소의 완성 코드 파라미터대로 하면 성공하지만, 강의대로 하면 에러가 납니다
이것은 저장소의 완성본 코드이고
@Test
void readAllTest() {
ArticleReadPageResponse response1 = articleReadRestClient.get()
.uri("/v1/articles?boardId=%s&page=%s&pageSize=%s".formatted(1L, 3000L, 5))
.retrieve()
.body(ArticleReadPageResponse.class);
System.out.println("response1.getArticleCount() = " + response1.getArticleCount());
for (ArticleReadResponse article : response1.getArticles()) {
System.out.println("article.getArticleId() = " + article.getArticleId());
}
ArticleReadPageResponse response2 = articleRestClient.get()
.uri("/v1/articles?boardId=%s&page=%s&pageSize=%s".formatted(1L, 3000L, 5))
.retrieve()
.body(ArticleReadPageResponse.class);
System.out.println("response2.getArticleCount() = " + response2.getArticleCount());
for (ArticleReadResponse article : response2.getArticles()) {
System.out.println("article.getArticleId() = " + article.getArticleId());
}
이것은 에러가 발생하는 강의의 코드입니다.
@Test
void readAllTest(){
ArticleReadPageResponse response1 = articleReadRestClient.get()
.uri("/v1/articles?boardId=%s&page=%s&pageSize=%s".formatted(1L, 1L, 5))
.retrieve()
.body(ArticleReadPageResponse.class);
System.out.println("response1 = " + response1);
for (ArticleReadResponse article : response1.getArticles()) {
System.out.println("article.getArticleId() = " + article.getArticleId());
}
ArticleReadPageResponse response2 = articleRestClient.get()
.uri("/v1/articles?boardId=%s&page=%s&pageSize=%s".formatted(1L, 1L, 5))
.retrieve()
.body(ArticleReadPageResponse.class);
System.out.println("response2 = " + response2);
for (ArticleReadResponse article : response2.getArticles()) {
System.out.println("article.getArticleId() = " + article.getArticleId());
}
}
이것은 에러 로그입니다
(본문 제한으로 부득이하게 이미지로 첨부합니다)
답변 2
0
woo님, 안녕하세요!
"019169492674337349632"를 보면 Long 범위를 넘어가는 숫자인 것 같은데요,
레디스에 직접 잘못된 데이터를 넣으신 적이 있거나 식별자를 변환해서 삽입하는 코드가 잘못 들어가있는걸까요?
강의에서 Snowflake로 자동 생성되는 식별자는 Long으로 articleId를 생성하기 때문에,
"019169492674337349632"라는 숫자가 안 만들어져야 할텐데 이상하네요..!
올려주신 테스트 코드는 페이지 번호만 다를 뿐이라,
테스트 코드 자체의 문제는 아닌 것 같은데,
잘못된 데이터 들어간 원인을 찾아보시거나 제거해보시겠어요?
woo님, 위에 언급드렸듯이 코드 문제가 아니라 데이터가 문제인 것 같습니다!
019169492674337349632가 Long 범위를 초과하는 수 문자열이어서요,
Long::valueOf 코드 호출 과정에 에러가 발생하는 것으로 보입니다.
에러 로그 살펴보시면 NumberFormatException 발생하고 원인이 되는 수 문자열이 나오네요!
이거를 살펴보셔야할 것 같습니다.
정상적인 플로우라면 "019169492674337349632"라는 데이터가 들어갈 일이 없어야할텐데요, 해당 데이터가 들어간 원인을 찾아보시거나 제거해보시겠어요?
쿠케님 도와주셔서 감사합니다!
우선 레디스에 데이터가 들어간 원인을 찾을 수 없어 부득이하게 flushall로 초기화한 다음(컨테이너 접속했습니다) 다른 articleApplication, commentApplication 등 구동하여 테스트 성공했습니다.
레디스 초기화 후 read 애플리케이션만 켜고 테스트 돌리면 null 값이라고 인식하지 못했는데 다른 애플리케이션들도 전부 구동 후 다시 테스트를 돌리니 잘 됩니다!
얼마 안 남았는데 끝까지 해 보겠습니다.
최근 과제 테스트를 앞두고 있고 이력서용 포트폴리오 꾸미고 있는데 분산 처리까지는 아니지만 시스템 설계나 테스트 코드, 특히 인덱스 활용하는 부분 등 많은 도움 받았습니다.
힘내서 완강하겠습니다!
woo님, 잘 해결하셔서 다행입니다.
직접 실행하며 꼼꼼하게 학습해 주셔서 너무 감사하고 대단하네요!
과제 테스트도 좋은 결과 있으시길 바랍니다.
완강까지도 얼마 안남으셨네요 ㅎㅎㅎ 남은 강의도 화이팅입니다!!
그런데 infinitescroll 부분에서 이런 에러가 나서 혹시 이 부분도 어떤 에러인지 여쭤볼 수 있을까요?
article의 무한 스크롤은 정상 동작하는데 articleRead에서는 동작하지 않는 것으로 보아 redis가 초기화된 영향 같습니다
0
안녕하세요, 인프런 AI 인턴입니다. woo님.
테스트 코드를 구현하는 과정에서 에러가 발생하고 있어 어려움을 겪고 계신 것 같습니다. 첨부된 에러 로그를 보니 java.lang.NumberFormatException
이 발생하고 있으며, 이는 문자열이 예상치 않은 숫자로 변환될 때 주로 발생하는 오류입니다. 이를 해결하기 위해 몇 가지 접근 방법을 제공해드립니다.
URI 파라미터 확인:
page
나 boardId
에 숫자가 아닌 값이 들어가고 있는 것 같습니다. 주로 이 부분에서 데이터 완전성이 깨지거나, 서버 측에서 잘못된 형식을 처리하지 못한 경우 발생할 수 있습니다.데이터 타입 검토:
formatted
함수로 URI 매개 변수를 설정할 때, 매개 변수들이 올바른 형식(E.g., Integer, Long)이 맞는지 확인해보세요. 매개 변수에 문자열 등이 섞여 있는지, formatted
메소드 사용에 문제가 생긴 건 아닌지 점검해야 합니다.로그 남기기:
문제의 재현 및 식별:
관련하여 유사한 문제를 다루고 있는 인프런의 다른 게시물이 도움이 될 수 있습니다:
- 스프링 애플리케이션의 데이터 타입 문제 해결 방법 (게시글 제목)
위의 방법을 시도해보시고, 전달되는 데이터의 유효성을 검토해보시면 좋겠습니다. 추가적인 문의사항이나 문제 해결에 도움을 원하신다면, 해당 내용을 포함하여 질문을 이어가세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
ArticleIdListRepository에서 에러가 납니다
로 출력하여 에러를 확인하려 했는데, 이 부분에서 에러가 발생합니다.
파라미터는 이미지에 있는 것과 같으며 브레이크포인트 걸어서 잘 넘어가는 것 확인했습니다.