Tag Archives: java

[Java] 현재 시스템의 IPv4기반의 IP주소 가져오기

Java에서 IP주소를 가져오는 방법은 매우 쉽고 간단합니다. 일반적으로 사용되는 간단한 방법으로는 다음과 같은 방법이 있습니다.
[code]InetAddress.getLocalHost().getAddress()[/code]
위의 단 한줄로 현재 시스템의 IP를 읽어올 수 있습니다. 그런데 개발시에는 문제가 없었는데 리눅스 서버에서 구동해 보니 127.0.0.1과 같이 loopback 주소가 나오는 경우가 있더군요. 찾아보다 다음과 같은 방법으로 깔끔하게 해결할 수 있었습니다.
[code]/**
 * 현재 서버의 IP 주소를 가져옵니다.
 *
 * @return IP 주소
 */
private String getLocalServerIp()
{
try
{
   for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)
   {
       NetworkInterface intf = en.nextElement();
       for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
       {
           InetAddress inetAddress = enumIpAddr.nextElement();
           if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress())
           {
            return inetAddress.getHostAddress().toString();
           }
       }
   }
}
catch (SocketException ex) {}
return null;
}[/code]
현재 시스템의 모든 네트워크 인터페이스를 읽어와서 loopback장치인지 랜선에 연결된 장치인지 여부를 확인하여 실제 사용중인 인터페이스의 IP주소를 읽어오게 됩니다. 위와 같이 사용해서 실무에 적용해본 결과 어느 OS, 장치에 상관없이 IP가 정상적으로 출력되는것을 확인하였습니다.

소스코드가 좀 길고 더럽네요; 그냥 보관용으로 적어두는데 의미를 부여하겠습니다;;

[Java] Json 라이브러리의 최고봉 Gson 수동으로 배열 처리하기

구글의 Json 라이브러리인 [Gson]는 확실히 멋진 라이브러리입니다. 어떤식으로든지 객체와 1:1매핑되어 정확하게 값이 타입에 맞게 들어가는 것을 보면 놀라지 않을 수 없습니다.

그런데 이것이 너무 편하다 보니 매번 POJO객체를 만들어야 한다거나 또는 이 편리함이 오히려 복잡함으로 다가오게 만들정도의 획일화된 사용법을 제공하는등 마냥 편한건 아닌것 같더군요.

하지만 좀더 알아보니 방법이 없는게 아니라 제가 모르는 것이었습니다. [이곳]에 나와있는 예제를 첨부해 보겠습니다.
[code]Gson gson = new Gson();

Collection collection = new ArrayList();
collection.add(“hello”);
collection.add(5);
collection.add(new Event(“GREETINGS”, “guest”));

String json = gson.toJson(collection);
System.out.println(“Using Gson.toJson() on a raw collection: ” + json);[/code]
위와 같은 코드를 실행해서 배열을 Json으로 변환하는 예제를 실행해 보았습니다. 위의 예제는 사실상 전혀 이해 못할것이 없는 당연스러운 코드 입니다. 하지만 다음의 경우는…일단 저는 모르고 있었네요.
[code]JsonParser parser = new JsonParser();

JsonArray array = parser.parse(json).getAsJsonArray();

String message = gson.fromJson(array.get(0), String.class);
int number = gson.fromJson(array.get(1), int.class);
Event event = gson.fromJson(array.get(2), Event.class);

System.out.printf(“Get: %s, %d, %s”, message, number, event);[/code]
위와 같이 일일이 수작업으로 원하는 만큼만의 작업을 할 수 있습니다. Java 5.0이상부터라면 다음과 같은 구문을 사용할 수도 있습니다.
[code]JsonParser parser = new JsonParser();

JsonArray array = parser.parse(json).getAsJsonArray();

for(JsonElement element : array)
{
  // …
}[/code]

참고 :
http://code.google.com/p/google-gson/source/browse/trunk/extras/src/main/java/com/google/gson/extras/examples/rawcollections/RawCollectionsExample.java

https://sites.google.com/site/gson/gson-user-guide