작성
·
89
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예
[질문 내용]
안녕하세요 !! 영한님 강의로 열심히 공부하고 있는 한 사람입니다.
수량 입력할 때, 1111111111(11개) 를 입력했을 때, "숫자를 입력해주세요" 라는 오류 메시지가 뜨더라구요.
그래서 혹시 int 형 범위 문제인가 싶어서
2147483648(int 형 최대 범위 숫자 " + 1")를 넣어보니, 다시 "숫자를 입력해주세요" 오류 메시지가 나왔습니다. 따라서 int 형 범위를 넘어선 long 형 범위에 들어가면 숫자가 아니라고 판단하는 것 같더라구요.
사용자 입장에서 int 형 범위든 long 형 범위든 숫자를 입력한 건 맞는 사실이기에, 기존에 int 형 범위 숫자만 숫자로 인식하는 것이 아닌, long 형 범위에서도 숫자로 인식하여 "숫자를 입력해주세요" 라는 오류 메시지가 발생하지 않으려면 어떻게 해야하나요 ??
답변 2
0
기본적으로 HTML Form 입력은 String
으로 전송이 됩니다.
즉, int
범위 내인 10000
을 입력하더라도 일단 String
으로 전송이 되고, 서버에서 이를 int
로 바인딩하는 것입니다. 이때는 바인딩에 성공하겠죠.
따라서 1111111111
(11개)도 일단 String
으로 전송이 되고, 서버에서 이를 int
로 바인딩 시도하지만 실패하기 때문에 서버는 "숫자가 아니다" 라고 판단합니다.
이때 질문자님의 의문은 "int 범위는 아니어도 long 범위 내라서 숫자를 입력한 것은 맞지 않나?" 인데요. 여기서 앞서 말씀드린 것처럼
서버는 (HTML Form 입력의 경우) 10000이나, 111111...이나, "abc"나, ... -> 결국 문자열로 받는다.
받은 문자열을 int
타입으로 변환 성공하면 "숫자가 입력된 것이구나" 라고 판단할 뿐입니다.
서버 측에서 애초에 int
타입으로 설정했으므로, '숫자'의 정의가 '십진수들의 조합(크기 상관 x)'가 아니라 'int
형 범위 내의 십진수들의 조합'인 것이지요.
따라서 질문자님 의도대로 동작하게끔 하기 위해서는 서버 측에서의 '숫자'에 대한 정의를 int
에서 long
으로 변환해주면 됩니다.
즉, hello.itemservice.domain.item
경로의 Item
파일의 코드를 다음과 같이 변경하면 됩니다.
(추가로 생성자나 price
에 대한 계산 결과를 변수로 받는 부분도 모두 long
으로 변경해줘야 됩니다.)
package hello.itemservice.domain.item;
import lombok.Data;
@Data
public class Item {
private Long id;
private String itemName;
private Long price;
private Integer quantity;
public Item() {
}
public Item(String itemName, Long price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
결과 사진
0
안녕하세요, 인프런 AI 인턴입니다. 예하님.
입력된 숫자가 int
의 범위를 넘어설 경우, 자바에서는 NumberFormatException
이 발생하여 숫자가 아닌 것으로 처리됩니다. 따라서 “숫자를 입력해주세요”라는 에러 메시지가 뜨게 되는 것이죠. 이를 해결하기 위해서는 입력을 int
가 아닌 long
형으로 처리하도록 변경하는 것이 필요합니다.
관련하여 강조드리고 싶은 몇 가지 포인트가 있습니다:
데이터 타입 변경: 입력폼에서 주고받는 데이터 타입을 int
에서 long
으로 변경합니다. 이로써 자바에서 기본으로 처리 가능한 숫자 범위가 늘어나게 됩니다.
Spring Validation 사용: 스프링 검증기를 사용하여 사용자 입력 값에 대한 검증 로직을 추가할 수 있습니다. 예를 들어 @NumberFormat
등의 어노테이션을 활용하여 형식 오류 시 사용자에게 보다 명확한 피드백을 주도록 설정할 수 있습니다.
수정된 코드 적용: 데이터 타입이 long
으로 변경되었다면, 이전의 int
기반 검증 로직과 연관된 코드들도 함께 수정해야 합니다. 특히, 데이터 베이스에서도 int
대신 bigint
등의 데이터 타입을 사용할 수 있도록 조정합니다.
Spring Boot 실행 설정 확인: Spring Boot를 이용한 설정이 적절하게 되어 있는지도 확인해 보세요. 예를 들어, 잘못된 데이터의 경우 특정 오류 메시지를 피드백하도록 설정할 수 있습니다.
관련된 예제나 설명을 확인하고 싶다면 다음의 기존 질문과 답변을 참고해 보세요.
숫자 입력 시 숫자로 인식하도록 하는 방법 - 인프런
해당 링크에서는 대량의 데이터를 처리할 때 발생할 수 있는 오류를 해결하기 위한 다양한 접근법을 논의하고 있습니다.
이제 활용할 수 있는 해결법과 이해에 도움이 될 정보를 안내드렸습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.