JSP/SERVLET
2019.05.29 / 24:34

[´ÜÃàURL] 2. Java·Î API È£Ãâ ¸ðµâ ÀÛ¼º - 2. JSON ÆĽÌÇϱâ (2018-04-19 ³»¿ë Ãß°¡)

Źµ¹ÀÌ°³¹ßÀÚ
Ãßõ ¼ö 206

À̹ø ½Ã°£¿¡´Â Àú¹ø Æ÷½ºÆÿ¡¼­ È£ÃâÇÏ¿© ÀÀ´ä¹ÞÀº JSON °á°ú¿¡¼­ ²À ÇÊ¿äÇÑ "url" Çʵ常 ÆĽÌÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú´Ù.

json ÆÄ½Ì ¶óÀ̺귯¸®¿¡´Â ´Ù¾çÇÑ °ÍµéÀÌ ÀÖÀ¸³ª, ±× Áß¿¡¼­µµ Á¦ÀÏ ¸¹ÀÌ »ç¿ëµÇ´Â Jackson À» ÀÌ¿ëÇϵµ·Ï ÇÏ°Ú´Ù.

¾Æ·¡ÀÇ maven dependency °ªÀ» pom.xml ¿¡ µî·ÏÇϵµ·Ï ÇÑ´Ù.

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.4</version> </dependency>

±×·¯¸é ÀÚµ¿À¸·Î jackson ¶óÀ̺귯¸®¸¦ ´Ù¿î¹Þ¾Æ¼­ dependency ¿¡ Ãß°¡ÇØÁØ´Ù.



ÀÌÁ¦ Àá½Ã Àú¹ø¿¡ »ìÆ캻 ÀÀ´ä °á°ú¸¦ »ìÆ캸ÀÚ

JSONÀº Key: Value Çü½ÄÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.
°£´ÜÈ÷ À§ ÀÀ´äÀ» ºÐ¼®Çغ¸¸é ¾Æ·¡¿Í °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖ´Ù.

¿ì¸®°¡ ¿øÇϴ url Çʵå´Â LinkedHashMap ÇüÅÂÀÇ result Çʵ忡 ´ã°Ü ÀÖÀ¸¹Ç·Î, Çѹø ´õ ÆĽÌÀ» ÇØ¾ß ÇÏ°í, ±× °á°ú´Â ¾Æ·¡¿Í °°´Ù.


À̸¦ ÆĽÌÇÏ´Â ¸Þ¼­µå¸¦, ÀÌÀü¿¡ ÀÛ¼ºÇÑ Short.java¿¡ À̾ ÀÛ¼ºÇÑ´Ù.

