• 트러블 슈팅으로 배우는 Java 기초 자료형

    2022. 12. 20.

    by. 내이름은 킹햄찌

    사소하지만 시간을 투자하여 문제에 대해 고민한 사례를 소개하며 간단한 JAVA 자료구조 내용을 정리해보는 글입니다.

     

    문제의 원인은 Java는 C++과 다르게 Unsigned를 지원하지 않기 때문에 발생한 일입니다.

    JMeter로 C++기반의 Window App 성능 테스트 중 Byte단위의 데이터를 보내야하는 상황에서

    Paket(Java로 작성된 scrpit) 를 Test Script (Groovy)를 통해 보내는 프로세스로 테스트 환경을 만들었습니다.

    여기서 사전 테스트에서는 2바이트 짜리 특정 인덱스를 1~100까지만 넣어서 보냈을때는 정상이였는데 1~700까지 보내기만 하면 인덱스가 중복되는 현상이 발생했습니다. 여기서 인덱스는 Thread Num으로 지정했기 때문에, 사실 중복될 수 없는 환경이라고 판단했는데 중복이 발생하니 Script를 잘못 작성한건가 ? Thread의 임계영역이 지켜지지 않는 것인가? 등

    고민하며 Stack Overflow를 쥐잡듯 뒤지다가 지쳐한참을 바라보는데 특정 구간에서 규칙적으로 발생하는것 같아 보였습니다. 127~255, 384~ 511 구간입니다.

    1000 0000 ~ 1111 1111 / 1 1000 0000 ~ 1 1111 1111

    음수값이 되는 구간입니다.

    Groovy에서 Socket으로 보낼 수 있는 데이터 형은 char Array, String, int, writable밖에 없기 때문에 Java에서 패킷을 String으로 넘겨주고 있었는데 음수의 값을 유니코드로 변환할 수 없기 때문에 특정값으로 바뀌어지는 현상이 원인이였습니다.

    디버깅이 안되는 script특성과.. Groovy로 작성된 Test Scrpit를 지키고자하는 과정에서 이번 트러블 슈팅은 시간이 많이 들었던거 같습니다...

    Java를 Spring으로 주로 사용하다 보니 기본적인 부분을 보지 못했습니다.

     

    아쉬운대로 아래에 기초적인 Java자료구조 내용 공유합니다.

     

    데이터형 명칭 데이터 크기 표현 가능 범위
    논리형 boolean 1바이트 true, false
    문자형 char 2바이트 유니코드 문자
    정수형 byte 1바이트 -128 ~ 127
      short 2바이트 -32,768 ~ 32,767
      Int 4바이트 -2,147,483,648 ~ 2,147,483,647
      long 8바이트 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    실수형 float 4바이트 ± (1.40 x 10 ^ -45 ~ 3.40 x 10 ^ 38)
      double 8바이트 ± (4.94 x 10 ^ -324 ~ 1.79 x 10^ 308)

     

    'Lang > Java' 카테고리의 다른 글

    JVM이 뭐라고?  (0) 2022.03.06

    댓글