

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 쿼리를 문자열이 아닌 바이트코드로 서버에 전송
<a name="best-practices-gremlin-java-bytecode"></a>

쿼리 제출 시 문자열이 아닌 바이트코드를 사용하면 다음과 같은 장점이 있습니다.
+ **잘못된 쿼리 구문의 조기 파악: **  바이트코드 변형을 사용하면 컴파일링 단계에서 잘못된 쿼리 구문을 감지할 수 있습니다. 문자열 기반 변형을 사용할 경우 쿼리가 서버에 제출되고 오류가 반환될 때까지는 잘못된 구문을 발견할 수 없습니다.
+ **문자열 기반 성능 패널티의 방지: **  문자열 기반의 모든 쿼리 제출은, WebSockets를 사용하든 HTTP를 사용하든, 버텍스의 분리로 이어집니다. 이는 버텍스 객체가 자격 증명, 레이블 및 버텍스와 연결된 모든 속성으로 구성됨을 의미합니다([요소의 속성](http://tinkerpop.apache.org/docs/current/reference/#_properties_of_elements) 단원 참조).

  이로 인해 속성이 필요하지 않은 경우 서버에서 불필요한 계산이 발생할 수 있습니다. 예를 들어 고객이 쿼리를 사용하여 자격 증명이 "hakuna\$11"인 버텍스를 가져오려 하는 경우 `g.V("hakuna#1")`. 쿼리가 문자열 기반 제출로 전송되면 서버에서 자격 증명, 레이블 및 이 버텍스에 대한 모든 속성을 검색하는 데 시간을 소모하게 됩니다. 쿼리가 바이트코드 제출로 전송되면 서버는 자격 증명과 버텍스의 레이블을 검색하는 데에만 시간을 소모합니다.

즉, 쿼리 제출이 아니라 다음과 같이 진행합니다.

```
  final Cluster cluster = Cluster.build("localhost")
                                 .port(8182)
                                 .maxInProcessPerConnection(32)
                                 .maxSimultaneousUsagePerConnection(32)
                                 .serializer(Serializers.GRAPHBINARY_V1D0)
                                 .create();

  try {
      final Client client = cluster.connect();
      List<Result> results = client.submit("g.V().has('name','pumba').out('friendOf').id()").all().get();
      System.out.println(verticesWithNamePumba);
  } finally {
      cluster.close();
  }
```

대신 다음과 같이 바이트코드를 사용하여 쿼리를 제출합니다.

```
  final Cluster cluster = Cluster.build("localhost")
                                 .port(8182)
                                 .maxInProcessPerConnection(32)
                                 .maxSimultaneousUsagePerConnection(32)
                                 .serializer(Serializers.GRAPHBINARY_V1D0)
                                 .create();

  try {
      final GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(cluster));
      List<Object> verticesWithNamePumba = g.V().has("name", "pumba").out("friendOf").id().toList();
      System.out.println(verticesWithNamePumba);
  } finally {
      cluster.close();
  }
```