/* ÀÀ´ä¹ÞÀº json Áß url Çʵ常 °¡Á®¿À´Â ¸Þ¼­µå */ private static String getUrl(String json) throws IOException { ObjectMapper mapper = new ObjectMapper(); HashMap<String, Object> response = mapper.readValue(json, HashMap.class); // jsonÀ» HashMapÀ¸·Î ¸ÅÇÎÇÑ´Ù. LinkedHashMap<String, String> result = (LinkedHashMap<String, String>) response.get("result"); return result.get("url"); // urlÀÇ valueÀÎ ´ÜÃàµÈ ÁÖ¼Ò¸¸ ¸®ÅÏ }

±×¸®°í main ¸Þ¼­µå ³»ºÎ¿¡ À§¿¡¼­ ÀÛ¼ºÇÑ ¸Þ¼­µå È£Ã⠺κÐÀ» ³Ö¾îÁØ´Ù.

String shortenURL = getUrl(json.toString()); System.out.println(shortenURL);


ÀÌ °úÁ¤µéÀ» ÅëÇØ ÃÖÁ¾ÀûÀ¸·Î ¿Ï¼ºµÈ ÄÚµå Àü¹®Àº ¾Æ·¡¿Í °°´Ù.

import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.LinkedHashMap; import com.fasterxml.jackson.databind.ObjectMapper; public class Short { /* ´ÜÃà URL api ÁÖ¼Ò */ final static String API_URL = "https://openapi.naver.com/v1/util/shorturl"; public static void main(String[] args) throws Exception { /* ´ÜÃà½Ãų URLÀÌ ¸Å°³º¯¼ö·Î ÁÖ¾îÁöÁö ¾ÊÀ¸¸é ¿¡·¯ -> Á¾·á */ if(args.length != 1) { System.err.println("»ç¿ë¹ý: java -jar short.jar ´ÜÃà½ÃųURL"); System.exit(1); } String target = args[0]; // ¸Å°³º¯¼ö·Î ³Ñ¾î¿Â ´ÜÃà ´ë»ó ÁÖ¼Ò /* POST ¿äû ºÎºÐ ÀÛ¼º */ HttpURLConnection conn = (HttpURLConnection) new URL(API_URL).openConnection(); conn.setRequestProperty("X-Naver-Client-Id", "¹ß±Þ¹ÞÀº Client ID"); conn.setRequestProperty("X-Naver-Client-Secret", "¹ß±Þ¹ÞÀº Client Secret"); conn.setRequestMethod("POST"); // POST conn.setDoOutput(true); // POST /* ´ÜÃà½Ãų URLÀ» ´ã´Â ºÎºÐ */ DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes("url=" + target); // ´ÜÃà½Ãų ÁÖ¼Ò¸¦ UTF-8 ·Î º¯È¯ÇÏ¿© ´ã´Â´Ù dos.close(); // Çʼö /* ÀÀ´ä Äڵ尡 200ÀÌ ¾Æ´Ï¸é ¿¡·¯ -> Á¾·á */ int responseCode = conn.getResponseCode(); if(responseCode != 200){ System.err.println("¿¬°á ½ÇÆÐ: " + responseCode); System.exit(1); } /* json ÇüÅÂÀÇ ÀÀ´ä°ªÀ» ¹Þ´Â´Ù. */ String line; StringBuilder json = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); while((line = br.readLine()) != null){ json.append(line + System.getProperty("line.separator")); } br.close(); /* url ºÎºÐ¸¸ »Ì¾Æ³»¼­ Ãâ·Â */ String shortenURL = getUrl(json.toString()); System.out.println(shortenURL); } /* º¯È¯½Ãų ÁÖ¼Ò¸¦ UTF-8 Çü½ÄÀ¸·Î º¯È¯ÇÑ´Ù. */ private static String toUTF8(String url){ try { return URLEncoder.encode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { return url; // º¯È¯ ½ÇÆÐ ½Ã ±âÁ¸ url ¸®ÅÏ } } /* ÀÀ´ä¹ÞÀº json Áß url Çʵ常 °¡Á®¿À´Â ¸Þ¼­µå */ private static String getUrl(String json) throws IOException { ObjectMapper mapper = new ObjectMapper(); HashMap<String, Object> response = mapper.readValue(json, HashMap.class); // jsonÀ» HashMapÀ¸·Î ¸ÅÇÎÇÑ´Ù. LinkedHashMap<String, String> result = (LinkedHashMap<String, String>) response.get("result"); return result.get("url"); // urlÀÇ valueÀÎ ´ÜÃàµÈ ÁÖ¼Ò¸¸ ¸®ÅÏ } }

¿©±â±îÁö ÇÏ¸é ´ÜÃà url ºÎºÐ¸¸ ÃßÃâÇÏ´Â ÀÛ¾÷ÀÌ ¿Ï·áµÈ °ÍÀÌ´Ù.

±×·¯³ª ¿ì¸®´Â ÃÖÁ¾ÀûÀ¸·Î ÀÌ ÄÚµåµéÀ» jar ÆÄÀÏ·Î ¹­¾î¼­ ¸í·É¾î·Î »ç¿ëÇÒ °ÍÀ̱⠶§¹®¿¡, runnable jar ÆÄÀÏ·Î export¸¦ ÇÑ´Ù.


IntelliJ ±âÁØÀ¸·Î Dependencies ÆÄÀÏ(Jackson)µé°ú ÇÔ²² ºôµåÇϵµ·Ï ÇÏ°Ú´Ù.

¿ì¼± artifacts ¼³Á¤À» ÇÑ´Ù.

artifact ¼³Á¤
artifact ¼³Á¤ ½Ã ÁÖÀÇ»çÇ×
artifact ¼³Á¤ ¿Ï·á



artifact ¼³Á¤ÀÌ ¿Ï·áµÇ¾úÀ¸¸é ºôµå¸¦ ÁøÇàÇϵµ·Ï ÇÑ´Ù.

build artifact

ºôµå°¡ Á¤»óÀûÀ¸·Î ¿Ï·áµÇ¸é out Æú´õ ³»ºÎ¿¡ Short.jar ÆÄÀÏÀÌ »ý¼ºµÈ´Ù.

Short.jar »ý¼º


ÀÌÈÄ ÇØ´ç jar ÆÄÀÏÀ» Ä¿¸Çµå¶óÀο¡¼­ ½ÇÇà½ÃŲ´Ù.

jar ÆÄÀÏ ½ÇÇà °á°ú

jar ÆÄÀÏ ½ÇÇà °á°ú Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.



¿©±â±îÁö ÇÏ¿© Java ¸¦ ÀÌ¿ëÇÑ API È£Ãâ ¹× url Çʵå ÆĽÌÀÌ ¸ðµÎ ¿Ï·áµÇ¾ú´Ù.
´ÙÀ½ ½Ã°£¿¡´Â ÀÌ jar ÆÄÀÏÀ» ¸®´ª½ºÀÇ ¸í·É¾î·Î µî·ÏÇÏ¿© °£´ÜÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØ º¸°Ú´Ù.