Dev_Log

[YAML] yaml에 적힌 숫자값을 java로 읽어오면 다른값으로 변하는 경우

LeeDaniel 2025. 2. 20. 18:01

 

 [ Error ] 
sample.yaml

# 휴대폰 전화번호
mobileNo : 01023456754​

❓❓❓❓❓

yaml파일에 위와 같이 mobileNo의 01023456754을 숫자로 저장한뒤
Java코드로 yaml을 내용을 가져와서 변수값을 확인해보면
139353580이라는 엉뚱한 숫자가 보이고


sample.yaml

# 전화번호
mobileNo : 01023456789

 

❓❓❓❓❓
yaml파일에 위와 같이 mobileNo의 01023456789을 숫자로 저장한뒤
Java코드로 yaml을 내용을 가져와서 변수값을 확인해보면
01023456789이라는 값이 잘들어있는 알 수 없는 현상 발견



 [ Solution ] 
YAML에서는 숫자가 0으로 시작하면
기본적으로 8진수(Octal)로 해석할 수 있다

각 숫자가 8진수로 해석될 가능성

  • 01023456754 → 0 맨앞에 있으므로 8진수로 오해할 수 있음
    • 8진수는 0~7까지의 숫자만 허용합니다.
    • 그러나 8과 9가 포함되지 않으면 정말로 8진수로 변환됨 → 엉뚱한 숫자로 보임( 139353580 )

따라서 01023456754
0~-7범위의 숫자만 포함하고 있기때문에
YAML이 
8진수로 해석하게 되고
8진수  01023456754 값을
10진수로 변환하면 139353580 가 되어 Java변수에 저장된다 
sample.yaml

# 휴대폰 전화번호
mobileNo : "01023456754"

 

따라서 나는 yaml의 전화번호를 숫자가 아닌
 문자열로 저장
해서 Java에서 String으로 받는 방법으로 해결했고

❗❗❗❗❗
01023456754 와는 다르게
01023456789 라는 전화번호를 보면
8진수가 허용하는 0~7의 범위를 벗어난 8 또는 9가 포함되어있는데
  • 8진수는 0~7까지의 숫자만 허용하고 89는 유효하지 않은 값이므로
    YAML이 자동으로 10진수로 인식하게 되어
    Java변수에 담아 확인해보면 정상적으로 01023456789가 확인되는것이다
728x90
반응형